| 174 | } |
| 175 | |
| 176 | TEST(StringsTest, TestParsingOfAllEscapeCharacters) { |
| 177 | // All the valid escapes. |
| 178 | const std::set<char> valid_escapes = {'a', 'b', 'f', 'n', 'r', 't', |
| 179 | 'v', '\\', '?', '"', '\'', '`', |
| 180 | 'u', 'U', 'x', 'X'}; |
| 181 | for (int escape_char_int = 0; escape_char_int < 255; ++escape_char_int) { |
| 182 | char escape_char = static_cast<char>(escape_char_int); |
| 183 | absl::string_view escape_piece(&escape_char, 1); |
| 184 | if (valid_escapes.find(escape_char) != valid_escapes.end()) { |
| 185 | if (escape_char == '\'') { |
| 186 | TestParseString(absl::StrCat("\"a\\", escape_piece, "0010ffff\"")); |
| 187 | } |
| 188 | TestParseString(absl::StrCat("'a\\", escape_piece, "0010ffff'")); |
| 189 | TestParseString(absl::StrCat("'''a\\", escape_piece, "0010ffff'''")); |
| 190 | } else if (absl::ascii_isdigit(escape_char)) { |
| 191 | // Can also escape 0-3. |
| 192 | const std::string test_string = |
| 193 | absl::StrCat("'a\\", escape_piece, "00b'"); |
| 194 | const std::string test_triple_quoted_string = |
| 195 | absl::StrCat("'''a\\", escape_piece, "00b'''"); |
| 196 | if (escape_char <= '3') { |
| 197 | TestParseString(test_string); |
| 198 | TestParseString(test_triple_quoted_string); |
| 199 | } else { |
| 200 | TestInvalidString(test_string, "Illegal escape sequence: "); |
| 201 | TestInvalidString(test_triple_quoted_string, |
| 202 | "Illegal escape sequence: "); |
| 203 | } |
| 204 | } else { |
| 205 | if (Utf8IsValid(escape_piece)) { |
| 206 | const std::string expected_error = |
| 207 | ((escape_char == '\n' || escape_char == '\r') |
| 208 | ? "Illegal escaped newline" |
| 209 | : "Illegal escape sequence: "); |
| 210 | TestInvalidString(absl::StrCat("'a\\", escape_piece, "b'"), |
| 211 | expected_error); |
| 212 | TestInvalidString(absl::StrCat("'''a\\", escape_piece, "b'''"), |
| 213 | expected_error); |
| 214 | } else { |
| 215 | TestInvalidString(absl::StrCat("'a\\", escape_piece, "b'"), |
| 216 | "Structurally invalid UTF8" // |
| 217 | " string"); |
| 218 | TestInvalidString(absl::StrCat("'''a\\", escape_piece, "b'''"), |
| 219 | "Structurally invalid UTF8" // |
| 220 | " string"); |
| 221 | } |
| 222 | } |
| 223 | } |
| 224 | } |
| 225 | |
| 226 | TEST(StringsTest, TestParsingOfOctalEscapes) { |
| 227 | for (int idx = 0; idx < 256; ++idx) { |
nothing calls this directly
no test coverage detected