This repository has been archived on 2022-02-11. You can view files and clone it, but cannot push or open issues or pull requests.
undo-redo/core/src/test/java/dev/kske/undoredo/core/ChangeManagerTest.java

178 lines
3.5 KiB
Java

package dev.kske.undoredo.core;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.*;
/**
* @author Kai S. K. Engelbart
* @since 0.0.1
*/
class ChangeManagerTest {
ChangeManager<IntChange> manager;
IntWrapper wrapper;
IntChange change;
/**
* Generates an int change with the given value.
*
* @param value the value of the change
* @return the created change
* @since 0.0.1
*/
IntChange change(int value) {
return new IntChange(wrapper, value);
}
@BeforeEach
void prepareChangeManager() {
manager = new UnlimitedChangeManager<>();
wrapper = new IntWrapper();
change = change(1);
}
/**
* Tests adding a change.
*
* @since 0.0.1
*/
@Test
@Order(10)
void testAddChange() {
assertSame(0, wrapper.value);
assertTrue(manager.addChange(change));
assertSame(1, wrapper.value);
}
/**
* Tests whether identity changes are ignored when adding them to the change manager.
*
* @since 0.0.1
*/
@Test
@Order(15)
void testDiscardIdentity() {
manager.addChange(change);
assertFalse(manager.addChange(change(0)));
assertSame(1, wrapper.value);
}
/**
* Tests retrieving the last change.
*
* @since 0.0.1
*/
@Test
@Order(20)
void testLastChange() {
assertTrue(manager.getLastChange().isEmpty());
manager.addChange(change);
assertEquals(change, manager.getLastChange().get());
}
/**
* Tests the consistency of the change list.
*
* @since 0.0.1
*/
@Test
@Order(30)
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(40)
void testUndo() {
assertFalse(manager.isUndoAvailable());
assertFalse(manager.undo());
manager.addChange(change);
assertTrue(manager.isUndoAvailable());
assertTrue(manager.undo());
assertFalse(manager.isUndoAvailable());
assertFalse(manager.undo());
assertTrue(manager.getLastChange().isEmpty());
}
/**
* Tests redoing a change.
*
* @since 0.0.1
*/
@Test
@Order(50)
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());
assertEquals(change, manager.getLastChange().get());
}
/**
* Tests whether the changes after the current index are discarded when adding a change.
*
* @since 0.0.1
*/
@Test
@Order(55)
void testDiscardDivergentHistory() {
manager.addChange(change);
manager.addChange(change(2));
manager.undo();
manager.undo();
assertTrue(manager.addChange(change(3)));
assertFalse(manager.isRedoAvailable());
assertSame(3, wrapper.value);
assertSame(1, manager.getChanges().size());
}
/**
* Tests marking a change.
*
* @since 0.0.1
*/
@Test
@Order(60)
void testMark() {
assertTrue(manager.isAtMarkedChange());
manager.addChange(change);
assertFalse(manager.isAtMarkedChange());
manager.mark();
assertTrue(manager.isAtMarkedChange());
manager.undo();
assertFalse(manager.isAtMarkedChange());
}
/**
* Tests unmarking a change.
*
* @since 0.0.1
*/
@Test
@Order(70)
void testUnmark() {
manager.addChange(change);
manager.mark();
manager.unmark();
assertFalse(manager.isAtMarkedChange());
manager.undo();
assertTrue(manager.isAtMarkedChange());
}
}