kumarashishg | 826308d | 2023-06-23 13:21:22 +0000 | [diff] [blame] | 1 | // Copyright 2016 The PDFium Authors |
Philip P. Moltmann | 4d3acf4 | 2017-03-20 11:05:52 -0700 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | #include "core/fpdfapi/parser/cpdf_simple_parser.h" |
| 6 | |
kumarashishg | 826308d | 2023-06-23 13:21:22 +0000 | [diff] [blame] | 7 | #include <iterator> |
Philip P. Moltmann | 4d3acf4 | 2017-03-20 11:05:52 -0700 | [diff] [blame] | 8 | |
| 9 | #include "core/fpdfapi/parser/fpdf_parser_utility.h" |
Philip P. Moltmann | 4d3acf4 | 2017-03-20 11:05:52 -0700 | [diff] [blame] | 10 | #include "testing/gtest/include/gtest/gtest.h" |
| 11 | #include "testing/test_support.h" |
Haibo Huang | 49cc930 | 2020-04-27 16:14:24 -0700 | [diff] [blame] | 12 | #include "third_party/base/span.h" |
Philip P. Moltmann | 4d3acf4 | 2017-03-20 11:05:52 -0700 | [diff] [blame] | 13 | |
| 14 | TEST(SimpleParserTest, GetWord) { |
Philip P. Moltmann | d904c1e | 2018-03-19 09:26:45 -0700 | [diff] [blame] | 15 | static const pdfium::StrFuncTestData test_data[] = { |
Philip P. Moltmann | 4d3acf4 | 2017-03-20 11:05:52 -0700 | [diff] [blame] | 16 | // Empty src string. |
| 17 | STR_IN_OUT_CASE("", ""), |
| 18 | // Content with whitespaces only. |
| 19 | STR_IN_OUT_CASE(" \t \0 \n", ""), |
| 20 | // Content with comments only. |
| 21 | STR_IN_OUT_CASE("%this is a test case\r\n%2nd line", ""), |
| 22 | // Mixed whitespaces and comments. |
| 23 | STR_IN_OUT_CASE(" \t \0%try()%haha\n %another line \aa", ""), |
| 24 | // Name. |
| 25 | STR_IN_OUT_CASE(" /Tester ", "/Tester"), |
| 26 | // String. |
| 27 | STR_IN_OUT_CASE("\t(nice day)!\n ", "(nice day)"), |
| 28 | // String with nested braces. |
| 29 | STR_IN_OUT_CASE("\t(It is a (long) day)!\n ", "(It is a (long) day)"), |
| 30 | // String with escaped chars. |
| 31 | STR_IN_OUT_CASE("\t(It is a \\(long\\) day!)hi\n ", |
| 32 | "(It is a \\(long\\) day!)"), |
| 33 | // Hex string. |
| 34 | STR_IN_OUT_CASE(" \n<4545acdfedertt>abc ", "<4545acdfedertt>"), |
| 35 | STR_IN_OUT_CASE(" \n<4545a<ed>ertt>abc ", "<4545a<ed>"), |
| 36 | // Dictionary. |
| 37 | STR_IN_OUT_CASE("<</oc 234 /color 2 3 R>>", "<<"), |
| 38 | STR_IN_OUT_CASE("\t\t<< /abc>>", "<<"), |
| 39 | // Handling ending delimiters. |
| 40 | STR_IN_OUT_CASE("> little bear", ">"), |
Haibo Huang | 49cc930 | 2020-04-27 16:14:24 -0700 | [diff] [blame] | 41 | STR_IN_OUT_CASE(") another bear", ")"), |
| 42 | STR_IN_OUT_CASE(">> end ", ">>"), |
Philip P. Moltmann | 4d3acf4 | 2017-03-20 11:05:52 -0700 | [diff] [blame] | 43 | // No ending delimiters. |
| 44 | STR_IN_OUT_CASE("(sdfgfgbcv", "(sdfgfgbcv"), |
| 45 | // Regular cases. |
| 46 | STR_IN_OUT_CASE("apple pear", "apple"), |
| 47 | STR_IN_OUT_CASE(" pi=3.1415 ", "pi=3.1415"), |
Haibo Huang | 49cc930 | 2020-04-27 16:14:24 -0700 | [diff] [blame] | 48 | STR_IN_OUT_CASE(" p t x c ", "p"), |
| 49 | STR_IN_OUT_CASE(" pt\0xc ", "pt"), |
Philip P. Moltmann | 4d3acf4 | 2017-03-20 11:05:52 -0700 | [diff] [blame] | 50 | STR_IN_OUT_CASE(" $^&&*\t\0sdff ", "$^&&*"), |
| 51 | STR_IN_OUT_CASE("\n\r+3.5656 -11.0", "+3.5656"), |
| 52 | }; |
kumarashishg | 826308d | 2023-06-23 13:21:22 +0000 | [diff] [blame] | 53 | for (size_t i = 0; i < std::size(test_data); ++i) { |
Philip P. Moltmann | 4d3acf4 | 2017-03-20 11:05:52 -0700 | [diff] [blame] | 54 | const pdfium::StrFuncTestData& data = test_data[i]; |
Haibo Huang | 49cc930 | 2020-04-27 16:14:24 -0700 | [diff] [blame] | 55 | CPDF_SimpleParser parser(pdfium::make_span(data.input, data.input_size)); |
Philip P. Moltmann | d904c1e | 2018-03-19 09:26:45 -0700 | [diff] [blame] | 56 | ByteStringView word = parser.GetWord(); |
| 57 | EXPECT_EQ(data.expected_size, word.GetLength()) << " for case " << i; |
| 58 | if (data.expected_size != word.GetLength()) |
| 59 | continue; |
| 60 | EXPECT_EQ( |
| 61 | 0, memcmp(data.expected, word.unterminated_c_str(), data.expected_size)) |
Philip P. Moltmann | 4d3acf4 | 2017-03-20 11:05:52 -0700 | [diff] [blame] | 62 | << " for case " << i; |
| 63 | } |
| 64 | } |