mirror of
https://github.com/scratchfoundation/scratch-vm.git
synced 2025-07-04 18:20:24 -04:00
Merge pull request #1822 from paulkaplan/fix-list-clones
Make duplicateVariable deep copy the array instead of keeping reference.
This commit is contained in:
commit
23d9c21a0e
2 changed files with 18 additions and 1 deletions
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue