Make duplicateVariable deep copy the array instead of keeping reference.

This commit is contained in:
Paul Kaplan 2018-12-05 16:27:10 -05:00
parent 122443a75f
commit d50504e339
2 changed files with 17 additions and 1 deletions
src/engine
test/unit

View file

@ -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;

View file

@ -323,6 +323,18 @@ 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'];
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);