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

Unified Diff: test/cctest/test-parsing.cc

Issue 2315733003: Class fields, part 1 (parsing and infrastructure) (Closed)
Patch Set: whitespace Created 4 years, 3 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 | « src/parsing/preparser.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/cctest/test-parsing.cc
diff --git a/test/cctest/test-parsing.cc b/test/cctest/test-parsing.cc
index befa92a5a1d0e5d953e4d9f024eb8ef15f4627fd..bbfe7b53efccf6c4d6a88b207f8ed823abdeb7b1 100644
--- a/test/cctest/test-parsing.cc
+++ b/test/cctest/test-parsing.cc
@@ -1490,6 +1490,7 @@ enum ParserFlag {
kAllowHarmonyAsyncAwait,
kAllowHarmonyRestrictiveGenerators,
kAllowHarmonyTrailingCommas,
+ kAllowHarmonyClassFields,
};
enum ParserSyncTestResult {
@@ -1514,6 +1515,8 @@ void SetParserFlags(i::ParserBase<Traits>* parser,
flags.Contains(kAllowHarmonyRestrictiveGenerators));
parser->set_allow_harmony_trailing_commas(
flags.Contains(kAllowHarmonyTrailingCommas));
+ parser->set_allow_harmony_class_fields(
+ flags.Contains(kAllowHarmonyClassFields));
}
@@ -4569,6 +4572,160 @@ TEST(ClassPropertyNameNoErrors) {
RunParserSyncTest(context_data, name_data, kSuccess);
}
+TEST(ClassFieldsNoErrors) {
+ // clang-format off
+ // Tests proposed class fields syntax.
+ const char* context_data[][2] = {{"(class {", "});"},
+ {"(class extends Base {", "});"},
+ {"class C {", "}"},
+ {"class C extends Base {", "}"},
+ {NULL, NULL}};
+ const char* class_body_data[] = {
+ // Basic syntax
+ "a = 0;",
+ "a = 0; b",
+ "a = 0; b(){}",
+ "a = 0; *b(){}",
+ "a = 0; ['b'](){}",
+ "a;",
+ "a; b;",
+ "a; b(){}",
+ "a; *b(){}",
+ "a; ['b'](){}",
+ "['a'] = 0;",
+ "['a'] = 0; b",
+ "['a'] = 0; b(){}",
+ "['a'] = 0; *b(){}",
+ "['a'] = 0; ['b'](){}",
+ "['a'];",
+ "['a']; b;",
+ "['a']; b(){}",
+ "['a']; *b(){}",
+ "['a']; ['b'](){}",
+
+ "0 = 0;",
+ "0;",
+ "'a' = 0;",
+ "'a';",
+
+ "static a = 0;",
+ "static a;",
+ "static ['a'] = 0",
+ "static ['a']",
+ "static 0 = 0;",
+ "static 0;",
+ "static 'a' = 0;",
+ "static 'a';",
+
+ // ASI
+ "a = 0\n",
+ "a = 0\n b",
+ "a = 0\n b(){}",
+ "a\n",
+ "a\n b\n",
+ "a\n b(){}",
+ "a\n *b(){}",
+ "a\n ['b'](){}",
+ "['a'] = 0\n",
+ "['a'] = 0\n b",
+ "['a'] = 0\n b(){}",
+ "['a']\n",
+ "['a']\n b\n",
+ "['a']\n b(){}",
+ "['a']\n *b(){}",
+ "['a']\n ['b'](){}",
+
+ // ASI edge cases
+ "a\n get",
+ "get\n *a(){}",
+ "a\n static",
+
+ // Misc edge cases
+ "yield",
+ "yield = 0",
+ "yield\n a",
+ NULL
+ };
+ // clang-format on
+
+ static const ParserFlag without_async[] = {kAllowHarmonyClassFields};
+ RunParserSyncTest(context_data, class_body_data, kSuccess, NULL, 0,
+ without_async, arraysize(without_async));
+
+ // clang-format off
+ const char* async_data[] = {
+ "async;",
+ "async = 0;",
+ "static async;"
+ "async",
+ "async = 0",
+ "static async",
+ "async\n a(){}", // a field named async, and a method named a.
+ "async\n a",
+ "await;",
+ "await = 0;",
+ "await\n a",
+ NULL
+ };
+ // clang-format on
+
+ static const ParserFlag with_async[] = {kAllowHarmonyClassFields,
+ kAllowHarmonyAsyncAwait};
+ RunParserSyncTest(context_data, async_data, kSuccess, NULL, 0, with_async,
+ arraysize(with_async));
+}
+
+TEST(ClassFieldsErrors) {
+ // clang-format off
+ // Tests proposed class fields syntax.
+ const char* context_data[][2] = {{"(class {", "});"},
+ {"(class extends Base {", "});"},
+ {"class C {", "}"},
+ {"class C extends Base {", "}"},
+ {NULL, NULL}};
+ const char* class_body_data[] = {
+ "a : 0",
+ "a =",
+ "*a = 0",
+ "*a",
+ "get a",
+ "yield a",
+ "a : 0;",
+ "a =;",
+ "*a = 0;",
+ "*a;",
+ "get a;",
+ "yield a;",
+
+ // ASI requires a linebreak
+ "a b",
+ "a = 0 b",
+
+ // ASI requires that the next token is not part of any legal production
+ "a = 0\n *b(){}",
+ "a = 0\n ['b'](){}",
+ "get\n a",
+ NULL
+ };
+ // clang-format on
+
+ static const ParserFlag without_async[] = {kAllowHarmonyClassFields};
+ RunParserSyncTest(context_data, class_body_data, kError, NULL, 0,
+ without_async, arraysize(without_async));
+
+ // clang-format off
+ const char* async_data[] = {
+ "async a = 0",
+ "async a",
+ NULL
+ };
+ // clang-format on
+
+ static const ParserFlag with_async[] = {kAllowHarmonyClassFields,
+ kAllowHarmonyAsyncAwait};
+ RunParserSyncTest(context_data, async_data, kError, NULL, 0, with_async,
+ arraysize(with_async));
+}
TEST(ClassExpressionErrors) {
const char* context_data[][2] = {{"(", ");"},
« no previous file with comments | « src/parsing/preparser.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698