xref: /aosp_15_r20/external/pdfium/xfa/fxfa/parser/cxfa_document_unittest.cpp (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
1 // Copyright 2021 The PDFium Authors
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 "xfa/fxfa/parser/cxfa_document.h"
6 
7 #include "core/fxcrt/fx_string.h"
8 #include "testing/gtest/include/gtest/gtest.h"
9 
TEST(CXFA_DocumentTest,ParseXFAVersion)10 TEST(CXFA_DocumentTest, ParseXFAVersion) {
11   // Malformed
12   EXPECT_EQ(XFA_VERSION_UNKNOWN, CXFA_Document::ParseXFAVersion(L""));
13   EXPECT_EQ(XFA_VERSION_UNKNOWN,
14             CXFA_Document::ParseXFAVersion(
15                 L"http://www.xfa.org/schema/xfa-template"));
16   EXPECT_EQ(XFA_VERSION_UNKNOWN,
17             CXFA_Document::ParseXFAVersion(
18                 L"http://www.xfa.org/schema/xfa-templatX/"));
19   EXPECT_EQ(XFA_VERSION_UNKNOWN,
20             CXFA_Document::ParseXFAVersion(
21                 L"http://www.xfa.org/schema/xfa-template/"));
22   EXPECT_EQ(XFA_VERSION_UNKNOWN,
23             CXFA_Document::ParseXFAVersion(
24                 L"http://www.xfa.org/schema/xfa-template/2"));
25 
26   // Out-of-range
27   EXPECT_EQ(XFA_VERSION_UNKNOWN,
28             CXFA_Document::ParseXFAVersion(
29                 L"http://www.xfa.org/schema/xfa-template/-1.0"));
30   EXPECT_EQ(XFA_VERSION_UNKNOWN,
31             CXFA_Document::ParseXFAVersion(
32                 L"http://www.xfa.org/schema/xfa-template/1.9"));
33   EXPECT_EQ(XFA_VERSION_UNKNOWN,
34             CXFA_Document::ParseXFAVersion(
35                 L"http://www.xfa.org/schema/xfa-template/4.1"));
36 
37   // Missing digits
38   EXPECT_EQ(XFA_VERSION_UNKNOWN,
39             CXFA_Document::ParseXFAVersion(
40                 L"http://www.xfa.org/schema/xfa-template/."));
41   EXPECT_EQ(XFA_VERSION_UNKNOWN,
42             CXFA_Document::ParseXFAVersion(
43                 L"http://www.xfa.org/schema/xfa-template/.3"));
44   EXPECT_EQ(XFA_VERSION_300, CXFA_Document::ParseXFAVersion(
45                                  L"http://www.xfa.org/schema/xfa-template/3."));
46   EXPECT_EQ(XFA_VERSION_UNKNOWN,
47             CXFA_Document::ParseXFAVersion(
48                 L"http://www.xfa.org/schema/xfa-template/clams.6"));
49   EXPECT_EQ(XFA_VERSION_300,
50             CXFA_Document::ParseXFAVersion(
51                 L"http://www.xfa.org/schema/xfa-template/3.clams"));
52 
53   // Min / max values
54   EXPECT_EQ(XFA_VERSION_200,
55             CXFA_Document::ParseXFAVersion(
56                 L"http://www.xfa.org/schema/xfa-template/2.0"));
57   EXPECT_EQ(400, CXFA_Document::ParseXFAVersion(
58                      L"http://www.xfa.org/schema/xfa-template/4.0"));
59 
60   // Number and decimal point parsing.
61   EXPECT_EQ(XFA_VERSION_306,
62             CXFA_Document::ParseXFAVersion(
63                 L"http://www.xfa.org/schema/xfa-template/3.6"));
64 
65   // TODO(tsepez): maybe fail on these dubious values?
66   EXPECT_EQ(XFA_VERSION_306,
67             CXFA_Document::ParseXFAVersion(
68                 L"http://www.xfa.org/schema/xfa-template/0003.00006"));
69   EXPECT_EQ(XFA_VERSION_306,
70             CXFA_Document::ParseXFAVersion(
71                 L"http://www.xfa.org/schema/xfa-template/0003.00006.0000"));
72   EXPECT_EQ(XFA_VERSION_206,
73             CXFA_Document::ParseXFAVersion(
74                 L"http://www.xfa.org/schema/xfa-template/2.6clams"));
75   EXPECT_EQ(XFA_VERSION_206,
76             CXFA_Document::ParseXFAVersion(
77                 L"http://www.xfa.org/schema/xfa-template/1.106"));
78   EXPECT_EQ(XFA_VERSION_306,
79             CXFA_Document::ParseXFAVersion(
80                 L"http://www.xfa.org/schema/xfa-template/4.-94"));
81   EXPECT_EQ(317, CXFA_Document::ParseXFAVersion(
82                      L"http://www.xfa.org/schema/xfa-template/3.17"));
83 }
84 
TEST(CXFA_DocumentTest,ParseUseHref)85 TEST(CXFA_DocumentTest, ParseUseHref) {
86   {
87     WideString wsEmpty;  // Must outlive views.
88     WideStringView wsURI;
89     WideStringView wsID;
90     WideStringView wsSOM;
91     CXFA_Document::ParseUseHref(wsEmpty, wsURI, wsID, wsSOM);
92     EXPECT_EQ(L"", wsURI);
93     EXPECT_EQ(L"", wsID);
94     EXPECT_EQ(L"", wsSOM);
95   }
96   {
97     WideString wsNoSharp(L"url-part-only");  // Must outlive views.
98     WideStringView wsURI;
99     WideStringView wsID;
100     WideStringView wsSOM;
101     CXFA_Document::ParseUseHref(wsNoSharp, wsURI, wsID, wsSOM);
102     EXPECT_EQ(L"url-part-only", wsURI);
103     EXPECT_EQ(L"", wsID);
104     EXPECT_EQ(L"", wsSOM);
105   }
106   {
107     WideString wsNoSom(L"url-part#frag");  // Must outlive views.
108     WideStringView wsURI;
109     WideStringView wsID;
110     WideStringView wsSOM;
111     CXFA_Document::ParseUseHref(wsNoSom, wsURI, wsID, wsSOM);
112     EXPECT_EQ(L"url-part", wsURI);
113     EXPECT_EQ(L"frag", wsID);
114     EXPECT_EQ(L"", wsSOM);
115   }
116   {
117     WideString wsIncompleteSom(L"url-part#som(");  // Must outlive views.
118     WideStringView wsURI;
119     WideStringView wsID;
120     WideStringView wsSOM;
121     CXFA_Document::ParseUseHref(wsIncompleteSom, wsURI, wsID, wsSOM);
122     EXPECT_EQ(L"url-part", wsURI);
123     EXPECT_EQ(L"som(", wsID);
124     EXPECT_EQ(L"", wsSOM);
125   }
126   {
127     WideString wsEmptySom(L"url-part#som()");  // Must outlive views.
128     WideStringView wsURI;
129     WideStringView wsID;
130     WideStringView wsSOM;
131     CXFA_Document::ParseUseHref(wsEmptySom, wsURI, wsID, wsSOM);
132     EXPECT_EQ(L"url-part", wsURI);
133     EXPECT_EQ(L"", wsID);
134     EXPECT_EQ(L"", wsSOM);
135   }
136   {
137     WideString wsHasSom(
138         L"url-part#som(nested(foo.bar))");  // Must outlive views.
139     WideStringView wsURI;
140     WideStringView wsID;
141     WideStringView wsSOM;
142     CXFA_Document::ParseUseHref(wsHasSom, wsURI, wsID, wsSOM);
143     EXPECT_EQ(L"url-part", wsURI);
144     EXPECT_EQ(L"", wsID);
145     EXPECT_EQ(L"nested(foo.bar)", wsSOM);
146   }
147 }
148 
TEST(CXFA_DocumentTest,ParseUse)149 TEST(CXFA_DocumentTest, ParseUse) {
150   {
151     WideString wsUseVal(L"");  // Must outlive views.
152     WideStringView wsID;
153     WideStringView wsSOM;
154     CXFA_Document::ParseUse(wsUseVal, wsID, wsSOM);
155     EXPECT_EQ(L"", wsID);
156     EXPECT_EQ(L"", wsSOM);
157   }
158   {
159     WideString wsUseVal(L"clams");  // Must outlive views.
160     WideStringView wsID;
161     WideStringView wsSOM;
162     CXFA_Document::ParseUse(wsUseVal, wsID, wsSOM);
163     EXPECT_EQ(L"", wsID);
164     EXPECT_EQ(L"clams", wsSOM);
165   }
166   {
167     WideString wsUseVal(L"#clams");  // Must outlive views.
168     WideStringView wsID;
169     WideStringView wsSOM;
170     CXFA_Document::ParseUse(wsUseVal, wsID, wsSOM);
171     EXPECT_EQ(L"clams", wsID);
172     EXPECT_EQ(L"", wsSOM);
173   }
174 }
175