• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2017 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 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 
7 #include "xfa/fde/css/cfde_cssvaluelistparser.h"
8 
9 #include "testing/gtest/include/gtest/gtest.h"
10 #include "third_party/base/ptr_util.h"
11 
TEST(CFDE_CSSValueListParser,rgb_short)12 TEST(CFDE_CSSValueListParser, rgb_short) {
13   FDE_CSSPrimitiveType type;
14   const FX_WCHAR* start;
15   int32_t len;
16 
17   auto parser = pdfium::MakeUnique<CFDE_CSSValueListParser>(L"#abc", 4, L' ');
18   EXPECT_TRUE(parser->NextValue(type, start, len));
19   EXPECT_EQ(FDE_CSSPrimitiveType::RGB, type);
20   EXPECT_EQ(L"#abc", CFX_WideString(start, len));
21   EXPECT_FALSE(parser->NextValue(type, start, len));
22 
23   parser = pdfium::MakeUnique<CFDE_CSSValueListParser>(L"#abcdef", 7, L' ');
24   EXPECT_TRUE(parser->NextValue(type, start, len));
25   EXPECT_EQ(FDE_CSSPrimitiveType::RGB, type);
26   EXPECT_EQ(L"#abcdef", CFX_WideString(start, len));
27   EXPECT_FALSE(parser->NextValue(type, start, len));
28 
29   parser =
30       pdfium::MakeUnique<CFDE_CSSValueListParser>(L"rgb(1, 255, 4)", 14, L' ');
31   EXPECT_TRUE(parser->NextValue(type, start, len));
32   EXPECT_EQ(FDE_CSSPrimitiveType::RGB, type);
33   EXPECT_EQ(L"rgb(1, 255, 4)", CFX_WideString(start, len));
34 
35   parser =
36       pdfium::MakeUnique<CFDE_CSSValueListParser>(L"#abcdefghij", 11, L' ');
37   EXPECT_TRUE(parser->NextValue(type, start, len));
38   EXPECT_EQ(FDE_CSSPrimitiveType::Unknown, type);
39   EXPECT_EQ(L"#abcdefghij", CFX_WideString(start, len));
40   EXPECT_FALSE(parser->NextValue(type, start, len));
41 }
42 
TEST(CFDE_CSSValueListParser,number_parsing)43 TEST(CFDE_CSSValueListParser, number_parsing) {
44   FDE_CSSPrimitiveType type;
45   const FX_WCHAR* start;
46   int32_t len;
47 
48   auto parser = pdfium::MakeUnique<CFDE_CSSValueListParser>(L"1234", 4, L' ');
49   EXPECT_TRUE(parser->NextValue(type, start, len));
50   EXPECT_EQ(FDE_CSSPrimitiveType::Number, type);
51   EXPECT_EQ(L"1234", CFX_WideString(start, len));
52 
53   parser = pdfium::MakeUnique<CFDE_CSSValueListParser>(L"-1234", 5, L' ');
54   EXPECT_TRUE(parser->NextValue(type, start, len));
55   EXPECT_EQ(FDE_CSSPrimitiveType::Number, type);
56   EXPECT_EQ(L"-1234", CFX_WideString(start, len));
57 
58   parser = pdfium::MakeUnique<CFDE_CSSValueListParser>(L"+1234", 5, L' ');
59   EXPECT_TRUE(parser->NextValue(type, start, len));
60   EXPECT_EQ(FDE_CSSPrimitiveType::Number, type);
61   EXPECT_EQ(L"+1234", CFX_WideString(start, len));
62 
63   parser = pdfium::MakeUnique<CFDE_CSSValueListParser>(L".1234", 5, L' ');
64   EXPECT_TRUE(parser->NextValue(type, start, len));
65   EXPECT_EQ(FDE_CSSPrimitiveType::Number, type);
66   EXPECT_EQ(L".1234", CFX_WideString(start, len));
67 
68   parser = pdfium::MakeUnique<CFDE_CSSValueListParser>(L"4321.1234", 9, L' ');
69   EXPECT_TRUE(parser->NextValue(type, start, len));
70   EXPECT_EQ(FDE_CSSPrimitiveType::Number, type);
71   EXPECT_EQ(L"4321.1234", CFX_WideString(start, len));
72 
73   // TODO(dsinclair): These should probably fail but currently don't.
74   parser = pdfium::MakeUnique<CFDE_CSSValueListParser>(L"4321.12.34", 10, L' ');
75   EXPECT_TRUE(parser->NextValue(type, start, len));
76   EXPECT_EQ(FDE_CSSPrimitiveType::Number, type);
77   EXPECT_EQ(L"4321.12.34", CFX_WideString(start, len));
78 
79   parser = pdfium::MakeUnique<CFDE_CSSValueListParser>(L"43a1.12.34", 10, L' ');
80   EXPECT_TRUE(parser->NextValue(type, start, len));
81   EXPECT_EQ(FDE_CSSPrimitiveType::Number, type);
82   EXPECT_EQ(L"43a1.12.34", CFX_WideString(start, len));
83 }
84 
TEST(CFDE_CSSValueListParser,string_parsing)85 TEST(CFDE_CSSValueListParser, string_parsing) {
86   FDE_CSSPrimitiveType type;
87   const FX_WCHAR* start;
88   int32_t len;
89 
90   auto parser =
91       pdfium::MakeUnique<CFDE_CSSValueListParser>(L"'string'", 8, L' ');
92   EXPECT_TRUE(parser->NextValue(type, start, len));
93   EXPECT_EQ(FDE_CSSPrimitiveType::String, type);
94   EXPECT_EQ(L"string", CFX_WideString(start, len));
95 
96   parser = pdfium::MakeUnique<CFDE_CSSValueListParser>(L"\"another string\"",
97                                                        16, L' ');
98   EXPECT_TRUE(parser->NextValue(type, start, len));
99   EXPECT_EQ(FDE_CSSPrimitiveType::String, type);
100   EXPECT_EQ(L"another string", CFX_WideString(start, len));
101 
102   parser = pdfium::MakeUnique<CFDE_CSSValueListParser>(L"standalone", 10, L' ');
103   EXPECT_TRUE(parser->NextValue(type, start, len));
104   EXPECT_EQ(FDE_CSSPrimitiveType::String, type);
105   EXPECT_EQ(L"standalone", CFX_WideString(start, len));
106 }
107 
TEST(CFDE_CSSValueListParser,multiparsing)108 TEST(CFDE_CSSValueListParser, multiparsing) {
109   FDE_CSSPrimitiveType type;
110   const FX_WCHAR* start;
111   int32_t len;
112 
113   auto parser =
114       pdfium::MakeUnique<CFDE_CSSValueListParser>(L"1, 2, 3", 7, L',');
115   EXPECT_TRUE(parser->NextValue(type, start, len));
116   EXPECT_EQ(FDE_CSSPrimitiveType::Number, type);
117   EXPECT_EQ(L"1", CFX_WideString(start, len));
118 
119   EXPECT_TRUE(parser->NextValue(type, start, len));
120   EXPECT_EQ(FDE_CSSPrimitiveType::Number, type);
121   EXPECT_EQ(L"2", CFX_WideString(start, len));
122 
123   EXPECT_TRUE(parser->NextValue(type, start, len));
124   EXPECT_EQ(FDE_CSSPrimitiveType::Number, type);
125   EXPECT_EQ(L"3", CFX_WideString(start, len));
126 
127   EXPECT_FALSE(parser->NextValue(type, start, len));
128 
129   parser = pdfium::MakeUnique<CFDE_CSSValueListParser>(
130       L"'str', rgb(1, 2, 3), 4", 22, L',');
131   EXPECT_TRUE(parser->NextValue(type, start, len));
132   EXPECT_EQ(FDE_CSSPrimitiveType::String, type);
133   EXPECT_EQ(L"str", CFX_WideString(start, len));
134 
135   EXPECT_TRUE(parser->NextValue(type, start, len));
136   EXPECT_EQ(FDE_CSSPrimitiveType::RGB, type);
137   EXPECT_EQ(L"rgb(1, 2, 3)", CFX_WideString(start, len));
138 
139   EXPECT_TRUE(parser->NextValue(type, start, len));
140   EXPECT_EQ(FDE_CSSPrimitiveType::Number, type);
141   EXPECT_EQ(L"4", CFX_WideString(start, len));
142 }
143