Skip to content

Commit 5bee328

Browse files
committed
refactor(test): use test_parse_and_visit_statement in more places
Make the code shorter and hopefully easier to read.
1 parent 641dbd9 commit 5bee328

File tree

1 file changed

+42
-75
lines changed

1 file changed

+42
-75
lines changed

test/test-parse-typescript-class.cpp

Lines changed: 42 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -889,81 +889,48 @@ TEST_F(Test_Parse_TypeScript_Class,
889889
}
890890

891891
for (String8 specifier : {u8"public", u8"protected", u8"private"}) {
892-
#define MATCH_ACCESS_SPECIFIER_ERROR(code_before) \
893-
::testing::AnyOf( \
894-
DIAG_TYPE_OFFSETS(p.code, \
895-
Diag_TypeScript_Private_Not_Allowed_In_JavaScript, \
896-
specifier, code_before.size(), u8"private"_sv), \
897-
DIAG_TYPE_OFFSETS(p.code, \
898-
Diag_TypeScript_Protected_Not_Allowed_In_JavaScript, \
899-
specifier, code_before.size(), u8"protected"_sv), \
900-
DIAG_TYPE_OFFSETS(p.code, \
901-
Diag_TypeScript_Public_Not_Allowed_In_JavaScript, \
902-
specifier, code_before.size(), u8"public"_sv))
903-
904-
{
905-
Test_Parser p(
906-
concat(u8"class C { "_sv, specifier, u8" field = init; }"_sv),
907-
capture_diags);
908-
SCOPED_TRACE(p.code);
909-
p.parse_and_visit_statement();
910-
EXPECT_THAT(p.legacy_errors(),
911-
ElementsAreArray({
912-
MATCH_ACCESS_SPECIFIER_ERROR(u8"class C { "_sv),
913-
}));
914-
}
915-
916-
{
917-
Test_Parser p(
918-
concat(u8"class C { "_sv, specifier, u8" field\nmethod() {} }"_sv),
919-
capture_diags);
920-
SCOPED_TRACE(p.code);
921-
p.parse_and_visit_statement();
922-
EXPECT_THAT(p.legacy_errors(),
923-
ElementsAreArray({
924-
MATCH_ACCESS_SPECIFIER_ERROR(u8"class C { "_sv),
925-
}));
926-
}
927-
928-
{
929-
Test_Parser p(concat(u8"class C { "_sv, specifier,
930-
u8" field\n[methodName]() {} }"_sv),
931-
capture_diags);
932-
SCOPED_TRACE(p.code);
933-
p.parse_and_visit_statement();
934-
EXPECT_THAT(p.legacy_errors(),
935-
ElementsAreArray({
936-
MATCH_ACCESS_SPECIFIER_ERROR(u8"class C { "_sv),
937-
}));
938-
}
939-
940-
{
941-
Test_Parser p(
942-
concat(u8"class C { "_sv, specifier, u8" field? method() {} }"_sv),
943-
capture_diags);
944-
SCOPED_TRACE(p.code);
945-
p.parse_and_visit_statement();
946-
EXPECT_THAT(
947-
p.legacy_errors(),
948-
UnorderedElementsAre(
949-
DIAG_TYPE(
950-
Diag_TypeScript_Optional_Properties_Not_Allowed_In_JavaScript),
951-
DIAG_TYPE(Diag_Missing_Semicolon_After_Field),
952-
MATCH_ACCESS_SPECIFIER_ERROR(u8"class C { "_sv)));
953-
}
954-
955-
{
956-
Test_Parser p(concat(u8"class C { "_sv, specifier,
957-
u8" async\nmethod() { const await = null; } }"_sv),
958-
capture_diags);
959-
SCOPED_TRACE(p.code);
960-
p.parse_and_visit_statement();
961-
EXPECT_THAT(p.legacy_errors(),
962-
ElementsAreArray({
963-
MATCH_ACCESS_SPECIFIER_ERROR(u8"class C { "_sv),
964-
}));
965-
}
966-
#undef MATCH_ACCESS_SPECIFIER_ERROR
892+
auto access_specifier_error =
893+
[&](String8_View code_before) -> Diagnostic_Assertion {
894+
if (specifier == u8"private"_sv) {
895+
return DIAGNOSTIC_ASSERTION_SPAN(
896+
Diag_TypeScript_Private_Not_Allowed_In_JavaScript, //
897+
specifier, code_before.size(), u8"private"_sv);
898+
} else if (specifier == u8"protected"_sv) {
899+
return DIAGNOSTIC_ASSERTION_SPAN(
900+
Diag_TypeScript_Protected_Not_Allowed_In_JavaScript, //
901+
specifier, code_before.size(), u8"protected"_sv);
902+
} else if (specifier == u8"public"_sv) {
903+
return DIAGNOSTIC_ASSERTION_SPAN(
904+
Diag_TypeScript_Public_Not_Allowed_In_JavaScript, //
905+
specifier, code_before.size(), u8"public"_sv);
906+
} else {
907+
QLJS_UNREACHABLE();
908+
}
909+
};
910+
911+
test_parse_and_visit_statement(
912+
concat(u8"class C { "_sv, specifier, u8" field = init; }"_sv),
913+
access_specifier_error(u8"class C { "_sv), javascript_options);
914+
915+
test_parse_and_visit_statement(
916+
concat(u8"class C { "_sv, specifier, u8" field\nmethod() {} }"_sv),
917+
access_specifier_error(u8"class C { "_sv), javascript_options);
918+
919+
test_parse_and_visit_statement(concat(u8"class C { "_sv, specifier,
920+
u8" field\n[methodName]() {} }"_sv),
921+
access_specifier_error(u8"class C { "_sv),
922+
javascript_options);
923+
924+
test_parse_and_visit_statement(
925+
concat(u8"class C { "_sv, specifier, u8" field? method() {} }"_sv),
926+
access_specifier_error(u8"class C { "_sv),
927+
u8"Diag_TypeScript_Optional_Properties_Not_Allowed_In_JavaScript"_diag,
928+
u8"Diag_Missing_Semicolon_After_Field"_diag, javascript_options);
929+
930+
test_parse_and_visit_statement(
931+
concat(u8"class C { "_sv, specifier,
932+
u8" async\nmethod() { const await = null; } }"_sv),
933+
access_specifier_error(u8"class C { "_sv), javascript_options);
967934
}
968935
}
969936

0 commit comments

Comments
 (0)