package liquibase.parser; import liquibase.exception.LiquibaseException; import liquibase.parser.core.sql.SqlChangeLogParser; import liquibase.parser.core.xml.XMLChangeLogSAXParser; import static org.junit.Assert.*; import liquibase.test.JUnitResourceAccessor; import org.junit.Before; import org.junit.Test; import java.util.List; public class ChangeLogParserFactoryTest { @Before public void setup() { ChangeLogParserFactory.reset(); } @Test public void getInstance() { assertNotNull(ChangeLogParserFactory.getInstance()); assertTrue(ChangeLogParserFactory.getInstance() == ChangeLogParserFactory.getInstance()); } @Test public void register() { ChangeLogParserFactory.getInstance().getParsers().clear(); assertEquals(0, ChangeLogParserFactory.getInstance().getParsers().size()); ChangeLogParserFactory.getInstance().register(new MockChangeLogParser("mock")); assertEquals(1, ChangeLogParserFactory.getInstance().getParsers().size()); } @Test public void unregister_instance() { ChangeLogParserFactory factory = ChangeLogParserFactory.getInstance(); factory.getParsers().clear(); assertEquals(0, factory.getParsers().size()); XMLChangeLogSAXParser changeLogParser = new XMLChangeLogSAXParser(); factory.register(new SqlChangeLogParser()); factory.register(changeLogParser); assertEquals(2, factory.getParsers().size()); factory.unregister(changeLogParser); assertEquals(1, factory.getParsers().size()); } @Test public void reset() { ChangeLogParserFactory instance1 = ChangeLogParserFactory.getInstance(); ChangeLogParserFactory.reset(); assertFalse(instance1 == ChangeLogParserFactory.getInstance()); } @SuppressWarnings("unchecked") @Test public void builtInGeneratorsAreFound() { List<ChangeLogParser> generators = ChangeLogParserFactory.getInstance().getParsers(); assertEquals(3, generators.size()); } @Test public void getParsers() throws Exception { ChangeLogParser parser = ChangeLogParserFactory.getInstance().getParser("asdf.xml", new JUnitResourceAccessor()); assertNotNull(parser); assertTrue(parser instanceof XMLChangeLogSAXParser); } @Test public void getExtensionParser() throws Exception { ChangeLogParserFactory parserFactory = ChangeLogParserFactory.getInstance(); ChangeLogParser defaultParser = parserFactory.getParser("asdf.xml", new JUnitResourceAccessor()); assertNotNull(defaultParser); assertTrue(defaultParser instanceof XMLChangeLogSAXParser); ChangeLogParser otherXmlParser = new XMLChangeLogSAXParser() { @Override public int getPriority() { return 100; } }; parserFactory.register(otherXmlParser); try { assertTrue(otherXmlParser == parserFactory.getParser("asdf.xml", new JUnitResourceAccessor())); assertFalse(defaultParser == parserFactory.getParser("asdf.xml", new JUnitResourceAccessor())); } finally { parserFactory.unregister(otherXmlParser); } } }