package dev.kske.undoredo; import static org.junit.jupiter.api.Assertions.*; import org.junit.jupiter.api.*; /** * @author Kai S. K. Engelbart * @since 0.0.1 */ class ChangeManagerTest { ChangeManager manager; IntWrapper wrapper; IntChange change; @BeforeEach void prepareChangeManager() { manager = new UnlimitedChangeManager<>(); wrapper = new IntWrapper(); change = new IntChange(wrapper, 1); } /** * Tests adding a change. * * @since 0.0.1 */ @Test @Order(1) void testAddChange() { assertSame(0, wrapper.value); manager.addChange(change); assertSame(1, wrapper.value); } /** * Tests the consistency of the change list. * * @since 0.0.1 */ @Test @Order(2) void testGetChanges() { assertTrue(manager.getChanges().isEmpty()); manager.addChange(change); assertSame(1, manager.getChanges().size()); assertEquals(change, manager.getChanges().get(0)); } /** * Test undoing a change. * * @since 0.0.1 */ @Test @Order(2) void testUndo() { assertFalse(manager.isUndoAvailable()); assertFalse(manager.undo()); manager.addChange(change); assertTrue(manager.isUndoAvailable()); assertTrue(manager.undo()); assertFalse(manager.isUndoAvailable()); assertFalse(manager.undo()); } /** * Tests redoing a change. * * @since 0.0.1 */ @Test @Order(4) void testRedo() { assertFalse(manager.isRedoAvailable()); assertFalse(manager.redo()); manager.addChange(change); assertFalse(manager.isRedoAvailable()); assertFalse(manager.redo()); manager.undo(); assertTrue(manager.isRedoAvailable()); assertTrue(manager.redo()); assertFalse(manager.isRedoAvailable()); assertFalse(manager.redo()); } /** * Tests marking a change. * * @since 0.0.1 */ @Test @Order(5) void testMark() { assertTrue(manager.isAtMarkedIndex()); manager.addChange(change); assertFalse(manager.isAtMarkedIndex()); manager.mark(); assertTrue(manager.isAtMarkedIndex()); manager.undo(); assertFalse(manager.isAtMarkedIndex()); } }