tests_utils_undoStack.test.js
import {UndoStack} from '../../src/utils/undoStack';
/**
* Tests for the 'utils/undoStack' file.
*/
/* global QUnit */
QUnit.module('utils');
class TestCommand00 {
// extra for test
testState = '00-init';
// command api
getName() {
return 'command00';
}
execute() {
this.testState = '00-executed';
}
undo() {
this.testState = '00-undone';
}
}
/**
* Tests for {@link UndoStack}.
*
* @function module:tests/utils~UndoStack
*/
QUnit.test('UndoStack - #DWV-REQ-UI-08-002 Draw action undo/redo',
function (assert) {
const cmd00 = new TestCommand00();
assert.equal(cmd00.testState, '00-init', 'cmd00 init');
// create stack
const undoStack00 = new UndoStack();
assert.equal(undoStack00.getStackSize(), 0, 'undoStack size #00');
assert.equal(undoStack00.getCurrentStackIndex(), 0, 'undoStack index #00');
let receivedUndoadd00 = 0;
undoStack00.addEventListener('undoadd', function () {
++receivedUndoadd00;
});
let receivedUndoremove00 = 0;
undoStack00.addEventListener('undoremove', function () {
++receivedUndoremove00;
});
let receivedUndo00 = 0;
undoStack00.addEventListener('undo', function () {
++receivedUndo00;
});
let receivedRedo00 = 0;
undoStack00.addEventListener('redo', function () {
++receivedRedo00;
});
// add command to stack
undoStack00.add(cmd00);
assert.equal(undoStack00.getStackSize(), 1, 'undoStack size after add #00');
assert.equal(undoStack00.getCurrentStackIndex(), 1,
'undoStack index after add #00');
assert.equal(receivedUndoadd00, 1,
'undoStack undoadd event after add #00');
assert.equal(receivedUndoremove00, 0,
'undoStack undoremove event after add #00');
assert.equal(receivedUndo00, 0,
'undoStack undo event after add #00');
assert.equal(receivedRedo00, 0,
'undoStack redo event after add #00');
// undo via stack
undoStack00.undo();
assert.equal(cmd00.testState, '00-undone', 'undoStack undo #00');
assert.equal(undoStack00.getStackSize(), 1,
'undoStack size after undo #00');
assert.equal(undoStack00.getCurrentStackIndex(), 0,
'undoStack index after undo #00');
assert.equal(receivedUndoadd00, 1,
'undoStack undoadd event after undo #00');
assert.equal(receivedUndoremove00, 0,
'undoStack undoremove event after undo #00');
assert.equal(receivedUndo00, 1,
'undoStack undo event after undo #00');
assert.equal(receivedRedo00, 0,
'undoStack redo event after undo #00');
// redo via stack
undoStack00.redo();
assert.equal(cmd00.testState, '00-executed', 'undoStack execute #00');
assert.equal(undoStack00.getStackSize(), 1,
'undoStack size after redo #00');
assert.equal(undoStack00.getCurrentStackIndex(), 1,
'undoStack index after redo #00');
assert.equal(receivedUndoadd00, 1,
'undoStack undoadd event after redo #00');
assert.equal(receivedUndoremove00, 0,
'undoStack undoremove event after redo #00');
assert.equal(receivedUndo00, 1,
'undoStack undo event after redo #00');
assert.equal(receivedRedo00, 1,
'undoStack redo event after redo #00');
// remove wrong commmand from stack
undoStack00.remove('badname');
assert.equal(undoStack00.getStackSize(), 1,
'undoStack size after bad remove #00');
assert.equal(undoStack00.getCurrentStackIndex(), 1,
'undoStack index after bad remove #00');
assert.equal(receivedUndoadd00, 1,
'undoStack undoadd event after bad remove #00');
assert.equal(receivedUndoremove00, 0,
'undoStack undoremove event after bad remove #00');
assert.equal(receivedUndo00, 1,
'undoStack undo event after bad remove #00');
assert.equal(receivedRedo00, 1,
'undoStack redo event after bad remove #00');
// remove commmand from stack
undoStack00.remove(cmd00.getName());
assert.equal(undoStack00.getStackSize(), 0,
'undoStack size after remove #00');
assert.equal(undoStack00.getCurrentStackIndex(), 0,
'undoStack index after remove #00');
assert.equal(receivedUndoadd00, 1,
'undoStack undoadd event after remove #00');
assert.equal(receivedUndoremove00, 1,
'undoStack undoremove event after remove #00');
assert.equal(receivedUndo00, 1,
'undoStack undo event after remove #00');
assert.equal(receivedRedo00, 1,
'undoStack redo event after remove #00');
}
);