Merge pull request from paulkaplan/fix-list-clones

Make duplicateVariable deep copy the array instead of keeping reference.
This commit is contained in:
Paul Kaplan 2018-12-06 09:21:41 -05:00 committed by GitHub
commit 23d9c21a0e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 1 deletions
src/engine
test/unit

View file

@ -354,7 +354,11 @@ class Target extends EventEmitter {
originalVariable.type, originalVariable.type,
originalVariable.isCloud 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 newVariable;
} }
return null; return null;

View file

@ -323,6 +323,19 @@ test('duplicateVariable creates a new variable with a new ID by default', t => {
t.end(); 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 => { test('duplicateVariable creates a new variable with a original ID if specified', t => {
const target = new Target(); const target = new Target();
target.createVariable('a var ID', 'foo', Variable.SCALAR_TYPE); target.createVariable('a var ID', 'foo', Variable.SCALAR_TYPE);