Index: test/cctest/test-parsing.cc |
diff --git a/test/cctest/test-parsing.cc b/test/cctest/test-parsing.cc |
index 8573ce3391fa581fe60cfb5cf5e061027d93b3f5..20c82665354c3921a9b96119e20a3ed295c8111f 100644 |
--- a/test/cctest/test-parsing.cc |
+++ b/test/cctest/test-parsing.cc |
@@ -4909,6 +4909,18 @@ TEST(ConstParsingInForIn) { |
} |
+TEST(StatementParsingInForIn) { |
+ const char* context_data[][2] = {{"'use strict';", ""}, |
adamk
2016/01/20 00:35:57
Can you add non-strict cases too? Seems like the m
mike3
2016/01/20 17:55:40
I've omitted strict mode because I was following t
adamk
2016/01/20 19:31:17
Outside strict mode, v8 will parse lexical declara
mike3
2016/01/20 19:54:08
Thanks for the pointer! (It's been a while since I
|
+ {"function foo(){ 'use strict';", "}"}, |
+ {NULL, NULL}}; |
+ |
+ const char* data[] = {"for(x in {}, {}) {}", "for(var x in {}, {}) {}", |
+ "for(let x in {}, {}) {}", "for(const x in {}, {}) {}", |
+ NULL}; |
+ RunParserSyncTest(context_data, data, kSuccess, nullptr, 0, nullptr, 0); |
adamk
2016/01/20 00:35:57
You can leave off the last 4 arguments here (they
mike3
2016/01/20 17:55:40
Acknowledged.
|
+} |
+ |
+ |
TEST(ConstParsingInForInError) { |
const char* context_data[][2] = {{"'use strict';", ""}, |
{"function foo(){ 'use strict';", "}"}, |
@@ -5082,6 +5094,57 @@ TEST(ForOfNoDeclarationsError) { |
} |
+TEST(ForOfInOperator) { |
+ const char* context_data[][2] = {{"'use strict';", ""}, |
+ {"function foo(){ 'use strict';", "}"}, |
+ {NULL, NULL}}; |
+ |
+ const char* data[] = { |
+ "for(x of 'foo' in {}) {}", "for(var x of 'foo' in {}) {}", |
+ "for(let x of 'foo' in {}) {}", "for(const x of 'foo' in {}) {}", NULL}; |
+ RunParserSyncTest(context_data, data, kSuccess, nullptr, 0, nullptr, 0); |
+} |
+ |
+ |
+TEST(ForOfYieldIdentifier) { |
+ const char* context_data[][2] = {{NULL, NULL}}; |
adamk
2016/01/20 00:35:57
This won't actually run any tests, since you haven
mike3
2016/01/20 17:55:40
Acknowledged.
|
+ |
+ const char* data[] = {"for(x of yield) {}", "for(var x of yield) {}", |
adamk
2016/01/20 00:38:09
Also curious why you added tests for yield, that s
mike3
2016/01/20 17:55:40
I was thinking it would be good to be thorough, si
adamk
2016/01/20 19:31:17
It's fine to leave them in, thanks for the explana
|
+ "for(let x of yield) {}", "for(const x of yield) {}", |
+ NULL}; |
+ RunParserSyncTest(context_data, data, kSuccess, nullptr, 0, nullptr, 0); |
+} |
+ |
+ |
+TEST(ForOfYieldExpressionError) { |
adamk
2016/01/20 00:35:57
This name seems wrong.
mike3
2016/01/20 17:55:40
Acknowledged.
|
+ const char* context_data[][2] = {{"'use strict';", ""}, |
adamk
2016/01/20 00:35:57
Again, non-strict versions would be good too, same
|
+ {"function foo(){ 'use strict';", "}"}, |
+ {NULL, NULL}}; |
+ |
+ const char* data[] = {"(function* g() { for(x of [], []) {} }", |
+ "(function* g() { for(var x of [], []) {} }", |
+ "(function* g() { for(let x of [], []) {} }", |
+ "(function* g() { for(const x of [], []) {} }", NULL}; |
+ RunParserSyncTest(context_data, data, kError, nullptr, 0, nullptr, 0); |
+} |
+ |
+ |
+TEST(ForOfExpressionError) { |
+ const char* context_data[][2] = {{"'use strict';", ""}, |
+ {"function foo(){ 'use strict';", "}"}, |
+ {NULL, NULL}}; |
+ |
+ const char* data[] = { |
+ "for(x of [], []) {}", "for(var x of [], []) {}", |
+ "for(let x of [], []) {}", "for(const x of [], []) {}", |
+ |
+ // AssignmentExpression should be validated statically: |
+ "for(x of { y = 23 }) {}", "for(var x of { y = 23 }) {}", |
+ "for(let x of { y = 23 }) {}", "for(const x of { y = 23 }) {}", NULL}; |
+ RunParserSyncTest(context_data, data, kError, nullptr, 0, nullptr, 0); |
+} |
+ |
+ |
TEST(InvalidUnicodeEscapes) { |
const char* context_data[][2] = {{"", ""}, |
{"'use strict';", ""}, |