bpmn-js 0.20.6 → 0.22.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.
Files changed (410) hide show
  1. package/.eslintrc +33 -33
  2. package/.npmignore +8 -8
  3. package/.travis.yml +19 -17
  4. package/.wiredeps +88 -88
  5. package/CONTRIBUTING.md +55 -55
  6. package/Gruntfile.js +129 -129
  7. package/LICENSE +22 -22
  8. package/README.md +113 -113
  9. package/assets/bpmn-font/css/bpmn-embedded.css +159 -159
  10. package/assets/bpmn-font/css/bpmn.css +161 -161
  11. package/assets/bpmn-font/font/bpmn.svg +116 -116
  12. package/docs/architecture/overview.svg +48 -48
  13. package/docs/project/COMMIT_MESSAGES.md +82 -82
  14. package/docs/project/SETUP.md +66 -66
  15. package/docs/project/setup-alternative.sh +41 -41
  16. package/docs/project/setup.bat +45 -45
  17. package/docs/project/setup.sh +40 -40
  18. package/docs/translations.json +97 -97
  19. package/lib/Modeler.js +208 -208
  20. package/lib/NavigatedViewer.js +27 -27
  21. package/lib/Viewer.js +503 -503
  22. package/lib/core/index.js +5 -5
  23. package/lib/draw/BpmnRenderer.js +1934 -1934
  24. package/lib/draw/PathMap.js +478 -478
  25. package/lib/draw/index.js +5 -5
  26. package/lib/features/auto-resize/BpmnAutoResize.js +34 -34
  27. package/lib/features/auto-resize/BpmnAutoResizeProvider.js +51 -51
  28. package/lib/features/auto-resize/index.js +5 -5
  29. package/lib/features/context-pad/ContextPadProvider.js +374 -374
  30. package/lib/features/context-pad/index.js +11 -11
  31. package/lib/features/copy-paste/BpmnCopyPaste.js +157 -154
  32. package/lib/features/copy-paste/index.js +7 -7
  33. package/lib/features/distribute-elements/BpmnDistributeElements.js +34 -34
  34. package/lib/features/distribute-elements/index.js +7 -7
  35. package/lib/features/editor-actions/BpmnEditorActions.js +130 -130
  36. package/lib/features/editor-actions/index.js +15 -15
  37. package/lib/features/global-connect/BpmnGlobalConnect.js +49 -49
  38. package/lib/features/global-connect/index.js +7 -7
  39. package/lib/features/keyboard/BpmnKeyBindings.js +72 -72
  40. package/lib/features/keyboard/index.js +7 -7
  41. package/lib/features/label-editing/LabelEditingPreview.js +122 -0
  42. package/lib/features/label-editing/LabelEditingProvider.js +292 -193
  43. package/lib/features/label-editing/LabelUtil.js +43 -43
  44. package/lib/features/label-editing/cmd/UpdateLabelHandler.js +116 -112
  45. package/lib/features/label-editing/index.js +14 -9
  46. package/lib/features/modeling/BpmnFactory.js +97 -97
  47. package/lib/features/modeling/BpmnLayouter.js +191 -191
  48. package/lib/features/modeling/BpmnUpdater.js +692 -688
  49. package/lib/features/modeling/ElementFactory.js +218 -218
  50. package/lib/features/modeling/Modeling.js +183 -183
  51. package/lib/features/modeling/behavior/AppendBehavior.js +42 -42
  52. package/lib/features/modeling/behavior/CopyPasteBehavior.js +69 -69
  53. package/lib/features/modeling/behavior/CreateBoundaryEventBehavior.js +51 -51
  54. package/lib/features/modeling/behavior/CreateDataObjectBehavior.js +37 -37
  55. package/lib/features/modeling/behavior/CreateParticipantBehavior.js +91 -91
  56. package/lib/features/modeling/behavior/DataInputAssociationBehavior.js +151 -151
  57. package/lib/features/modeling/behavior/DeleteLaneBehavior.js +107 -107
  58. package/lib/features/modeling/behavior/DropOnFlowBehavior.js +165 -131
  59. package/lib/features/modeling/behavior/ImportDockingFix.js +80 -80
  60. package/lib/features/modeling/behavior/LabelBehavior.js +222 -222
  61. package/lib/features/modeling/behavior/ModelingFeedback.js +50 -50
  62. package/lib/features/modeling/behavior/RemoveElementBehavior.js +73 -73
  63. package/lib/features/modeling/behavior/RemoveParticipantBehavior.js +50 -50
  64. package/lib/features/modeling/behavior/ReplaceConnectionBehavior.js +128 -128
  65. package/lib/features/modeling/behavior/ReplaceElementBehaviour.js +118 -116
  66. package/lib/features/modeling/behavior/ResizeLaneBehavior.js +59 -59
  67. package/lib/features/modeling/behavior/ToggleElementCollapseBehaviour.js +138 -138
  68. package/lib/features/modeling/behavior/UnclaimIdBehavior.js +27 -27
  69. package/lib/features/modeling/behavior/UnsetDefaultFlowBehavior.js +54 -54
  70. package/lib/features/modeling/behavior/UpdateFlowNodeRefsBehavior.js +156 -156
  71. package/lib/features/modeling/behavior/index.js +44 -44
  72. package/lib/features/modeling/behavior/util/GeometricUtil.js +129 -129
  73. package/lib/features/modeling/behavior/util/LabelLayoutUtil.js +218 -218
  74. package/lib/features/modeling/behavior/util/LineAttachmentUtil.js +233 -233
  75. package/lib/features/modeling/behavior/util/LineIntersect.js +36 -36
  76. package/lib/features/modeling/cmd/AddLaneHandler.js +83 -83
  77. package/lib/features/modeling/cmd/IdClaimHandler.js +41 -41
  78. package/lib/features/modeling/cmd/ResizeLaneHandler.js +125 -125
  79. package/lib/features/modeling/cmd/SplitLaneHandler.js +82 -82
  80. package/lib/features/modeling/cmd/UpdateCanvasRootHandler.js +78 -78
  81. package/lib/features/modeling/cmd/UpdateFlowNodeRefsHandler.js +185 -185
  82. package/lib/features/modeling/cmd/UpdatePropertiesHandler.js +264 -264
  83. package/lib/features/modeling/index.js +23 -23
  84. package/lib/features/modeling/util/LaneUtil.js +157 -157
  85. package/lib/features/modeling/util/ModelingUtil.js +48 -48
  86. package/lib/features/ordering/BpmnOrderingProvider.js +147 -147
  87. package/lib/features/ordering/index.js +6 -6
  88. package/lib/features/palette/PaletteProvider.js +158 -158
  89. package/lib/features/palette/index.js +13 -13
  90. package/lib/features/popup-menu/ReplaceMenuProvider.js +479 -479
  91. package/lib/features/popup-menu/index.js +7 -7
  92. package/lib/features/popup-menu/util/TypeUtil.js +41 -41
  93. package/lib/features/replace/BpmnReplace.js +197 -197
  94. package/lib/features/replace/ReplaceOptions.js +787 -787
  95. package/lib/features/replace/index.js +7 -7
  96. package/lib/features/replace-preview/BpmnReplacePreview.js +113 -113
  97. package/lib/features/replace-preview/index.js +5 -5
  98. package/lib/features/rules/BpmnRules.js +807 -806
  99. package/lib/features/rules/index.js +7 -7
  100. package/lib/features/search/BpmnSearchProvider.js +128 -128
  101. package/lib/features/search/index.js +7 -7
  102. package/lib/features/snapping/BpmnSnapping.js +511 -495
  103. package/lib/features/snapping/BpmnSnappingUtil.js +159 -159
  104. package/lib/features/snapping/index.js +3 -3
  105. package/lib/import/BpmnImporter.js +302 -302
  106. package/lib/import/BpmnTreeWalker.js +445 -445
  107. package/lib/import/Importer.js +69 -69
  108. package/lib/import/Util.js +8 -8
  109. package/lib/import/index.js +5 -5
  110. package/lib/util/DiUtil.js +60 -60
  111. package/lib/util/LabelUtil.js +139 -139
  112. package/lib/util/ModelUtil.js +31 -31
  113. package/lib/util/PoweredByUtil.js +82 -82
  114. package/lib/util/model/ModelCloneHelper.js +201 -201
  115. package/lib/util/model/ModelCloneUtils.js +35 -35
  116. package/package.json +22 -22
  117. package/resources/initial.bpmn +12 -12
  118. package/resources/screencast.gif +0 -0
  119. package/tasks/banner.txt +11 -11
  120. package/tasks/bundle.js +162 -162
  121. package/test/TestHelper.js +17 -17
  122. package/test/config/karma.unit.js +46 -46
  123. package/test/config/translation-reporter.js +48 -48
  124. package/test/fixtures/bpmn/align-elements.bpmn +136 -136
  125. package/test/fixtures/bpmn/basic.bpmn +17 -17
  126. package/test/fixtures/bpmn/boundary-events.bpmn +59 -59
  127. package/test/fixtures/bpmn/collaboration/collaboration-empty-participant.bpmn +13 -13
  128. package/test/fixtures/bpmn/collaboration/collaboration-message-flows.bpmn +89 -89
  129. package/test/fixtures/bpmn/collaboration/collaboration-participant.bpmn +59 -59
  130. package/test/fixtures/bpmn/collaboration/process-empty.bpmn +6 -6
  131. package/test/fixtures/bpmn/collaboration/process.bpmn +47 -47
  132. package/test/fixtures/bpmn/collaboration-data-items.bpmn +81 -81
  133. package/test/fixtures/bpmn/collaboration-message-flows.bpmn +82 -82
  134. package/test/fixtures/bpmn/collaboration-sequence-flows.bpmn +83 -83
  135. package/test/fixtures/bpmn/collaboration.bpmn +50 -50
  136. package/test/fixtures/bpmn/complex.bpmn +2151 -2151
  137. package/test/fixtures/bpmn/conditions.bpmn +82 -82
  138. package/test/fixtures/bpmn/containers.bpmn +128 -128
  139. package/test/fixtures/bpmn/distribute-elements-filtering.bpmn +58 -58
  140. package/test/fixtures/bpmn/distribute-elements.bpmn +232 -232
  141. package/test/fixtures/bpmn/draw/activity-markers-combination.bpmn +141 -141
  142. package/test/fixtures/bpmn/draw/activity-markers-simple.bpmn +47 -47
  143. package/test/fixtures/bpmn/draw/activity-markers.bpmn +212 -212
  144. package/test/fixtures/bpmn/draw/associations.bpmn +55 -55
  145. package/test/fixtures/bpmn/draw/boundary-event-with-refnode.bpmn +81 -81
  146. package/test/fixtures/bpmn/draw/boundary-event-without-refnode.bpmn +81 -81
  147. package/test/fixtures/bpmn/draw/boundary-event-z-index.bpmn +82 -82
  148. package/test/fixtures/bpmn/draw/call-activity.bpmn +12 -12
  149. package/test/fixtures/bpmn/draw/colors.bpmn +411 -411
  150. package/test/fixtures/bpmn/draw/conditional-flow-default.bpmn +100 -100
  151. package/test/fixtures/bpmn/draw/conditional-flow-gateways.bpmn +72 -72
  152. package/test/fixtures/bpmn/draw/conditional-flow-typed-task.bpmn +33 -33
  153. package/test/fixtures/bpmn/draw/conditional-flow.bpmn +248 -248
  154. package/test/fixtures/bpmn/draw/data-objects.bpmn +265 -265
  155. package/test/fixtures/bpmn/draw/event-subprocesses-collapsed.bpmn +200 -200
  156. package/test/fixtures/bpmn/draw/event-subprocesses-expanded.bpmn +274 -274
  157. package/test/fixtures/bpmn/draw/events-interrupting.bpmn +370 -370
  158. package/test/fixtures/bpmn/draw/events.bpmn +374 -374
  159. package/test/fixtures/bpmn/draw/gateway-type-default.bpmn +45 -45
  160. package/test/fixtures/bpmn/draw/gateways.bpmn +61 -61
  161. package/test/fixtures/bpmn/draw/group.bpmn +24 -24
  162. package/test/fixtures/bpmn/draw/message-marker.bpmn +112 -112
  163. package/test/fixtures/bpmn/draw/pools-with-collection-marker.bpmn +104 -104
  164. package/test/fixtures/bpmn/draw/pools.bpmn +82 -82
  165. package/test/fixtures/bpmn/draw/task-types.bpmn +77 -77
  166. package/test/fixtures/bpmn/draw/text-annotation.bpmn +71 -71
  167. package/test/fixtures/bpmn/draw/xor.bpmn +45 -45
  168. package/test/fixtures/bpmn/empty-definitions.bpmn +4 -4
  169. package/test/fixtures/bpmn/error/categoryValue.bpmn +26 -26
  170. package/test/fixtures/bpmn/error/di-plane-no-bpmn-element.bpmn +9 -9
  171. package/test/fixtures/bpmn/error/duplicate-ids.bpmn +14 -14
  172. package/test/fixtures/bpmn/error/invalid-child.bpmn +6 -6
  173. package/test/fixtures/bpmn/error/missing-namespace.bpmn +12 -12
  174. package/test/fixtures/bpmn/event-sub-processes.bpmn +47 -47
  175. package/test/fixtures/bpmn/extension/camunda.bpmn +52 -52
  176. package/test/fixtures/bpmn/extension/custom-override.bpmn +53 -53
  177. package/test/fixtures/bpmn/extension/custom.bpmn +53 -53
  178. package/test/fixtures/bpmn/features/copy-paste/basic.bpmn +111 -111
  179. package/test/fixtures/bpmn/features/copy-paste/collaboration-multiple.bpmn +102 -102
  180. package/test/fixtures/bpmn/features/copy-paste/collaboration.bpmn +74 -74
  181. package/test/fixtures/bpmn/features/copy-paste/data-associations.bpmn +61 -61
  182. package/test/fixtures/bpmn/features/copy-paste/properties.bpmn +43 -43
  183. package/test/fixtures/bpmn/features/drop/drop.bpmn +41 -41
  184. package/test/fixtures/bpmn/features/drop/recursive-task.bpmn +37 -37
  185. package/test/fixtures/bpmn/features/label-editing/labels.bpmn +178 -248
  186. package/test/fixtures/bpmn/features/modeling/update-label.bpmn +24 -24
  187. package/test/fixtures/bpmn/features/replace/01_replace.bpmn +193 -193
  188. package/test/fixtures/bpmn/features/replace/association-gateways.bpmn +173 -173
  189. package/test/fixtures/bpmn/features/replace/cancel-events.bpmn +49 -49
  190. package/test/fixtures/bpmn/features/replace/clone-properties.bpmn +141 -141
  191. package/test/fixtures/bpmn/features/replace/connection.bpmn +42 -42
  192. package/test/fixtures/bpmn/features/rules/event-based-gateway-outgoing-edge.bpmn +72 -72
  193. package/test/fixtures/bpmn/features/rules/link-event.bpmn +35 -35
  194. package/test/fixtures/bpmn/features/rules/text-annotation-association.bpmn +30 -30
  195. package/test/fixtures/bpmn/flow-markers.bpmn +212 -212
  196. package/test/fixtures/bpmn/import/boundaryEvent.bpmn +33 -33
  197. package/test/fixtures/bpmn/import/collaboration.bpmn +50 -50
  198. package/test/fixtures/bpmn/import/collapsed/collaboration.bpmn +76 -76
  199. package/test/fixtures/bpmn/import/collapsed/process.bpmn +84 -84
  200. package/test/fixtures/bpmn/import/collapsed/processWithChildren.bpmn +273 -273
  201. package/test/fixtures/bpmn/import/default-attrs.bpmn +24 -24
  202. package/test/fixtures/bpmn/import/error/boundaryEvent-invalidAttachToRef.bpmn +30 -30
  203. package/test/fixtures/bpmn/import/error/boundaryEvent-missingAttachToRef.bpmn +33 -33
  204. package/test/fixtures/bpmn/import/error/dangling-process-message-flow.bpmn +81 -81
  205. package/test/fixtures/bpmn/import/error/invalid-flow-element.bpmn +35 -35
  206. package/test/fixtures/bpmn/import/error/multiple-dis.bpmn +23 -23
  207. package/test/fixtures/bpmn/import/labels/collaboration-message-flows.bpmn +41 -41
  208. package/test/fixtures/bpmn/import/labels/collaboration.bpmn +72 -72
  209. package/test/fixtures/bpmn/import/labels/embedded.bpmn +39 -39
  210. package/test/fixtures/bpmn/import/labels/external-no-di.bpmn +42 -42
  211. package/test/fixtures/bpmn/import/labels/external.bpmn +69 -69
  212. package/test/fixtures/bpmn/import/position/position-testcase.bpmn +57 -57
  213. package/test/fixtures/bpmn/import/process.bpmn +60 -60
  214. package/test/fixtures/bpmn/nested-subprocesses.bpmn +118 -118
  215. package/test/fixtures/bpmn/sequence-flows.bpmn +60 -60
  216. package/test/fixtures/bpmn/simple-cropping.bpmn +84 -84
  217. package/test/fixtures/bpmn/simple-resizable.bpmn +50 -50
  218. package/test/fixtures/bpmn/simple.bpmn +60 -60
  219. package/test/fixtures/json/model/camunda.json +1042 -1042
  220. package/test/fixtures/json/model/custom-override.json +39 -39
  221. package/test/fixtures/json/model/custom.json +39 -39
  222. package/test/helper/TranslationCollector.js +17 -17
  223. package/test/helper/index.js +249 -249
  224. package/test/integration/CustomElementsSpec.js +223 -223
  225. package/test/integration/ReimportSpec.js +89 -89
  226. package/test/integration/SimpleModelingSpec.js +29 -29
  227. package/test/integration/custom-elements/CustomElementFactory.js +77 -77
  228. package/test/integration/custom-elements/CustomRenderer.js +151 -151
  229. package/test/integration/custom-elements/CustomRules.js +148 -148
  230. package/test/integration/custom-elements/CustomUpdater.js +115 -115
  231. package/test/integration/custom-elements/index.js +7 -7
  232. package/test/integration/model/BpmnModdleSpec.js +65 -65
  233. package/test/matchers/JSONMatcher.js +19 -19
  234. package/test/spec/ModelerSpec.js +401 -401
  235. package/test/spec/NavigatedViewerSpec.js +58 -58
  236. package/test/spec/ViewerSpec.js +977 -977
  237. package/test/spec/draw/BpmnRendererSpec.js +311 -311
  238. package/test/spec/environment/MockingSpec.js +53 -53
  239. package/test/spec/features/align-elements/BpmnAlignElementsSpec.js +137 -137
  240. package/test/spec/features/auto-resize/AutoResize.lanes.bpmn +54 -54
  241. package/test/spec/features/auto-resize/AutoResize.multi-selection.bpmn +22 -22
  242. package/test/spec/features/auto-resize/AutoResize.nested-sub-processes.bpmn +47 -47
  243. package/test/spec/features/auto-resize/AutoResize.participant.bpmn +38 -38
  244. package/test/spec/features/auto-resize/AutoResize.space-tool.bpmn +38 -38
  245. package/test/spec/features/auto-resize/AutoResize.sub-processes.bpmn +37 -37
  246. package/test/spec/features/auto-resize/AutoResizeSpec.js +607 -607
  247. package/test/spec/features/context-pad/ContextPad.activation.bpmn +51 -51
  248. package/test/spec/features/context-pad/ContextPadProviderSpec.js +440 -440
  249. package/test/spec/features/copy-paste/BpmnCopyPasteSpec.js +763 -725
  250. package/test/spec/features/copy-paste/DescriptorTree.js +58 -58
  251. package/test/spec/features/distribute-elements/BpmnDistributeElementsSpec.js +113 -113
  252. package/test/spec/features/editor-actions/BpmnEditorActionsSpec.js +72 -72
  253. package/test/spec/features/global-connect/BpmnGlobalConnectSpec.js +61 -61
  254. package/test/spec/features/keyboard/BpmnKeyBindingsSpec.js +142 -142
  255. package/test/spec/features/label-editing/LabelEditingPreviewSpec.js +133 -0
  256. package/test/spec/features/label-editing/LabelEditingProviderSpec.js +636 -601
  257. package/test/spec/features/label-editing/TouchIntegrationSpec.js +40 -40
  258. package/test/spec/features/modeling/AppendShapeSpec.js +332 -332
  259. package/test/spec/features/modeling/BendpointsSpec.js +25 -25
  260. package/test/spec/features/modeling/BpmnFactorySpec.js +73 -73
  261. package/test/spec/features/modeling/BpmnUpdater.bpmn +99 -99
  262. package/test/spec/features/modeling/BpmnUpdaterSpec.js +79 -79
  263. package/test/spec/features/modeling/CreateConnectionSpec.js +171 -171
  264. package/test/spec/features/modeling/DeleteConnectionSpec.js +75 -75
  265. package/test/spec/features/modeling/DeleteParticipantSpec.js +97 -97
  266. package/test/spec/features/modeling/DeleteShapeSpec.js +75 -75
  267. package/test/spec/features/modeling/DropSpec.js +123 -123
  268. package/test/spec/features/modeling/IdClaim.bpmn +13 -13
  269. package/test/spec/features/modeling/IdClaimSpec.js +50 -50
  270. package/test/spec/features/modeling/LabelBoundsSpec.js +342 -340
  271. package/test/spec/features/modeling/LabelBoundsSpec.simple.bpmn +27 -27
  272. package/test/spec/features/modeling/LabelLayouting.initial.bpmn +37 -37
  273. package/test/spec/features/modeling/LabelLayouting.move.bpmn +99 -99
  274. package/test/spec/features/modeling/LabelLayouting.special.bpmn +76 -76
  275. package/test/spec/features/modeling/LabelLayoutingSpec.js +603 -603
  276. package/test/spec/features/modeling/MoveConnectionSpec.js +101 -101
  277. package/test/spec/features/modeling/MoveElements.flow-collaboration.bpmn +45 -45
  278. package/test/spec/features/modeling/MoveElementsSpec.js +70 -70
  279. package/test/spec/features/modeling/MoveRulesSpec.js +151 -151
  280. package/test/spec/features/modeling/MoveShapeSpec.js +353 -353
  281. package/test/spec/features/modeling/ResizeShapeSpec.js +73 -73
  282. package/test/spec/features/modeling/SpaceToolSpec.js +251 -251
  283. package/test/spec/features/modeling/UpdateAttachmentSpec.js +96 -96
  284. package/test/spec/features/modeling/UpdateLabelSpec.js +130 -130
  285. package/test/spec/features/modeling/UpdatePropertiesSpec.js +503 -503
  286. package/test/spec/features/modeling/append/TextAnnotationSpec.js +136 -136
  287. package/test/spec/features/modeling/behavior/CompensationAssociationBehavior.bpmn +26 -26
  288. package/test/spec/features/modeling/behavior/CompensationAssociationBehaviorSpec.js +43 -43
  289. package/test/spec/features/modeling/behavior/CreateBoundaryEventBehaviorSpec.js +58 -58
  290. package/test/spec/features/modeling/behavior/CreateParticipantBehaviorSpec.js +224 -224
  291. package/test/spec/features/modeling/behavior/DataInputAssociationBehavior.bpmn +33 -33
  292. package/test/spec/features/modeling/behavior/DataInputAssociationBehaviorSpec.js +146 -146
  293. package/test/spec/features/modeling/behavior/DataObjectBehavior.create-data-association.bpmn +21 -21
  294. package/test/spec/features/modeling/behavior/DataObjectBehavior.data-object-reference.bpmn +13 -13
  295. package/test/spec/features/modeling/behavior/DataObjectBehavior.remove-data-association.bpmn +41 -41
  296. package/test/spec/features/modeling/behavior/DataObjectBehaviorSpec.js +297 -297
  297. package/test/spec/features/modeling/behavior/DataStoreBehavior.bpmn +26 -26
  298. package/test/spec/features/modeling/behavior/DataStoreBehavior.connect.bpmn +57 -57
  299. package/test/spec/features/modeling/behavior/DataStoreBehaviorSpec.js +228 -228
  300. package/test/spec/features/modeling/behavior/DropOnFlowBehavior.bpmn +71 -67
  301. package/test/spec/features/modeling/behavior/DropOnFlowBehaviorSpec.js +591 -418
  302. package/test/spec/features/modeling/behavior/ImportDockingFix.bpmn +61 -61
  303. package/test/spec/features/modeling/behavior/ImportDockingFixSpec.js +37 -37
  304. package/test/spec/features/modeling/behavior/LabelBehaviorSpec.js +277 -277
  305. package/test/spec/features/modeling/behavior/ReconnectConnection.data-association.bpmn +41 -41
  306. package/test/spec/features/modeling/behavior/ReconnectConnectionSpec.js +120 -120
  307. package/test/spec/features/modeling/behavior/RemoveElementBehavior.bpmn +181 -181
  308. package/test/spec/features/modeling/behavior/RemoveElementBehavior.perpendicular.bpmn +159 -159
  309. package/test/spec/features/modeling/behavior/RemoveElementBehaviorSpec.js +251 -251
  310. package/test/spec/features/modeling/behavior/RemoveParticipantBehaviorSpec.js +125 -125
  311. package/test/spec/features/modeling/behavior/ReplaceConnectionBehavior.association.bpmn +26 -26
  312. package/test/spec/features/modeling/behavior/ReplaceConnectionBehavior.boundary-events.bpmn +40 -40
  313. package/test/spec/features/modeling/behavior/ReplaceConnectionBehavior.message-sequence-flow.bpmn +121 -121
  314. package/test/spec/features/modeling/behavior/ReplaceConnectionBehaviorSpec.js +439 -439
  315. package/test/spec/features/modeling/behavior/ReplaceElementBehaviourSpec.js +450 -450
  316. package/test/spec/features/modeling/behavior/ToggleElementCollapseBehaviourSpec.js +653 -653
  317. package/test/spec/features/modeling/behavior/UnsetDefaultFlowBehaviorSpec.bpmn +48 -48
  318. package/test/spec/features/modeling/behavior/UnsetDefaultFlowBehaviorSpec.js +77 -77
  319. package/test/spec/features/modeling/behavior/util/GeometricUtilSpec.js +127 -127
  320. package/test/spec/features/modeling/behavior/util/LabelLayoutUtilSpec.js +75 -75
  321. package/test/spec/features/modeling/behavior/util/LineAttachmentUtilSpec.js +294 -294
  322. package/test/spec/features/modeling/behavior/util/LineIntersectSpec.js +32 -32
  323. package/test/spec/features/modeling/lanes/AddLaneSpec.js +263 -263
  324. package/test/spec/features/modeling/lanes/DeleteLaneSpec.js +126 -126
  325. package/test/spec/features/modeling/lanes/ResizeLaneSpec.js +366 -366
  326. package/test/spec/features/modeling/lanes/SplitLaneSpec.js +216 -216
  327. package/test/spec/features/modeling/lanes/UpdateFlowNodeRefsSpec.js +271 -271
  328. package/test/spec/features/modeling/lanes/flowNodeRefs.bpmn +56 -56
  329. package/test/spec/features/modeling/lanes/lanes.bpmn +83 -83
  330. package/test/spec/features/modeling/lanes/participant-lane.bpmn +27 -27
  331. package/test/spec/features/modeling/lanes/participant-no-lane.bpmn +22 -22
  332. package/test/spec/features/modeling/layout/Helper.js +64 -64
  333. package/test/spec/features/modeling/layout/LayoutAssociationSpec.js +101 -101
  334. package/test/spec/features/modeling/layout/LayoutConnectionSpec.js +98 -98
  335. package/test/spec/features/modeling/layout/LayoutDataAssociationSpec.js +98 -98
  336. package/test/spec/features/modeling/layout/LayoutMessageFlowSpec.bpmn +119 -119
  337. package/test/spec/features/modeling/layout/LayoutMessageFlowSpec.js +313 -313
  338. package/test/spec/features/modeling/layout/LayoutSequenceFlowSpec.boundaryEvents.bpmn +65 -65
  339. package/test/spec/features/modeling/layout/LayoutSequenceFlowSpec.flowElements.bpmn +70 -70
  340. package/test/spec/features/modeling/layout/LayoutSequenceFlowSpec.js +323 -323
  341. package/test/spec/features/ordering/BpmnOrderingProviderSpec.js +231 -231
  342. package/test/spec/features/ordering/Helper.js +185 -185
  343. package/test/spec/features/ordering/ordering-start-event.bpmn +17 -17
  344. package/test/spec/features/ordering/ordering-subprocesses.bpmn +41 -41
  345. package/test/spec/features/ordering/ordering.bpmn +105 -105
  346. package/test/spec/features/palette/PaletteProviderSpec.js +33 -33
  347. package/test/spec/features/popup-menu/ReplaceMenuProvider.collapsedSubProcess.bpmn +13 -13
  348. package/test/spec/features/popup-menu/ReplaceMenuProvider.compensation-activity.bpmn +12 -12
  349. package/test/spec/features/popup-menu/ReplaceMenuProvider.conditionalFlows.bpmn +66 -66
  350. package/test/spec/features/popup-menu/ReplaceMenuProvider.defaultFlows.bpmn +126 -126
  351. package/test/spec/features/popup-menu/ReplaceMenuProvider.defaultFlowsFromComplexGateways.bpmn +48 -48
  352. package/test/spec/features/popup-menu/ReplaceMenuProvider.defaultFlowsFromInclusiveGateways.bpmn +48 -48
  353. package/test/spec/features/popup-menu/ReplaceMenuProviderSpec.js +1957 -1957
  354. package/test/spec/features/replace/BpmnReplace.collaboration.bpmn +70 -70
  355. package/test/spec/features/replace/BpmnReplace.compensation.bpmn +12 -12
  356. package/test/spec/features/replace/BpmnReplace.eventSubProcesses.bpmn +126 -126
  357. package/test/spec/features/replace/BpmnReplaceSpec.js +1302 -1302
  358. package/test/spec/features/replace/ReplaceRulesSpec.js +78 -78
  359. package/test/spec/features/replace/SubProcess-collapsed.bpmn +36 -36
  360. package/test/spec/features/replace-preview/BpmnReplacePreviewSpec.js +304 -304
  361. package/test/spec/features/rules/BpmnRules.boundaryEvent.bpmn +93 -93
  362. package/test/spec/features/rules/BpmnRules.collaboration-dataAssociation.bpmn +35 -35
  363. package/test/spec/features/rules/BpmnRules.collaboration-lanes.bpmn +79 -79
  364. package/test/spec/features/rules/BpmnRules.collaboration.bpmn +138 -138
  365. package/test/spec/features/rules/BpmnRules.compensation.bpmn +65 -65
  366. package/test/spec/features/rules/BpmnRules.dataAssociation.bpmn +33 -33
  367. package/test/spec/features/rules/BpmnRules.eventBasedGateway.bpmn +82 -82
  368. package/test/spec/features/rules/BpmnRules.messageFlow.bpmn +27 -27
  369. package/test/spec/features/rules/BpmnRules.multiSelectionPools.bpmn +37 -37
  370. package/test/spec/features/rules/BpmnRules.process.bpmn +91 -91
  371. package/test/spec/features/rules/BpmnRules.subProcess-dataAssociation.bpmn +44 -44
  372. package/test/spec/features/rules/BpmnRulesSpec.js +1468 -1424
  373. package/test/spec/features/rules/Helper.js +82 -82
  374. package/test/spec/features/search/BpmnSearchProviderSpec.js +158 -158
  375. package/test/spec/features/search/bpmn-search-collaboration.bpmn +106 -106
  376. package/test/spec/features/search/bpmn-search.bpmn +100 -100
  377. package/test/spec/features/snapping/BpmnSnapping.connect.bpmn +36 -36
  378. package/test/spec/features/snapping/BpmnSnapping.labels.bpmn +27 -27
  379. package/test/spec/features/snapping/BpmnSnapping.lanes-resize.bpmn +43 -43
  380. package/test/spec/features/snapping/BpmnSnapping.participant-resize.bpmn +50 -50
  381. package/test/spec/features/snapping/BpmnSnapping.sequenceFlow.bpmn +41 -0
  382. package/test/spec/features/snapping/BpmnSnapping.subProcess-resize.bpmn +21 -21
  383. package/test/spec/features/snapping/BpmnSnapping.textAnnotation-resize.bpmn +22 -22
  384. package/test/spec/features/snapping/BpmnSnappingSpec.js +824 -758
  385. package/test/spec/features/snapping/BpmnSnappingUtil.lanes-flowNodes.bpmn +82 -82
  386. package/test/spec/features/snapping/BpmnSnappingUtil.lanes.bpmn +35 -35
  387. package/test/spec/features/snapping/BpmnSnappingUtilSpec.js +285 -285
  388. package/test/spec/i18n/custom-translate/custom-translate.js +14 -14
  389. package/test/spec/i18n/custom-translate/index.js +2 -2
  390. package/test/spec/i18n/translateSpec.js +56 -56
  391. package/test/spec/import/ImporterSpec.js +428 -428
  392. package/test/spec/import/ModelWiringSpec.js +194 -194
  393. package/test/spec/import/elements/AssociationSpec.collaboration.bpmn +51 -51
  394. package/test/spec/import/elements/AssociationSpec.compensation.bpmn +28 -28
  395. package/test/spec/import/elements/AssociationSpec.data-association.bpmn +39 -39
  396. package/test/spec/import/elements/AssociationSpec.data-input-output.bpmn +40 -40
  397. package/test/spec/import/elements/AssociationSpec.events.bpmn +51 -51
  398. package/test/spec/import/elements/AssociationSpec.js +175 -175
  399. package/test/spec/import/elements/AssociationSpec.text-annotation.bpmn +37 -37
  400. package/test/spec/import/elements/CollapsedSpec.js +118 -118
  401. package/test/spec/import/elements/LabelSpec.js +85 -85
  402. package/test/spec/import/lane-flowNodes.bpmn +44 -44
  403. package/test/spec/import/lane-missing-flowNodeRef.bpmn +24 -24
  404. package/test/spec/util/ModelCloneHelperSpec.js +381 -381
  405. package/test/spec/util/ModelUtilSpec.js +65 -65
  406. package/test/spec/util/camunda-moddle.js +70 -70
  407. package/test/util/MockEvents.js +62 -62
  408. package/test/util/ModelingUtil.js +117 -117
  409. package/test/util/custom-rules/CustomRules.js +18 -18
  410. package/test/util/custom-rules/index.js +4 -4
