Source code
Revision control
Copy as Markdown
Other Tools
(window => {
// Both a controlling side and a receiving one must share the same Stash ID to
// transmit data from one to the other. On the other hand, due to polling mechanism
// which cleans up a stash, stashes in both controller-to-receiver direction
// and one for receiver-to-controller are necessary.
window.stashIds = {
toController: '0c382524-5738-4df0-837d-4f53ea8addc2',
toReceiver: 'a9618cd1-ca2b-4155-b7f6-630dce953c44'
}
// handle a test result received from a receiving page
const parseValue = value => {
let r;
// String
if (r = value.match(/^(\(string\)\s+)?"(.*)"$/))
return r[2];
// Object
else if (r = value.match(/^(\(object\)\s+)?object\s+"\[object\s+(.*)\]"$/))
return window[r[2]].prototype;
// Number, boolean, null, undefined
else {
if (r = value.match(/^(\(\S+\)\s+)?(\S+)$/)) {
try {
return JSON.parse(r[2]);
} catch(e) {
return value;
}
}
else
return value;
}
};
window.parseResult = message => {
let r = message.match(/^(assert_.*):\s+(.*)$/);
if (r) {
const assertion = r[1];
const body = r[2];
let args;
switch (assertion) {
case 'assert_equals':
if (r = body.match(/^((.*)\s+)?expected\s+((\(\S*\)\s+)?(\S+|(\S+\s+)?\".*\"))\s+but\s+got\s+((\(\S*\)\s+)?(\S+|(\S+\s+)?\".*\"))$/))
args = [parseValue(r[7]), parseValue(r[3]), r[2]];
break;
case 'assert_true':
if (r = body.match(/^((.*)\s+)?expected\s+(true|false)\s+got\s+(\S+|(\S+\s+)?\".*\")$/))
args = [parseValue(r[4]), r[2]];
break;
case 'assert_unreached':
if (r = body.match(/^((.*)\s+)?Reached\s+unreachable\s+code$/))
args = [r[2]];
break;
}
if (args) {
window[assertion](args[0], args[1], args[2]);
return;
}
}
// default
assert_unreached('Test result received from a receiving user agent: ' + message + ': ');
};
})(window);