@eclipse-glsp/client 2.8.0-next.8 → 2.9.0-next.1
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.
- package/README.md +1 -1
- package/css/grid.css +2 -1
- package/lib/base/action-dispatcher.js +1 -4
- package/lib/base/action-dispatcher.js.map +1 -1
- package/lib/base/auto-complete/auto-complete-widget.js +4 -8
- package/lib/base/auto-complete/auto-complete-widget.js.map +1 -1
- package/lib/base/auto-complete/base-autocomplete-palette.js +1 -2
- package/lib/base/auto-complete/base-autocomplete-palette.js.map +1 -1
- package/lib/base/editor-context-service.js +4 -7
- package/lib/base/editor-context-service.js.map +1 -1
- package/lib/base/feedback/css-feedback.js +1 -1
- package/lib/base/feedback/css-feedback.js.map +1 -1
- package/lib/base/feedback/feedback-action-dispatcher.js +4 -6
- package/lib/base/feedback/feedback-action-dispatcher.js.map +1 -1
- package/lib/base/feedback/feedback-command.js +1 -2
- package/lib/base/feedback/feedback-command.js.map +1 -1
- package/lib/base/feedback/feedback-emitter.js +1 -2
- package/lib/base/feedback/feedback-emitter.js.map +1 -1
- package/lib/base/feedback/set-model-command.js +1 -2
- package/lib/base/feedback/set-model-command.js.map +1 -1
- package/lib/base/feedback/update-model-command.js +1 -2
- package/lib/base/feedback/update-model-command.js.map +1 -1
- package/lib/base/model/diagram-loader.js +4 -6
- package/lib/base/model/diagram-loader.js.map +1 -1
- package/lib/base/model/glsp-model-source.d.ts +1 -1
- package/lib/base/model/glsp-model-source.d.ts.map +1 -1
- package/lib/base/model/glsp-model-source.js +3 -5
- package/lib/base/model/glsp-model-source.js.map +1 -1
- package/lib/base/model/model-registry.js +1 -2
- package/lib/base/model/model-registry.js.map +1 -1
- package/lib/base/selection-service.js +3 -3
- package/lib/base/selection-service.js.map +1 -1
- package/lib/base/shortcuts/available-shortcuts-extension.js +3 -2
- package/lib/base/shortcuts/available-shortcuts-extension.js.map +1 -1
- package/lib/base/shortcuts/available-shortcuts-tool.js +3 -2
- package/lib/base/shortcuts/available-shortcuts-tool.js.map +1 -1
- package/lib/base/tool-manager/tool-manager.js +1 -1
- package/lib/base/tool-manager/tool-manager.js.map +1 -1
- package/lib/base/ui-extension/ui-extension.js +4 -6
- package/lib/base/ui-extension/ui-extension.js.map +1 -1
- package/lib/features/accessibility/edge-autocomplete/edge-autocomplete-palette.js +12 -17
- package/lib/features/accessibility/edge-autocomplete/edge-autocomplete-palette.js.map +1 -1
- package/lib/features/accessibility/edge-autocomplete/edge-autocomplete-tool.js +3 -2
- package/lib/features/accessibility/edge-autocomplete/edge-autocomplete-tool.js.map +1 -1
- package/lib/features/accessibility/element-navigation/diagram-navigation-tool.js +11 -15
- package/lib/features/accessibility/element-navigation/diagram-navigation-tool.js.map +1 -1
- package/lib/features/accessibility/element-navigation/left-right-top-bottom-navigator.js +2 -3
- package/lib/features/accessibility/element-navigation/left-right-top-bottom-navigator.js.map +1 -1
- package/lib/features/accessibility/element-navigation/local-element-navigator.js +2 -3
- package/lib/features/accessibility/element-navigation/local-element-navigator.js.map +1 -1
- package/lib/features/accessibility/focus-tracker/focus-tracker-tool.js +5 -4
- package/lib/features/accessibility/focus-tracker/focus-tracker-tool.js.map +1 -1
- package/lib/features/accessibility/global-keylistener-tool.js +4 -3
- package/lib/features/accessibility/global-keylistener-tool.js.map +1 -1
- package/lib/features/accessibility/keyboard-grid/keyboard-grid-search-palette.js +3 -2
- package/lib/features/accessibility/keyboard-grid/keyboard-grid-search-palette.js.map +1 -1
- package/lib/features/accessibility/keyboard-tool-palette/keyboard-tool-palette.js +5 -7
- package/lib/features/accessibility/keyboard-tool-palette/keyboard-tool-palette.js.map +1 -1
- package/lib/features/accessibility/toast/toast-handler.js +2 -4
- package/lib/features/accessibility/toast/toast-handler.js.map +1 -1
- package/lib/features/accessibility/toast/toast-tool.js +3 -2
- package/lib/features/accessibility/toast/toast-tool.js.map +1 -1
- package/lib/features/accessibility/view-key-tools/deselect-key-tool.js +3 -2
- package/lib/features/accessibility/view-key-tools/deselect-key-tool.js.map +1 -1
- package/lib/features/accessibility/view-key-tools/grid-cell-zoom-key-tool.js +4 -3
- package/lib/features/accessibility/view-key-tools/grid-cell-zoom-key-tool.js.map +1 -1
- package/lib/features/bounds/freeform-layout.js +1 -1
- package/lib/features/bounds/freeform-layout.js.map +1 -1
- package/lib/features/bounds/glsp-hidden-bounds-updater.d.ts +31 -1
- package/lib/features/bounds/glsp-hidden-bounds-updater.d.ts.map +1 -1
- package/lib/features/bounds/glsp-hidden-bounds-updater.js +119 -58
- package/lib/features/bounds/glsp-hidden-bounds-updater.js.map +1 -1
- package/lib/features/bounds/hbox-layout.js +7 -10
- package/lib/features/bounds/hbox-layout.js.map +1 -1
- package/lib/features/bounds/layout-data.js +2 -4
- package/lib/features/bounds/layout-data.js.map +1 -1
- package/lib/features/bounds/local-bounds.js +3 -4
- package/lib/features/bounds/local-bounds.js.map +1 -1
- package/lib/features/bounds/set-bounds-feedback-command.js +2 -3
- package/lib/features/bounds/set-bounds-feedback-command.js.map +1 -1
- package/lib/features/bounds/vbox-layout.js +7 -10
- package/lib/features/bounds/vbox-layout.js.map +1 -1
- package/lib/features/change-bounds/model.js +1 -1
- package/lib/features/change-bounds/model.js.map +1 -1
- package/lib/features/change-bounds/move-element-handler.js +1 -2
- package/lib/features/change-bounds/move-element-handler.js.map +1 -1
- package/lib/features/change-bounds/movement-restrictor.js +1 -2
- package/lib/features/change-bounds/movement-restrictor.js.map +1 -1
- package/lib/features/change-bounds/point-position-updater.js +1 -1
- package/lib/features/change-bounds/point-position-updater.js.map +1 -1
- package/lib/features/change-bounds/resize/resize-default-tool.js +4 -3
- package/lib/features/change-bounds/resize/resize-default-tool.js.map +1 -1
- package/lib/features/change-bounds/resize/resize-handler.js +1 -2
- package/lib/features/change-bounds/resize/resize-handler.js.map +1 -1
- package/lib/features/change-bounds/resize/resize-tool.js +4 -3
- package/lib/features/change-bounds/resize/resize-tool.js.map +1 -1
- package/lib/features/change-bounds/tracker.js +1 -2
- package/lib/features/change-bounds/tracker.js.map +1 -1
- package/lib/features/command-palette/command-palette-tool.js +3 -2
- package/lib/features/command-palette/command-palette-tool.js.map +1 -1
- package/lib/features/command-palette/command-palette.js +2 -3
- package/lib/features/command-palette/command-palette.js.map +1 -1
- package/lib/features/context-menu/glsp-context-menu-mouse-listener.js +2 -3
- package/lib/features/context-menu/glsp-context-menu-mouse-listener.js.map +1 -1
- package/lib/features/copy-paste/copy-paste-handler.d.ts +1 -1
- package/lib/features/copy-paste/copy-paste-handler.d.ts.map +1 -1
- package/lib/features/copy-paste/copy-paste-handler.js +3 -5
- package/lib/features/copy-paste/copy-paste-handler.js.map +1 -1
- package/lib/features/copy-paste/copy-paste-standalone.js +6 -9
- package/lib/features/copy-paste/copy-paste-standalone.js.map +1 -1
- package/lib/features/debug/debug-bounds-decorator.js +9 -12
- package/lib/features/debug/debug-bounds-decorator.js.map +1 -1
- package/lib/features/debug/debug-model.js +1 -1
- package/lib/features/debug/debug-model.js.map +1 -1
- package/lib/features/decoration/decoration-placer.js +3 -2
- package/lib/features/decoration/decoration-placer.js.map +1 -1
- package/lib/features/element-template/add-template-element.d.ts +6 -1
- package/lib/features/element-template/add-template-element.d.ts.map +1 -1
- package/lib/features/element-template/add-template-element.js +17 -5
- package/lib/features/element-template/add-template-element.js.map +1 -1
- package/lib/features/element-template/mouse-tracking-element-position-listener.js +1 -1
- package/lib/features/element-template/mouse-tracking-element-position-listener.js.map +1 -1
- package/lib/features/element-template/remove-template-element.js +1 -1
- package/lib/features/element-template/remove-template-element.js.map +1 -1
- package/lib/features/export/default-png-diagram-exporter.js +4 -7
- package/lib/features/export/default-png-diagram-exporter.js.map +1 -1
- package/lib/features/export/diagram-export-postprocessor.js +1 -2
- package/lib/features/export/diagram-export-postprocessor.js.map +1 -1
- package/lib/features/export/glsp-svg-exporter.d.ts.map +1 -1
- package/lib/features/export/glsp-svg-exporter.js +5 -6
- package/lib/features/export/glsp-svg-exporter.js.map +1 -1
- package/lib/features/export/request-export-command.js +1 -1
- package/lib/features/export/request-export-command.js.map +1 -1
- package/lib/features/grid/grid-model.js +1 -1
- package/lib/features/grid/grid-model.js.map +1 -1
- package/lib/features/helper-lines/helper-line-feedback.js +7 -8
- package/lib/features/helper-lines/helper-line-feedback.js.map +1 -1
- package/lib/features/helper-lines/model.d.ts +1 -1
- package/lib/features/helper-lines/model.d.ts.map +1 -1
- package/lib/features/helper-lines/model.js +3 -4
- package/lib/features/helper-lines/model.js.map +1 -1
- package/lib/features/hints/type-hint-provider.js +3 -5
- package/lib/features/hints/type-hint-provider.js.map +1 -1
- package/lib/features/label-edit/edit-label-tool.js +3 -2
- package/lib/features/label-edit/edit-label-tool.js.map +1 -1
- package/lib/features/label-edit-ui/label-edit-ui.js +2 -3
- package/lib/features/label-edit-ui/label-edit-ui.js.map +1 -1
- package/lib/features/navigation/navigation-target-resolver.js +1 -1
- package/lib/features/navigation/navigation-target-resolver.js.map +1 -1
- package/lib/features/routing/sticky-manhattan-anchors.js +9 -6
- package/lib/features/routing/sticky-manhattan-anchors.js.map +1 -1
- package/lib/features/routing/sticky-manhattan-edge-router.js +10 -12
- package/lib/features/routing/sticky-manhattan-edge-router.js.map +1 -1
- package/lib/features/search-palette/search-palette.js +3 -2
- package/lib/features/search-palette/search-palette.js.map +1 -1
- package/lib/features/search-palette/suggestions/edge-element-suggestions.js +2 -3
- package/lib/features/search-palette/suggestions/edge-element-suggestions.js.map +1 -1
- package/lib/features/search-palette/suggestions/named-element-suggestions.js +8 -11
- package/lib/features/search-palette/suggestions/named-element-suggestions.js.map +1 -1
- package/lib/features/select/select-feedback-command.js +1 -1
- package/lib/features/select/select-feedback-command.js.map +1 -1
- package/lib/features/select/select-mouse-listener.js +1 -2
- package/lib/features/select/select-mouse-listener.js.map +1 -1
- package/lib/features/status/status-overlay.js +4 -4
- package/lib/features/status/status-overlay.js.map +1 -1
- package/lib/features/tool-palette/tool-palette.d.ts.map +1 -1
- package/lib/features/tool-palette/tool-palette.js +16 -23
- package/lib/features/tool-palette/tool-palette.js.map +1 -1
- package/lib/features/tools/change-bounds/change-bounds-manager.js +4 -6
- package/lib/features/tools/change-bounds/change-bounds-manager.js.map +1 -1
- package/lib/features/tools/change-bounds/change-bounds-tool-feedback.js +3 -4
- package/lib/features/tools/change-bounds/change-bounds-tool-feedback.js.map +1 -1
- package/lib/features/tools/change-bounds/change-bounds-tool-move-feedback.js +4 -8
- package/lib/features/tools/change-bounds/change-bounds-tool-move-feedback.js.map +1 -1
- package/lib/features/tools/change-bounds/change-bounds-tool.js +6 -6
- package/lib/features/tools/change-bounds/change-bounds-tool.js.map +1 -1
- package/lib/features/tools/change-bounds/change-bounds-tracker.js +7 -10
- package/lib/features/tools/change-bounds/change-bounds-tracker.js.map +1 -1
- package/lib/features/tools/deletion/delete-tool.js +6 -4
- package/lib/features/tools/deletion/delete-tool.js.map +1 -1
- package/lib/features/tools/edge-creation/dangling-edge-feedback.d.ts +1 -1
- package/lib/features/tools/edge-creation/dangling-edge-feedback.d.ts.map +1 -1
- package/lib/features/tools/edge-creation/dangling-edge-feedback.js +7 -5
- package/lib/features/tools/edge-creation/dangling-edge-feedback.js.map +1 -1
- package/lib/features/tools/edge-creation/edge-creation-tool.js +5 -6
- package/lib/features/tools/edge-creation/edge-creation-tool.js.map +1 -1
- package/lib/features/tools/edge-creation/view.js +1 -2
- package/lib/features/tools/edge-creation/view.js.map +1 -1
- package/lib/features/tools/edge-edit/edge-edit-tool-feedback.d.ts +1 -1
- package/lib/features/tools/edge-edit/edge-edit-tool-feedback.d.ts.map +1 -1
- package/lib/features/tools/edge-edit/edge-edit-tool-feedback.js +8 -5
- package/lib/features/tools/edge-edit/edge-edit-tool-feedback.js.map +1 -1
- package/lib/features/tools/edge-edit/edge-edit-tool.js +3 -2
- package/lib/features/tools/edge-edit/edge-edit-tool.js.map +1 -1
- package/lib/features/tools/marquee-selection/marquee-mouse-tool.js +3 -2
- package/lib/features/tools/marquee-selection/marquee-mouse-tool.js.map +1 -1
- package/lib/features/tools/marquee-selection/marquee-tool-feedback.js +2 -2
- package/lib/features/tools/marquee-selection/marquee-tool-feedback.js.map +1 -1
- package/lib/features/tools/marquee-selection/marquee-tool.js +3 -2
- package/lib/features/tools/marquee-selection/marquee-tool.js.map +1 -1
- package/lib/features/tools/marquee-selection/model.d.ts +1 -1
- package/lib/features/tools/marquee-selection/model.d.ts.map +1 -1
- package/lib/features/tools/marquee-selection/model.js +3 -2
- package/lib/features/tools/marquee-selection/model.js.map +1 -1
- package/lib/features/tools/node-creation/container-manager.js +3 -4
- package/lib/features/tools/node-creation/container-manager.js.map +1 -1
- package/lib/features/tools/node-creation/insert-indicator.d.ts +1 -1
- package/lib/features/tools/node-creation/insert-indicator.d.ts.map +1 -1
- package/lib/features/tools/node-creation/insert-indicator.js +5 -5
- package/lib/features/tools/node-creation/insert-indicator.js.map +1 -1
- package/lib/features/tools/node-creation/node-creation-tool.js +5 -6
- package/lib/features/tools/node-creation/node-creation-tool.js.map +1 -1
- package/lib/features/tools/node-creation/node-creation-views.js +1 -2
- package/lib/features/tools/node-creation/node-creation-views.js.map +1 -1
- package/lib/features/validation/issue-marker.d.ts +2 -2
- package/lib/features/validation/issue-marker.d.ts.map +1 -1
- package/lib/features/validation/issue-marker.js +7 -2
- package/lib/features/validation/issue-marker.js.map +1 -1
- package/lib/features/validation/marker-navigator.js +1 -1
- package/lib/features/validation/marker-navigator.js.map +1 -1
- package/lib/features/validation/validate.js +4 -6
- package/lib/features/validation/validate.js.map +1 -1
- package/lib/features/viewport/origin-viewport.js +1 -1
- package/lib/features/viewport/origin-viewport.js.map +1 -1
- package/lib/features/viewport/reposition.js +2 -3
- package/lib/features/viewport/reposition.js.map +1 -1
- package/lib/features/viewport/viewport-handler.js +2 -3
- package/lib/features/viewport/viewport-handler.js.map +1 -1
- package/lib/features/viewport/viewport-tool.js +4 -3
- package/lib/features/viewport/viewport-tool.js.map +1 -1
- package/lib/features/zorder/bring-to-front-command.js +1 -2
- package/lib/features/zorder/bring-to-front-command.js.map +1 -1
- package/lib/model.js +2 -2
- package/lib/model.js.map +1 -1
- package/lib/utils/argument-utils.js +5 -5
- package/lib/utils/argument-utils.js.map +1 -1
- package/lib/utils/gmodel-util.d.ts +13 -1
- package/lib/utils/gmodel-util.d.ts.map +1 -1
- package/lib/utils/gmodel-util.js +15 -7
- package/lib/utils/gmodel-util.js.map +1 -1
- package/lib/utils/layout-utils.js +1 -2
- package/lib/utils/layout-utils.js.map +1 -1
- package/lib/views/glsp-projection-view.js +1 -2
- package/lib/views/glsp-projection-view.js.map +1 -1
- package/package.json +18 -17
- package/src/base/feedback/feedback-command.ts +1 -1
- package/src/base/model/glsp-model-source.ts +1 -1
- package/src/features/accessibility/README.md +5 -5
- package/src/features/accessibility/keyboard-tool-palette/keyboard-tool-palette.ts +1 -1
- package/src/features/bounds/glsp-hidden-bounds-updater.ts +133 -60
- package/src/features/copy-paste/copy-paste-handler.ts +3 -3
- package/src/features/element-template/add-template-element.ts +17 -2
- package/src/features/export/glsp-svg-exporter.ts +2 -2
- package/src/features/helper-lines/model.ts +4 -5
- package/src/features/tool-palette/tool-palette.ts +2 -4
- package/src/features/tools/edge-creation/dangling-edge-feedback.ts +4 -2
- package/src/features/tools/edge-edit/edge-edit-tool-feedback.ts +5 -3
- package/src/features/tools/marquee-selection/model.ts +3 -2
- package/src/features/tools/node-creation/insert-indicator.ts +5 -5
- package/src/features/validation/issue-marker.ts +7 -2
- package/src/utils/gmodel-util.ts +23 -1
- package/src/base/action-dispatcher.spec.ts +0 -366
- package/src/base/feedback/feedback-emitter.spec.ts +0 -176
- package/src/base/model/model-initialization-constraint.spec.ts +0 -95
- package/src/base/selection-service.spec.ts +0 -318
- package/src/default-modules.spec.ts +0 -56
- package/src/features/bounds/freeform-layout.spec.ts +0 -216
- package/src/features/bounds/hbox-layout.spec.ts +0 -170
- package/src/features/bounds/layouter-test-util.spec.ts +0 -127
- package/src/features/bounds/vbox-layout.spec.ts +0 -170
- package/src/features/change-bounds/point-position-updater.spec.ts +0 -81
- package/src/features/grid/grid-snapper.spec.ts +0 -30
- package/src/features/hints/type-hint-provider.spec.ts +0 -360
- package/src/features/layout/layout-elements-action.spec.ts +0 -426
- package/src/features/navigation/navigation-target-resolver.spec.ts +0 -56
- package/src/features/routing/sticky-manhattan-edge-router.spec.ts +0 -212
- package/src/features/tools/marquee-selection/marquee-behavior.spec.ts +0 -176
- package/src/features/validation/marker-navigator.spec.ts +0 -183
- 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
|
-
});
|