From 4f824feb958f92bb3669ef1462d382ceb1b6aba5 Mon Sep 17 00:00:00 2001 From: Philipp Fromme Date: Wed, 25 Sep 2019 10:36:07 +0200 Subject: [PATCH] fix(copy-paste): do NOT copy generic properties Related to camunda/camunda-modeler#1507 --- lib/features/copy-paste/ModdleCopy.js | 4 ++ .../features/copy-paste/ModdleCopySpec.js | 59 ++++++++++++++----- 2 files changed, 48 insertions(+), 15 deletions(-) diff --git a/lib/features/copy-paste/ModdleCopy.js b/lib/features/copy-paste/ModdleCopy.js index 748e458501..b225262bec 100644 --- a/lib/features/copy-paste/ModdleCopy.js +++ b/lib/features/copy-paste/ModdleCopy.js @@ -240,6 +240,10 @@ ModdleCopy.prototype.copyProperty = function(property, parent, propertyName) { // copy model elements if (isObject(property) && property.$type) { + if (this._moddle.getElementDescriptor(property).isGeneric) { + return; + } + copiedProperty = self._bpmnFactory.create(property.$type); copiedProperty.$parent = parent; diff --git a/test/spec/features/copy-paste/ModdleCopySpec.js b/test/spec/features/copy-paste/ModdleCopySpec.js index e28c7a45cb..01b8142c91 100644 --- a/test/spec/features/copy-paste/ModdleCopySpec.js +++ b/test/spec/features/copy-paste/ModdleCopySpec.js @@ -39,7 +39,7 @@ describe('features/copy-paste/ModdleCopy', function() { describe('simple', function() { - it('should copy primitive properties', inject(function(moddleCopy, moddle) { + it('should copy primitive properties', inject(function(moddle, moddleCopy) { // given var userTask = moddle.create('bpmn:UserTask', { @@ -56,7 +56,7 @@ describe('features/copy-paste/ModdleCopy', function() { })); - it('should copy arrays of properties', inject(function(moddleCopy, moddle) { + it('should copy arrays of properties', inject(function(moddle, moddleCopy) { // given var messageEventDefinition = moddle.create('bpmn:MessageEventDefinition'), @@ -80,7 +80,7 @@ describe('features/copy-paste/ModdleCopy', function() { it('should NOT copy properties that are not allowed in target element', inject( - function(moddleCopy, moddle) { + function(moddle, moddleCopy) { // given var userTask = moddle.create('bpmn:UserTask', { @@ -98,7 +98,7 @@ describe('features/copy-paste/ModdleCopy', function() { )); - it('should NOT copy IDs', inject(function(moddleCopy, moddle) { + it('should NOT copy IDs', inject(function(moddle, moddleCopy) { // given var task = moddle.create('bpmn:Task', { @@ -115,7 +115,7 @@ describe('features/copy-paste/ModdleCopy', function() { })); - it('should NOT copy references', inject(function(moddleCopy, moddle) { + it('should NOT copy references', inject(function(moddle, moddleCopy) { // given var processRef = moddle.create('bpmn:Process'), @@ -169,7 +169,7 @@ describe('features/copy-paste/ModdleCopy', function() { })); - it('should NOT copy empty extension elements', inject(function(moddleCopy, moddle) { + it('should NOT copy empty extension elements', inject(function(moddle, moddleCopy) { // given var connector = moddle.create('camunda:Connector'), @@ -194,7 +194,7 @@ describe('features/copy-paste/ModdleCopy', function() { })); - it('should only copy specified properties', inject(function(moddleCopy, moddle) { + it('should only copy specified properties', inject(function(moddle, moddleCopy) { // given var userTask = moddle.create('bpmn:UserTask', { @@ -221,7 +221,7 @@ describe('features/copy-paste/ModdleCopy', function() { describe('nested', function() { - it('should copy documentation', inject(function(moddleCopy, moddle) { + it('should copy documentation', inject(function(moddle, moddleCopy) { // given var documentation = [ @@ -245,7 +245,7 @@ describe('features/copy-paste/ModdleCopy', function() { })); - it('should copy execution listener', inject(function(moddleCopy, moddle) { + it('should copy execution listener', inject(function(moddle, moddleCopy) { // given var script = moddle.create('camunda:Script', { @@ -289,7 +289,7 @@ describe('features/copy-paste/ModdleCopy', function() { })); - it('should copy output parameter', inject(function(moddleCopy, moddle) { + it('should copy output parameter', inject(function(moddle, moddleCopy) { // given var outputParameter = moddle.create('camunda:OutputParameter', { @@ -360,7 +360,7 @@ describe('features/copy-paste/ModdleCopy', function() { describe('camunda:Connector', function() { it('should copy if parent is message event definition and is child of end event', inject( - function(moddleCopy, moddle) { + function(moddle, moddleCopy) { // given var connector = moddle.create('camunda:Connector', { @@ -399,7 +399,7 @@ describe('features/copy-paste/ModdleCopy', function() { describe('camunda:Field', function() { it('should copy if parent is message event definition and is child of end event', inject( - function(moddleCopy, moddle) { + function(moddle, moddleCopy) { // given var field = moddle.create('camunda:Field', { @@ -438,7 +438,7 @@ describe('features/copy-paste/ModdleCopy', function() { describe('camunda:FailedJobRetryTimeCycle', function() { it('should copy if parent is SignalEventDefinition and is intermediate throwing', inject( - function(moddleCopy, moddle) { + function(moddle, moddleCopy) { // given var retryCycle = moddle.create('camunda:FailedJobRetryTimeCycle', { @@ -475,7 +475,7 @@ describe('features/copy-paste/ModdleCopy', function() { it('should copy if parent is TimerEventDefinition and is catching', inject( - function(moddleCopy, moddle) { + function(moddle, moddleCopy) { // given var retryCycle = moddle.create('camunda:FailedJobRetryTimeCycle', { @@ -509,7 +509,7 @@ describe('features/copy-paste/ModdleCopy', function() { )); - it('should copy if parent is call activity', inject(function(moddleCopy, moddle) { + it('should copy if parent is call activity', inject(function(moddle, moddleCopy) { // given var retryCycle = moddle.create('camunda:FailedJobRetryTimeCycle', { @@ -542,6 +542,35 @@ describe('features/copy-paste/ModdleCopy', function() { }); + + describe('generic properties', function() { + + it('should not copy generic extension elements', inject(function(moddle, moddleCopy) { + + // given + var genericExtensionElement = moddle.createAny('foo:property', { + value: 'foo' + }); + + var extensionElements = moddle.create('bpmn:ExtensionElements'), + startEvent = moddle.create('bpmn:StartEvent'); + + genericExtensionElement.$parent = extensionElements; + + extensionElements.$parent = startEvent; + extensionElements.values = [ genericExtensionElement ]; + + startEvent.extensionElements = extensionElements; + + // when + var endEvent = moddleCopy.copyElement(startEvent, moddle.create('bpmn:EndEvent')); + + // then + expect(endEvent.extensionElements).not.to.exist; + })); + + }); + });