001: package liquibase.parser;
002:
003: import liquibase.ChangeSet;
004: import liquibase.DatabaseChangeLog;
005: import liquibase.database.MySQLDatabase;
006: import liquibase.parser.filter.ContextChangeSetFilter;
007: import liquibase.parser.filter.DbmsChangeSetFilter;
008: import liquibase.parser.visitor.ChangeSetVisitor;
009: import static org.junit.Assert.*;
010: import org.junit.Before;
011: import org.junit.Test;
012:
013: import java.util.ArrayList;
014: import java.util.List;
015:
016: public class ChangeLogIteratorTest {
017: private DatabaseChangeLog changeLog;
018:
019: @Before
020: public void setUp() {
021: changeLog = new DatabaseChangeLog("path/to/changelog");
022: changeLog.addChangeSet(new ChangeSet("1", "nvoxland", false,
023: false, "/path/to/changelog", null, "test1", "mysql"));
024: changeLog.addChangeSet(new ChangeSet("2", "nvoxland", false,
025: false, "/path/to/changelog", null, "test1", "oracle"));
026: changeLog.addChangeSet(new ChangeSet("3", "nvoxland", false,
027: false, "/path/to/changelog", null, "test2", "mysql"));
028: changeLog.addChangeSet(new ChangeSet("4", "nvoxland", false,
029: false, "/path/to/changelog", null, null, null));
030: changeLog.addChangeSet(new ChangeSet("5", "nvoxland", false,
031: false, "/path/to/changelog", null, null, "mysql"));
032: changeLog.addChangeSet(new ChangeSet("6", "nvoxland", false,
033: false, "/path/to/changelog", null, "test2", null));
034: }
035:
036: @Test
037: public void runChangeSet_emptyFiltersIterator() throws Exception {
038: TestChangeSetVisitor testChangeLogVisitor = new TestChangeSetVisitor();
039:
040: ChangeLogIterator iterator = new ChangeLogIterator(changeLog);
041: iterator.run(testChangeLogVisitor);
042: assertEquals(6, testChangeLogVisitor.visitedChangeSets.size());
043: }
044:
045: @Test
046: public void runChangeSet_singleFilterIterator() throws Exception {
047: TestChangeSetVisitor testChangeLogVisitor = new TestChangeSetVisitor();
048:
049: ChangeLogIterator iterator = new ChangeLogIterator(changeLog,
050: new ContextChangeSetFilter("test1"));
051: iterator.run(testChangeLogVisitor);
052: assertEquals(4, testChangeLogVisitor.visitedChangeSets.size());
053: }
054:
055: @Test
056: public void runChangeSet_doubleFilterIterator() throws Exception {
057: TestChangeSetVisitor testChangeLogVisitor = new TestChangeSetVisitor();
058:
059: ChangeLogIterator iterator = new ChangeLogIterator(changeLog,
060: new ContextChangeSetFilter("test1"),
061: new DbmsChangeSetFilter(new MySQLDatabase()));
062: iterator.run(testChangeLogVisitor);
063: assertEquals(3, testChangeLogVisitor.visitedChangeSets.size());
064: assertEquals("1", testChangeLogVisitor.visitedChangeSets.get(0)
065: .getId());
066: assertEquals("4", testChangeLogVisitor.visitedChangeSets.get(1)
067: .getId());
068: assertEquals("5", testChangeLogVisitor.visitedChangeSets.get(2)
069: .getId());
070:
071: }
072:
073: @Test
074: public void runChangeSet_reverseVisitor() throws Exception {
075: TestChangeSetVisitor testChangeLogVisitor = new ReverseChangeSetVisitor();
076:
077: ChangeLogIterator iterator = new ChangeLogIterator(changeLog,
078: new ContextChangeSetFilter("test1"),
079: new DbmsChangeSetFilter(new MySQLDatabase()));
080: iterator.run(testChangeLogVisitor);
081: assertEquals(3, testChangeLogVisitor.visitedChangeSets.size());
082: assertEquals("5", testChangeLogVisitor.visitedChangeSets.get(0)
083: .getId());
084: assertEquals("4", testChangeLogVisitor.visitedChangeSets.get(1)
085: .getId());
086: assertEquals("1", testChangeLogVisitor.visitedChangeSets.get(2)
087: .getId());
088: }
089:
090: private static class TestChangeSetVisitor implements
091: ChangeSetVisitor {
092:
093: public List<ChangeSet> visitedChangeSets = new ArrayList<ChangeSet>();
094:
095: public Direction getDirection() {
096: return ChangeSetVisitor.Direction.FORWARD;
097: }
098:
099: public void visit(ChangeSet changeSet) {
100: visitedChangeSets.add(changeSet);
101: }
102: }
103:
104: private static class ReverseChangeSetVisitor extends
105: TestChangeSetVisitor {
106:
107: public Direction getDirection() {
108: return ChangeSetVisitor.Direction.REVERSE;
109: }
110: }
111: }
|