michael@0: // |reftest| skip-if(!xulRuntime.shell) michael@0: // -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- michael@0: // Any copyright is dedicated to the Public Domain. michael@0: // http://creativecommons.org/licenses/publicdomain/ michael@0: michael@0: var a = [new Boolean(true), michael@0: new Boolean(false), michael@0: new Number(0), michael@0: new Number(-0), michael@0: new Number(Math.PI), michael@0: new Number(0x7fffffff), michael@0: new Number(-0x7fffffff), michael@0: new Number(0x80000000), michael@0: new Number(-0x80000000), michael@0: new Number(0xffffffff), michael@0: new Number(-0xffffffff), michael@0: new Number(0x100000000), michael@0: new Number(-0x100000000), michael@0: new Number(Number.MIN_VALUE), michael@0: new Number(-Number.MIN_VALUE), michael@0: new Number(Number.MAX_VALUE), michael@0: new Number(-Number.MAX_VALUE), michael@0: new Number(1/0), michael@0: new Number(-1/0), michael@0: new Number(0/0), michael@0: new String(""), michael@0: new String("\0123\u4567"), michael@0: new Date(0), michael@0: new Date(-0), michael@0: new Date(0x7fffffff), michael@0: new Date(-0x7fffffff), michael@0: new Date(0x80000000), michael@0: new Date(-0x80000000), michael@0: new Date(0xffffffff), michael@0: new Date(-0xffffffff), michael@0: new Date(0x100000000), michael@0: new Date(-0x100000000), michael@0: new Date(1286523948674), michael@0: new Date(8.64e15), // hard-coded in ES5 spec, hard-coded here michael@0: new Date(-8.64e15), michael@0: new Date(NaN)]; michael@0: michael@0: function primitive(a) { michael@0: return a instanceof Date ? +a : a.constructor(a); michael@0: } michael@0: michael@0: for (var i = 0; i < a.length; i++) { michael@0: var x = a[i]; michael@0: var expectedSource = x.toSource(); michael@0: var expectedPrimitive = primitive(x); michael@0: var expectedProto = x.__proto__; michael@0: var expectedString = Object.prototype.toString.call(x); michael@0: x.expando = 1; michael@0: x.__proto__ = {}; michael@0: michael@0: var y = deserialize(serialize(x)); michael@0: assertEq(y.toSource(), expectedSource); michael@0: assertEq(primitive(y), expectedPrimitive); michael@0: assertEq(y.__proto__, expectedProto); michael@0: assertEq(Object.prototype.toString.call(y), expectedString); michael@0: assertEq("expando" in y, false); michael@0: } michael@0: michael@0: reportCompare(0, 0);