| <!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> |