core-graphics
Version:
A core library for creating shape-based graphic editors
133 lines (89 loc) • 6.18 kB
JavaScript
'use strict';
var _tap = require('tap');
var _editorStateReducer = require('../editor-state-reducer');
var _editorStateReducer2 = _interopRequireDefault(_editorStateReducer);
var _editorState = require('../editor-state');
var _editorEvents = require('../editor-events');
var _modes = require('../../declarations/modes');
var _testHistorySpec = require('./test-history.spec.js');
var _testHistorySpec2 = _interopRequireDefault(_testHistorySpec);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var EDITOR_STATE = (0, _editorStateReducer2.default)((0, _editorState.getInitialEditorState)({ shapesDeclarations: {}, author: _testHistorySpec.ALICE }), (0, _editorEvents.updateHistory)(_testHistorySpec2.default));
var ALICE_BOB_LINES_EDITOR_STATE = (0, _editorStateReducer2.default)((0, _editorState.getInitialEditorState)({ shapesDeclarations: {}, author: _testHistorySpec.ALICE }), (0, _editorEvents.updateHistory)(_testHistorySpec.ALICE_BOB_LINES));
(0, _tap.test)('selection: shape mouse down in select mode -> selected mode', function (t) {
var testId = _testHistorySpec.ALICE_LINE.id;
var button = _editorEvents.ButtonType.Left;
var ev = (0, _editorEvents.canvasShapeMouseDown)({ id: testId, button: button });
var afterDown = (0, _editorStateReducer2.default)(ALICE_BOB_LINES_EDITOR_STATE, ev);
t.deepEqual(afterDown.mode, (0, _modes.modeSelected)([testId]));
t.end();
});
(0, _tap.test)('selection: background mouse up in selected mode -> select mode', function (t) {
var testId = _testHistorySpec.ALICE_LINE.id;
var button = _editorEvents.ButtonType.Left;
var evs = [(0, _editorEvents.canvasShapeMouseDown)({ id: testId, button: button }), (0, _editorEvents.canvasBackgroundMouseDown)(button)];
var afterBackgroundDown = evs.reduce(_editorStateReducer2.default, EDITOR_STATE);
t.deepEqual(afterBackgroundDown.mode, (0, _modes.modeSelect)());
t.end();
});
(0, _tap.test)('selection: clicking on a non-selected shape selects it', function (t) {
var aliceShapeId = _testHistorySpec.ALICE_LINE.id;
var bobShapeId = _testHistorySpec.BOB_LINE.id;
var button = _editorEvents.ButtonType.Left;
var evs = [(0, _editorEvents.canvasShapeMouseDown)({ id: aliceShapeId, button: button }), (0, _editorEvents.canvasShapeMouseDown)({ id: bobShapeId, button: button })];
var afterSelected = evs.reduce(_editorStateReducer2.default, ALICE_BOB_LINES_EDITOR_STATE);
t.deepEqual(afterSelected.mode, (0, _modes.modeSelected)([bobShapeId]));
t.end();
});
(0, _tap.test)('selection: clicking on an already selected shape leaves mode the same', function (t) {
var aliceShapeId = _testHistorySpec.ALICE_LINE.id;
var bobShapeId = _testHistorySpec.BOB_LINE.id;
var button = _editorEvents.ButtonType.Left;
var initialMode = (0, _modes.modeSelected)([aliceShapeId, bobShapeId]);
var expectedMode = initialMode;
var evs = [(0, _editorEvents.setMode)(initialMode), (0, _editorEvents.canvasShapeMouseDown)({ id: aliceShapeId, button: button }), (0, _editorEvents.canvasShapeMouseDown)({ id: bobShapeId, button: button })];
var afterSelected = evs.reduce(_editorStateReducer2.default, ALICE_BOB_LINES_EDITOR_STATE);
t.deepEqual(afterSelected.mode, expectedMode);
t.end();
});
(0, _tap.test)('selection: clicking a non-selected shape with =shift= additionally selects it', function (t) {
var aliceShapeId = _testHistorySpec.ALICE_LINE.id;
var bobShapeId = _testHistorySpec.BOB_LINE.id;
var button = _editorEvents.ButtonType.Left;
var expectedMode = (0, _modes.modeSelected)([aliceShapeId, bobShapeId]);
var evs = [(0, _editorEvents.canvasShapeMouseDown)({ id: aliceShapeId, button: button }), (0, _editorEvents.canvasModifierKeyDown)(_editorEvents.SceneModifierKey.Shift), (0, _editorEvents.canvasShapeMouseDown)({ id: bobShapeId, button: button })];
var afterSelected = evs.reduce(_editorStateReducer2.default, ALICE_BOB_LINES_EDITOR_STATE);
t.deepEqual(afterSelected.mode, expectedMode);
t.end();
});
(0, _tap.test)('selection: clicking a selected shape with =shift= de-selects it', function (t) {
var aliceShapeId = _testHistorySpec.ALICE_LINE.id;
var bobShapeId = _testHistorySpec.BOB_LINE.id;
var button = _editorEvents.ButtonType.Left;
var expectedMode = (0, _modes.modeSelected)([aliceShapeId]);
var evs = [(0, _editorEvents.canvasShapeMouseDown)({ id: aliceShapeId, button: button }), (0, _editorEvents.canvasModifierKeyDown)(_editorEvents.SceneModifierKey.Shift), (0, _editorEvents.canvasShapeMouseDown)({ id: bobShapeId, button: button }), (0, _editorEvents.canvasShapeMouseDown)({ id: bobShapeId, button: button })];
var afterDeselected = evs.reduce(_editorStateReducer2.default, ALICE_BOB_LINES_EDITOR_STATE);
t.deepEqual(afterDeselected.mode, expectedMode);
t.end();
});
(0, _tap.test)('selection: falls back to select mode when no shapes are selected', function (t) {
var aliceShapeId = _testHistorySpec.ALICE_LINE.id;
var bobShapeId = _testHistorySpec.BOB_LINE.id;
var button = _editorEvents.ButtonType.Left;
var initialMode = (0, _modes.modeSelected)([aliceShapeId, bobShapeId]);
var expectedMode = (0, _modes.modeSelect)();
var evs = [(0, _editorEvents.setMode)(initialMode), (0, _editorEvents.canvasModifierKeyDown)(_editorEvents.SceneModifierKey.Shift), (0, _editorEvents.canvasShapeMouseDown)({ id: aliceShapeId, button: button }), (0, _editorEvents.canvasShapeMouseDown)({ id: bobShapeId, button: button })];
var afterDeselected = evs.reduce(_editorStateReducer2.default, ALICE_BOB_LINES_EDITOR_STATE);
t.deepEqual(afterDeselected.mode, expectedMode);
t.end();
});
(0, _tap.test)('selection: invalid selected shapes are excluded', function (t) {
var aliceShapeId = _testHistorySpec.ALICE_LINE.id;
var nonExistentShapeId = 'some-id';
var initialMode = (0, _modes.modeSelected)([aliceShapeId, nonExistentShapeId]);
var expectedMode = (0, _modes.modeSelected)([aliceShapeId]);
var evs = [(0, _editorEvents.setMode)(initialMode)];
var afterExcluded = evs.reduce(_editorStateReducer2.default, ALICE_BOB_LINES_EDITOR_STATE);
t.deepEqual(afterExcluded.mode, expectedMode);
t.end();
});