@@ -38,6 +38,7 @@ namespace maldoca {
3838using ::absl_testing::StatusIs;
3939using ::maldoca::testing::EqualsProto;
4040using ::testing::ElementsAre;
41+ using ::testing::HasSubstr;
4142using ::testing::IsEmpty;
4243using ::testing::StrEq;
4344using ::testing::StrNe;
@@ -80,6 +81,38 @@ TEST_P(BabelTest, ParseSimpleCode) {
8081 EXPECT_THAT (result.errors , EqualsProto (" " ));
8182}
8283
84+ static constexpr char kInvalidSurrogate [] =
85+ " var i = \"\\ udf06\\ ud834\" ;\n "
86+ " var j = `\\ udf06\\ ud834`;" ;
87+
88+ TEST_P (BabelTest, ParseInvalidSurrogate) {
89+ std::unique_ptr<Babel> babel = GetParam ().babel_factory ();
90+ BabelParseRequest request;
91+ request.set_base64_encode_string_values (true );
92+ MALDOCA_ASSERT_OK_AND_ASSIGN (
93+ BabelParseResult parse_result,
94+ babel->Parse (kInvalidSurrogate , request, absl::InfiniteDuration ()));
95+
96+ EXPECT_THAT (parse_result.ast_string .value (), StrNe (" " ));
97+ EXPECT_THAT (parse_result.errors , EqualsProto (" " ));
98+ EXPECT_TRUE (parse_result.ast_string .string_values_base64_encoded ());
99+ // Base64 encoding for "\udf06\ud834" (UTF-16LE: 0x06, 0xdf, 0x34, 0xd8).
100+ EXPECT_THAT (parse_result.ast_string .value (), HasSubstr (" Bt802A==" ));
101+ // Base64 encoding for identifier name "i" (UTF-16LE: 0x69, 0x00).
102+ EXPECT_THAT (parse_result.ast_string .value (), HasSubstr (" aQA=" ));
103+ // Base64 encoding for identifier name "j" (UTF-16LE: 0x6a, 0x00).
104+ EXPECT_THAT (parse_result.ast_string .value (), HasSubstr (" agA=" ));
105+
106+ BabelGenerateOptions generate_options;
107+ MALDOCA_ASSERT_OK_AND_ASSIGN (
108+ BabelGenerateResult generate_result,
109+ babel->Generate (parse_result.ast_string , generate_options,
110+ absl::InfiniteDuration ()));
111+
112+ EXPECT_EQ (generate_result.source_code , kInvalidSurrogate );
113+ EXPECT_EQ (generate_result.error , std::nullopt );
114+ }
115+
83116TEST_P (BabelTest, ParseVarDef) {
84117 std::unique_ptr<Babel> babel = GetParam ().babel_factory ();
85118 BabelParseRequest request;
0 commit comments