blob: cc5e127a8cf210fd96532247ee8868b2657d62e5 [file] [log] [blame]
description(
"This test checks that const declarations in JavaScript work and are readonly."
);
shouldThrow("const redef='a'; const redef='a';");
const x = "RIGHT";
x = "WRONG";
shouldBe("x", '"RIGHT"');
const z = "RIGHT", y = "RIGHT";
y = "WRONG";
shouldBe("y", '"RIGHT"');
const one = 1;
var a;
// PostIncResolveNode
a = one++;
shouldBe("a", "1");
shouldBe("one", "1");
// PostDecResolveNode
a = one--;
shouldBe("a", "1");
shouldBe("one", "1");
// PreIncResolveNode
a = ++one;
shouldBe("a", "2");
shouldBe("one", "1");
// PreDecResolveNode
a = --one;
shouldBe("a", "0");
shouldBe("one", "1");
// ReadModifyConstNode
a = one += 2;
shouldBe("a", "3");
shouldBe("one", "1");
// AssignConstNode
a = one = 2;
shouldBe("a", "2");
shouldBe("one", "1");
// PostIncResolveNode
shouldBe("function f() { const one = 1; one++; return one; } f();", "1");
shouldBe("function f() { const oneString = '1'; return oneString++; } f();", "1");
shouldBe("function f() { const one = 1; return one++; } f();", "1");
// PostDecResolveNode
shouldBe("function f() { const one = 1; one--; return one; } f();", "1");
shouldBe("function f() { const oneString = '1'; return oneString--; } f();", "1");
shouldBe("function f() { const one = 1; return one--; } f();", "1");
// PreIncResolveNode
shouldBe("function f() { const one = 1; ++one; return one; } f();", "1");
shouldBe("function f() { const one = 1; return ++one; } f();", "2");
// PreDecResolveNode
shouldBe("function f() { const one = 1; --one; return one; } f();", "1");
shouldBe("function f() { const one = 1; return --one; } f();", "0");
// ReadModifyConstNode
shouldBe("function f() { const one = 1; one += 2; return one; } f();", "1");
shouldBe("function f() { const one = 1; return one += 2; } f();", "3");
// AssignConstNode
shouldBe("function f() { const one = 1; one = 2; return one; } f();", "1");
shouldBe("function f() { const one = 1; return one = 2; } f();", "2");
// PostIncResolveNode
shouldBe("one++", "1");
shouldBe("one", "1");
// PostDecResolveNode
shouldBe("one--", "1");
shouldBe("one", "1");
// PreIncResolveNode
shouldBe("++one", "2");
shouldBe("one", "1");
// PreDecResolveNode
shouldBe("--one", "0");
shouldBe("one", "1");
// ReadModifyConstNode
shouldBe("one += 1", "2");
shouldBe("one", "1");
// AssignConstNode
shouldBe("one = 2", "2");
shouldBe("one", "1");
var object = { inWith1: "RIGHT", inWith2: ""}
with (object) {
const inWith1 = "WRONG";
const inWith2 = "RIGHT";
inWith2 = "WRONG";
}
shouldBe("object.inWith1", "'RIGHT'");
shouldBe("inWith2", "'RIGHT'");
shouldBe("(function(){ one = 2; return one; })()", "1")
var f = function g() { g="FAIL"; return g; };
shouldBe("f()", "f");
shouldBe("const a;", "undefined");
// Make sure we don't override properties placed on the global object
var ranConstInitialiser = false;
const bodyId = (ranConstInitialiser = true, "Const initialiser overwrote existing property");
shouldBe("bodyId", "document.getElementById('bodyId')");
shouldBeTrue("ranConstInitialiser");
var successfullyParsed = true;