/* global sinon */ import { bootstrapViewer, inject } from 'test/TestHelper'; import { forEach } from 'min-dash'; import copyPasteModule from 'lib/features/copy-paste'; import coreModule from 'lib/core'; import editorActionsModule from 'lib/features/editor-actions'; import globalConnectModule from 'diagram-js/lib/features/global-connect'; import handToolModule from 'diagram-js/lib/features/hand-tool'; import keyboardModule from 'lib/features/keyboard'; import labelEditingModule from 'lib/features/label-editing'; import lassoToolModule from 'diagram-js/lib/features/lasso-tool'; import modelingModule from 'lib/features/modeling'; import searchModule from 'lib/features/search'; import spaceToolModule from 'diagram-js/lib/features/space-tool'; import { createKeyEvent } from 'test/util/KeyEvents'; describe('features/keyboard', function() { var diagramXML = require('../../../fixtures/bpmn/simple.bpmn'); var testModules = [ copyPasteModule, coreModule, editorActionsModule, globalConnectModule, handToolModule, keyboardModule, labelEditingModule, lassoToolModule, modelingModule, searchModule, spaceToolModule ]; beforeEach(bootstrapViewer(diagramXML, { modules: testModules })); describe('bpmn keyboard bindings', function() { it('should include triggers inside editorActions', inject(function(editorActions) { // given var expectedActions = [ 'undo', 'redo', 'copy', 'paste', 'zoom', 'removeSelection', 'selectElements', 'spaceTool', 'lassoTool', 'handTool', 'globalConnectTool', 'setColor', 'directEditing', 'find', 'moveToOrigin' ]; // then expect(editorActions.getActions()).to.eql(expectedActions); })); forEach(['c', 'C'], function(key) { it('should global connect tool for key ' + key, inject(function(keyboard, globalConnect) { sinon.spy(globalConnect, 'toggle'); // given var e = createKeyEvent(key); // when keyboard._keyHandler(e); // then expect(globalConnect.toggle).to.have.been.calledOnce; })); }); forEach(['l', 'L'], function(key) { it('should trigger lasso tool for key ' + key, inject(function(keyboard, lassoTool) { sinon.spy(lassoTool, 'activateSelection'); // given var e = createKeyEvent(key); // when keyboard._keyHandler(e); // then expect(lassoTool.activateSelection).to.have.been.calledOnce; })); }); forEach(['s', 'S'], function(key) { it('should trigger space tool', inject(function(keyboard, spaceTool) { sinon.spy(spaceTool, 'activateSelection'); // given var e = createKeyEvent(key); // when keyboard._keyHandler(e); // then expect(spaceTool.activateSelection).to.have.been.calledOnce; })); }); forEach(['e', 'E'], function(key) { it('should trigger direct editing', inject(function(keyboard, selection, elementRegistry, directEditing) { sinon.spy(directEditing, 'activate'); // given var task = elementRegistry.get('Task_1'); selection.select(task); var e = createKeyEvent(key); // when keyboard._keyHandler(e); // then expect(directEditing.activate).to.have.been.calledOnce; })); }); forEach(['a', 'A'], function(key) { it('should select all elements', inject(function(canvas, keyboard, selection, elementRegistry) { // given var e = createKeyEvent(key, { ctrlKey: true }); var allElements = elementRegistry.getAll(), rootElement = canvas.getRootElement(); // when keyboard._keyHandler(e); // then var selectedElements = selection.get(); expect(selectedElements).to.have.length(allElements.length - 1); expect(selectedElements).not.to.contain(rootElement); }) ); }); forEach(['f', 'F'], function(key) { it('should trigger search for labels', inject(function(keyboard, searchPad) { sinon.spy(searchPad, 'toggle'); // given var e = createKeyEvent(key, { ctrlKey: true }); // when keyboard._keyHandler(e); // then expect(searchPad.toggle).to.have.been.calledOnce; })); }); }); });