@@ -1,418 +1,591 @@
1
- 'use strict';
2
-
3
- require('../../../../TestHelper');
4
-
5
- /* global inject, bootstrapModeler */
6
-
7
- var flatten = require('lodash/array/flatten');
8
-
9
- var coreModule = require('../../../../../lib/core'),
10
- moveModule = require('diagram-js/lib/features/move'),
11
- modelingModule = require('../../../../../lib/features/modeling'),
12
- noTouchInteractionModule = { touchInteractionEvents: ['value', null ] };
13
-
14
- var canvasEvent = require('../../../../util/MockEvents').createCanvasEvent;
15
-
16
-
17
- describe('modeling/behavior - drop on connection', function() {
18
-
19
- var diagramXML = require('./DropOnFlowBehavior.bpmn');
20
-
21
- var testModules = [ noTouchInteractionModule, moveModule, modelingModule, coreModule ];
22
-
23
- beforeEach(bootstrapModeler(diagramXML, { modules: testModules }));
24
-
25
-
26
- describe('rules', function() {
27
-
28
- it('should be allowed for an IntermediateThrowEvent', inject(function(elementRegistry, bpmnRules, elementFactory) {
29
-
30
- // when
31
- var sequenceFlow = elementRegistry.get('SequenceFlow_1');
32
- var intermediateThrowEvent = elementFactory.createShape({ type: 'bpmn:IntermediateThrowEvent' });
33
-
34
- // then
35
- expect(bpmnRules.canCreate(intermediateThrowEvent, sequenceFlow)).to.be.true;
36
- }));
37
-
38
- });
39
-
40
-
41
- describe('execution', function() {
42
-
43
- describe('create', function() {
44
-
45
- it('should connect start -> target -> end', inject(function(modeling, elementRegistry, elementFactory) {
46
-
47
- // given
48
- var intermediateThrowEvent = elementFactory.createShape({ type: 'bpmn:IntermediateThrowEvent' });
49
-
50
- var startEvent = elementRegistry.get('StartEvent'),
51
- sequenceFlow = elementRegistry.get('SequenceFlow_1'),
52
- task = elementRegistry.get('Task_1');
53
-
54
- var originalWaypoints = sequenceFlow.waypoints;
55
-
56
- var dropPosition = { x: 340, y: 120 }; // first bendpoint
57
-
58
- // when
59
- var newShape = modeling.createShape(intermediateThrowEvent, dropPosition, sequenceFlow);
60
-
61
- // then
62
-
63
- var targetConnection = newShape.outgoing[0];
64
-
65
- // new incoming connection
66
- expect(newShape.incoming.length).to.equal(1);
67
- expect(newShape.incoming[0]).to.eql(sequenceFlow);
68
-
69
- // new outgoing connection
70
- expect(newShape.outgoing.length).to.equal(1);
71
- expect(targetConnection).to.be.ok;
72
- expect(targetConnection.type).to.equal('bpmn:SequenceFlow');
73
-
74
- expect(startEvent.outgoing[0]).to.equal(newShape.incoming[0]);
75
- expect(task.incoming[0]).to.equal(newShape.outgoing[0]);
76
-
77
- // split target at insertion point
78
- expect(sequenceFlow).to.have.waypoints(flatten([
79
- originalWaypoints.slice(0, 1),
80
- { x: 322, y: 120 }
81
- ]));
82
-
83
- expect(sequenceFlow).to.have.endDocking(dropPosition);
84
-
85
- expect(targetConnection).to.have.waypoints(flatten([
86
- { x: 340, y: 138 },
87
- originalWaypoints.slice(2)
88
- ]));
89
-
90
- expect(targetConnection).to.have.startDocking(dropPosition);
91
- }));
92
-
93
-
94
- it('should connect start -> target', inject(function(modeling, elementRegistry, elementFactory) {
95
-
96
- // given
97
- var endEventShape = elementFactory.createShape({ type: 'bpmn:EndEvent' });
98
-
99
- var sequenceFlow = elementRegistry.get('SequenceFlow_1');
100
- var originalWaypoints = sequenceFlow.waypoints;
101
-
102
- var dropPosition = { x: 340, y: 120 }; // first bendpoint
103
-
104
- // when
105
- var newShape = modeling.createShape(endEventShape, dropPosition, sequenceFlow);
106
-
107
- // then
108
-
109
- // new incoming connection
110
- expect(newShape.incoming.length).to.equal(1);
111
- expect(newShape.incoming[0]).to.eql(sequenceFlow);
112
-
113
- // no outgoing edges
114
- expect(newShape.outgoing.length).to.equal(0);
115
-
116
- // split target at insertion point
117
- expect(sequenceFlow).to.have.waypoints(flatten([
118
- originalWaypoints.slice(0, 1),
119
- { x: 322, y: 120 }
120
- ]));
121
- }));
122
-
123
-
124
- it('should connect target -> end', inject(function(modeling, elementRegistry, elementFactory) {
125
-
126
- // given
127
- var startEventShape = elementFactory.createShape({ type: 'bpmn:StartEvent' });
128
-
129
- var sequenceFlow = elementRegistry.get('SequenceFlow_1');
130
- var originalWaypoints = sequenceFlow.waypoints;
131
-
132
- var dropPosition = { x: 340, y: 120 }; // first bendpoint
133
-
134
- // when
135
- var newShape = modeling.createShape(startEventShape, dropPosition, sequenceFlow);
136
-
137
- // then
138
-
139
- // no incoming connection
140
- expect(newShape.incoming.length).to.equal(0);
141
-
142
- // no outgoing edges
143
- expect(newShape.outgoing.length).to.equal(1);
144
- expect(newShape.outgoing[0]).to.eql(sequenceFlow);
145
-
146
- // split target at insertion point
147
- expect(sequenceFlow).to.have.waypoints(flatten([
148
- { x: 340, y: 138 },
149
- originalWaypoints.slice(2)
150
- ]));
151
- }));
152
-
153
- });
154
-
155
- describe('move', function() {
156
-
157
- beforeEach(inject(function(dragging) {
158
- dragging.setOptions({ manual: true });
159
- }));
160
-
161
- it('should connect start -> target -> end', inject(function(dragging, move, elementRegistry, selection) {
162
-
163
- // given
164
- var intermediateThrowEvent = elementRegistry.get('IntermediateThrowEvent_foo');
165
-
166
- var startEvent = elementRegistry.get('StartEvent'),
167
- sequenceFlow = elementRegistry.get('SequenceFlow_1'),
168
- sequenceFlowGfx = elementRegistry.getGraphics(sequenceFlow),
169
- task = elementRegistry.get('Task_1');
170
-
171
- var originalWaypoints = sequenceFlow.waypoints;
172
-
173
- // when
174
- selection.select(intermediateThrowEvent);
175
-
176
- move.start(canvasEvent({ x: 0, y: 0 }), intermediateThrowEvent);
177
-
178
- dragging.hover({
179
- element: sequenceFlow,
180
- gfx: sequenceFlowGfx
181
- });
182
-
183
- dragging.move(canvasEvent({ x: 150, y: 0 }));
184
-
185
- dragging.end();
186
-
187
- // then
188
- var targetConnection = intermediateThrowEvent.outgoing[0];
189
-
190
- // new incoming connection
191
- expect(intermediateThrowEvent.incoming.length).to.equal(1);
192
- expect(intermediateThrowEvent.incoming[0]).to.eql(sequenceFlow);
193
-
194
- // new outgoing connection
195
- expect(intermediateThrowEvent.outgoing.length).to.equal(1);
196
- expect(targetConnection).to.be.ok;
197
- expect(targetConnection.type).to.equal('bpmn:SequenceFlow');
198
-
199
- expect(startEvent.outgoing[0]).to.equal(intermediateThrowEvent.incoming[0]);
200
- expect(task.incoming[0]).to.equal(intermediateThrowEvent.outgoing[0]);
201
-
202
- // split target at insertion point
203
- expect(sequenceFlow).to.have.waypoints(flatten([
204
- originalWaypoints.slice(0, 2),
205
- { x: 341, y: 192 }
206
- ]));
207
-
208
- expect(sequenceFlow).to.have.endDocking({ x: 341, y: 210 });
209
-
210
- expect(targetConnection).to.have.waypoints(flatten([
211
- { x: 341, y: 228 },
212
- originalWaypoints.slice(2)
213
- ]));
214
-
215
- expect(targetConnection).to.have.startDocking({ x: 341, y: 210 });
216
- }));
217
-
218
-
219
- it('should connect start -> target', inject(function(modeling, elementRegistry, selection, move, dragging) {
220
-
221
- // given
222
- var endEventShape = elementRegistry.get('EndEvent_foo');
223
-
224
- var sequenceFlow = elementRegistry.get('SequenceFlow_1'),
225
- sequenceFlowGfx = elementRegistry.getGraphics(sequenceFlow),
226
- originalWaypoints = sequenceFlow.waypoints;
227
-
228
- // when
229
- selection.select(endEventShape);
230
-
231
- move.start(canvasEvent({ x: 0, y: 0 }), endEventShape);
232
-
233
- dragging.hover({
234
- element: sequenceFlow,
235
- gfx: sequenceFlowGfx
236
- });
237
-
238
- dragging.move(canvasEvent({ x: 150, y: 0 }));
239
-
240
- dragging.end();
241
-
242
- // then
243
-
244
- // new incoming connection
245
- expect(endEventShape.incoming.length).to.equal(1);
246
- expect(endEventShape.incoming[0]).to.eql(sequenceFlow);
247
-
248
- // no outgoing edges
249
- expect(endEventShape.outgoing.length).to.equal(0);
250
-
251
- // split target at insertion point
252
- expect(sequenceFlow).to.have.waypoints(flatten([
253
- originalWaypoints.slice(0, 2),
254
- { x: 340, y: 281 }
255
- ]));
256
- }));
257
-
258
-
259
- it('should connect target -> end', inject(function(modeling, elementRegistry, dragging, selection, move) {
260
-
261
- var startEventShape = elementRegistry.get('StartEvent_foo');
262
-
263
- var sequenceFlow = elementRegistry.get('SequenceFlow_1'),
264
- sequenceFlowGfx = elementRegistry.getGraphics(sequenceFlow),
265
- originalWaypoints = sequenceFlow.waypoints;
266
-
267
- // when
268
- selection.select(startEventShape);
269
-
270
- move.start(canvasEvent({ x: 0, y: 0 }), startEventShape);
271
-
272
- dragging.hover({
273
- element: sequenceFlow,
274
- gfx: sequenceFlowGfx
275
- });
276
-
277
- dragging.move(canvasEvent({ x: -215, y: 0 }));
278
-
279
- dragging.end();
280
-
281
- // then
282
-
283
- // no incoming connection
284
- expect(startEventShape.incoming.length).to.equal(0);
285
-
286
- // 1 outgoing connection
287
- expect(startEventShape.outgoing.length).to.equal(1);
288
- expect(startEventShape.outgoing[0]).to.eql(sequenceFlow);
289
-
290
- // split target at insertion point
291
- expect(sequenceFlow).to.have.waypoints(flatten([
292
- { x: 338, y: 228 },
293
- originalWaypoints.slice(2)
294
- ]));
295
- }));
296
-
297
-
298
- it('should undo',
299
- inject(function(modeling, elementRegistry, dragging, selection, move, commandStack) {
300
-
301
- // given
302
- var startEventShape = elementRegistry.get('StartEvent_foo');
303
-
304
- var sequenceFlow = elementRegistry.get('SequenceFlow_1'),
305
- sequenceFlowGfx = elementRegistry.getGraphics(sequenceFlow),
306
- originalWaypoints = sequenceFlow.waypoints;
307
-
308
- selection.select(startEventShape);
309
-
310
- move.start(canvasEvent({ x: 0, y: 0 }), startEventShape);
311
-
312
- dragging.hover({
313
- element: sequenceFlow,
314
- gfx: sequenceFlowGfx
315
- });
316
-
317
- dragging.move(canvasEvent({ x: -215, y: 0 }));
318
-
319
- dragging.end();
320
-
321
- // when
322
- commandStack.undo();
323
-
324
- // then
325
-
326
- // no incoming connection
327
- expect(startEventShape.incoming.length).to.equal(0);
328
-
329
- // no outgoing edges
330
- expect(startEventShape.outgoing.length).to.equal(0);
331
-
332
- // split target at insertion point
333
- expect(sequenceFlow).to.have.waypoints(flatten([ originalWaypoints ]));
334
- }));
335
-
336
- });
337
-
338
- });
339
-
340
-
341
- describe('rules', function() {
342
-
343
- it('should not insert participant', inject(function(rules, elementRegistry, elementFactory) {
344
-
345
- // given
346
- var participantShape = elementFactory.createShape({ type: 'bpmn:Participant' });
347
-
348
- var sequenceFlow = elementRegistry.get('SequenceFlow_1');
349
-
350
- var dropPosition = { x: 340, y: 120 }; // first bendpoint
351
-
352
- // when
353
- var canDrop = rules.allowed('shape.create', {
354
- shape: participantShape,
355
- parent: sequenceFlow,
356
- dropPosition: dropPosition
357
- });
358
-
359
- // then
360
- expect(canDrop).to.be.false;
361
- }));
362
-
363
-
364
- it('should not insert multiple with "move"', inject(function(elementRegistry, selection, move, dragging) {
365
-
366
- // given
367
- var intermediateThrowEvent = elementRegistry.get('IntermediateThrowEvent_foo'),
368
- endEventShape = elementRegistry.get('EndEvent_foo');
369
-
370
- var sequenceFlow = elementRegistry.get('SequenceFlow_1'),
371
- sequenceFlowGfx = elementRegistry.getGraphics(sequenceFlow);
372
-
373
- var intInitPosition = {
374
- x: intermediateThrowEvent.x,
375
- y: intermediateThrowEvent.y
376
- },
377
- endInitPosition = {
378
- x: endEventShape.x,
379
- y: endEventShape.y
380
- };
381
-
382
- selection.select([ intermediateThrowEvent, endEventShape ]);
383
-
384
- // when
385
- move.start(canvasEvent({ x: 0, y: 0 }), intermediateThrowEvent);
386
-
387
- dragging.hover({
388
- element: sequenceFlow,
389
- gfx: sequenceFlowGfx
390
- });
391
-
392
- dragging.move(canvasEvent({ x: -215, y: 0 }));
393
-
394
- dragging.end();
395
-
396
- // then
397
- expect(intermediateThrowEvent).to.have.position(intInitPosition);
398
- expect(endEventShape).to.have.position(endInitPosition);
399
- }));
400
-
401
-
402
- it('should not insert on sequence flow label', inject(function(bpmnRules, elementRegistry) {
403
-
404
- // given
405
- var eventShape = elementRegistry.get('IntermediateThrowEvent_foo'),
406
- sequenceFlowLabel = elementRegistry.get('SequenceFlow_2').label;
407
-
408
- var dropPosition = { x: 675, y: 275 }; // sequence flow label
409
-
410
- // when
411
- var canInsert = bpmnRules.canInsert(eventShape, sequenceFlowLabel, dropPosition);
412
-
413
- // then
414
- expect(canInsert).to.be.false;
415
- }));
416
- });
417
-
418
- });
1
+ 'use strict';
2
+
3
+ require('../../../../TestHelper');
4
+
5
+ /* global inject, bootstrapModeler */
6
+
7
+ var flatten = require('lodash/array/flatten');
8
+
9
+ var coreModule = require('../../../../../lib/core'),
10
+ moveModule = require('diagram-js/lib/features/move'),
11
+ modelingModule = require('../../../../../lib/features/modeling'),
12
+ noTouchInteractionModule = { touchInteractionEvents: ['value', null ] };
13
+
14
+ var canvasEvent = require('../../../../util/MockEvents').createCanvasEvent;
15
+
16
+ describe('modeling/behavior - drop on connection', function() {
17
+
18
+ var diagramXML = require('./DropOnFlowBehavior.bpmn');
19
+
20
+ var testModules = [ noTouchInteractionModule, moveModule, modelingModule, coreModule ];
21
+
22
+ beforeEach(bootstrapModeler(diagramXML, { modules: testModules }));
23
+
24
+
25
+ describe('rules', function() {
26
+
27
+ it('should be allowed for an IntermediateThrowEvent', inject(function(elementRegistry, bpmnRules, elementFactory) {
28
+
29
+ // when
30
+ var sequenceFlow = elementRegistry.get('SequenceFlow_1');
31
+ var intermediateThrowEvent = elementFactory.createShape({ type: 'bpmn:IntermediateThrowEvent' });
32
+
33
+ // then
34
+ expect(bpmnRules.canCreate(intermediateThrowEvent, sequenceFlow)).to.be.true;
35
+ }));
36
+
37
+ });
38
+
39
+
40
+ describe('execution', function() {
41
+
42
+ describe('create', function() {
43
+
44
+ it('should connect start -> target -> end', inject(function(modeling, elementRegistry, elementFactory) {
45
+
46
+ // given
47
+ var intermediateThrowEvent = elementFactory.createShape({ type: 'bpmn:IntermediateThrowEvent' });
48
+
49
+ var startEvent = elementRegistry.get('StartEvent'),
50
+ sequenceFlow = elementRegistry.get('SequenceFlow_1'),
51
+ task = elementRegistry.get('Task_1');
52
+
53
+ var originalWaypoints = sequenceFlow.waypoints;
54
+
55
+ var dropPosition = { x: 340, y: 120 }; // first bendpoint
56
+
57
+ // when
58
+ var newShape = modeling.createShape(intermediateThrowEvent, dropPosition, sequenceFlow);
59
+
60
+ // then
61
+
62
+ var targetConnection = newShape.outgoing[0];
63
+
64
+ // new incoming connection
65
+ expect(newShape.incoming.length).to.equal(1);
66
+ expect(newShape.incoming[0]).to.eql(sequenceFlow);
67
+
68
+ // new outgoing connection
69
+ expect(newShape.outgoing.length).to.equal(1);
70
+ expect(targetConnection).to.be.ok;
71
+ expect(targetConnection.type).to.equal('bpmn:SequenceFlow');
72
+
73
+ expect(startEvent.outgoing[0]).to.equal(newShape.incoming[0]);
74
+ expect(task.incoming[0]).to.equal(newShape.outgoing[0]);
75
+
76
+ // split target at insertion point
77
+ expect(sequenceFlow).to.have.waypoints(flatten([
78
+ originalWaypoints.slice(0, 1),
79
+ { x: 322, y: 120 }
80
+ ]));
81
+
82
+ expect(sequenceFlow).to.have.endDocking(dropPosition);
83
+
84
+ expect(targetConnection).to.have.waypoints(flatten([
85
+ { x: 340, y: 138 },
86
+ originalWaypoints.slice(2)
87
+ ]));
88
+
89
+ expect(targetConnection).to.have.startDocking(dropPosition);
90
+ }));
91
+
92
+
93
+ it('should connect start -> target', inject(function(modeling, elementRegistry, elementFactory) {
94
+
95
+ // given
96
+ var endEventShape = elementFactory.createShape({ type: 'bpmn:EndEvent' });
97
+
98
+ var sequenceFlow = elementRegistry.get('SequenceFlow_1');
99
+ var originalWaypoints = sequenceFlow.waypoints;
100
+
101
+ var dropPosition = { x: 340, y: 120 }; // first bendpoint
102
+
103
+ // when
104
+ var newShape = modeling.createShape(endEventShape, dropPosition, sequenceFlow);
105
+
106
+ // then
107
+
108
+ // new incoming connection
109
+ expect(newShape.incoming.length).to.equal(1);
110
+ expect(newShape.incoming[0]).to.eql(sequenceFlow);
111
+
112
+ // no outgoing edges
113
+ expect(newShape.outgoing.length).to.equal(0);
114
+
115
+ // split target at insertion point
116
+ expect(sequenceFlow).to.have.waypoints(flatten([
117
+ originalWaypoints.slice(0, 1),
118
+ { x: 322, y: 120 }
119
+ ]));
120
+ }));
121
+
122
+
123
+ it('should connect target -> end', inject(function(modeling, elementRegistry, elementFactory) {
124
+
125
+ // given
126
+ var startEventShape = elementFactory.createShape({ type: 'bpmn:StartEvent' });
127
+
128
+ var sequenceFlow = elementRegistry.get('SequenceFlow_1');
129
+ var originalWaypoints = sequenceFlow.waypoints;
130
+
131
+ var dropPosition = { x: 340, y: 120 }; // first bendpoint
132
+
133
+ // when
134
+ var newShape = modeling.createShape(startEventShape, dropPosition, sequenceFlow);
135
+
136
+ // then
137
+
138
+ // no incoming connection
139
+ expect(newShape.incoming.length).to.equal(0);
140
+
141
+ // no outgoing edges
142
+ expect(newShape.outgoing.length).to.equal(1);
143
+ expect(newShape.outgoing[0]).to.eql(sequenceFlow);
144
+
145
+ // split target at insertion point
146
+ expect(sequenceFlow).to.have.waypoints(flatten([
147
+ { x: 340, y: 138 },
148
+ originalWaypoints.slice(2)
149
+ ]));
150
+ }));
151
+
152
+
153
+ it('should connect start -> target -> end (with bendpointBefore inside bbox)',
154
+ inject(function(modeling, elementRegistry, elementFactory) {
155
+ // given
156
+ var taskShape = elementFactory.createShape({ type: 'bpmn:Task' }),
157
+ sequenceFlow = elementRegistry.get('SequenceFlow_1'),
158
+ originalWaypoints = sequenceFlow.waypoints,
159
+ dropPosition = { x: 340, y: 145 }; // 25 pixels below bendpoint
160
+
161
+ // when
162
+ modeling.createShape(taskShape, dropPosition, sequenceFlow);
163
+
164
+ // then
165
+ // split target but don't keep insertion point
166
+ expect(sequenceFlow).to.have.waypoints(flatten([
167
+ originalWaypoints.slice(0, 1),
168
+ { x: 290, y: 120 }
169
+ ]));
170
+
171
+ expect(sequenceFlow).to.have.endDocking({ x: 340, y: 120 });
172
+ }
173
+ ));
174
+
175
+
176
+ it('should connect start -> target -> end (with bendpointAfter inside bbox)',
177
+ inject(function(modeling, elementRegistry, elementFactory) {
178
+
179
+ // given
180
+ var taskShape = elementFactory.createShape({ type: 'bpmn:Task' }),
181
+ sequenceFlow = elementRegistry.get('SequenceFlow_1'),
182
+ originalWaypoints = sequenceFlow.waypoints,
183
+ dropPosition = { x: 340, y: 280 }; // 25 pixels above bendpoint
184
+
185
+ // when
186
+ var newShape = modeling.createShape(taskShape, dropPosition, sequenceFlow),
187
+ targetConnection = newShape.outgoing[0];
188
+
189
+ // then
190
+ // split target but don't keep insertion point
191
+ expect(targetConnection).to.have.waypoints(flatten([
192
+ { x: 390, y: 299 },
193
+ originalWaypoints.slice(3)
194
+ ]));
195
+
196
+ expect(targetConnection).to.have.startDocking({ x: 340, y: 299 });
197
+ }
198
+ ));
199
+
200
+ });
201
+
202
+ describe('move', function() {
203
+
204
+ beforeEach(inject(function(dragging) {
205
+ dragging.setOptions({ manual: true });
206
+ }));
207
+
208
+ it('should connect start -> target -> end', inject(function(dragging, move, elementRegistry, selection) {
209
+
210
+ // given
211
+ var intermediateThrowEvent = elementRegistry.get('IntermediateThrowEvent_foo');
212
+
213
+ var startEvent = elementRegistry.get('StartEvent'),
214
+ sequenceFlow = elementRegistry.get('SequenceFlow_1'),
215
+ sequenceFlowGfx = elementRegistry.getGraphics(sequenceFlow),
216
+ task = elementRegistry.get('Task_1');
217
+
218
+ var originalWaypoints = sequenceFlow.waypoints;
219
+
220
+ // when
221
+ selection.select(intermediateThrowEvent);
222
+
223
+ move.start(canvasEvent({ x: 0, y: 0 }), intermediateThrowEvent);
224
+
225
+ dragging.hover({
226
+ element: sequenceFlow,
227
+ gfx: sequenceFlowGfx
228
+ });
229
+
230
+ dragging.move(canvasEvent({ x: 150, y: 0 }));
231
+
232
+ dragging.end();
233
+
234
+ // then
235
+ var targetConnection = intermediateThrowEvent.outgoing[0];
236
+
237
+ // new incoming connection
238
+ expect(intermediateThrowEvent.incoming.length).to.equal(1);
239
+ expect(intermediateThrowEvent.incoming[0]).to.eql(sequenceFlow);
240
+
241
+ // new outgoing connection
242
+ expect(intermediateThrowEvent.outgoing.length).to.equal(1);
243
+ expect(targetConnection).to.be.ok;
244
+ expect(targetConnection.type).to.equal('bpmn:SequenceFlow');
245
+
246
+ expect(startEvent.outgoing[0]).to.equal(intermediateThrowEvent.incoming[0]);
247
+ expect(task.incoming[0]).to.equal(intermediateThrowEvent.outgoing[0]);
248
+
249
+ // split target at insertion point
250
+ expect(sequenceFlow).to.have.waypoints(flatten([
251
+ originalWaypoints.slice(0, 2),
252
+ { x: 341, y: 192 }
253
+ ]));
254
+
255
+ expect(sequenceFlow).to.have.endDocking({ x: 341, y: 210 });
256
+
257
+ expect(targetConnection).to.have.waypoints(flatten([
258
+ { x: 341, y: 228 },
259
+ originalWaypoints.slice(2)
260
+ ]));
261
+
262
+ expect(targetConnection).to.have.startDocking({ x: 341, y: 210 });
263
+ }));
264
+
265
+
266
+ it('should connect start -> target -> end (hovering parent)',
267
+ inject(function(dragging, move, elementRegistry, selection, canvas) {
268
+
269
+ // given
270
+ var intermediateThrowEvent = elementRegistry.get('IntermediateThrowEvent_foo');
271
+
272
+ var startEvent = elementRegistry.get('StartEvent'),
273
+ sequenceFlow = elementRegistry.get('SequenceFlow_1'),
274
+ task = elementRegistry.get('Task_1'),
275
+ rootElement = canvas.getRootElement(),
276
+ rootElementGfx = elementRegistry.getGraphics(rootElement);
277
+
278
+ var originalWaypoints = sequenceFlow.waypoints;
279
+
280
+ // when
281
+ selection.select(intermediateThrowEvent);
282
+
283
+ move.start(canvasEvent({ x: 0, y: 0 }), intermediateThrowEvent);
284
+
285
+ dragging.hover({
286
+ element: rootElement,
287
+ gfx: rootElementGfx
288
+ });
289
+
290
+ dragging.move(canvasEvent({ x: 150, y: 0 }));
291
+ dragging.end();
292
+
293
+ // then
294
+ var targetConnection = intermediateThrowEvent.outgoing[0];
295
+
296
+ // new incoming connection
297
+ expect(intermediateThrowEvent.incoming.length).to.equal(1);
298
+ expect(intermediateThrowEvent.incoming[0]).to.eql(sequenceFlow);
299
+
300
+ // new outgoing connection
301
+ expect(intermediateThrowEvent.outgoing.length).to.equal(1);
302
+ expect(targetConnection).to.be.ok;
303
+ expect(targetConnection.type).to.equal('bpmn:SequenceFlow');
304
+
305
+ expect(startEvent.outgoing[0]).to.equal(intermediateThrowEvent.incoming[0]);
306
+ expect(task.incoming[0]).to.equal(intermediateThrowEvent.outgoing[0]);
307
+
308
+ // split target at insertion point
309
+ expect(sequenceFlow).to.have.waypoints(flatten([
310
+ originalWaypoints.slice(0, 2),
311
+ { x: 341, y: 192 }
312
+ ]));
313
+
314
+ expect(sequenceFlow).to.have.endDocking({ x: 341, y: 210 });
315
+
316
+ expect(targetConnection).to.have.waypoints(flatten([
317
+ { x: 341, y: 228 },
318
+ originalWaypoints.slice(2)
319
+ ]));
320
+
321
+ expect(targetConnection).to.have.startDocking({ x: 341, y: 210 });
322
+ }
323
+ ));
324
+
325
+
326
+ it('should connect start -> target -> end (with bendpointBefore inside bbox)',
327
+ inject(function(elementRegistry, selection, move, dragging) {
328
+ // given
329
+ var task3 = elementRegistry.get('Task_3'),
330
+ sequenceFlow = elementRegistry.get('SequenceFlow_1'),
331
+ sequenceFlowGfx = elementRegistry.getGraphics(sequenceFlow),
332
+ originalWaypoints = sequenceFlow.waypoints;
333
+
334
+ // when
335
+ selection.select(task3);
336
+
337
+ move.start(canvasEvent({ x: 0, y: 0 }), task3);
338
+
339
+ dragging.hover({
340
+ element: sequenceFlow,
341
+ gfx: sequenceFlowGfx
342
+ });
343
+
344
+ dragging.move(canvasEvent({ x: 150, y: -130 }));
345
+ dragging.end();
346
+
347
+ // then
348
+ // split target but don't keep insertion point
349
+ expect(sequenceFlow).to.have.waypoints(flatten([
350
+ originalWaypoints.slice(0, 2),
351
+ { x: 341, y: 241 }
352
+ ]));
353
+
354
+ expect(sequenceFlow).to.have.endDocking({ x: 341, y: 281 });
355
+ }
356
+ ));
357
+
358
+
359
+ it('should connect start -> target -> end (with bendpointAfter inside bbox)',
360
+ inject(function(elementRegistry, selection, move, dragging) {
361
+ // given
362
+ var task3 = elementRegistry.get('Task_3'),
363
+ sequenceFlow = elementRegistry.get('SequenceFlow_1'),
364
+ sequenceFlowGfx = elementRegistry.getGraphics(sequenceFlow),
365
+ originalWaypoints = sequenceFlow.waypoints;
366
+
367
+ // when
368
+ selection.select(task3);
369
+
370
+ move.start(canvasEvent({ x: 0, y: 0 }), task3);
371
+
372
+ dragging.hover({
373
+ element: sequenceFlow,
374
+ gfx: sequenceFlowGfx
375
+ });
376
+
377
+ dragging.move(canvasEvent({ x: 170, y: -110 }));
378
+ dragging.end();
379
+
380
+ // then
381
+ // split target but don't keep insertion point
382
+ expect(sequenceFlow).to.have.waypoints(flatten([
383
+ originalWaypoints.slice(0, 2),
384
+ { x: 340, y: 261 }
385
+ ]));
386
+
387
+ expect(sequenceFlow).to.have.endDocking({ x: 340, y: 299 });
388
+ }
389
+ ));
390
+
391
+
392
+ it('should connect start -> target', inject(function(modeling, elementRegistry, selection, move, dragging) {
393
+
394
+ // given
395
+ var endEventShape = elementRegistry.get('EndEvent_foo');
396
+
397
+ var sequenceFlow = elementRegistry.get('SequenceFlow_1'),
398
+ sequenceFlowGfx = elementRegistry.getGraphics(sequenceFlow),
399
+ originalWaypoints = sequenceFlow.waypoints;
400
+
401
+ // when
402
+ selection.select(endEventShape);
403
+
404
+ move.start(canvasEvent({ x: 0, y: 0 }), endEventShape);
405
+
406
+ dragging.hover({
407
+ element: sequenceFlow,
408
+ gfx: sequenceFlowGfx
409
+ });
410
+
411
+ dragging.move(canvasEvent({ x: 150, y: 0 }));
412
+
413
+ dragging.end();
414
+
415
+ // then
416
+
417
+ // new incoming connection
418
+ expect(endEventShape.incoming.length).to.equal(1);
419
+ expect(endEventShape.incoming[0]).to.eql(sequenceFlow);
420
+
421
+ // no outgoing edges
422
+ expect(endEventShape.outgoing.length).to.equal(0);
423
+
424
+ // split target at insertion point
425
+ expect(sequenceFlow).to.have.waypoints(flatten([
426
+ originalWaypoints.slice(0, 2),
427
+ { x: 340, y: 281 }
428
+ ]));
429
+ }));
430
+
431
+
432
+ it('should connect target -> end', inject(function(modeling, elementRegistry, dragging, selection, move) {
433
+
434
+ var startEventShape = elementRegistry.get('StartEvent_foo');
435
+
436
+ var sequenceFlow = elementRegistry.get('SequenceFlow_1'),
437
+ sequenceFlowGfx = elementRegistry.getGraphics(sequenceFlow),
438
+ originalWaypoints = sequenceFlow.waypoints;
439
+
440
+ // when
441
+ selection.select(startEventShape);
442
+
443
+ move.start(canvasEvent({ x: 0, y: 0 }), startEventShape);
444
+
445
+ dragging.hover({
446
+ element: sequenceFlow,
447
+ gfx: sequenceFlowGfx
448
+ });
449
+
450
+ dragging.move(canvasEvent({ x: -215, y: 0 }));
451
+
452
+ dragging.end();
453
+
454
+ // then
455
+
456
+ // no incoming connection
457
+ expect(startEventShape.incoming.length).to.equal(0);
458
+
459
+ // 1 outgoing connection
460
+ expect(startEventShape.outgoing.length).to.equal(1);
461
+ expect(startEventShape.outgoing[0]).to.eql(sequenceFlow);
462
+
463
+ // split target at insertion point
464
+ expect(sequenceFlow).to.have.waypoints(flatten([
465
+ { x: 338, y: 228 },
466
+ originalWaypoints.slice(2)
467
+ ]));
468
+ }));
469
+
470
+
471
+ it('should undo',
472
+ inject(function(modeling, elementRegistry, dragging, selection, move, commandStack) {
473
+
474
+ // given
475
+ var startEventShape = elementRegistry.get('StartEvent_foo');
476
+
477
+ var sequenceFlow = elementRegistry.get('SequenceFlow_1'),
478
+ sequenceFlowGfx = elementRegistry.getGraphics(sequenceFlow),
479
+ originalWaypoints = sequenceFlow.waypoints;
480
+
481
+ selection.select(startEventShape);
482
+
483
+ move.start(canvasEvent({ x: 0, y: 0 }), startEventShape);
484
+
485
+ dragging.hover({
486
+ element: sequenceFlow,
487
+ gfx: sequenceFlowGfx
488
+ });
489
+
490
+ dragging.move(canvasEvent({ x: -215, y: 0 }));
491
+
492
+ dragging.end();
493
+
494
+ // when
495
+ commandStack.undo();
496
+
497
+ // then
498
+
499
+ // no incoming connection
500
+ expect(startEventShape.incoming.length).to.equal(0);
501
+
502
+ // no outgoing edges
503
+ expect(startEventShape.outgoing.length).to.equal(0);
504
+
505
+ // split target at insertion point
506
+ expect(sequenceFlow).to.have.waypoints(flatten([ originalWaypoints ]));
507
+ }));
508
+
509
+ });
510
+
511
+ });
512
+
513
+
514
+ describe('rules', function() {
515
+
516
+ it('should not insert participant', inject(function(rules, elementRegistry, elementFactory) {
517
+
518
+ // given
519
+ var participantShape = elementFactory.createShape({ type: 'bpmn:Participant' });
520
+
521
+ var sequenceFlow = elementRegistry.get('SequenceFlow_1');
522
+
523
+ var dropPosition = { x: 340, y: 120 }; // first bendpoint
524
+
525
+ // when
526
+ var canDrop = rules.allowed('shape.create', {
527
+ shape: participantShape,
528
+ parent: sequenceFlow,
529
+ dropPosition: dropPosition
530
+ });
531
+
532
+ // then
533
+ expect(canDrop).to.be.false;
534
+ }));
535
+
536
+
537
+ it('should not insert multiple with "move"', inject(function(elementRegistry, selection, move, dragging) {
538
+
539
+ // given
540
+ var intermediateThrowEvent = elementRegistry.get('IntermediateThrowEvent_foo'),
541
+ endEventShape = elementRegistry.get('EndEvent_foo');
542
+
543
+ var sequenceFlow = elementRegistry.get('SequenceFlow_1'),
544
+ sequenceFlowGfx = elementRegistry.getGraphics(sequenceFlow);
545
+
546
+ var intInitPosition = {
547
+ x: intermediateThrowEvent.x,
548
+ y: intermediateThrowEvent.y
549
+ },
550
+ endInitPosition = {
551
+ x: endEventShape.x,
552
+ y: endEventShape.y
553
+ };
554
+
555
+ selection.select([ intermediateThrowEvent, endEventShape ]);
556
+
557
+ // when
558
+ move.start(canvasEvent({ x: 0, y: 0 }), intermediateThrowEvent);
559
+
560
+ dragging.hover({
561
+ element: sequenceFlow,
562
+ gfx: sequenceFlowGfx
563
+ });
564
+
565
+ dragging.move(canvasEvent({ x: -215, y: 0 }));
566
+
567
+ dragging.end();
568
+
569
+ // then
570
+ expect(intermediateThrowEvent).to.have.position(intInitPosition);
571
+ expect(endEventShape).to.have.position(endInitPosition);
572
+ }));
573
+
574
+
575
+ it('should not insert on sequence flow label', inject(function(bpmnRules, elementRegistry) {
576
+
577
+ // given
578
+ var eventShape = elementRegistry.get('IntermediateThrowEvent_foo'),
579
+ sequenceFlowLabel = elementRegistry.get('SequenceFlow_2').label;
580
+
581
+ var dropPosition = { x: 675, y: 275 }; // sequence flow label
582
+
583
+ // when
584
+ var canInsert = bpmnRules.canInsert(eventShape, sequenceFlowLabel, dropPosition);
585
+
586
+ // then
587
+ expect(canInsert).to.be.false;
588
+ }));
589
+ });
590
+
591
+ });