diff --git a/src/engine/target.js b/src/engine/target.js index 312f1319e..4be0774a2 100644 --- a/src/engine/target.js +++ b/src/engine/target.js @@ -354,7 +354,11 @@ class Target extends EventEmitter { originalVariable.type, originalVariable.isCloud ); - newVariable.value = originalVariable.value; + if (newVariable.type === Variable.LIST_TYPE) { + newVariable.value = originalVariable.value.slice(0); + } else { + newVariable.value = originalVariable.value; + } return newVariable; } return null; diff --git a/test/unit/engine_target.js b/test/unit/engine_target.js index 9fa83c94b..5d899399f 100644 --- a/test/unit/engine_target.js +++ b/test/unit/engine_target.js @@ -323,6 +323,19 @@ test('duplicateVariable creates a new variable with a new ID by default', t => { t.end(); }); +test('duplicateVariable creates new array reference for list variable.value', t => { + const target = new Target(); + const arr = [1, 2, 3]; + target.createVariable('a var ID', 'arr', Variable.LIST_TYPE); + const originalVariable = target.variables['a var ID']; + originalVariable.value = arr; + const newVariable = target.duplicateVariable('a var ID'); + // Values are deeply equal but not the same object + t.deepEqual(originalVariable.value, newVariable.value); + t.notEqual(originalVariable.value, newVariable.value); + t.end(); +}); + test('duplicateVariable creates a new variable with a original ID if specified', t => { const target = new Target(); target.createVariable('a var ID', 'foo', Variable.SCALAR_TYPE);