Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(708)

Unified Diff: test/mjsunit/strong/undefined.js

Issue 1070633002: [strong] Implement static restrictions on binding/assignment to 'undefined' identifier. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« src/preparser.h ('K') | « src/preparser.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/mjsunit/strong/undefined.js
diff --git a/test/mjsunit/strong/undefined.js b/test/mjsunit/strong/undefined.js
new file mode 100644
index 0000000000000000000000000000000000000000..275e2ab0209411299a249b60d035f0d4fbc8cf2e
--- /dev/null
+++ b/test/mjsunit/strong/undefined.js
@@ -0,0 +1,104 @@
+// Copyright 2014 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --strong-mode
+
+//repurposing the strict mode 'eval' and 'arguments' tests to test for correct
rossberg 2015/04/08 11:30:11 Style nit: Spaces after // (here and below). Also,
conradw 2015/04/09 12:24:17 Done.
+//behaviour of 'undefined' as an identifier in strong mode
rossberg 2015/04/08 11:30:11 Please add tests for: - bindings to undefined (va
conradw 2015/04/09 12:24:17 Done.
+
+function CheckStrongMode(code, exception) {
+ assertDoesNotThrow("'use strict';\n" + code);
+ assertThrows("'use strong';\n" + code, exception);
+ assertThrows('"use strong";\n' + code, exception);
+ assertDoesNotThrow("\
+ function outer() {\
+ 'use strict';\
+ function inner() {\n"
+ + code +
+ "\n}\
+ }");
+ assertThrows("\
+ function outer() {\
+ 'use strong';\
+ function inner() {\n"
+ + code +
+ "\n}\
+ }", exception);
+}
rossberg 2015/04/08 11:30:11 We also should have test contexts that are (strict
conradw 2015/04/09 12:24:17 Done.
+
+function CheckFunctionConstructorStrongMode() {
+ var args = [];
+ for (var i = 0; i < arguments.length; i ++) {
rossberg 2015/04/08 11:30:11 With adding --harmony-rest-parameters to Flags you
conradw 2015/04/09 12:24:17 Acknowledged.
+ args[i] = arguments[i];
+ }
+ // Create non-strong function. No exception.
+ args[arguments.length] = "";
+ assertDoesNotThrow(function() {
+ Function.apply(this, args);
+ });
+ // Create strong mode function. Exception expected.
+ args[arguments.length] = "'use strong';";
+ assertThrows(function() {
+ Function.apply(this, args);
+ }, SyntaxError);
+}
+
+//Function named 'undefined'.
+CheckStrongMode("function undefined() {}", SyntaxError);
+
+// Function parameter named 'undefined'.
+CheckStrongMode("function foo(a, b, undefined, c, d) {}", SyntaxError);
+
+// Property accessor parameter named 'undefined'.
+CheckStrongMode("let o = { set foo(undefined) {} }", SyntaxError);
+
+//Function constructor: 'undefined' parameter name.
+CheckFunctionConstructorStrongMode("undefined");
+
+//catch(undefined)
+CheckStrongMode("try{}catch(undefined){};", SyntaxError);
+
+//Assignment to undefined
+CheckStrongMode("function strong() { undefined = undefined; }", SyntaxError);
+CheckStrongMode("function strong() { print(undefined = undefined); }", SyntaxError);
rossberg 2015/04/08 11:30:11 Style nit: line length (here and below)
conradw 2015/04/09 12:24:17 Done.
+CheckStrongMode("function strong() { let x = undefined = undefined; }", SyntaxError);
+
+// Compound assignment to undefined
+CheckStrongMode("function strong() { undefined *= undefined; }", SyntaxError);
+CheckStrongMode("function strong() { undefined /= undefined; }", SyntaxError);
+CheckStrongMode("function strong() { print(undefined %= undefined); }", SyntaxError);
+CheckStrongMode("function strong() { let x = undefined += undefined; }",
+ SyntaxError);
+CheckStrongMode("function strong() { let x = undefined -= undefined; }",
+ SyntaxError);
+CheckStrongMode("function strong() { undefined <<= undefined; }", SyntaxError);
+CheckStrongMode("function strong() { undefined >>= undefined; }", SyntaxError);
+CheckStrongMode("function strong() { print(undefined >>>= undefined); }",
+ SyntaxError);
+CheckStrongMode("function strong() { print(undefined &= undefined); }",
+ SyntaxError);
+CheckStrongMode("function strong() { let x = undefined ^= undefined; }",
+ SyntaxError);
+CheckStrongMode("function strong() { let x = undefined |= undefined; }",
+ SyntaxError);
+
+// Postfix increment with undefined
+CheckStrongMode("function strong() { undefined++; }", SyntaxError);
+CheckStrongMode("function strong() { print(undefined++); }", SyntaxError);
+CheckStrongMode("function strong() { let x = undefined++; }", SyntaxError);
+
+// Postfix decrement with undefined
+CheckStrongMode("function strong() { undefined--; }", SyntaxError);
+CheckStrongMode("function strong() { print(undefined--); }", SyntaxError);
+CheckStrongMode("function strong() { let x = undefined--; }", SyntaxError);
+
+// Prefix increment with undefined
+CheckStrongMode("function strong() { ++undefined; }", SyntaxError);
+CheckStrongMode("function strong() { print(++undefined); }", SyntaxError);
+CheckStrongMode("function strong() { let x = ++undefined; }", SyntaxError);
+
+// Prefix decrement with undefined
+CheckStrongMode("function strong() { --undefined; }", SyntaxError);
+CheckStrongMode("function strong() { print(--undefined); }", SyntaxError);
+CheckStrongMode("function strong() { let x = --undefined; }", SyntaxError);
« src/preparser.h ('K') | « src/preparser.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698