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