diff --git a/src/main/components/uml-element/resizable/resizable.tsx b/src/main/components/uml-element/resizable/resizable.tsx index 968c3fb69..c62ba7fb1 100644 --- a/src/main/components/uml-element/resizable/resizable.tsx +++ b/src/main/components/uml-element/resizable/resizable.tsx @@ -8,7 +8,9 @@ import { ModelState } from '../../store/model-state'; import { styled } from '../../theme/styles'; import { UMLElementComponentProps } from '../uml-element-component-props'; -type StateProps = {}; +type StateProps = { + zoomFactor: number; +}; type DispatchProps = { start: AsyncDispatch; @@ -25,11 +27,16 @@ const initialState = { type State = typeof initialState; -const enhance = connect(null, { - start: UMLElementRepository.startResizing, - resize: UMLElementRepository.resize, - end: UMLElementRepository.endResizing, -}); +const enhance = connect( + (state) => ({ + zoomFactor: state.editor.zoomFactor, + }), + { + start: UMLElementRepository.startResizing, + resize: UMLElementRepository.resize, + end: UMLElementRepository.endResizing, + }, +); const Handle = { width: 15, @@ -148,7 +155,7 @@ export const resizable = break; } - this.setState({ resizing: true, offset }); + this.setState({ resizing: true, offset: offset.scale(1 / this.props.zoomFactor) }); this.props.start(); const element = event.currentTarget; element.setPointerCapture(event.pointerId); @@ -163,20 +170,20 @@ export const resizable = let height = 0; switch (resizeFrom) { case ResizeFrom.BOTTOMRIGHT: - width = event.clientX - this.state.offset.x; - height = event.clientY - this.state.offset.y; + width = event.clientX / this.props.zoomFactor - this.state.offset.x; + height = event.clientY / this.props.zoomFactor - this.state.offset.y; break; case ResizeFrom.TOPLEFT: - width = -event.clientX - this.state.offset.x; - height = -event.clientY - this.state.offset.y; + width = -event.clientX / this.props.zoomFactor - this.state.offset.x; + height = -event.clientY / this.props.zoomFactor - this.state.offset.y; break; case ResizeFrom.TOPRIGHT: - width = event.clientX - this.state.offset.x; - height = -event.clientY - this.state.offset.y; + width = event.clientX / this.props.zoomFactor - this.state.offset.x; + height = -event.clientY / this.props.zoomFactor - this.state.offset.y; break; case ResizeFrom.BOTTOMLEFT: - width = -event.clientX - this.state.offset.x; - height = event.clientY - this.state.offset.y; + width = -event.clientX / this.props.zoomFactor - this.state.offset.x; + height = event.clientY / this.props.zoomFactor - this.state.offset.y; break; } this.resize(width, height, resizeFrom); diff --git a/src/main/i18n/de.json b/src/main/i18n/de.json index a3e2ef354..4381bd605 100644 --- a/src/main/i18n/de.json +++ b/src/main/i18n/de.json @@ -140,7 +140,8 @@ "BPMNCallConversation": "Aufruf-Konversation", "BPMNSequenceFlow": "Sequenz", "BPMNMessageFlow": "Nachricht", - "BPMNAssociationFlow": "Assoziation" + "BPMNAssociationFlow": "Assoziation", + "BPMNGroup": "Gruppe" } } } diff --git a/src/main/i18n/en.json b/src/main/i18n/en.json index b5ebf7caf..5153d213a 100644 --- a/src/main/i18n/en.json +++ b/src/main/i18n/en.json @@ -140,7 +140,8 @@ "BPMNCallConversation": "Call Conversation", "BPMNSequenceFlow": "Sequence", "BPMNMessageFlow": "Message", - "BPMNAssociationFlow": "Association" + "BPMNAssociationFlow": "Association", + "BPMNGroup": "Group" } } } diff --git a/src/main/packages/bpmn/bpmn-annotation/bpmn-annotation.ts b/src/main/packages/bpmn/bpmn-annotation/bpmn-annotation.ts index c8f6b0d81..ebd2d9688 100644 --- a/src/main/packages/bpmn/bpmn-annotation/bpmn-annotation.ts +++ b/src/main/packages/bpmn/bpmn-annotation/bpmn-annotation.ts @@ -1,13 +1,13 @@ import { BPMNElementType } from '..'; import { ILayer } from '../../../services/layouter/layer'; import { ILayoutable } from '../../../services/layouter/layoutable'; -import { UMLElement } from '../../../services/uml-element/uml-element'; import { calculateNameBounds } from '../../../utils/name-bounds'; import { UMLElementType } from '../../uml-element-type'; import { UMLElementFeatures } from '../../../services/uml-element/uml-element-features'; +import { UMLContainer } from '../../../services/uml-container/uml-container'; -export class BPMNAnnotation extends UMLElement { - static features: UMLElementFeatures = { ...UMLElement.features }; +export class BPMNAnnotation extends UMLContainer { + static features: UMLElementFeatures = { ...UMLContainer.features }; type: UMLElementType = BPMNElementType.BPMNAnnotation; diff --git a/src/main/packages/bpmn/bpmn-call-activity/bpmn-call-activity.ts b/src/main/packages/bpmn/bpmn-call-activity/bpmn-call-activity.ts index 9437227a8..992c86513 100644 --- a/src/main/packages/bpmn/bpmn-call-activity/bpmn-call-activity.ts +++ b/src/main/packages/bpmn/bpmn-call-activity/bpmn-call-activity.ts @@ -1,11 +1,11 @@ import { BPMNElementType } from '..'; import { ILayer } from '../../../services/layouter/layer'; import { ILayoutable } from '../../../services/layouter/layoutable'; -import { UMLElement } from '../../../services/uml-element/uml-element'; import { calculateNameBounds } from '../../../utils/name-bounds'; import { UMLElementType } from '../../uml-element-type'; +import { UMLContainer } from '../../../services/uml-container/uml-container'; -export class BPMNCallActivity extends UMLElement { +export class BPMNCallActivity extends UMLContainer { type: UMLElementType = BPMNElementType.BPMNCallActivity; render(canvas: ILayer): ILayoutable[] { diff --git a/src/main/packages/bpmn/bpmn-conversation/bpmn-conversation.ts b/src/main/packages/bpmn/bpmn-conversation/bpmn-conversation.ts index d9b6573dc..a60560bbe 100644 --- a/src/main/packages/bpmn/bpmn-conversation/bpmn-conversation.ts +++ b/src/main/packages/bpmn/bpmn-conversation/bpmn-conversation.ts @@ -8,10 +8,11 @@ import { IBoundary } from '../../../utils/geometry/boundary'; import { DeepPartial } from 'redux'; import { assign } from '../../../utils/fx/assign'; import * as Apollon from '../../../typings'; +import { UMLContainer } from '../../../services/uml-container/uml-container'; export type BPMNConversationType = 'default' | 'call'; -export class BPMNConversation extends UMLElement { +export class BPMNConversation extends UMLContainer { static features: UMLElementFeatures = { ...UMLElement.features, resizable: false }; static defaultConversationType: BPMNConversationType = 'default'; diff --git a/src/main/packages/bpmn/bpmn-diagram-preview.ts b/src/main/packages/bpmn/bpmn-diagram-preview.ts index 3ab3e4c6b..61cc5af09 100644 --- a/src/main/packages/bpmn/bpmn-diagram-preview.ts +++ b/src/main/packages/bpmn/bpmn-diagram-preview.ts @@ -11,6 +11,7 @@ import { BPMNTransaction } from './bpmn-transaction/bpmn-transaction'; import { BPMNCallActivity } from './bpmn-call-activity/bpmn-call-activity'; import { BPMNAnnotation } from './bpmn-annotation/bpmn-annotation'; import { BPMNConversation } from './bpmn-conversation/bpmn-conversation'; +import { BPMNGroup } from './bpmn-group/bpmn-group'; export const composeBPMNPreview: ComposePreview = ( layer: ILayer, @@ -47,6 +48,12 @@ export const composeBPMNPreview: ComposePreview = ( }), ); + elements.push( + new BPMNGroup({ + bounds: defaultBounds, + }), + ); + elements.push( new BPMNAnnotation({ name: translate('packages.BPMN.BPMNAnnotation'), diff --git a/src/main/packages/bpmn/bpmn-end-event/bpmn-end-event.ts b/src/main/packages/bpmn/bpmn-end-event/bpmn-end-event.ts index 7318cfcf5..db7f61c33 100644 --- a/src/main/packages/bpmn/bpmn-end-event/bpmn-end-event.ts +++ b/src/main/packages/bpmn/bpmn-end-event/bpmn-end-event.ts @@ -2,23 +2,23 @@ import { DeepPartial } from 'redux'; import { BPMNElementType, BPMNRelationshipType } from '..'; import { ILayer } from '../../../services/layouter/layer'; import { ILayoutable } from '../../../services/layouter/layoutable'; -import { IUMLElement, UMLElement } from '../../../services/uml-element/uml-element'; import { UMLElementFeatures } from '../../../services/uml-element/uml-element-features'; import { assign } from '../../../utils/fx/assign'; import { IBoundary } from '../../../utils/geometry/boundary'; import { UMLElementType } from '../../uml-element-type'; +import { UMLContainer } from '../../../services/uml-container/uml-container'; -export class BPMNEndEvent extends UMLElement { +export class BPMNEndEvent extends UMLContainer { static supportedRelationships = [BPMNRelationshipType.BPMNFlow]; - static features: UMLElementFeatures = { ...UMLElement.features, resizable: false }; + static features: UMLElementFeatures = { ...UMLContainer.features, resizable: false }; type: UMLElementType = BPMNElementType.BPMNEndEvent; bounds: IBoundary = { ...this.bounds, width: 40, height: 40 }; name = 'End Event'; - constructor(values?: DeepPartial) { + constructor(values?: DeepPartial) { super(values); - assign(this, values); + assign(this, values); } render(canvas: ILayer): ILayoutable[] { diff --git a/src/main/packages/bpmn/bpmn-flow/bpmn-flow-update.tsx b/src/main/packages/bpmn/bpmn-flow/bpmn-flow-update.tsx index 56156f504..0a01e6d69 100644 --- a/src/main/packages/bpmn/bpmn-flow/bpmn-flow-update.tsx +++ b/src/main/packages/bpmn/bpmn-flow/bpmn-flow-update.tsx @@ -11,7 +11,7 @@ import { styled } from '../../../components/theme/styles'; import { UMLElementRepository } from '../../../services/uml-element/uml-element-repository'; import { ExchangeIcon } from '../../../components/controls/icon/exchange'; import { UMLRelationshipRepository } from '../../../services/uml-relationship/uml-relationship-repository'; -import { BPMNFlowType, BPMNFlow } from './bpmn-flow'; +import { BPMNFlow, BPMNFlowType } from './bpmn-flow'; import { ColorButton } from '../../../components/controls/color-button/color-button'; import { StylePane } from '../../../components/style-pane/style-pane'; import { Dropdown } from '../../../components/controls/dropdown/dropdown'; diff --git a/src/main/packages/bpmn/bpmn-gateway/bpmn-gateway.ts b/src/main/packages/bpmn/bpmn-gateway/bpmn-gateway.ts index c6280c0ec..85b106e24 100644 --- a/src/main/packages/bpmn/bpmn-gateway/bpmn-gateway.ts +++ b/src/main/packages/bpmn/bpmn-gateway/bpmn-gateway.ts @@ -1,13 +1,13 @@ import { BPMNElementType } from '..'; import { ILayer } from '../../../services/layouter/layer'; import { ILayoutable } from '../../../services/layouter/layoutable'; -import { IUMLElement, UMLElement } from '../../../services/uml-element/uml-element'; import { UMLElementType } from '../../uml-element-type'; import { UMLElementFeatures } from '../../../services/uml-element/uml-element-features'; import { IBoundary } from '../../../utils/geometry/boundary'; import { DeepPartial } from 'redux'; import { assign } from '../../../utils/fx/assign'; import * as Apollon from '../../../typings'; +import { UMLContainer } from '../../../services/uml-container/uml-container'; export type BPMNGatewayType = | 'complex' @@ -18,8 +18,8 @@ export type BPMNGatewayType = | 'parallel' | 'parallel-event-based'; -export class BPMNGateway extends UMLElement { - static features: UMLElementFeatures = { ...UMLElement.features, resizable: false }; +export class BPMNGateway extends UMLContainer { + static features: UMLElementFeatures = { ...UMLContainer.features, resizable: false }; static defaultGatewayType: BPMNGatewayType = 'exclusive'; type: UMLElementType = BPMNElementType.BPMNGateway; @@ -28,11 +28,11 @@ export class BPMNGateway extends UMLElement { constructor(values?: DeepPartial) { super(values); - assign(this, values); + assign(this, values); this.gatewayType = values?.gatewayType || BPMNGateway.defaultGatewayType; } - serialize(children?: UMLElement[]): Apollon.BPMNGateway { + serialize(children?: UMLContainer[]): Apollon.BPMNGateway { return { ...super.serialize(), type: this.type as keyof typeof BPMNElementType, diff --git a/src/main/packages/bpmn/bpmn-group/bpmn-group-component.tsx b/src/main/packages/bpmn/bpmn-group/bpmn-group-component.tsx new file mode 100644 index 000000000..bde3da253 --- /dev/null +++ b/src/main/packages/bpmn/bpmn-group/bpmn-group-component.tsx @@ -0,0 +1,36 @@ +import React, { FunctionComponent } from 'react'; +import { BPMNGroup } from './bpmn-group'; +import { ThemedRect } from '../../../components/theme/themedComponents'; +import { Multiline } from '../../../utils/svg/multiline'; + +export const BPMNGroupComponent: FunctionComponent = ({ element, children }) => ( + + + + {element.name} + + {children} + +); + +interface Props { + element: BPMNGroup; + children?: React.ReactNode; +} diff --git a/src/main/packages/bpmn/bpmn-group/bpmn-group.ts b/src/main/packages/bpmn/bpmn-group/bpmn-group.ts new file mode 100644 index 000000000..8489655ea --- /dev/null +++ b/src/main/packages/bpmn/bpmn-group/bpmn-group.ts @@ -0,0 +1,21 @@ +import { BPMNElementType } from '..'; +import { ILayer } from '../../../services/layouter/layer'; +import { ILayoutable } from '../../../services/layouter/layoutable'; +import { UMLPackage } from '../../common/uml-package/uml-package'; +import { calculateNameBounds } from '../../../utils/name-bounds'; +import { UMLElementType } from '../../uml-element-type'; +import { UMLElementFeatures } from '../../../services/uml-element/uml-element-features'; + +export class BPMNGroup extends UMLPackage { + static features: UMLElementFeatures = { + ...UMLPackage.features, + connectable: false, + }; + + type: UMLElementType = BPMNElementType.BPMNGroup; + + render(canvas: ILayer, children: ILayoutable[] = []): ILayoutable[] { + this.bounds = calculateNameBounds(this, canvas); + return [this, ...children]; + } +} diff --git a/src/main/packages/bpmn/bpmn-intermediate-event/bpmn-intermediate-event.ts b/src/main/packages/bpmn/bpmn-intermediate-event/bpmn-intermediate-event.ts index b375dfeaf..b5680db39 100644 --- a/src/main/packages/bpmn/bpmn-intermediate-event/bpmn-intermediate-event.ts +++ b/src/main/packages/bpmn/bpmn-intermediate-event/bpmn-intermediate-event.ts @@ -2,22 +2,22 @@ import { DeepPartial } from 'redux'; import { BPMNElementType, BPMNRelationshipType } from '..'; import { ILayer } from '../../../services/layouter/layer'; import { ILayoutable } from '../../../services/layouter/layoutable'; -import { IUMLElement, UMLElement } from '../../../services/uml-element/uml-element'; import { UMLElementFeatures } from '../../../services/uml-element/uml-element-features'; import { assign } from '../../../utils/fx/assign'; import { IBoundary } from '../../../utils/geometry/boundary'; import { UMLElementType } from '../../uml-element-type'; +import { UMLContainer } from '../../../services/uml-container/uml-container'; -export class BPMNIntermediateEvent extends UMLElement { +export class BPMNIntermediateEvent extends UMLContainer { static supportedRelationships = [BPMNRelationshipType.BPMNFlow]; - static features: UMLElementFeatures = { ...UMLElement.features, resizable: false }; + static features: UMLElementFeatures = { ...UMLContainer.features, resizable: false }; type: UMLElementType = BPMNElementType.BPMNIntermediateEvent; bounds: IBoundary = { ...this.bounds, width: 40, height: 40 }; - constructor(values?: DeepPartial) { + constructor(values?: DeepPartial) { super(values); - assign(this, values); + assign(this, values); } render(canvas: ILayer): ILayoutable[] { diff --git a/src/main/packages/bpmn/bpmn-start-event/bpmn-start-event.ts b/src/main/packages/bpmn/bpmn-start-event/bpmn-start-event.ts index 9c1aa60f5..089e42ea3 100644 --- a/src/main/packages/bpmn/bpmn-start-event/bpmn-start-event.ts +++ b/src/main/packages/bpmn/bpmn-start-event/bpmn-start-event.ts @@ -2,23 +2,23 @@ import { DeepPartial } from 'redux'; import { BPMNElementType, BPMNRelationshipType } from '..'; import { ILayer } from '../../../services/layouter/layer'; import { ILayoutable } from '../../../services/layouter/layoutable'; -import { IUMLElement, UMLElement } from '../../../services/uml-element/uml-element'; import { UMLElementFeatures } from '../../../services/uml-element/uml-element-features'; import { assign } from '../../../utils/fx/assign'; import { IBoundary } from '../../../utils/geometry/boundary'; import { UMLElementType } from '../../uml-element-type'; +import { UMLContainer } from '../../../services/uml-container/uml-container'; -export class BPMNStartEvent extends UMLElement { +export class BPMNStartEvent extends UMLContainer { static supportedRelationships = [BPMNRelationshipType.BPMNFlow]; - static features: UMLElementFeatures = { ...UMLElement.features, resizable: false }; + static features: UMLElementFeatures = { ...UMLContainer.features, resizable: false }; type: UMLElementType = BPMNElementType.BPMNStartEvent; bounds: IBoundary = { ...this.bounds, width: 40, height: 40 }; name = 'Start Event'; - constructor(values?: DeepPartial) { + constructor(values?: DeepPartial) { super(values); - assign(this, values); + assign(this, values); } render(canvas: ILayer): ILayoutable[] { diff --git a/src/main/packages/bpmn/bpmn-subprocess/bpmn-subprocess-component.tsx b/src/main/packages/bpmn/bpmn-subprocess/bpmn-subprocess-component.tsx index 40e7bf83a..a1edec64d 100644 --- a/src/main/packages/bpmn/bpmn-subprocess/bpmn-subprocess-component.tsx +++ b/src/main/packages/bpmn/bpmn-subprocess/bpmn-subprocess-component.tsx @@ -1,6 +1,6 @@ import React, { FunctionComponent } from 'react'; import { BPMNSubprocess } from './bpmn-subprocess'; -import { ThemedRect } from '../../../components/theme/themedComponents'; +import { ThemedPolyline, ThemedRect } from '../../../components/theme/themedComponents'; import { Multiline } from '../../../utils/svg/multiline'; export const BPMNSubprocessComponent: FunctionComponent = ({ element, fillColor }) => ( @@ -12,7 +12,23 @@ export const BPMNSubprocessComponent: FunctionComponent = ({ element, fil height="100%" strokeColor={element.strokeColor} fillColor={fillColor || element.fillColor} - strokeDasharray="4" + /> + + + { - return 0; -}; - it('render the bpmn-annotation-component', () => { const annotation: BPMNAnnotation = new BPMNAnnotation({ name: 'Annotation' }); const { getByText, baseElement } = wrappedRender( diff --git a/src/tests/unit/packages/bpmn/bpmn-call-activity/bpmn-call-activity-component-test.tsx b/src/tests/unit/packages/bpmn/bpmn-call-activity/bpmn-call-activity-component-test.tsx index f5380daa2..c3a94e558 100644 --- a/src/tests/unit/packages/bpmn/bpmn-call-activity/bpmn-call-activity-component-test.tsx +++ b/src/tests/unit/packages/bpmn/bpmn-call-activity/bpmn-call-activity-component-test.tsx @@ -1,19 +1,8 @@ import { wrappedRender } from '../../../test-utils/render'; import * as React from 'react'; -import { SyntaxTreeTerminal } from '../../../../../main/packages/syntax-tree/syntax-tree-terminal/syntax-tree-terminal'; -import { SyntaxTreeTerminalComponent } from '../../../../../main/packages/syntax-tree/syntax-tree-terminal/syntax-tree-terminal-component'; -import { Multiline } from '../../../../../main/utils/svg/multiline'; -import { CSSProperties } from 'react'; -import { BPMNAnnotation } from '../../../../../main/packages/bpmn/bpmn-annotation/bpmn-annotation'; -import { BPMNAnnotationComponent } from '../../../../../main/packages/bpmn/bpmn-annotation/bpmn-annotation-component'; import { BPMNCallActivity } from '../../../../../main/packages/bpmn/bpmn-call-activity/bpmn-call-activity'; import { BPMNCallActivityComponent } from '../../../../../main/packages/bpmn/bpmn-call-activity/bpmn-call-activity-component'; -// override getStringWidth, because it uses by jsdom unsupported SVGElement methods -Multiline.prototype.getStringWidth = (str: string, style?: CSSProperties) => { - return 0; -}; - it('render the bpmn-call-activity-component', () => { const callActivity: BPMNCallActivity = new BPMNCallActivity({ name: 'Call Activity' }); const { getByText, baseElement } = wrappedRender( diff --git a/src/tests/unit/packages/bpmn/bpmn-conversation/bpmn-conversation-component-test.tsx b/src/tests/unit/packages/bpmn/bpmn-conversation/bpmn-conversation-component-test.tsx index c8ea06c93..4bbca09e6 100644 --- a/src/tests/unit/packages/bpmn/bpmn-conversation/bpmn-conversation-component-test.tsx +++ b/src/tests/unit/packages/bpmn/bpmn-conversation/bpmn-conversation-component-test.tsx @@ -1,19 +1,8 @@ import { wrappedRender } from '../../../test-utils/render'; import * as React from 'react'; -import { SyntaxTreeTerminal } from '../../../../../main/packages/syntax-tree/syntax-tree-terminal/syntax-tree-terminal'; -import { SyntaxTreeTerminalComponent } from '../../../../../main/packages/syntax-tree/syntax-tree-terminal/syntax-tree-terminal-component'; -import { Multiline } from '../../../../../main/utils/svg/multiline'; -import { CSSProperties } from 'react'; -import { BPMNAnnotation } from '../../../../../main/packages/bpmn/bpmn-annotation/bpmn-annotation'; -import { BPMNAnnotationComponent } from '../../../../../main/packages/bpmn/bpmn-annotation/bpmn-annotation-component'; import { BPMNConversationComponent } from '../../../../../main/packages/bpmn/bpmn-conversation/bpmn-conversation-component'; import { BPMNConversation } from '../../../../../main/packages/bpmn/bpmn-conversation/bpmn-conversation'; -// override getStringWidth, because it uses by jsdom unsupported SVGElement methods -Multiline.prototype.getStringWidth = (str: string, style?: CSSProperties) => { - return 0; -}; - it('render the bpmn-conversation-component', () => { const conversation: BPMNConversation = new BPMNConversation({ name: 'Conversation' }); const { getByText, baseElement } = wrappedRender( diff --git a/src/tests/unit/packages/bpmn/bpmn-end-event/bpmn-end-event-component-test.tsx b/src/tests/unit/packages/bpmn/bpmn-end-event/bpmn-end-event-component-test.tsx index f7b5f1b57..4fb5eed13 100644 --- a/src/tests/unit/packages/bpmn/bpmn-end-event/bpmn-end-event-component-test.tsx +++ b/src/tests/unit/packages/bpmn/bpmn-end-event/bpmn-end-event-component-test.tsx @@ -1,19 +1,8 @@ import { wrappedRender } from '../../../test-utils/render'; import * as React from 'react'; -import { SyntaxTreeTerminal } from '../../../../../main/packages/syntax-tree/syntax-tree-terminal/syntax-tree-terminal'; -import { SyntaxTreeTerminalComponent } from '../../../../../main/packages/syntax-tree/syntax-tree-terminal/syntax-tree-terminal-component'; -import { Multiline } from '../../../../../main/utils/svg/multiline'; -import { CSSProperties } from 'react'; -import { BPMNAnnotation } from '../../../../../main/packages/bpmn/bpmn-annotation/bpmn-annotation'; -import { BPMNAnnotationComponent } from '../../../../../main/packages/bpmn/bpmn-annotation/bpmn-annotation-component'; import { BPMNEndEventComponent } from '../../../../../main/packages/bpmn/bpmn-end-event/bpmn-end-event-component'; import { BPMNEndEvent } from '../../../../../main/packages/bpmn/bpmn-end-event/bpmn-end-event'; -// override getStringWidth, because it uses by jsdom unsupported SVGElement methods -Multiline.prototype.getStringWidth = (str: string, style?: CSSProperties) => { - return 0; -}; - it('render the bpmn-end-event-component', () => { const endEvent: BPMNEndEvent = new BPMNEndEvent({ name: 'End' }); const { getByText, baseElement } = wrappedRender( diff --git a/src/tests/unit/packages/bpmn/bpmn-flow/bpmn-flow-component-test.tsx b/src/tests/unit/packages/bpmn/bpmn-flow/bpmn-flow-component-test.tsx index 049fb22d0..7ba120795 100644 --- a/src/tests/unit/packages/bpmn/bpmn-flow/bpmn-flow-component-test.tsx +++ b/src/tests/unit/packages/bpmn/bpmn-flow/bpmn-flow-component-test.tsx @@ -1,19 +1,8 @@ import { wrappedRender } from '../../../test-utils/render'; import * as React from 'react'; -import { SyntaxTreeTerminal } from '../../../../../main/packages/syntax-tree/syntax-tree-terminal/syntax-tree-terminal'; -import { SyntaxTreeTerminalComponent } from '../../../../../main/packages/syntax-tree/syntax-tree-terminal/syntax-tree-terminal-component'; -import { Multiline } from '../../../../../main/utils/svg/multiline'; -import { CSSProperties } from 'react'; -import { BPMNAnnotation } from '../../../../../main/packages/bpmn/bpmn-annotation/bpmn-annotation'; -import { BPMNAnnotationComponent } from '../../../../../main/packages/bpmn/bpmn-annotation/bpmn-annotation-component'; import { BPMNFlow } from '../../../../../main/packages/bpmn/bpmn-flow/bpmn-flow'; import { BPMNFlowComponent } from '../../../../../main/packages/bpmn/bpmn-flow/bpmn-flow-component'; -// override getStringWidth, because it uses by jsdom unsupported SVGElement methods -Multiline.prototype.getStringWidth = (str: string, style?: CSSProperties) => { - return 0; -}; - it('render the bpmn-flow-component', () => { const flow: BPMNFlow = new BPMNFlow({ id: '1', name: 'Sequence' }); const { getByText, baseElement } = wrappedRender( diff --git a/src/tests/unit/packages/bpmn/bpmn-gateway/bpmn-gateway-component-test.tsx b/src/tests/unit/packages/bpmn/bpmn-gateway/bpmn-gateway-component-test.tsx index 6da9e308e..1e3cc520e 100644 --- a/src/tests/unit/packages/bpmn/bpmn-gateway/bpmn-gateway-component-test.tsx +++ b/src/tests/unit/packages/bpmn/bpmn-gateway/bpmn-gateway-component-test.tsx @@ -1,19 +1,8 @@ import { wrappedRender } from '../../../test-utils/render'; import * as React from 'react'; -import { SyntaxTreeTerminal } from '../../../../../main/packages/syntax-tree/syntax-tree-terminal/syntax-tree-terminal'; -import { SyntaxTreeTerminalComponent } from '../../../../../main/packages/syntax-tree/syntax-tree-terminal/syntax-tree-terminal-component'; -import { Multiline } from '../../../../../main/utils/svg/multiline'; -import { CSSProperties } from 'react'; -import { BPMNAnnotation } from '../../../../../main/packages/bpmn/bpmn-annotation/bpmn-annotation'; -import { BPMNAnnotationComponent } from '../../../../../main/packages/bpmn/bpmn-annotation/bpmn-annotation-component'; import { BPMNGateway } from '../../../../../main/packages/bpmn/bpmn-gateway/bpmn-gateway'; import { BPMNGatewayComponent } from '../../../../../main/packages/bpmn/bpmn-gateway/bpmn-gateway-component'; -// override getStringWidth, because it uses by jsdom unsupported SVGElement methods -Multiline.prototype.getStringWidth = (str: string, style?: CSSProperties) => { - return 0; -}; - it('render the bpmn-gateway-component', () => { const gateway: BPMNGateway = new BPMNGateway({ name: 'Gateway' }); const { getByText, baseElement } = wrappedRender( diff --git a/src/tests/unit/packages/bpmn/bpmn-group/__snapshots__/bpmn-group-component-test.tsx.snap b/src/tests/unit/packages/bpmn/bpmn-group/__snapshots__/bpmn-group-component-test.tsx.snap new file mode 100644 index 000000000..710cfef54 --- /dev/null +++ b/src/tests/unit/packages/bpmn/bpmn-group/__snapshots__/bpmn-group-component-test.tsx.snap @@ -0,0 +1,38 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`render the bpmn-group-component 1`] = ` + +
+ + + + + + Group + + + + +
+ +`; diff --git a/src/tests/unit/packages/bpmn/bpmn-group/bpmn-group-component-test.tsx b/src/tests/unit/packages/bpmn/bpmn-group/bpmn-group-component-test.tsx new file mode 100644 index 000000000..07b1beb69 --- /dev/null +++ b/src/tests/unit/packages/bpmn/bpmn-group/bpmn-group-component-test.tsx @@ -0,0 +1,15 @@ +import { wrappedRender } from '../../../test-utils/render'; +import * as React from 'react'; +import { BPMNGroup } from '../../../../../main/packages/bpmn/bpmn-group/bpmn-group'; +import { BPMNGroupComponent } from '../../../../../main/packages/bpmn/bpmn-group/bpmn-group-component'; + +it('render the bpmn-group-component', () => { + const group: BPMNGroup = new BPMNGroup({ name: 'Group' }); + const { getByText, baseElement } = wrappedRender( + + + , + ); + expect(getByText(group.name)).toBeInTheDocument(); + expect(baseElement).toMatchSnapshot(); +}); diff --git a/src/tests/unit/packages/bpmn/bpmn-intermediate-event/bpmn-intermediate-event-component-test.tsx b/src/tests/unit/packages/bpmn/bpmn-intermediate-event/bpmn-intermediate-event-component-test.tsx index 07db25765..1dc13da3d 100644 --- a/src/tests/unit/packages/bpmn/bpmn-intermediate-event/bpmn-intermediate-event-component-test.tsx +++ b/src/tests/unit/packages/bpmn/bpmn-intermediate-event/bpmn-intermediate-event-component-test.tsx @@ -1,19 +1,8 @@ import { wrappedRender } from '../../../test-utils/render'; import * as React from 'react'; -import { SyntaxTreeTerminal } from '../../../../../main/packages/syntax-tree/syntax-tree-terminal/syntax-tree-terminal'; -import { SyntaxTreeTerminalComponent } from '../../../../../main/packages/syntax-tree/syntax-tree-terminal/syntax-tree-terminal-component'; -import { Multiline } from '../../../../../main/utils/svg/multiline'; -import { CSSProperties } from 'react'; -import { BPMNAnnotation } from '../../../../../main/packages/bpmn/bpmn-annotation/bpmn-annotation'; -import { BPMNAnnotationComponent } from '../../../../../main/packages/bpmn/bpmn-annotation/bpmn-annotation-component'; import { BPMNIntermediateEvent } from '../../../../../main/packages/bpmn/bpmn-intermediate-event/bpmn-intermediate-event'; import { BPMNIntermediateEventComponent } from '../../../../../main/packages/bpmn/bpmn-intermediate-event/bpmn-intermediate-event-component'; -// override getStringWidth, because it uses by jsdom unsupported SVGElement methods -Multiline.prototype.getStringWidth = (str: string, style?: CSSProperties) => { - return 0; -}; - it('render the bpmn-intermediate-event-component', () => { const intermediateEvent: BPMNIntermediateEvent = new BPMNIntermediateEvent({ name: 'Event' }); const { getByText, baseElement } = wrappedRender( diff --git a/src/tests/unit/packages/bpmn/bpmn-start-event/bpmn-start-event-component-test.tsx b/src/tests/unit/packages/bpmn/bpmn-start-event/bpmn-start-event-component-test.tsx index 53a1589d3..959cd0298 100644 --- a/src/tests/unit/packages/bpmn/bpmn-start-event/bpmn-start-event-component-test.tsx +++ b/src/tests/unit/packages/bpmn/bpmn-start-event/bpmn-start-event-component-test.tsx @@ -1,19 +1,8 @@ import { wrappedRender } from '../../../test-utils/render'; import * as React from 'react'; -import { SyntaxTreeTerminal } from '../../../../../main/packages/syntax-tree/syntax-tree-terminal/syntax-tree-terminal'; -import { SyntaxTreeTerminalComponent } from '../../../../../main/packages/syntax-tree/syntax-tree-terminal/syntax-tree-terminal-component'; -import { Multiline } from '../../../../../main/utils/svg/multiline'; -import { CSSProperties } from 'react'; -import { BPMNAnnotation } from '../../../../../main/packages/bpmn/bpmn-annotation/bpmn-annotation'; -import { BPMNAnnotationComponent } from '../../../../../main/packages/bpmn/bpmn-annotation/bpmn-annotation-component'; import { BPMNStartEvent } from '../../../../../main/packages/bpmn/bpmn-start-event/bpmn-start-event'; import { BPMNStartEventComponent } from '../../../../../main/packages/bpmn/bpmn-start-event/bpmn-start-event-component'; -// override getStringWidth, because it uses by jsdom unsupported SVGElement methods -Multiline.prototype.getStringWidth = (str: string, style?: CSSProperties) => { - return 0; -}; - it('render the bpmn-start-event-component', () => { const startEvent: BPMNStartEvent = new BPMNStartEvent({ name: 'Start' }); const { getByText, baseElement } = wrappedRender( diff --git a/src/tests/unit/packages/bpmn/bpmn-subprocess/__snapshots__/bpmn-subprocess-component-test.tsx.snap b/src/tests/unit/packages/bpmn/bpmn-subprocess/__snapshots__/bpmn-subprocess-component-test.tsx.snap index bf892c3cc..307441bfb 100644 --- a/src/tests/unit/packages/bpmn/bpmn-subprocess/__snapshots__/bpmn-subprocess-component-test.tsx.snap +++ b/src/tests/unit/packages/bpmn/bpmn-subprocess/__snapshots__/bpmn-subprocess-component-test.tsx.snap @@ -12,9 +12,29 @@ exports[`render the bpmn-subprocess-component 1`] = ` rx="10" ry="10" stroke="black" - stroke-dasharray="4" width="100%" /> + + + { - return 0; -}; - it('render the bpmn-subprocess-component', () => { const subprocess: BPMNSubprocess = new BPMNSubprocess({ name: 'SyntaxTreeTerminal' }); const { getByText, baseElement } = wrappedRender( diff --git a/src/tests/unit/packages/bpmn/bpmn-task/bpmn-task-component-test.tsx b/src/tests/unit/packages/bpmn/bpmn-task/bpmn-task-component-test.tsx index 23883fbaf..b30169eca 100644 --- a/src/tests/unit/packages/bpmn/bpmn-task/bpmn-task-component-test.tsx +++ b/src/tests/unit/packages/bpmn/bpmn-task/bpmn-task-component-test.tsx @@ -1,19 +1,8 @@ import { wrappedRender } from '../../../test-utils/render'; import * as React from 'react'; -import { SyntaxTreeTerminal } from '../../../../../main/packages/syntax-tree/syntax-tree-terminal/syntax-tree-terminal'; -import { SyntaxTreeTerminalComponent } from '../../../../../main/packages/syntax-tree/syntax-tree-terminal/syntax-tree-terminal-component'; -import { Multiline } from '../../../../../main/utils/svg/multiline'; -import { CSSProperties } from 'react'; -import { BPMNAnnotation } from '../../../../../main/packages/bpmn/bpmn-annotation/bpmn-annotation'; -import { BPMNAnnotationComponent } from '../../../../../main/packages/bpmn/bpmn-annotation/bpmn-annotation-component'; import { BPMNTask } from '../../../../../main/packages/bpmn/bpmn-task/bpmn-task'; import { BPMNTaskComponent } from '../../../../../main/packages/bpmn/bpmn-task/bpmn-task-component'; -// override getStringWidth, because it uses by jsdom unsupported SVGElement methods -Multiline.prototype.getStringWidth = (str: string, style?: CSSProperties) => { - return 0; -}; - it('render the bpmn-task-component', () => { const task: BPMNTask = new BPMNTask({ name: 'Task' }); const { getByText, baseElement } = wrappedRender( diff --git a/src/tests/unit/packages/bpmn/bpmn-transaction/bpmn-transaction-component-test.tsx b/src/tests/unit/packages/bpmn/bpmn-transaction/bpmn-transaction-component-test.tsx index c963fb01b..1fdb17702 100644 --- a/src/tests/unit/packages/bpmn/bpmn-transaction/bpmn-transaction-component-test.tsx +++ b/src/tests/unit/packages/bpmn/bpmn-transaction/bpmn-transaction-component-test.tsx @@ -1,19 +1,8 @@ import { wrappedRender } from '../../../test-utils/render'; import * as React from 'react'; -import { SyntaxTreeTerminal } from '../../../../../main/packages/syntax-tree/syntax-tree-terminal/syntax-tree-terminal'; -import { SyntaxTreeTerminalComponent } from '../../../../../main/packages/syntax-tree/syntax-tree-terminal/syntax-tree-terminal-component'; -import { Multiline } from '../../../../../main/utils/svg/multiline'; -import { CSSProperties } from 'react'; -import { BPMNAnnotation } from '../../../../../main/packages/bpmn/bpmn-annotation/bpmn-annotation'; -import { BPMNAnnotationComponent } from '../../../../../main/packages/bpmn/bpmn-annotation/bpmn-annotation-component'; import { BPMNTransaction } from '../../../../../main/packages/bpmn/bpmn-transaction/bpmn-transaction'; import { BPMNTransactionComponent } from '../../../../../main/packages/bpmn/bpmn-transaction/bpmn-transaction-component'; -// override getStringWidth, because it uses by jsdom unsupported SVGElement methods -Multiline.prototype.getStringWidth = (str: string, style?: CSSProperties) => { - return 0; -}; - it('render the bpmn-transaction-component', () => { const transaction: BPMNTransaction = new BPMNTransaction({ name: 'Transaction' }); const { getByText, baseElement } = wrappedRender(