| <!doctype html> | |
| <title>message clone</title> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <script src="../support/compare.js"></script> | |
| <div id=log></div> | |
| <script> | |
| var err = new Error('foo'); | |
| var date = new Date(); | |
| var test_array = [ undefined, | |
| null, | |
| false, | |
| true, | |
| 1, | |
| NaN, | |
| Infinity, | |
| 'foo', | |
| date, | |
| /foo/, | |
| null/*self*/, | |
| null/*err*/]; | |
| var cloned_array = [ undefined, | |
| null, | |
| false, | |
| true, | |
| 1, | |
| NaN, | |
| Infinity, | |
| 'foo', | |
| date, | |
| /foo/, | |
| null/*self*/, | |
| null/*err*/]; | |
| var test_object = {a: undefined, | |
| b: null, | |
| c: false, | |
| d: true, | |
| e: 1, | |
| f: NaN, | |
| g: Infinity, | |
| h: 'foo', | |
| i: date, | |
| j: /foo/, | |
| k: null/*self*/, | |
| l: [], | |
| m: {}, | |
| n: null /*err*/}; | |
| var cloned_object = {a:undefined, b:null, c:false, d:true, e:1, f:NaN, g:Infinity, h:'foo', i: date, j: /foo/, k:null, l: [], m: {}, n:null}; | |
| var tests = [undefined, null, | |
| false, true, | |
| 1, NaN, Infinity, | |
| 'foo', | |
| date, | |
| /foo/, | |
| /* ImageData, File, FileData, FileList, */ | |
| null /*self*/, | |
| test_array, | |
| test_object, | |
| null /*err*/]; | |
| for (var i = 0; i < tests.length; ++i) { | |
| postMessage(tests[i], '*'); | |
| } | |
| var test_undefined = async_test('undefined'); | |
| var test_null = async_test('null'); | |
| var test_false = async_test('false'); | |
| var test_true = async_test('true'); | |
| var test_1 = async_test('1'); | |
| var test_NaN = async_test('NaN'); | |
| var test_Infinity = async_test('Infinity'); | |
| var test_string = async_test('string'); | |
| var test_date = async_test('date'); | |
| var test_regex = async_test('regex'); | |
| var test_self = async_test('self'); | |
| var test_array = async_test('array'); | |
| var test_object = async_test('object'); | |
| var test_error = async_test('error'); | |
| var test_unreached = async_test('unreached'); | |
| var j = 0; | |
| onmessage = function(e) { | |
| switch (j) { | |
| case 0: test_undefined.step(function() { assert_equals(e.data, undefined); this.done(); }); break; | |
| case 1: test_null.step(function() { assert_equals(e.data, null); this.done(); }); break; | |
| case 2: test_false.step(function() { assert_false(e.data); this.done(); }); break; | |
| case 3: test_true.step(function() { assert_true(e.data); this.done(); }); break; | |
| case 4: test_1.step(function() { assert_equals(e.data, 1); this.done(); }); break; | |
| case 5: test_NaN.step(function() { assert_equals(e.data, NaN); this.done(); }); break; | |
| case 6: test_Infinity.step(function() { assert_equals(e.data, Infinity); this.done(); }); break; | |
| case 7: test_string.step(function() { assert_equals(e.data, 'foo'); this.done(); }); break; | |
| case 8: test_date.step(function() { assert_true(sameDate(e.data, date)); this.done(); }); break; | |
| case 9: test_regex.step(function() { assert_equals('' + e.data, '/foo/'); assert_equals(e.data instanceof RegExp, true, 'e.data instanceof RegExp'); this.done(); }); break; | |
| // not testing it any more, as cloning host objects will now raise exceptions. TODO: add (exceptional) tests for these. | |
| case 10: test_self.step(function() { assert_equals(e.data, null); this.done(); }); break; | |
| case 11: test_array.step(function() { assert_array_equals_(e.data, cloned_array, 'array'); this.done(); }); break; | |
| case 12: test_object.step(function() { assert_object_equals_(e.data, cloned_object, 'object'); this.done(); }); break; | |
| case 13: | |
| test_error.step(function() { assert_equals(e.data, null, 'new Error()'); this.done(); }); | |
| setTimeout(test_unreached.step_func(function() { assert_equals(j, 14); this.done(); }), 50); | |
| break; | |
| default: test_unreached.step(function() { assert_unreached('got an unexpected message event ('+j+')'); }); | |
| }; | |
| j++; | |
| } | |
| </script> |