@eclipse-glsp/client 2.8.0-next.8 → 2.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (279) hide show
  1. package/README.md +1 -1
  2. package/css/grid.css +2 -1
  3. package/lib/base/action-dispatcher.js +1 -4
  4. package/lib/base/action-dispatcher.js.map +1 -1
  5. package/lib/base/auto-complete/auto-complete-widget.js +4 -8
  6. package/lib/base/auto-complete/auto-complete-widget.js.map +1 -1
  7. package/lib/base/auto-complete/base-autocomplete-palette.js +1 -2
  8. package/lib/base/auto-complete/base-autocomplete-palette.js.map +1 -1
  9. package/lib/base/editor-context-service.js +4 -7
  10. package/lib/base/editor-context-service.js.map +1 -1
  11. package/lib/base/feedback/css-feedback.js +1 -1
  12. package/lib/base/feedback/css-feedback.js.map +1 -1
  13. package/lib/base/feedback/feedback-action-dispatcher.js +4 -6
  14. package/lib/base/feedback/feedback-action-dispatcher.js.map +1 -1
  15. package/lib/base/feedback/feedback-command.js +1 -2
  16. package/lib/base/feedback/feedback-command.js.map +1 -1
  17. package/lib/base/feedback/feedback-emitter.js +1 -2
  18. package/lib/base/feedback/feedback-emitter.js.map +1 -1
  19. package/lib/base/feedback/set-model-command.js +1 -2
  20. package/lib/base/feedback/set-model-command.js.map +1 -1
  21. package/lib/base/feedback/update-model-command.js +1 -2
  22. package/lib/base/feedback/update-model-command.js.map +1 -1
  23. package/lib/base/model/diagram-loader.js +4 -6
  24. package/lib/base/model/diagram-loader.js.map +1 -1
  25. package/lib/base/model/glsp-model-source.d.ts +1 -1
  26. package/lib/base/model/glsp-model-source.d.ts.map +1 -1
  27. package/lib/base/model/glsp-model-source.js +3 -5
  28. package/lib/base/model/glsp-model-source.js.map +1 -1
  29. package/lib/base/model/model-registry.js +1 -2
  30. package/lib/base/model/model-registry.js.map +1 -1
  31. package/lib/base/selection-service.js +3 -3
  32. package/lib/base/selection-service.js.map +1 -1
  33. package/lib/base/shortcuts/available-shortcuts-extension.js +3 -2
  34. package/lib/base/shortcuts/available-shortcuts-extension.js.map +1 -1
  35. package/lib/base/shortcuts/available-shortcuts-tool.js +3 -2
  36. package/lib/base/shortcuts/available-shortcuts-tool.js.map +1 -1
  37. package/lib/base/tool-manager/tool-manager.js +1 -1
  38. package/lib/base/tool-manager/tool-manager.js.map +1 -1
  39. package/lib/base/ui-extension/ui-extension.js +4 -6
  40. package/lib/base/ui-extension/ui-extension.js.map +1 -1
  41. package/lib/features/accessibility/edge-autocomplete/edge-autocomplete-palette.js +12 -17
  42. package/lib/features/accessibility/edge-autocomplete/edge-autocomplete-palette.js.map +1 -1
  43. package/lib/features/accessibility/edge-autocomplete/edge-autocomplete-tool.js +3 -2
  44. package/lib/features/accessibility/edge-autocomplete/edge-autocomplete-tool.js.map +1 -1
  45. package/lib/features/accessibility/element-navigation/diagram-navigation-tool.js +11 -15
  46. package/lib/features/accessibility/element-navigation/diagram-navigation-tool.js.map +1 -1
  47. package/lib/features/accessibility/element-navigation/left-right-top-bottom-navigator.js +2 -3
  48. package/lib/features/accessibility/element-navigation/left-right-top-bottom-navigator.js.map +1 -1
  49. package/lib/features/accessibility/element-navigation/local-element-navigator.js +2 -3
  50. package/lib/features/accessibility/element-navigation/local-element-navigator.js.map +1 -1
  51. package/lib/features/accessibility/focus-tracker/focus-tracker-tool.js +5 -4
  52. package/lib/features/accessibility/focus-tracker/focus-tracker-tool.js.map +1 -1
  53. package/lib/features/accessibility/global-keylistener-tool.js +4 -3
  54. package/lib/features/accessibility/global-keylistener-tool.js.map +1 -1
  55. package/lib/features/accessibility/keyboard-grid/keyboard-grid-search-palette.js +3 -2
  56. package/lib/features/accessibility/keyboard-grid/keyboard-grid-search-palette.js.map +1 -1
  57. package/lib/features/accessibility/keyboard-tool-palette/keyboard-tool-palette.js +5 -7
  58. package/lib/features/accessibility/keyboard-tool-palette/keyboard-tool-palette.js.map +1 -1
  59. package/lib/features/accessibility/toast/toast-handler.js +2 -4
  60. package/lib/features/accessibility/toast/toast-handler.js.map +1 -1
  61. package/lib/features/accessibility/toast/toast-tool.js +3 -2
  62. package/lib/features/accessibility/toast/toast-tool.js.map +1 -1
  63. package/lib/features/accessibility/view-key-tools/deselect-key-tool.js +3 -2
  64. package/lib/features/accessibility/view-key-tools/deselect-key-tool.js.map +1 -1
  65. package/lib/features/accessibility/view-key-tools/grid-cell-zoom-key-tool.js +4 -3
  66. package/lib/features/accessibility/view-key-tools/grid-cell-zoom-key-tool.js.map +1 -1
  67. package/lib/features/bounds/freeform-layout.js +1 -1
  68. package/lib/features/bounds/freeform-layout.js.map +1 -1
  69. package/lib/features/bounds/glsp-hidden-bounds-updater.d.ts +31 -1
  70. package/lib/features/bounds/glsp-hidden-bounds-updater.d.ts.map +1 -1
  71. package/lib/features/bounds/glsp-hidden-bounds-updater.js +119 -58
  72. package/lib/features/bounds/glsp-hidden-bounds-updater.js.map +1 -1
  73. package/lib/features/bounds/hbox-layout.js +7 -10
  74. package/lib/features/bounds/hbox-layout.js.map +1 -1
  75. package/lib/features/bounds/layout-data.js +2 -4
  76. package/lib/features/bounds/layout-data.js.map +1 -1
  77. package/lib/features/bounds/local-bounds.js +3 -4
  78. package/lib/features/bounds/local-bounds.js.map +1 -1
  79. package/lib/features/bounds/set-bounds-feedback-command.js +2 -3
  80. package/lib/features/bounds/set-bounds-feedback-command.js.map +1 -1
  81. package/lib/features/bounds/vbox-layout.js +7 -10
  82. package/lib/features/bounds/vbox-layout.js.map +1 -1
  83. package/lib/features/change-bounds/model.js +1 -1
  84. package/lib/features/change-bounds/model.js.map +1 -1
  85. package/lib/features/change-bounds/move-element-handler.js +1 -2
  86. package/lib/features/change-bounds/move-element-handler.js.map +1 -1
  87. package/lib/features/change-bounds/movement-restrictor.js +1 -2
  88. package/lib/features/change-bounds/movement-restrictor.js.map +1 -1
  89. package/lib/features/change-bounds/point-position-updater.js +1 -1
  90. package/lib/features/change-bounds/point-position-updater.js.map +1 -1
  91. package/lib/features/change-bounds/resize/resize-default-tool.js +4 -3
  92. package/lib/features/change-bounds/resize/resize-default-tool.js.map +1 -1
  93. package/lib/features/change-bounds/resize/resize-handler.js +1 -2
  94. package/lib/features/change-bounds/resize/resize-handler.js.map +1 -1
  95. package/lib/features/change-bounds/resize/resize-tool.js +4 -3
  96. package/lib/features/change-bounds/resize/resize-tool.js.map +1 -1
  97. package/lib/features/change-bounds/tracker.js +1 -2
  98. package/lib/features/change-bounds/tracker.js.map +1 -1
  99. package/lib/features/command-palette/command-palette-tool.js +3 -2
  100. package/lib/features/command-palette/command-palette-tool.js.map +1 -1
  101. package/lib/features/command-palette/command-palette.js +2 -3
  102. package/lib/features/command-palette/command-palette.js.map +1 -1
  103. package/lib/features/context-menu/glsp-context-menu-mouse-listener.js +2 -3
  104. package/lib/features/context-menu/glsp-context-menu-mouse-listener.js.map +1 -1
  105. package/lib/features/copy-paste/copy-paste-handler.d.ts +1 -1
  106. package/lib/features/copy-paste/copy-paste-handler.d.ts.map +1 -1
  107. package/lib/features/copy-paste/copy-paste-handler.js +3 -5
  108. package/lib/features/copy-paste/copy-paste-handler.js.map +1 -1
  109. package/lib/features/copy-paste/copy-paste-standalone.js +6 -9
  110. package/lib/features/copy-paste/copy-paste-standalone.js.map +1 -1
  111. package/lib/features/debug/debug-bounds-decorator.js +9 -12
  112. package/lib/features/debug/debug-bounds-decorator.js.map +1 -1
  113. package/lib/features/debug/debug-model.js +1 -1
  114. package/lib/features/debug/debug-model.js.map +1 -1
  115. package/lib/features/decoration/decoration-placer.js +3 -2
  116. package/lib/features/decoration/decoration-placer.js.map +1 -1
  117. package/lib/features/element-template/add-template-element.d.ts +6 -1
  118. package/lib/features/element-template/add-template-element.d.ts.map +1 -1
  119. package/lib/features/element-template/add-template-element.js +17 -5
  120. package/lib/features/element-template/add-template-element.js.map +1 -1
  121. package/lib/features/element-template/mouse-tracking-element-position-listener.js +1 -1
  122. package/lib/features/element-template/mouse-tracking-element-position-listener.js.map +1 -1
  123. package/lib/features/element-template/remove-template-element.js +1 -1
  124. package/lib/features/element-template/remove-template-element.js.map +1 -1
  125. package/lib/features/export/default-png-diagram-exporter.js +4 -7
  126. package/lib/features/export/default-png-diagram-exporter.js.map +1 -1
  127. package/lib/features/export/diagram-export-postprocessor.js +1 -2
  128. package/lib/features/export/diagram-export-postprocessor.js.map +1 -1
  129. package/lib/features/export/glsp-svg-exporter.d.ts.map +1 -1
  130. package/lib/features/export/glsp-svg-exporter.js +5 -6
  131. package/lib/features/export/glsp-svg-exporter.js.map +1 -1
  132. package/lib/features/export/request-export-command.js +1 -1
  133. package/lib/features/export/request-export-command.js.map +1 -1
  134. package/lib/features/grid/grid-model.js +1 -1
  135. package/lib/features/grid/grid-model.js.map +1 -1
  136. package/lib/features/helper-lines/helper-line-feedback.js +7 -8
  137. package/lib/features/helper-lines/helper-line-feedback.js.map +1 -1
  138. package/lib/features/helper-lines/model.d.ts +1 -1
  139. package/lib/features/helper-lines/model.d.ts.map +1 -1
  140. package/lib/features/helper-lines/model.js +3 -4
  141. package/lib/features/helper-lines/model.js.map +1 -1
  142. package/lib/features/hints/type-hint-provider.js +3 -5
  143. package/lib/features/hints/type-hint-provider.js.map +1 -1
  144. package/lib/features/label-edit/edit-label-tool.js +3 -2
  145. package/lib/features/label-edit/edit-label-tool.js.map +1 -1
  146. package/lib/features/label-edit-ui/label-edit-ui.js +2 -3
  147. package/lib/features/label-edit-ui/label-edit-ui.js.map +1 -1
  148. package/lib/features/navigation/navigation-target-resolver.js +1 -1
  149. package/lib/features/navigation/navigation-target-resolver.js.map +1 -1
  150. package/lib/features/routing/sticky-manhattan-anchors.js +9 -6
  151. package/lib/features/routing/sticky-manhattan-anchors.js.map +1 -1
  152. package/lib/features/routing/sticky-manhattan-edge-router.js +10 -12
  153. package/lib/features/routing/sticky-manhattan-edge-router.js.map +1 -1
  154. package/lib/features/search-palette/search-palette.js +3 -2
  155. package/lib/features/search-palette/search-palette.js.map +1 -1
  156. package/lib/features/search-palette/suggestions/edge-element-suggestions.js +2 -3
  157. package/lib/features/search-palette/suggestions/edge-element-suggestions.js.map +1 -1
  158. package/lib/features/search-palette/suggestions/named-element-suggestions.js +8 -11
  159. package/lib/features/search-palette/suggestions/named-element-suggestions.js.map +1 -1
  160. package/lib/features/select/select-feedback-command.js +1 -1
  161. package/lib/features/select/select-feedback-command.js.map +1 -1
  162. package/lib/features/select/select-mouse-listener.js +1 -2
  163. package/lib/features/select/select-mouse-listener.js.map +1 -1
  164. package/lib/features/status/status-overlay.js +4 -4
  165. package/lib/features/status/status-overlay.js.map +1 -1
  166. package/lib/features/tool-palette/tool-palette.d.ts.map +1 -1
  167. package/lib/features/tool-palette/tool-palette.js +16 -23
  168. package/lib/features/tool-palette/tool-palette.js.map +1 -1
  169. package/lib/features/tools/change-bounds/change-bounds-manager.js +4 -6
  170. package/lib/features/tools/change-bounds/change-bounds-manager.js.map +1 -1
  171. package/lib/features/tools/change-bounds/change-bounds-tool-feedback.js +3 -4
  172. package/lib/features/tools/change-bounds/change-bounds-tool-feedback.js.map +1 -1
  173. package/lib/features/tools/change-bounds/change-bounds-tool-move-feedback.js +4 -8
  174. package/lib/features/tools/change-bounds/change-bounds-tool-move-feedback.js.map +1 -1
  175. package/lib/features/tools/change-bounds/change-bounds-tool.js +6 -6
  176. package/lib/features/tools/change-bounds/change-bounds-tool.js.map +1 -1
  177. package/lib/features/tools/change-bounds/change-bounds-tracker.js +7 -10
  178. package/lib/features/tools/change-bounds/change-bounds-tracker.js.map +1 -1
  179. package/lib/features/tools/deletion/delete-tool.js +6 -4
  180. package/lib/features/tools/deletion/delete-tool.js.map +1 -1
  181. package/lib/features/tools/edge-creation/dangling-edge-feedback.d.ts +1 -1
  182. package/lib/features/tools/edge-creation/dangling-edge-feedback.d.ts.map +1 -1
  183. package/lib/features/tools/edge-creation/dangling-edge-feedback.js +7 -5
  184. package/lib/features/tools/edge-creation/dangling-edge-feedback.js.map +1 -1
  185. package/lib/features/tools/edge-creation/edge-creation-tool.js +5 -6
  186. package/lib/features/tools/edge-creation/edge-creation-tool.js.map +1 -1
  187. package/lib/features/tools/edge-creation/view.js +1 -2
  188. package/lib/features/tools/edge-creation/view.js.map +1 -1
  189. package/lib/features/tools/edge-edit/edge-edit-tool-feedback.d.ts +1 -1
  190. package/lib/features/tools/edge-edit/edge-edit-tool-feedback.d.ts.map +1 -1
  191. package/lib/features/tools/edge-edit/edge-edit-tool-feedback.js +8 -5
  192. package/lib/features/tools/edge-edit/edge-edit-tool-feedback.js.map +1 -1
  193. package/lib/features/tools/edge-edit/edge-edit-tool.js +3 -2
  194. package/lib/features/tools/edge-edit/edge-edit-tool.js.map +1 -1
  195. package/lib/features/tools/marquee-selection/marquee-mouse-tool.js +3 -2
  196. package/lib/features/tools/marquee-selection/marquee-mouse-tool.js.map +1 -1
  197. package/lib/features/tools/marquee-selection/marquee-tool-feedback.js +2 -2
  198. package/lib/features/tools/marquee-selection/marquee-tool-feedback.js.map +1 -1
  199. package/lib/features/tools/marquee-selection/marquee-tool.js +3 -2
  200. package/lib/features/tools/marquee-selection/marquee-tool.js.map +1 -1
  201. package/lib/features/tools/marquee-selection/model.d.ts +1 -1
  202. package/lib/features/tools/marquee-selection/model.d.ts.map +1 -1
  203. package/lib/features/tools/marquee-selection/model.js +3 -2
  204. package/lib/features/tools/marquee-selection/model.js.map +1 -1
  205. package/lib/features/tools/node-creation/container-manager.js +3 -4
  206. package/lib/features/tools/node-creation/container-manager.js.map +1 -1
  207. package/lib/features/tools/node-creation/insert-indicator.d.ts +1 -1
  208. package/lib/features/tools/node-creation/insert-indicator.d.ts.map +1 -1
  209. package/lib/features/tools/node-creation/insert-indicator.js +5 -5
  210. package/lib/features/tools/node-creation/insert-indicator.js.map +1 -1
  211. package/lib/features/tools/node-creation/node-creation-tool.js +5 -6
  212. package/lib/features/tools/node-creation/node-creation-tool.js.map +1 -1
  213. package/lib/features/tools/node-creation/node-creation-views.js +1 -2
  214. package/lib/features/tools/node-creation/node-creation-views.js.map +1 -1
  215. package/lib/features/validation/issue-marker.d.ts +2 -2
  216. package/lib/features/validation/issue-marker.d.ts.map +1 -1
  217. package/lib/features/validation/issue-marker.js +7 -2
  218. package/lib/features/validation/issue-marker.js.map +1 -1
  219. package/lib/features/validation/marker-navigator.js +1 -1
  220. package/lib/features/validation/marker-navigator.js.map +1 -1
  221. package/lib/features/validation/validate.js +4 -6
  222. package/lib/features/validation/validate.js.map +1 -1
  223. package/lib/features/viewport/origin-viewport.js +1 -1
  224. package/lib/features/viewport/origin-viewport.js.map +1 -1
  225. package/lib/features/viewport/reposition.js +2 -3
  226. package/lib/features/viewport/reposition.js.map +1 -1
  227. package/lib/features/viewport/viewport-handler.js +2 -3
  228. package/lib/features/viewport/viewport-handler.js.map +1 -1
  229. package/lib/features/viewport/viewport-tool.js +4 -3
  230. package/lib/features/viewport/viewport-tool.js.map +1 -1
  231. package/lib/features/zorder/bring-to-front-command.js +1 -2
  232. package/lib/features/zorder/bring-to-front-command.js.map +1 -1
  233. package/lib/model.js +2 -2
  234. package/lib/model.js.map +1 -1
  235. package/lib/utils/argument-utils.js +5 -5
  236. package/lib/utils/argument-utils.js.map +1 -1
  237. package/lib/utils/gmodel-util.d.ts +13 -1
  238. package/lib/utils/gmodel-util.d.ts.map +1 -1
  239. package/lib/utils/gmodel-util.js +15 -7
  240. package/lib/utils/gmodel-util.js.map +1 -1
  241. package/lib/utils/layout-utils.js +1 -2
  242. package/lib/utils/layout-utils.js.map +1 -1
  243. package/lib/views/glsp-projection-view.js +1 -2
  244. package/lib/views/glsp-projection-view.js.map +1 -1
  245. package/package.json +18 -17
  246. package/src/base/feedback/feedback-command.ts +1 -1
  247. package/src/base/model/glsp-model-source.ts +1 -1
  248. package/src/features/accessibility/README.md +5 -5
  249. package/src/features/accessibility/keyboard-tool-palette/keyboard-tool-palette.ts +1 -1
  250. package/src/features/bounds/glsp-hidden-bounds-updater.ts +133 -60
  251. package/src/features/copy-paste/copy-paste-handler.ts +3 -3
  252. package/src/features/element-template/add-template-element.ts +17 -2
  253. package/src/features/export/glsp-svg-exporter.ts +2 -2
  254. package/src/features/helper-lines/model.ts +4 -5
  255. package/src/features/tool-palette/tool-palette.ts +2 -4
  256. package/src/features/tools/edge-creation/dangling-edge-feedback.ts +4 -2
  257. package/src/features/tools/edge-edit/edge-edit-tool-feedback.ts +5 -3
  258. package/src/features/tools/marquee-selection/model.ts +3 -2
  259. package/src/features/tools/node-creation/insert-indicator.ts +5 -5
  260. package/src/features/validation/issue-marker.ts +7 -2
  261. package/src/utils/gmodel-util.ts +23 -1
  262. package/src/base/action-dispatcher.spec.ts +0 -366
  263. package/src/base/feedback/feedback-emitter.spec.ts +0 -176
  264. package/src/base/model/model-initialization-constraint.spec.ts +0 -95
  265. package/src/base/selection-service.spec.ts +0 -318
  266. package/src/default-modules.spec.ts +0 -56
  267. package/src/features/bounds/freeform-layout.spec.ts +0 -216
  268. package/src/features/bounds/hbox-layout.spec.ts +0 -170
  269. package/src/features/bounds/layouter-test-util.spec.ts +0 -127
  270. package/src/features/bounds/vbox-layout.spec.ts +0 -170
  271. package/src/features/change-bounds/point-position-updater.spec.ts +0 -81
  272. package/src/features/grid/grid-snapper.spec.ts +0 -30
  273. package/src/features/hints/type-hint-provider.spec.ts +0 -360
  274. package/src/features/layout/layout-elements-action.spec.ts +0 -426
  275. package/src/features/navigation/navigation-target-resolver.spec.ts +0 -56
  276. package/src/features/routing/sticky-manhattan-edge-router.spec.ts +0 -212
  277. package/src/features/tools/marquee-selection/marquee-behavior.spec.ts +0 -176
  278. package/src/features/validation/marker-navigator.spec.ts +0 -183
  279. package/src/utils/gmodel-util.spec.ts +0 -221
