Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / third_party / WebKit / LayoutTests / fast / js / resources / const.js
blob535d9b00fdd8eac6135372b07fe4fdd483b7c9fd
1 description(
2 "This test checks that const declarations in JavaScript work and are readonly."
3 );
6 shouldThrow("const redef='a'; const redef='a';");
8 const x = "RIGHT";
9 x = "WRONG";
10 shouldBe("x", '"RIGHT"');
12 const z = "RIGHT", y = "RIGHT";
13 y = "WRONG";
14 shouldBe("y", '"RIGHT"');
16 const one = 1;
18 var a;
20 // PostIncResolveNode
21 a = one++;
22 shouldBe("a", "1");
23 shouldBe("one", "1");
25 // PostDecResolveNode
26 a = one--;
27 shouldBe("a", "1");
28 shouldBe("one", "1");
30 // PreIncResolveNode
31 a = ++one;
32 shouldBe("a", "2");
33 shouldBe("one", "1");
35 // PreDecResolveNode
36 a = --one;
37 shouldBe("a", "0");
38 shouldBe("one", "1");
40 // ReadModifyConstNode
41 a = one += 2;
42 shouldBe("a", "3");
43 shouldBe("one", "1");
45 // AssignConstNode
46 a = one = 2;
47 shouldBe("a", "2");
48 shouldBe("one", "1");
50 // PostIncResolveNode
51 shouldBe("function f() { const one = 1; one++; return one; } f();", "1");
52 shouldBe("function f() { const oneString = '1'; return oneString++; } f();", "1");
53 shouldBe("function f() { const one = 1; return one++; } f();", "1");
55 // PostDecResolveNode
56 shouldBe("function f() { const one = 1; one--; return one; } f();", "1");
57 shouldBe("function f() { const oneString = '1'; return oneString--; } f();", "1");
58 shouldBe("function f() { const one = 1; return one--; } f();", "1");
60 // PreIncResolveNode
61 shouldBe("function f() { const one = 1; ++one; return one; } f();", "1");
62 shouldBe("function f() { const one = 1; return ++one; } f();", "2");
64 // PreDecResolveNode
65 shouldBe("function f() { const one = 1; --one; return one; } f();", "1");
66 shouldBe("function f() { const one = 1; return --one; } f();", "0");
68 // ReadModifyConstNode
69 shouldBe("function f() { const one = 1; one += 2; return one; } f();", "1");
70 shouldBe("function f() { const one = 1; return one += 2; } f();", "3");
72 // AssignConstNode
73 shouldBe("function f() { const one = 1; one = 2; return one; } f();", "1");
74 shouldBe("function f() { const one = 1; return one = 2; } f();", "2");
76 // PostIncResolveNode
77 shouldBe("one++", "1");
78 shouldBe("one", "1");
80 // PostDecResolveNode
81 shouldBe("one--", "1");
82 shouldBe("one", "1");
84 // PreIncResolveNode
85 shouldBe("++one", "2");
86 shouldBe("one", "1");
88 // PreDecResolveNode
89 shouldBe("--one", "0");
90 shouldBe("one", "1");
92 // ReadModifyConstNode
93 shouldBe("one += 1", "2");
94 shouldBe("one", "1");
96 // AssignConstNode
97 shouldBe("one = 2", "2");
98 shouldBe("one", "1");
100 var object = { inWith1: "RIGHT", inWith2: ""}
101 with (object) {
102     const inWith1 = "WRONG";
103     const inWith2 = "RIGHT";
104     inWith2 = "WRONG";
106 shouldBe("object.inWith1", "'RIGHT'");
107 shouldBe("inWith2", "'RIGHT'");
109 shouldBe("(function(){ one = 2; return one; })()", "1")
110 var f = function g() { g="FAIL"; return g; };
111 shouldBe("f()", "f");
113 shouldBe("const a;", "undefined");
115 // Make sure we don't override properties placed on the global object
116 var ranConstInitialiser = false;
117 const bodyId = (ranConstInitialiser = true, "Const initialiser overwrote existing property");
118 shouldBe("bodyId", "document.getElementById('bodyId')");
119 shouldBeTrue("ranConstInitialiser");
121 // Make sure that dynamic scopes (catch, with) don't break const declarations
122 function tryCatch1() {
123     var bar;
124     eval("try {\
125         stuff();\
126     } catch (e) {\
127         const bar = 5;\
128     }");
129     return bar;
132 function tryCatch2() {
133     var bar;
134     try {
135         stuff();
136     } catch (e) {
137         const bar = 5;
138     }
139     return bar;
142 tryCatch1Result = tryCatch1();
143 shouldBe("tryCatch1Result", "5");
144 tryCatch2Result = tryCatch2();
145 shouldBe("tryCatch2Result", "5");
147 function with1() {
148     var bar;
149     eval("with({foo:42}) const bar = 5;");
150     return bar;
153 function with2() {
154     var bar;
155     with({foo:42}) const bar = 5;
156     return bar;
159 with1Result = with1();
160 shouldBe("with1Result", "5");
161 with2Result = with2();
162 shouldBe("with2Result", "5");