| (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); |