@@ -1,360 +0,0 @@
1
- /********************************************************************************
2
- * Copyright (c) 2023-2024 EclipseSource and others.
3
- *
4
- * This program and the accompanying materials are made available under the
5
- * terms of the Eclipse Public License v. 2.0 which is available at
6
- * http://www.eclipse.org/legal/epl-2.0.
7
- *
8
- * This Source Code may also be made available under the following Secondary
9
- * Licenses when the conditions for such availability set forth in the Eclipse
10
- * Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
- * with the GNU Classpath Exception which is available at
12
- * https://www.gnu.org/software/classpath/license.html.
13
- *
14
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
- ********************************************************************************/
16
- import {
17
- AnimationFrameSyncer,
18
- CommandExecutionContext,
19
- ConsoleLogger,
20
- EdgeTypeHint,
21
- GChildElement,
22
- GModelFactory,
23
- GModelRoot,
24
- GNode,
25
- SetTypeHintsAction,
26
- ShapeTypeHint,
27
- TYPES,
28
- Writable,
29
- bindOrRebind,
30
- createFeatureSet,
31
- editFeature,
32
- isDeletable,
33
- isMoveable
34
- } from '@eclipse-glsp/sprotty';
35
- import { expect } from 'chai';
36
- import { Container } from 'inversify';
37
- import * as sinon from 'sinon';
38
- import { GLSPActionDispatcher } from '../../base/action-dispatcher';
39
- import { FeedbackActionDispatcher } from '../../base/feedback/feedback-action-dispatcher';
40
- import { FeedbackEmitter } from '../../base/feedback/feedback-emitter';
41
- import { GEdge } from '../../model';
42
- import { isResizable } from '../change-bounds/model';
43
- import { isReconnectable } from '../reconnect/model';
44
- import { Containable, isContainable, isReparentable } from './model';
45
- import { ApplyTypeHintsAction, ApplyTypeHintsCommand, ITypeHintProvider, TypeHintProvider } from './type-hint-provider';
46
- describe('TypeHintProvider', () => {
47
- const container = new Container();
48
- container.bind(GLSPActionDispatcher).toConstantValue(sinon.createStubInstance(GLSPActionDispatcher));
49
- container.bind(TYPES.IActionDispatcher).toService(GLSPActionDispatcher);
50
- const stub = sinon.createStubInstance(FeedbackActionDispatcher);
51
- stub.createEmitter.returns(new FeedbackEmitter(stub));
52
- container.bind(TYPES.IFeedbackActionDispatcher).toConstantValue(stub);
53
- const typeHintProvider = container.resolve(TypeHintProvider);
54
-
55
- describe('getShapeTypeHint', () => {
56
- const nodeHint: ShapeTypeHint = {
57
- deletable: true,
58
- elementTypeId: 'node',
59
- reparentable: false,
60
- repositionable: true,
61
- resizable: true
62
- };
63
- const taskHint: ShapeTypeHint = {
64
- deletable: true,
65
- elementTypeId: 'node:task',
66
- reparentable: false,
67
- repositionable: true,
68
- resizable: true
69
- };
70
-
71
- it('should return `undefined` if no `SetTypeHintsAction` has been handled yet', () => {
72
- expect(typeHintProvider.getShapeTypeHint('some')).to.be.undefined;
73
- });
74
- it('should return `undefined` if no hint is registered for the given type (exact type match)', () => {
75
- typeHintProvider.handle(SetTypeHintsAction.create({ shapeHints: [nodeHint], edgeHints: [] }));
76
- expect(typeHintProvider.getShapeTypeHint('port')).to.be.undefined;
77
- });
78
- it('should return the corresponding type hint for the given type (exact type match)', () => {
79
- typeHintProvider.handle(SetTypeHintsAction.create({ shapeHints: [nodeHint, taskHint], edgeHints: [] }));
80
- expect(typeHintProvider.getShapeTypeHint('node')).to.equal(nodeHint);
81
- expect(typeHintProvider.getShapeTypeHint('node:task')).to.equal(taskHint);
82
- });
83
- it('should return the corresponding type hint for the given type (sub type match)', () => {
84
- typeHintProvider.handle(SetTypeHintsAction.create({ shapeHints: [nodeHint, taskHint], edgeHints: [] }));
85
- expect(typeHintProvider.getShapeTypeHint('node:task:manual')).to.equal(taskHint);
86
- expect(typeHintProvider.getShapeTypeHint('node:task:manual:foo')).to.equal(taskHint);
87
- expect(typeHintProvider.getShapeTypeHint('node:event')).to.equal(nodeHint);
88
- expect(typeHintProvider.getShapeTypeHint('node:event:initial')).to.equal(nodeHint);
89
- });
90
- });
91
- describe('getEdgeTypeHint', () => {
92
- const edgeHint: EdgeTypeHint = {
93
- deletable: true,
94
- elementTypeId: 'edge',
95
- repositionable: true,
96
- routable: true,
97
- dynamic: false
98
- };
99
- const fooEdgeHint: EdgeTypeHint = {
100
- deletable: true,
101
- elementTypeId: 'edge:foo',
102
- repositionable: true,
103
- routable: true,
104
- dynamic: true
105
- };
106
- it('should return `undefined` if no `SetTypeHintsAction` has been handled yet', () => {
107
- expect(typeHintProvider.getEdgeTypeHint('some')).to.be.undefined;
108
- });
109
- it('should return `undefined` if no hint is registered for the given type (exact type match)', () => {
110
- typeHintProvider.handle(SetTypeHintsAction.create({ shapeHints: [], edgeHints: [edgeHint] }));
111
- expect(typeHintProvider.getEdgeTypeHint('link')).to.be.undefined;
112
- });
113
- it('should return the corresponding type hint for the given type (exact type match)', () => {
114
- typeHintProvider.handle(SetTypeHintsAction.create({ shapeHints: [], edgeHints: [edgeHint, fooEdgeHint] }));
115
- expect(typeHintProvider.getEdgeTypeHint('edge')).to.equal(edgeHint);
116
- expect(typeHintProvider.getEdgeTypeHint('edge:foo')).to.equal(fooEdgeHint);
117
- });
118
- it('should return the corresponding type hint for the given type (sub type match)', () => {
119
- typeHintProvider.handle(SetTypeHintsAction.create({ shapeHints: [], edgeHints: [edgeHint, fooEdgeHint] }));
120
- expect(typeHintProvider.getEdgeTypeHint('edge:foo:bar')).to.equal(fooEdgeHint);
121
- expect(typeHintProvider.getEdgeTypeHint('edge:foo:bar:baz')).to.equal(fooEdgeHint);
122
- expect(typeHintProvider.getEdgeTypeHint('edge:some')).to.equal(edgeHint);
123
- expect(typeHintProvider.getEdgeTypeHint('edge:some:other')).to.equal(edgeHint);
124
- });
125
- });
126
- });
127
- describe('ApplyTypeHintCommand', () => {
128
- function createCommandExecutionContext(child: GChildElement): CommandExecutionContext {
129
- const root = new GModelRoot();
130
- root.id = 'root';
131
- root.type = 'root';
132
- root.add(child);
133
- return {
134
- root,
135
- modelFactory,
136
- duration: 0,
137
- modelChanged: undefined!,
138
- logger: new ConsoleLogger(),
139
- syncer: new AnimationFrameSyncer()
140
- };
141
- }
142
-
143
- function createNode(type?: string): GNode {
144
- const node = new GNode();
145
- node.type = type ?? 'node';
146
- node.id = 'node';
147
- node.features = createFeatureSet(GNode.DEFAULT_FEATURES);
148
- return node;
149
- }
150
-
151
- function createEdge(type?: string): GEdge {
152
- const edge = new GEdge();
153
- edge.type = type ?? 'edge';
154
- edge.id = 'edge';
155
- edge.features = createFeatureSet(GEdge.DEFAULT_FEATURES);
156
- return edge;
157
- }
158
-
159
- const sandbox = sinon.createSandbox();
160
- const container = new Container();
161
- const modelFactory = sinon.createStubInstance(GModelFactory);
162
- const typeHintProviderMock = sandbox.stub<ITypeHintProvider>({
163
- getEdgeTypeHint: () => undefined,
164
- getShapeTypeHint: () => undefined
165
- });
166
- container.bind(GLSPActionDispatcher).toConstantValue(sandbox.createStubInstance(GLSPActionDispatcher));
167
- container.bind(TYPES.IActionDispatcher).toService(GLSPActionDispatcher);
168
- container.bind(TYPES.IFeedbackActionDispatcher).toConstantValue(sandbox.createStubInstance(FeedbackActionDispatcher));
169
- container.bind(TYPES.ITypeHintProvider).toConstantValue(typeHintProviderMock);
170
- bindOrRebind(container, TYPES.Action).toConstantValue(ApplyTypeHintsAction.create());
171
- const command = container.resolve(ApplyTypeHintsCommand);
172
-
173
- beforeEach(() => {
174
- sandbox.reset();
175
- });
176
-
177
- describe('test hints to model feature translation (after command execution)`', () => {
178
- describe('ShapeTypeHint', () => {
179
- const allEnabledHint: ShapeTypeHint = {
180
- elementTypeId: 'node',
181
- deletable: true,
182
- reparentable: true,
183
- repositionable: true,
184
- resizable: true,
185
- containableElementTypeIds: []
186
- };
187
- const allDisabledHint: ShapeTypeHint = {
188
- elementTypeId: 'node',
189
- deletable: false,
190
- reparentable: false,
191
- repositionable: false,
192
- resizable: false,
193
- containableElementTypeIds: []
194
- };
195
- it('should not modify feature set of model element with no applicable type hint', () => {
196
- typeHintProviderMock.getShapeTypeHint.returns(undefined);
197
- const result = command.execute(createCommandExecutionContext(createNode()));
198
- const element = result.children[0];
199
- expect(GNode.DEFAULT_FEATURES, 'Element should have default feature set').to.have.same.members([
200
- ...(element.features as Set<symbol>)
201
- ]);
202
- });
203
- it('should add all enabled (`true`) features, derived from the applied type hint, to the model', () => {
204
- typeHintProviderMock.getShapeTypeHint.returns(allEnabledHint);
205
- const result = command.execute(createCommandExecutionContext(createNode()));
206
- const element = result.children[0];
207
- expect(isDeletable(element), 'Element should have deletable feature').to.be.true;
208
- expect(isReparentable(element), 'Element should have reparentable feature').to.be.true;
209
- expect(isMoveable(element), 'Element should have moveable feature').to.be.true;
210
- expect(isContainable(element), 'Element should have containable feature').to.be.true;
211
- expect(isResizable(element), 'Element should have resizeable feature').to.be.true;
212
- });
213
- it('should remove all disabled (`false`) features, derived from the applied type hint, from the model', () => {
214
- typeHintProviderMock.getShapeTypeHint.returns(allDisabledHint);
215
- const result = command.execute(createCommandExecutionContext(createNode()));
216
- const element = result.children[0];
217
- expect(isDeletable(element), 'Element should not have deletable feature').to.be.false;
218
- expect(isReparentable(element), 'Element should not have reparentable feature').to.be.false;
219
- expect(isMoveable(element), 'Element should not have moveable feature').to.be.false;
220
- expect(isResizable(element), 'Element should not have resizeable feature').to.be.false;
221
- });
222
- describe('`isConnectable` (after hint has been applied to element)', () => {
223
- const shapeHint: Writable<ShapeTypeHint> = {
224
- deletable: false,
225
- elementTypeId: 'node',
226
- reparentable: false,
227
- repositionable: false,
228
- resizable: false
229
- };
230
- const edgeHint: Writable<EdgeTypeHint> = {
231
- deletable: false,
232
- elementTypeId: 'edge',
233
- repositionable: false,
234
- routable: false
235
- };
236
- it('should return `true` if source/target elements are not defined in edge hint', () => {
237
- typeHintProviderMock.getShapeTypeHint.returns(shapeHint);
238
- typeHintProviderMock.getEdgeTypeHint.returns(edgeHint);
239
- const result = command.execute(createCommandExecutionContext(createNode()));
240
- const element = result.children[0] as GNode;
241
- const edge = createEdge();
242
- expect(element.canConnect(edge, 'source')).to.be.true;
243
- expect(element.canConnect(edge, 'target')).to.be.true;
244
- });
245
- it('should return `false` if element type is not in source/target elements of edge hint', () => {
246
- typeHintProviderMock.getShapeTypeHint.returns(shapeHint);
247
- typeHintProviderMock.getEdgeTypeHint.returns(edgeHint);
248
- edgeHint.sourceElementTypeIds = [];
249
- edgeHint.targetElementTypeIds = [];
250
- const result = command.execute(createCommandExecutionContext(createNode()));
251
- const element = result.children[0] as GNode;
252
- const edge = createEdge();
253
- expect(element.canConnect(edge, 'source')).to.be.false;
254
- expect(element.canConnect(edge, 'target')).to.be.false;
255
- });
256
- it('should return `true` if element type is in source/target elements of edge hint (exact type)', () => {
257
- typeHintProviderMock.getShapeTypeHint.returns(shapeHint);
258
- typeHintProviderMock.getEdgeTypeHint.returns(edgeHint);
259
- edgeHint.sourceElementTypeIds = ['node'];
260
- edgeHint.targetElementTypeIds = ['node'];
261
- const result = command.execute(createCommandExecutionContext(createNode()));
262
- const element = result.children[0] as GNode;
263
- const edge = createEdge();
264
- expect(element.canConnect(edge, 'source')).to.be.true;
265
- expect(element.canConnect(edge, 'target')).to.be.true;
266
- });
267
- it('should return `true` if element super type is in source/target elements of edge hint (super type)', () => {
268
- typeHintProviderMock.getShapeTypeHint.returns(shapeHint);
269
- typeHintProviderMock.getEdgeTypeHint.returns(edgeHint);
270
- edgeHint.sourceElementTypeIds = ['node'];
271
- edgeHint.targetElementTypeIds = ['node'];
272
- const result = command.execute(createCommandExecutionContext(createNode('node:task:automated')));
273
- const element = result.children[0] as GNode;
274
- const edge = createEdge();
275
- expect(element.canConnect(edge, 'source')).to.be.true;
276
- expect(element.canConnect(edge, 'target')).to.be.true;
277
- });
278
- it('should fallback to class-level `canConnect` implementation if no edge hint is applicable to routable', () => {
279
- typeHintProviderMock.getEdgeTypeHint.returns(undefined);
280
- typeHintProviderMock.getShapeTypeHint.returns(shapeHint);
281
- const node = createNode();
282
- const originalCanConnectSpy = sinon.spy(node, 'canConnect');
283
- const result = command.execute(createCommandExecutionContext(node));
284
- const element = result.children[0] as GNode;
285
- const edge = createEdge();
286
- expect(element.canConnect(edge, 'source')).to.be.true;
287
- expect(element.canConnect(edge, 'target')).to.be.true;
288
- expect(originalCanConnectSpy.called).to.be.true;
289
- });
290
- });
291
- describe('`isContainable` (after hint has been applied to element)', () => {
292
- const shapeHint: Writable<ShapeTypeHint> = {
293
- deletable: false,
294
- elementTypeId: 'node',
295
- reparentable: false,
296
- repositionable: false,
297
- resizable: false
298
- };
299
- it('should return `false` if corresponding hint has no containable elements defined', () => {
300
- typeHintProviderMock.getShapeTypeHint.returns(shapeHint);
301
- const result = command.execute(createCommandExecutionContext(createNode('node')));
302
- const element = result.children[0] as GNode & Containable;
303
- expect(element.isContainableElement('other')).to.be.false;
304
- });
305
- it('should return `true` if corresponding hint has containable element with matching type', () => {
306
- typeHintProviderMock.getShapeTypeHint.returns(shapeHint);
307
- shapeHint.containableElementTypeIds = ['node'];
308
- const result = command.execute(createCommandExecutionContext(createNode('node')));
309
- const element = result.children[0] as GNode & Containable;
310
- expect(element.isContainableElement('node')).to.be.true;
311
- });
312
- it('should return `true` if corresponding hint as has containable element with matching super type', () => {
313
- typeHintProviderMock.getShapeTypeHint.returns(shapeHint);
314
- shapeHint.containableElementTypeIds = ['node'];
315
- const result = command.execute(createCommandExecutionContext(createNode('node')));
316
- const element = result.children[0] as GNode & Containable;
317
- expect(element.isContainableElement('node:task:automated')).to.be.true;
318
- });
319
- });
320
- });
321
- describe('EdgeTypeHint', () => {
322
- const allEnabledHint: EdgeTypeHint = {
323
- elementTypeId: 'edge',
324
- deletable: true,
325
- repositionable: true,
326
- routable: true
327
- };
328
- const allDisabledHint: EdgeTypeHint = {
329
- elementTypeId: 'edge',
330
- deletable: false,
331
- repositionable: false,
332
- routable: false
333
- };
334
- it('should not modify feature set of model element with no applicable type hint', () => {
335
- typeHintProviderMock.getEdgeTypeHint.returns(undefined);
336
- const result = command.execute(createCommandExecutionContext(createEdge()));
337
- const element = result.children[0];
338
- expect(GEdge.DEFAULT_FEATURES, 'Element should have default feature set').to.have.same.members([
339
- ...(element.features as Set<symbol>)
340
- ]);
341
- });
342
- it('should add all enabled (`true`) features, derived from the applied type hint, to the model', () => {
343
- typeHintProviderMock.getEdgeTypeHint.returns(allEnabledHint);
344
- const result = command.execute(createCommandExecutionContext(createEdge()));
345
- const element = result.children[0];
346
- expect(isDeletable(element), 'Element should have deletable feature').to.be.true;
347
- expect(element.hasFeature(editFeature), 'Element should have edit feature').to.be.true;
348
- expect(isReconnectable(element), 'Element should have reconnectable feature').to.be.true;
349
- });
350
- it('should remove all disabled (`false`) features, derived from the applied type hint, from the model', () => {
351
- typeHintProviderMock.getEdgeTypeHint.returns(allDisabledHint);
352
- const result = command.execute(createCommandExecutionContext(createEdge()));
353
- const element = result.children[0];
354
- expect(isDeletable(element), 'Element should not have deletable feature').to.be.false;
355
- expect(element.hasFeature(editFeature), 'Element should not have edit feature').to.be.false;
356
- expect(isReconnectable(element), 'Element should not have reconnectable feature').to.be.false;
357
- });
358
- });
359
- });
360
- });