Imported Upstream version 1.0.0
[platform/upstream/js.git] / js / src / tests / ecma_5 / strict / 8.12.5.js
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2
3 /*
4  * Any copyright is dedicated to the Public Domain.
5  * http://creativecommons.org/licenses/publicdomain/
6  */
7
8 function obj() {
9   var o = {all: 1, nowrite: 1, noconfig: 1, noble: 1};
10   Object.defineProperty(o, 'nowrite', {writable: false});
11   Object.defineProperty(o, 'noconfig', {configurable: false});
12   Object.defineProperty(o, 'noble', {writable: false, configurable: false});
13   return o;
14 }
15
16 assertEq(testLenientAndStrict('var o = obj(); o.all = 2; o.all',
17                               returns(2), returns(2)),
18          true);
19
20 assertEq(testLenientAndStrict('var o = obj(); o.nowrite = 2; o.nowrite',
21                               returns(1), raisesException(TypeError)),
22          true);
23
24 assertEq(testLenientAndStrict('var o = obj(); o.noconfig = 2; o.noconfig',
25                               returns(2), returns(2)),
26          true);
27
28 assertEq(testLenientAndStrict('var o = obj(); o.noble = 2; o.noble',
29                               returns(1), raisesException(TypeError)),
30          true);
31
32 assertEq(testLenientAndStrict('obj().nowrite++',
33                               returns(1), raisesException(TypeError)),
34          true);
35 assertEq(testLenientAndStrict('++obj().nowrite',
36                               returns(2), raisesException(TypeError)),
37          true);
38 assertEq(testLenientAndStrict('obj().nowrite--',
39                               returns(1), raisesException(TypeError)),
40          true);
41 assertEq(testLenientAndStrict('--obj().nowrite',
42                               returns(0), raisesException(TypeError)),
43          true);
44
45
46 function arr() {
47   return Object.defineProperties([1, 1, 1, 1],
48                                  { 1: { writable: false },
49                                    2: { configurable: false },
50                                    3: { writable: false, configurable: false }});
51 }
52
53 assertEq(testLenientAndStrict('var a = arr(); a[0] = 2; a[0]',
54                               returns(2), returns(2)),
55          true);
56
57 assertEq(testLenientAndStrict('var a = arr(); a[1] = 2; a[1]',
58                               returns(1), raisesException(TypeError)),
59          true);
60
61 assertEq(testLenientAndStrict('var a = arr(); a[2] = 2; a[2]',
62                               returns(2), returns(2)),
63          true);
64
65 assertEq(testLenientAndStrict('var a = arr(); a[3] = 2; a[3]',
66                               returns(1), raisesException(TypeError)),
67          true);
68
69 assertEq(testLenientAndStrict('arr()[1]++',
70                               returns(1), raisesException(TypeError)),
71          true);
72 assertEq(testLenientAndStrict('++arr()[1]',
73                               returns(2), raisesException(TypeError)),
74          true);
75 assertEq(testLenientAndStrict('arr()[1]--',
76                               returns(1), raisesException(TypeError)),
77          true);
78 assertEq(testLenientAndStrict('--arr()[1]',
79                               returns(0), raisesException(TypeError)),
80          true);
81
82 reportCompare(true, true);