mirror of
https://github.com/sartography/bpmn-js.git
synced 2025-01-17 20:41:32 +00:00
b4b5d1d139
With diagram-js@5 we've introduced the CreateBehavior that ensures elements are not created on top of lanes but always on top of the actual participant. Unfortunately we forgot about the fact that lanes are created once in a while, too. This commit accounts for this fact and ensures we do not adjust the parent of to-be-created lanes. (A test cases for splitting nested lanes did not exist until now). Closes #1254 Closes #1253
271 lines
7.1 KiB
JavaScript
271 lines
7.1 KiB
JavaScript
import {
|
|
bootstrapModeler,
|
|
inject
|
|
} from 'test/TestHelper';
|
|
|
|
var pick = require('min-dash').pick;
|
|
|
|
import modelingModule from 'lib/features/modeling';
|
|
import coreModule from 'lib/core';
|
|
|
|
var getChildLanes = require('lib/features/modeling/util/LaneUtil').getChildLanes;
|
|
|
|
|
|
function getBounds(element) {
|
|
return pick(element, [ 'x', 'y', 'width', 'height' ]);
|
|
}
|
|
|
|
|
|
describe('features/modeling - SplitLane', function() {
|
|
|
|
var testModules = [ coreModule, modelingModule ];
|
|
|
|
|
|
describe('should split Participant with Lane', function() {
|
|
|
|
var diagramXML = require('./participant-lane.bpmn');
|
|
|
|
beforeEach(bootstrapModeler(diagramXML, { modules: testModules }));
|
|
|
|
|
|
it('into two lanes', inject(function(elementRegistry, modeling) {
|
|
|
|
// given
|
|
var participantShape = elementRegistry.get('Participant_Lane'),
|
|
existingLane = elementRegistry.get('Lane'),
|
|
oldBounds = getBounds(participantShape);
|
|
|
|
// when
|
|
modeling.splitLane(participantShape, 2);
|
|
|
|
var childLanes = getChildLanes(participantShape);
|
|
|
|
var newLaneHeight = Math.round(participantShape.height / 2);
|
|
|
|
// then
|
|
|
|
// participant has original size
|
|
expect(participantShape).to.have.bounds(oldBounds);
|
|
|
|
// and two child lanes
|
|
expect(childLanes.length).to.eql(2);
|
|
|
|
// with the first lane being the original one
|
|
expect(childLanes[0]).to.equal(existingLane);
|
|
|
|
// with respective bounds
|
|
expect(childLanes[0]).to.have.bounds({
|
|
x: participantShape.x + 30,
|
|
y: participantShape.y,
|
|
width: participantShape.width - 30,
|
|
height: newLaneHeight
|
|
});
|
|
|
|
expect(childLanes[1]).to.have.bounds({
|
|
x: participantShape.x + 30,
|
|
y: participantShape.y + newLaneHeight,
|
|
width: participantShape.width - 30,
|
|
height: newLaneHeight - 1 // compensate for rounding issues
|
|
});
|
|
}));
|
|
|
|
|
|
it('into three lanes', inject(function(elementRegistry, modeling) {
|
|
|
|
// given
|
|
var participantShape = elementRegistry.get('Participant_Lane'),
|
|
existingLane = elementRegistry.get('Lane'),
|
|
oldBounds = getBounds(participantShape);
|
|
|
|
// when
|
|
modeling.splitLane(participantShape, 3);
|
|
|
|
var childLanes = getChildLanes(participantShape);
|
|
|
|
var newLaneHeight = Math.round(participantShape.height / 3);
|
|
|
|
// then
|
|
|
|
// participant has original size
|
|
expect(participantShape).to.have.bounds(oldBounds);
|
|
|
|
// and two child lanes
|
|
expect(childLanes.length).to.eql(3);
|
|
|
|
// with the first lane being the original one
|
|
expect(childLanes[0]).to.equal(existingLane);
|
|
|
|
// with respective bounds
|
|
expect(childLanes[0]).to.have.bounds({
|
|
x: participantShape.x + 30,
|
|
y: participantShape.y,
|
|
width: participantShape.width - 30,
|
|
height: newLaneHeight
|
|
});
|
|
|
|
expect(childLanes[1]).to.have.bounds({
|
|
x: participantShape.x + 30,
|
|
y: participantShape.y + newLaneHeight,
|
|
width: participantShape.width - 30,
|
|
height: newLaneHeight
|
|
});
|
|
|
|
expect(childLanes[2]).to.have.bounds({
|
|
x: participantShape.x + 30,
|
|
y: participantShape.y + newLaneHeight * 2,
|
|
width: participantShape.width - 30,
|
|
height: newLaneHeight - 1 // compensate for rounding issues
|
|
});
|
|
}));
|
|
|
|
});
|
|
|
|
|
|
describe('should split Participant without Lane', function() {
|
|
|
|
var diagramXML = require('./participant-no-lane.bpmn');
|
|
|
|
beforeEach(bootstrapModeler(diagramXML, { modules: testModules }));
|
|
|
|
|
|
it('into two lanes', inject(function(elementRegistry, modeling) {
|
|
|
|
// given
|
|
var participantShape = elementRegistry.get('Participant_No_Lane'),
|
|
oldBounds = getBounds(participantShape);
|
|
|
|
// when
|
|
modeling.splitLane(participantShape, 2);
|
|
|
|
var childLanes = getChildLanes(participantShape);
|
|
|
|
var newLaneHeight = Math.round(participantShape.height / 2);
|
|
|
|
// then
|
|
|
|
// participant has original size
|
|
expect(participantShape).to.have.bounds(oldBounds);
|
|
|
|
// and two child lanes
|
|
expect(childLanes).to.have.length(2);
|
|
|
|
// with respective bounds
|
|
expect(childLanes[0]).to.have.bounds({
|
|
x: participantShape.x + 30,
|
|
y: participantShape.y,
|
|
width: participantShape.width - 30,
|
|
height: newLaneHeight
|
|
});
|
|
|
|
expect(childLanes[1]).to.have.bounds({
|
|
x: participantShape.x + 30,
|
|
y: participantShape.y + newLaneHeight,
|
|
width: participantShape.width - 30,
|
|
height: newLaneHeight
|
|
});
|
|
}));
|
|
|
|
|
|
it('into three lanes', inject(function(elementRegistry, modeling) {
|
|
|
|
// given
|
|
var participantShape = elementRegistry.get('Participant_No_Lane'),
|
|
oldBounds = getBounds(participantShape);
|
|
|
|
// when
|
|
modeling.splitLane(participantShape, 3);
|
|
|
|
var childLanes = getChildLanes(participantShape);
|
|
|
|
var newLaneHeight = Math.round(participantShape.height / 3);
|
|
|
|
// then
|
|
|
|
// participant has original size
|
|
expect(participantShape).to.have.bounds(oldBounds);
|
|
|
|
// and two child lanes
|
|
expect(childLanes).to.have.length(3);
|
|
|
|
// with respective bounds
|
|
expect(childLanes[0]).to.have.bounds({
|
|
x: participantShape.x + 30,
|
|
y: participantShape.y,
|
|
width: participantShape.width - 30,
|
|
height: newLaneHeight
|
|
});
|
|
|
|
expect(childLanes[1]).to.have.bounds({
|
|
x: participantShape.x + 30,
|
|
y: participantShape.y + newLaneHeight,
|
|
width: participantShape.width - 30,
|
|
height: newLaneHeight
|
|
});
|
|
|
|
expect(childLanes[2]).to.have.bounds({
|
|
x: participantShape.x + 30,
|
|
y: participantShape.y + newLaneHeight * 2,
|
|
width: participantShape.width - 30,
|
|
height: newLaneHeight + 1 // compensate for rounding issues
|
|
});
|
|
}));
|
|
|
|
});
|
|
|
|
|
|
describe('should split nested Lane', function() {
|
|
|
|
var diagramXML = require('./SplitLane.nested.bpmn');
|
|
|
|
beforeEach(bootstrapModeler(diagramXML, { modules: testModules }));
|
|
|
|
|
|
it('into two lanes', inject(function(elementRegistry, modeling) {
|
|
|
|
// given
|
|
var laneShape = elementRegistry.get('Lane'),
|
|
laneBo = laneShape.businessObject,
|
|
oldBounds = getBounds(laneShape);
|
|
|
|
// when
|
|
modeling.splitLane(laneShape, 2);
|
|
|
|
var childLanes = getChildLanes(laneShape);
|
|
|
|
var newLaneHeight = Math.round(laneShape.height / 2);
|
|
|
|
// then
|
|
|
|
// participant has original size
|
|
expect(laneShape).to.have.bounds(oldBounds);
|
|
|
|
// and two child lanes
|
|
expect(childLanes).to.have.length(2);
|
|
|
|
// with respective bounds
|
|
expect(childLanes[0]).to.have.bounds({
|
|
x: laneShape.x + 30,
|
|
y: laneShape.y,
|
|
width: laneShape.width - 30,
|
|
height: newLaneHeight
|
|
});
|
|
|
|
expect(childLanes[1]).to.have.bounds({
|
|
x: laneShape.x + 30,
|
|
y: laneShape.y + newLaneHeight,
|
|
width: laneShape.width - 30,
|
|
height: newLaneHeight
|
|
});
|
|
|
|
// BPMN internals are properly updated
|
|
expect(laneBo.childLaneSet).to.exist;
|
|
expect(laneBo.childLaneSet.lanes).to.eql([
|
|
childLanes[0].businessObject,
|
|
childLanes[1].businessObject
|
|
]);
|
|
|
|
}));
|
|
|
|
});
|
|
|
|
}); |