@@ -889,81 +889,48 @@ TEST_F(Test_Parse_TypeScript_Class,
889
889
}
890
890
891
891
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\n method() {} }" _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\n method() { 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\n method() {} }" _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\n method() { const await = null; } }" _sv),
933
+ access_specifier_error (u8" class C { " _sv), javascript_options);
967
934
}
968
935
}
969
936
0 commit comments