| OLD | NEW |
| (Empty) |
| 1 // Copyright 2016 PDFium Authors. All rights reserved. | |
| 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/fpdf_parser/cpdf_simple_parser.h" | |
| 6 | |
| 7 #include <string> | |
| 8 | |
| 9 #include "core/fpdfapi/fpdf_parser/fpdf_parser_utility.h" | |
| 10 #include "core/fxcrt/fx_basic.h" | |
| 11 #include "testing/gtest/include/gtest/gtest.h" | |
| 12 #include "testing/test_support.h" | |
| 13 | |
| 14 TEST(SimpleParserTest, GetWord) { | |
| 15 pdfium::StrFuncTestData test_data[] = { | |
| 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", ">"), | |
| 41 STR_IN_OUT_CASE(") another bear", ")"), STR_IN_OUT_CASE(">> end ", ">>"), | |
| 42 // No ending delimiters. | |
| 43 STR_IN_OUT_CASE("(sdfgfgbcv", "(sdfgfgbcv"), | |
| 44 // Regular cases. | |
| 45 STR_IN_OUT_CASE("apple pear", "apple"), | |
| 46 STR_IN_OUT_CASE(" pi=3.1415 ", "pi=3.1415"), | |
| 47 STR_IN_OUT_CASE(" p t x c ", "p"), STR_IN_OUT_CASE(" pt\0xc ", "pt"), | |
| 48 STR_IN_OUT_CASE(" $^&&*\t\0sdff ", "$^&&*"), | |
| 49 STR_IN_OUT_CASE("\n\r+3.5656 -11.0", "+3.5656"), | |
| 50 }; | |
| 51 for (size_t i = 0; i < FX_ArraySize(test_data); ++i) { | |
| 52 const pdfium::StrFuncTestData& data = test_data[i]; | |
| 53 CPDF_SimpleParser parser(data.input, data.input_size); | |
| 54 CFX_ByteStringC word = parser.GetWord(); | |
| 55 EXPECT_EQ(std::string(reinterpret_cast<const char*>(data.expected), | |
| 56 data.expected_size), | |
| 57 std::string(word.c_str(), word.GetLength())) | |
| 58 << " for case " << i; | |
| 59 } | |
| 60 } | |
| 61 | |
| 62 TEST(SimpleParserTest, FindTagParamFromStart) { | |
| 63 struct FindTagTestStruct { | |
| 64 const unsigned char* input; | |
| 65 unsigned int input_size; | |
| 66 const char* token; | |
| 67 int num_params; | |
| 68 bool result; | |
| 69 unsigned int result_pos; | |
| 70 } test_data[] = { | |
| 71 // Empty strings. | |
| 72 STR_IN_TEST_CASE("", "Tj", 1, false, 0), | |
| 73 STR_IN_TEST_CASE("", "", 1, false, 0), | |
| 74 // Empty token. | |
| 75 STR_IN_TEST_CASE(" T j", "", 1, false, 5), | |
| 76 // No parameter. | |
| 77 STR_IN_TEST_CASE("Tj", "Tj", 1, false, 2), | |
| 78 STR_IN_TEST_CASE("(Tj", "Tj", 1, false, 3), | |
| 79 // Partial token match. | |
| 80 STR_IN_TEST_CASE("\r12\t34 56 78Tj", "Tj", 1, false, 15), | |
| 81 // Regular cases with various parameters. | |
| 82 STR_IN_TEST_CASE("\r\0abd Tj", "Tj", 1, true, 0), | |
| 83 STR_IN_TEST_CASE("12 4 Tj 3 46 Tj", "Tj", 1, true, 2), | |
| 84 STR_IN_TEST_CASE("er^ 2 (34) (5667) Tj", "Tj", 2, true, 5), | |
| 85 STR_IN_TEST_CASE("<344> (232)\t343.4\n12 45 Tj", "Tj", 3, true, 11), | |
| 86 STR_IN_TEST_CASE("1 2 3 4 5 6 7 8 cm", "cm", 6, true, 3), | |
| 87 }; | |
| 88 for (size_t i = 0; i < FX_ArraySize(test_data); ++i) { | |
| 89 const FindTagTestStruct& data = test_data[i]; | |
| 90 CPDF_SimpleParser parser(data.input, data.input_size); | |
| 91 EXPECT_EQ(data.result, | |
| 92 parser.FindTagParamFromStart(data.token, data.num_params)) | |
| 93 << " for case " << i; | |
| 94 EXPECT_EQ(data.result_pos, parser.GetCurPos()) << " for case " << i; | |
| 95 } | |
| 96 } | |
| OLD | NEW |