clone-leaf-object.js (2104B)
1 // |reftest| skip-if(!xulRuntime.shell) 2 // -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- 3 // Any copyright is dedicated to the Public Domain. 4 // http://creativecommons.org/licenses/publicdomain/ 5 6 var a = [new Boolean(true), 7 new Boolean(false), 8 new Number(0), 9 new Number(-0), 10 new Number(Math.PI), 11 new Number(0x7fffffff), 12 new Number(-0x7fffffff), 13 new Number(0x80000000), 14 new Number(-0x80000000), 15 new Number(0xffffffff), 16 new Number(-0xffffffff), 17 new Number(0x100000000), 18 new Number(-0x100000000), 19 new Number(Number.MIN_VALUE), 20 new Number(-Number.MIN_VALUE), 21 new Number(Number.MAX_VALUE), 22 new Number(-Number.MAX_VALUE), 23 new Number(1/0), 24 new Number(-1/0), 25 new Number(0/0), 26 new String(""), 27 new String("\0123\u4567"), 28 new Date(0), 29 new Date(-0), 30 new Date(0x7fffffff), 31 new Date(-0x7fffffff), 32 new Date(0x80000000), 33 new Date(-0x80000000), 34 new Date(0xffffffff), 35 new Date(-0xffffffff), 36 new Date(0x100000000), 37 new Date(-0x100000000), 38 new Date(1286523948674), 39 new Date(8.64e15), // hard-coded in ES5 spec, hard-coded here 40 new Date(-8.64e15), 41 new Date(NaN)]; 42 43 function primitive(a) { 44 return a instanceof Date ? +a : a.constructor(a); 45 } 46 47 for (var i = 0; i < a.length; i++) { 48 var x = a[i]; 49 if (x.toSource) { 50 var expectedSource = x.toSource(); 51 } 52 var expectedPrimitive = primitive(x); 53 var expectedProto = x.__proto__; 54 var expectedString = Object.prototype.toString.call(x); 55 x.expando = 1; 56 x.__proto__ = {}; 57 58 var y = deserialize(serialize(x)); 59 if (x.toSource) { 60 assertEq(y.toSource(), expectedSource); 61 } 62 assertEq(primitive(y), expectedPrimitive); 63 assertEq(y.__proto__, expectedProto); 64 assertEq(Object.prototype.toString.call(y), expectedString); 65 assertEq("expando" in y, false); 66 } 67 68 reportCompare(0, 0);