package liquibase.ext; import liquibase.change.Change; import liquibase.change.ChangeFactory; import liquibase.changelog.ChangeSet; import liquibase.changelog.DatabaseChangeLog; import liquibase.changelog.ChangeLogParameters; import liquibase.parser.core.xml.XMLChangeLogSAXParser; import liquibase.resource.ClassLoaderResourceAccessor; import liquibase.servicelocator.ServiceLocator; import static org.junit.Assert.*; import org.junit.Test; public class ExtXMLChangeLogSAXParserTest { @Test public void extChangeLog() throws Exception { ServiceLocator.reset(); ClassLoaderResourceAccessor resourceAccessor = new ClassLoaderResourceAccessor(); ServiceLocator.getInstance().setResourceAccessor(resourceAccessor); ChangeFactory.reset(); DatabaseChangeLog changeLog = new XMLChangeLogSAXParser().parse("changelogs/common/ext.changelog.xml", new ChangeLogParameters(), resourceAccessor); assertEquals("changelogs/common/ext.changelog.xml", changeLog.getLogicalFilePath()); assertEquals(4, changeLog.getChangeSets().size()); ChangeSet changeSet = changeLog.getChangeSets().get(1); assertEquals("nvoxland", changeSet.getAuthor()); assertEquals("2", changeSet.getId()); assertEquals(1, changeSet.getChanges().size()); Change change = changeSet.getChanges().get(0); assertEquals("sampleChange", change.getChangeMetaData().getName()); changeSet = changeLog.getChangeSets().get(2); change = changeSet.getChanges().get(0); assertEquals(1, changeSet.getChanges().size()); assertEquals("changeWithNestedTags", change.getChangeMetaData().getName()); Object child1 = change.getClass().getMethod("getChild").invoke(change); assertNotNull(child1); assertEquals("standard", child1.getClass().getMethod("getName").invoke(child1)); Object child2 = change.getClass().getMethod("getChild2").invoke(change); assertNotNull(child2); assertEquals("second", child1.getClass().getMethod("getName").invoke(child2)); ServiceLocator.reset(); ChangeFactory.reset(); } }