KeyboardMoveSpec.js 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. import {
  2. bootstrapDiagram,
  3. getDiagramJS,
  4. inject
  5. } from 'test/TestHelper';
  6. import { createKeyEvent } from 'test/util/KeyEvents';
  7. import {
  8. assign,
  9. forEach
  10. } from 'min-dash';
  11. import modelingModule from 'lib/features/modeling';
  12. import keyboardMoveModule from 'lib/navigation/keyboard-move';
  13. describe('navigation/keyboard-move', function() {
  14. var defaultDiagramConfig = {
  15. modules: [
  16. modelingModule,
  17. keyboardMoveModule
  18. ],
  19. canvas: {
  20. deferUpdate: false
  21. }
  22. };
  23. describe('bootstrap', function() {
  24. beforeEach(bootstrapDiagram(defaultDiagramConfig));
  25. it('should bootstrap', inject(function(keyboardMove, canvas) {
  26. canvas.addShape({
  27. id: 'test',
  28. width: 100,
  29. height: 100,
  30. x: 100,
  31. y: 100
  32. });
  33. expect(keyboardMove).not.to.be.null;
  34. }));
  35. });
  36. describe('arrow bindings', function() {
  37. var KEYS = {
  38. LEFT: [ 'ArrowLeft', 'Left' ],
  39. UP: [ 'ArrowUp', 'Up' ],
  40. RIGHT: [ 'ArrowRight', 'Right' ],
  41. DOWN: [ 'ArrowDown', 'Down' ],
  42. };
  43. beforeEach(bootstrapDiagram(defaultDiagramConfig));
  44. describe('with default config', function() {
  45. describe('with Ctrl/Cmd', function() {
  46. it('should not move when neither Ctrl nor Cmd is pressed down',
  47. inject(function(canvas, keyboard) {
  48. // given
  49. var event = createKeyEvent(KEYS.RIGHT[0], { ctrlKey: false, metaKey: false });
  50. // when
  51. keyboard._keyHandler(event);
  52. // then
  53. expect(canvas.viewbox().x).to.eql(0);
  54. expect(canvas.viewbox().y).to.eql(0);
  55. })
  56. );
  57. });
  58. describe('with Ctrl/Cmd', function() {
  59. var BASE_SPEED = 50,
  60. HIGH_SPEED = 200;
  61. describe('without shift', function() {
  62. var decisionTable = [
  63. {
  64. desc: 'move left',
  65. keys: KEYS.LEFT,
  66. x: -BASE_SPEED,
  67. y: 0
  68. },
  69. {
  70. desc: 'move right',
  71. keys: KEYS.RIGHT,
  72. x: BASE_SPEED,
  73. y: 0
  74. },
  75. {
  76. desc: 'move up',
  77. keys: KEYS.UP,
  78. x: 0,
  79. y: -BASE_SPEED
  80. },
  81. {
  82. desc: 'move down',
  83. keys: KEYS.DOWN,
  84. x: 0,
  85. y: BASE_SPEED
  86. }
  87. ];
  88. forEach(decisionTable, function(testCase) {
  89. forEach(testCase.keys, function(key) {
  90. it('should ' + testCase.desc + ' with CtrlKey', inject(function(canvas, keyboard) {
  91. // given
  92. var event = createKeyEvent(key, {
  93. ctrlKey: true,
  94. shiftKey: false
  95. });
  96. // when
  97. keyboard._keyHandler(event);
  98. // then
  99. expect(canvas.viewbox().x).to.eql(testCase.x);
  100. expect(canvas.viewbox().y).to.eql(testCase.y);
  101. }));
  102. it('should ' + testCase.desc + ' with CmdKey', inject(function(canvas, keyboard) {
  103. // given
  104. var event = createKeyEvent(key, {
  105. metaKey: true,
  106. shiftKey: false
  107. });
  108. // when
  109. keyboard._keyHandler(event);
  110. // then
  111. expect(canvas.viewbox().x).to.eql(testCase.x);
  112. expect(canvas.viewbox().y).to.eql(testCase.y);
  113. }));
  114. });
  115. });
  116. });
  117. describe('with shift', function() {
  118. var decisionTable = [
  119. {
  120. desc: 'move left',
  121. keys: KEYS.LEFT,
  122. x: -HIGH_SPEED,
  123. y: 0
  124. },
  125. {
  126. desc: 'move right',
  127. keys: KEYS.RIGHT,
  128. x: HIGH_SPEED,
  129. y: 0
  130. },
  131. {
  132. desc: 'move up',
  133. keys: KEYS.UP,
  134. x: 0,
  135. y: -HIGH_SPEED
  136. },
  137. {
  138. desc: 'move down',
  139. keys: KEYS.DOWN,
  140. x: 0,
  141. y: HIGH_SPEED
  142. },
  143. ];
  144. forEach(decisionTable, function(testCase) {
  145. forEach(testCase.keys, function(key) {
  146. it('should ' + testCase.desc, inject(function(canvas, keyboard) {
  147. // given
  148. var event = createKeyEvent(key, { ctrlKey: true, shiftKey: true });
  149. // when
  150. keyboard._keyHandler(event);
  151. // then
  152. expect(canvas.viewbox().x).to.eql(testCase.x);
  153. expect(canvas.viewbox().y).to.eql(testCase.y);
  154. }));
  155. });
  156. });
  157. });
  158. });
  159. });
  160. describe('with custom config', function() {
  161. it('should use custom speed', function() {
  162. // given
  163. var customConfig = {
  164. keyboardMove: {
  165. moveSpeed: 23
  166. }
  167. };
  168. bootstrapDiagram(assign({}, defaultDiagramConfig, customConfig))();
  169. var keyDownEvent = createKeyEvent(KEYS.DOWN[0], { ctrlKey: true });
  170. getDiagramJS().invoke(function(canvas, keyboard) {
  171. // when
  172. keyboard._keyHandler(keyDownEvent);
  173. // then
  174. expect(canvas.viewbox().x).to.eql(0);
  175. expect(canvas.viewbox().y).to.eql(23);
  176. });
  177. });
  178. it('should use custom modified speed', function() {
  179. // given
  180. var customConfig = {
  181. keyboardMove: {
  182. moveSpeedAccelerated: 1
  183. }
  184. };
  185. bootstrapDiagram(assign({}, defaultDiagramConfig, customConfig))();
  186. var keyDownEvent = createKeyEvent(KEYS.DOWN[0], { ctrlKey: true, shiftKey: true });
  187. getDiagramJS().invoke(function(canvas, keyboard) {
  188. // when
  189. keyboard._keyHandler(keyDownEvent);
  190. // then
  191. expect(canvas.viewbox().x).to.eql(0);
  192. expect(canvas.viewbox().y).to.eql(1);
  193. });
  194. });
  195. });
  196. });
  197. });