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

Unified Diff: test/mjsunit/strong/declaration-after-use.js

Issue 993393002: [strong] Cleanup and fix test (declaration-after-use.js). (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 9 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/mjsunit/strong/declaration-after-use.js
diff --git a/test/mjsunit/strong/declaration-after-use.js b/test/mjsunit/strong/declaration-after-use.js
index 8bdccacf6c6f480295a017f16b0d96d91b6e00c5..c57c2f4f317dc1c4882b2c08ee190ce6bae4a267 100644
--- a/test/mjsunit/strong/declaration-after-use.js
+++ b/test/mjsunit/strong/declaration-after-use.js
@@ -13,169 +13,149 @@
// In addition, assertThrows will call eval and that changes variable binding
// types (see e.g., UNBOUND_EVAL_SHADOWED). We can avoid unwanted side effects
// by wrapping the code to be tested inside an outer function.
-function assertThrowsHelper(code, error) {
+function assertThrowsHelper(code) {
"use strict";
- let prologue = "(function outer() { ";
- let epilogue = " })();";
- assertThrows(prologue + code + epilogue, error);
+ let prologue = "(function outer() { if (false) { ";
+ let epilogue = " } })();";
+
+ assertThrows("'use strong'; " + prologue + code + epilogue, ReferenceError);
+
+ // Make sure the error happens only in strong mode (note that we need strict
+ // mode here because of let).
+ assertDoesNotThrow("'use strict'; " + prologue + code + epilogue);
}
(function DeclarationAfterUse() {
// Note that these tests only test cases where the declaration is found but is
// after the use. In particular, we cannot yet detect cases where the use can
// possibly bind to a global variable.
- assertThrowsHelper("'use strong'; if (false) { x; let x = 0; }",
- ReferenceError);
- assertThrowsHelper(
- "function f() { 'use strong'; if (false) { x; let x = 0; } } f();",
- ReferenceError);
- assertThrowsHelper(
- "'use strong'; function f() { if (false) { x; } } let x = 0; f();",
- ReferenceError);
+ assertThrowsHelper("x; let x = 0;");
+ assertThrowsHelper("function f() { x; let x = 0; }");
+ assertThrowsHelper("function f() { x; } let x = 0;");
+
+ // These tests needs to be done a bit more manually, since var is not allowed
+ // in strong mode:
+ assertThrows(
+ "(function outer() {\n" +
+ " function f() { 'use strong'; if (false) { x; } } var x = 0; f(); \n" +
+ "})()",
+ ReferenceError);
+ assertDoesNotThrow(
+ "(function outer() {\n" +
+ " function f() { if (false) { x; } } var x = 0; f(); \n" +
+ "})()");
+
+ assertThrows(
+ "(function outer() {\n" +
+ " function f() { 'use strong'; if (false) { x; } } var x; f(); \n" +
+ "})()",
+ ReferenceError);
+ assertDoesNotThrow(
+ "(function outer() {\n" +
+ " function f() { if (false) { x; } } var x; f(); \n" +
+ "})()");
- assertThrowsHelper(
- "function f() { 'use strong'; if (false) { x; } } var x = 0; f();",
- ReferenceError);
- assertThrowsHelper(
- "function f() { 'use strong'; if (false) { x; } } var x; f();",
- ReferenceError);
// Errors are also detected when the declaration and the use are in the same
// eval scope.
- assertThrowsHelper("'use strong'; eval('x; let x = 0;')", ReferenceError);
+ assertThrows("'use strong'; eval('if (false) { x; let x = 0;}')",
+ ReferenceError);
+ assertDoesNotThrow("'use strict'; eval('if (false) { x; let x = 0; }')");
// Use occurring in the initializer of the declaration:
- assertThrowsHelper("'use strong'; if (false) { let x = x + 1; }",
- ReferenceError);
- assertThrowsHelper("'use strong'; if (false) { let x = x; }",
- ReferenceError);
- assertThrowsHelper("'use strong'; if (false) { let x = y, y = 4; }",
- ReferenceError);
- assertThrowsHelper("'use strong'; if (false) { let x = function() { x; } }",
- ReferenceError);
- assertThrowsHelper("'use strong'; if (false) { let x = a => { x; } }",
- ReferenceError);
- assertThrowsHelper(
- "'use strong'; if (false) { function f() {}; let x = f(x); }",
- ReferenceError);
- assertThrowsHelper("'use strong'; if (false) { const x = x; }",
- ReferenceError);
- assertThrowsHelper("'use strong'; if (false) { const x = function() { x; } }",
- ReferenceError);
- assertThrowsHelper("'use strong'; if (false) { const x = a => { x; } }",
- ReferenceError);
- assertThrowsHelper(
- "'use strong'; if (false) { function f() {}; const x = f(x); }",
- ReferenceError);
-
- assertThrowsHelper(
- "'use strong'; if (false) { for (let x = x; ; ) { } }",
- ReferenceError);
- assertThrowsHelper(
- "'use strong'; if (false) { for (const x = x; ; ) { } }",
- ReferenceError);
- assertThrowsHelper(
- "'use strong'; if (false) { for (let x = y, y; ; ) { } }",
- ReferenceError);
- assertThrowsHelper(
- "'use strong'; if (false) { for (const x = y, y = 0; ; ) { } }",
- ReferenceError);
+ assertThrowsHelper("let x = x + 1;");
+ assertThrowsHelper("let x = x;");
+ assertThrowsHelper("let x = y, y = 4;");
+ assertThrowsHelper("let x = function() { x; }");
+ assertThrowsHelper("let x = a => { x; }");
+ assertThrowsHelper("function f(x) { return x; }; let x = f(x);");
+ assertThrowsHelper("const x = x;");
+ assertThrowsHelper("const x = function() { x; }");
+ assertThrowsHelper("const x = a => { x; }");
+ assertThrowsHelper("function f(x) {return x}; const x = f(x);");
+
+ assertThrowsHelper("for (let x = x; ; ) { }");
+ assertThrowsHelper("for (const x = x; ; ) { }");
+ assertThrowsHelper("for (let x = y, y; ; ) { }");
+ assertThrowsHelper("for (const x = y, y = 0; ; ) { }");
// Computed property names
- assertThrowsHelper(
- "'use strong'; if (false) { let o = { 'a': 'b', [o.a]: 'c'}; }",
- ReferenceError);
+ assertThrowsHelper("let o = { 'a': 'b', [o.a]: 'c'};");
})();
(function DeclarationAfterUseInClasses() {
- assertThrowsHelper("'use strong'; if (false) { class C extends C { } }",
- ReferenceError);
- assertThrowsHelper(
- "'use strong'; if (false) { let C = class C2 extends C { } }",
- ReferenceError);
- assertThrowsHelper(
- "'use strong'; if (false) { let C = class C2 extends C2 { } }",
- ReferenceError);
+ assertThrowsHelper("class C extends C { }");
+ assertThrowsHelper("let C = class C2 extends C { }");
+ assertThrowsHelper("let C = class C2 extends C2 { }");
- assertThrowsHelper(
- "'use strong'; if (false) { let C = class C2 { constructor() { C; } } }",
- ReferenceError);
+ assertThrowsHelper("let C = class C2 { constructor() { C; } }");
+ assertThrowsHelper("let C = class C2 { method() { C; } }");
+ assertThrowsHelper("let C = class C2 { *generator_method() { C; } }");
assertThrowsHelper(
- "'use strong'; if (false) { let C = class C2 { method() { C; } } }",
- ReferenceError);
+ "let C = class C2 {\n" +
+ " static a() { return 'A'; }\n" +
+ " [C.a()]() { return 'B'; }\n" +
+ "};");
assertThrowsHelper(
- "'use strong'; if (false) { " +
- "let C = class C2 { *generator_method() { C; } } }",
- ReferenceError);
+ "let C = class C2 {\n" +
+ " static a() { return 'A'; }\n" +
+ " [C2.a()]() { return 'B'; }\n" +
+ "};");
assertThrowsHelper(
- "'use strong'; if (false) { let C = class C2 { " +
- "static a() { return 'A'; } [C.a()]() { return 'B'; } }; }",
- ReferenceError);
-
- assertThrowsHelper(
- "'use strong'; if (false) { let C = class C2 { " +
- "static a() { return 'A'; } [C2.a()]() { return 'B'; } }; }",
- ReferenceError);
-
- assertThrowsHelper(
- "'use strong'; if (false) { let C = class C2 { " +
- "[(function() { C; return 'A';})()]() { return 'B'; } }; }",
- ReferenceError);
+ "let C = class C2 {\n" +
+ " [(function() { C; return 'A';})()]() { return 'B'; }\n" +
+ "};");
// The reference to C or C2 is inside a function, but not a method.
assertThrowsHelper(
- "'use strong'; if (false) { let C = class C2 { " +
- "[(function() { C2; return 'A';})()]() { return 'B'; } }; }",
- ReferenceError);
+ "let C = class C2 {\n" +
+ " [(function() { C2; return 'A';})()]() { return 'B'; }\n" +
+ "};");
assertThrowsHelper(
- "'use strong'; if (false) { let C = class C2 { " +
- "[(function() { C; return 'A';})()]() { return 'B'; } }; }",
- ReferenceError);
+ "let C = class C2 {\n" +
+ " [(function() { C; return 'A';})()]() { return 'B'; }\n" +
+ "};");
// The reference to C or C2 is inside a method, but it's not a method of the
// relevant class (C2).
assertThrowsHelper(
- "'use strong'; if (false) { let C = class C2 { " +
- "[(new (class D { m() { C2; return 'A'; } })).m()]() " +
- "{ return 'B'; } } }",
- ReferenceError);
+ "let C = class C2 {\n" +
+ " [(new (class D { m() { C2; return 'A'; } })).m()]() {\n" +
+ " return 'B';\n" +
+ " }\n" +
+ "}");
assertThrowsHelper(
- "'use strong'; if (false) { let C = class C2 { " +
- "[(new (class D { m() { C; return 'A'; } })).m()]() " +
- "{ return 'B'; } } }",
- ReferenceError);
+ "let C = class C2 {\n" +
+ " [(new (class D { m() { C; return 'A'; } })).m()]() {\n" +
+ " return 'B';\n" +
+ " }\n" +
+ "}");
assertThrowsHelper(
- "'use strong'; if (false) { let C = class C2 { " +
- "[({m() { C2; return 'A'; }}).m()]() " +
- "{ return 'B'; } } }",
- ReferenceError);
+ "let C = class C2 {\n" +
+ " [({m() { C2; return 'A'; }}).m()]() { return 'B'; }\n" +
+ "}");
assertThrowsHelper(
- "'use strong'; if (false) { let C = class C2 { " +
- "[({m() { C; return 'A'; }}).m()]() " +
- "{ return 'B'; } } }",
- ReferenceError);
+ "let C = class C2 {\n" +
+ " [({m() { C; return 'A'; }}).m()]() { return 'B'; }\n" +
+ "}");
assertThrowsHelper(
- "'use strong';\n" +
- "if (false) {\n" +
- " class COuter {\n" +
- " m() {\n" +
- " class CInner {\n" +
- " [({ m() { CInner; return 'A'; } }).m()]() {\n" +
- " return 'B';\n" +
- " }\n" +
- " }\n" +
- " }\n" +
- " }\n" +
- "}",
- ReferenceError);
+ "class COuter {\n" +
arv (Not doing code reviews) 2015/03/11 18:31:32 These can use template literals if you want. asse
marja 2015/03/12 10:30:38 Done.
+ " m() {\n" +
+ " class CInner {\n" +
+ " [({ m() { CInner; return 'A'; } }).m()]() {\n" +
+ " return 'B';\n" +
+ " }\n" +
+ " }\n" +
+ " }\n" +
+ "}\n");
})();
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698