178 lines
3.5 KiB
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());
|
|
}
|
|
}
|