mirror of
https://github.com/scratchfoundation/scratch-vm.git
synced 2024-12-24 15:02:52 -05:00
111 lines
2.7 KiB
JavaScript
111 lines
2.7 KiB
JavaScript
|
const test = require('tap').test;
|
||
|
const Variable = require('../../src/engine/variable');
|
||
|
const htmlparser = require('htmlparser2');
|
||
|
|
||
|
test('spec', t => {
|
||
|
t.type(typeof Variable.SCALAR_TYPE, typeof Variable.LIST_TYPE);
|
||
|
t.type(typeof Variable.SCALAR_TYPE, typeof Variable.BROADCAST_MESSAGE_TYPE);
|
||
|
|
||
|
const varId = 'varId';
|
||
|
const varName = 'varName';
|
||
|
const varIsCloud = false;
|
||
|
let v = new Variable(
|
||
|
varId,
|
||
|
varName,
|
||
|
Variable.SCALAR_TYPE,
|
||
|
varIsCloud
|
||
|
);
|
||
|
|
||
|
t.type(Variable, 'function');
|
||
|
t.type(v, 'object');
|
||
|
t.ok(v instanceof Variable);
|
||
|
|
||
|
t.equal(v.id, varId);
|
||
|
t.equal(v.name, varName);
|
||
|
t.equal(v.type, Variable.SCALAR_TYPE);
|
||
|
t.type(v.value, 'number');
|
||
|
t.equal(v.isCloud, varIsCloud);
|
||
|
|
||
|
t.type(v.toXML, 'function');
|
||
|
|
||
|
v = new Variable(
|
||
|
varId,
|
||
|
varName,
|
||
|
Variable.LIST_TYPE,
|
||
|
varIsCloud
|
||
|
);
|
||
|
t.ok(Array.isArray(v.value));
|
||
|
|
||
|
v = new Variable(
|
||
|
varId,
|
||
|
varName,
|
||
|
Variable.BROADCAST_MESSAGE_TYPE,
|
||
|
varIsCloud
|
||
|
);
|
||
|
t.equal(v.value, 'varName');
|
||
|
|
||
|
t.end();
|
||
|
});
|
||
|
|
||
|
test('toXML', t => {
|
||
|
const varId = 'varId';
|
||
|
const varName = 'varName';
|
||
|
const varIsCloud = false;
|
||
|
const varIsLocal = false;
|
||
|
const v = new Variable(
|
||
|
varId,
|
||
|
varName,
|
||
|
Variable.SCALAR_TYPE,
|
||
|
varIsCloud
|
||
|
);
|
||
|
|
||
|
const parser = new htmlparser.Parser({
|
||
|
onopentag: function (name, attribs){
|
||
|
if (name === 'variable'){
|
||
|
t.equal(attribs.type, Variable.SCALAR_TYPE);
|
||
|
t.equal(attribs.id, varId);
|
||
|
t.equal(attribs.iscloud, varIsCloud.toString());
|
||
|
t.equal(attribs.islocal, varIsLocal.toString());
|
||
|
}
|
||
|
},
|
||
|
ontext: function (text){
|
||
|
t.equal(text, varName);
|
||
|
}
|
||
|
}, {decodeEntities: false});
|
||
|
parser.write(v.toXML(false));
|
||
|
parser.end();
|
||
|
|
||
|
t.end();
|
||
|
});
|
||
|
|
||
|
test('escape variable name for XML', t => {
|
||
|
const varId = 'varId';
|
||
|
const varName = '<>&\'"';
|
||
|
const varIsCloud = false;
|
||
|
const varIsLocal = false;
|
||
|
const v = new Variable(
|
||
|
varId,
|
||
|
varName,
|
||
|
Variable.SCALAR_TYPE,
|
||
|
varIsCloud
|
||
|
);
|
||
|
|
||
|
const parser = new htmlparser.Parser({
|
||
|
onopentag: function (name, attribs){
|
||
|
if (name === 'variable'){
|
||
|
t.equal(attribs.type, Variable.SCALAR_TYPE);
|
||
|
t.equal(attribs.id, varId);
|
||
|
t.equal(attribs.iscloud, varIsCloud.toString());
|
||
|
t.equal(attribs.islocal, varIsLocal.toString());
|
||
|
}
|
||
|
},
|
||
|
ontext: function (text){
|
||
|
t.equal(text, '<>&'"');
|
||
|
}
|
||
|
}, {decodeEntities: false});
|
||
|
parser.write(v.toXML(false));
|
||
|
parser.end();
|
||
|
|
||
|
t.end();
|
||
|
});
|