View Javadoc

1   package liquibase.sqlgenerator;
2   
3   import liquibase.database.Database;
4   import liquibase.database.core.H2Database;
5   import liquibase.exception.ValidationErrors;
6   import liquibase.exception.Warnings;
7   import liquibase.sql.Sql;
8   import liquibase.sqlgenerator.core.AddAutoIncrementGenerator;
9   import liquibase.sqlgenerator.core.AddAutoIncrementGeneratorDB2;
10  import liquibase.sqlgenerator.core.AddAutoIncrementGeneratorHsqlH2;
11  import liquibase.sqlgenerator.core.AddColumnGenerator;
12  import liquibase.statement.SqlStatement;
13  import liquibase.statement.core.AddAutoIncrementStatement;
14  import org.junit.After;
15  import static org.junit.Assert.*;
16  import org.junit.Test;
17  
18  import java.util.Collection;
19  import java.util.SortedSet;
20  
21  public class SqlGeneratorFactoryTest {
22  
23      @After
24      public void teardown() {
25          SqlGeneratorFactory.reset();
26      }
27  
28      @Test
29      public void getInstance() {
30          assertNotNull(SqlGeneratorFactory.getInstance());
31          
32          assertTrue(SqlGeneratorFactory.getInstance() == SqlGeneratorFactory.getInstance());
33      }
34  
35      @Test
36      public void register() {
37          SqlGeneratorFactory.getInstance().getGenerators().clear();
38  
39          assertEquals(0, SqlGeneratorFactory.getInstance().getGenerators().size());
40  
41          SqlGeneratorFactory.getInstance().register(new MockSqlGenerator(1, "A1"));
42  
43          assertEquals(1, SqlGeneratorFactory.getInstance().getGenerators().size());
44      }
45  
46      @Test
47      public void unregister_instance() {
48          SqlGeneratorFactory factory = SqlGeneratorFactory.getInstance();
49  
50          factory.getGenerators().clear();
51  
52          assertEquals(0, factory.getGenerators().size());
53  
54          AddAutoIncrementGeneratorHsqlH2 sqlGenerator
55          	= new AddAutoIncrementGeneratorHsqlH2();
56  
57          factory.register(new AddAutoIncrementGenerator());
58          factory.register(sqlGenerator);
59          factory.register(new AddAutoIncrementGeneratorDB2());
60  
61          assertEquals(3, factory.getGenerators().size());
62  
63          factory.unregister(sqlGenerator);
64          assertEquals(2, factory.getGenerators().size());
65      }
66  
67      @Test
68      public void unregister_class() {
69          SqlGeneratorFactory factory = SqlGeneratorFactory.getInstance();
70  
71          factory.getGenerators().clear();
72  
73          assertEquals(0, factory.getGenerators().size());
74  
75          AddAutoIncrementGeneratorHsqlH2 sqlGenerator
76          			= new AddAutoIncrementGeneratorHsqlH2();
77  
78          factory.register(new AddAutoIncrementGenerator());
79          factory.register(sqlGenerator);
80          factory.register(new AddAutoIncrementGeneratorDB2());
81  
82          assertEquals(3, factory.getGenerators().size());
83  
84          factory.unregister(AddAutoIncrementGeneratorHsqlH2.class);
85          assertEquals(2, factory.getGenerators().size());
86      }
87  
88       @Test
89      public void unregister_class_doesNotExist() {
90          SqlGeneratorFactory factory = SqlGeneratorFactory.getInstance();
91  
92          factory.getGenerators().clear();
93  
94          assertEquals(0, factory.getGenerators().size());
95  
96          factory.register(new AddAutoIncrementGenerator());
97          factory.register(new AddAutoIncrementGeneratorHsqlH2());
98          factory.register(new AddAutoIncrementGeneratorDB2());
99  
100         assertEquals(3, factory.getGenerators().size());
101 
102         factory.unregister(AddColumnGenerator.class);
103         assertEquals(3, factory.getGenerators().size());
104     }
105 
106    @Test
107     public void reset() {
108         SqlGeneratorFactory instance1 = SqlGeneratorFactory.getInstance();
109         SqlGeneratorFactory.reset();
110         assertFalse(instance1 == SqlGeneratorFactory.getInstance());
111     }
112 
113     @SuppressWarnings("unchecked")
114 	@Test
115     public void builtInGeneratorsAreFound() {
116         Collection<SqlGenerator> generators = SqlGeneratorFactory.getInstance().getGenerators();
117         assertTrue(generators.size() > 10);
118     }
119 
120     @Test
121     public void getGenerators() {
122         SortedSet<SqlGenerator> allGenerators = SqlGeneratorFactory.getInstance().getGenerators(new AddAutoIncrementStatement(null, "person", "name", "varchar(255)"), new H2Database());
123 
124         assertNotNull(allGenerators);
125         assertEquals(1, allGenerators.size());        
126     }
127 
128     private SqlGenerator addGenerator(final Class<? extends SqlStatement> sqlStatementClass, final Class<? extends Database> sqlDatabaseClass, final int level) {
129     	
130         SqlGenerator generator = new SqlGenerator() {
131             public int getPriority() {
132                 return level;
133             }
134 
135             public boolean requiresUpdatedDatabaseMetadata(Database database) {
136                 return false;
137             }
138 
139             public Warnings warn(SqlStatement sqlStatement, Database database, SqlGeneratorChain sqlGeneratorChain) {
140                 return new Warnings();
141             }
142 
143             public ValidationErrors validate(SqlStatement sqlStatement, Database database, SqlGeneratorChain sqlGeneratorChain) {
144                 return new ValidationErrors();
145             }
146 
147             public boolean supports(SqlStatement statement, Database database) {
148             	boolean ret = sqlStatementClass.isAssignableFrom(statement.getClass()) && sqlDatabaseClass.isAssignableFrom(database.getClass()); 
149                 return ret;
150             }
151 
152             public Sql[] generateSql(SqlStatement statement, Database database, SqlGeneratorChain sqlGeneratorChain) {
153                 return new Sql[0];
154             }
155         };
156         SqlGeneratorFactory.getInstance().register(generator);
157 
158         return generator;
159     }
160 }