xref: /aosp_15_r20/external/pdfium/fxjs/xfa/cfxjse_mapmodule_unittest.cpp (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
1*3ac0a46fSAndroid Build Coastguard Worker // Copyright 2020 The PDFium Authors
2*3ac0a46fSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*3ac0a46fSAndroid Build Coastguard Worker // found in the LICENSE file.
4*3ac0a46fSAndroid Build Coastguard Worker 
5*3ac0a46fSAndroid Build Coastguard Worker // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6*3ac0a46fSAndroid Build Coastguard Worker 
7*3ac0a46fSAndroid Build Coastguard Worker #include "fxjs/xfa/cfxjse_mapmodule.h"
8*3ac0a46fSAndroid Build Coastguard Worker 
9*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/fx_string.h"
10*3ac0a46fSAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h"
11*3ac0a46fSAndroid Build Coastguard Worker #include "third_party/abseil-cpp/absl/types/optional.h"
12*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/parser/cxfa_measurement.h"
13*3ac0a46fSAndroid Build Coastguard Worker 
TEST(CFXJSEMapModule,EmptyModule)14*3ac0a46fSAndroid Build Coastguard Worker TEST(CFXJSEMapModule, EmptyModule) {
15*3ac0a46fSAndroid Build Coastguard Worker   CFXJSE_MapModule module;
16*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_FALSE(module.HasKey(1));
17*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_FALSE(module.HasKey(2));
18*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_FALSE(module.HasKey(3));
19*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_FALSE(module.GetValue(1).has_value());
20*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_FALSE(module.GetString(2).has_value());
21*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_FALSE(module.GetMeasurement(3).has_value());
22*3ac0a46fSAndroid Build Coastguard Worker }
23*3ac0a46fSAndroid Build Coastguard Worker 
TEST(CFXJSEMapModule,InsertDelete)24*3ac0a46fSAndroid Build Coastguard Worker TEST(CFXJSEMapModule, InsertDelete) {
25*3ac0a46fSAndroid Build Coastguard Worker   const int value = 101;
26*3ac0a46fSAndroid Build Coastguard Worker   WideString str(L"foo");
27*3ac0a46fSAndroid Build Coastguard Worker   CXFA_Measurement measure(L"1 pt");
28*3ac0a46fSAndroid Build Coastguard Worker   CFXJSE_MapModule module;
29*3ac0a46fSAndroid Build Coastguard Worker 
30*3ac0a46fSAndroid Build Coastguard Worker   module.SetValue(100, value);
31*3ac0a46fSAndroid Build Coastguard Worker   module.SetString(200, str);
32*3ac0a46fSAndroid Build Coastguard Worker   module.SetMeasurement(300, measure);
33*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_TRUE(module.HasKey(100));
34*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_TRUE(module.HasKey(200));
35*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_TRUE(module.HasKey(300));
36*3ac0a46fSAndroid Build Coastguard Worker 
37*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_EQ(module.GetValue(100).value(), value);
38*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_FALSE(module.GetString(100).has_value());
39*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_FALSE(module.GetMeasurement(100).has_value());
40*3ac0a46fSAndroid Build Coastguard Worker 
41*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_FALSE(module.GetValue(200).has_value());
42*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_EQ(module.GetString(200).value(), str);
43*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_FALSE(module.GetMeasurement(200).has_value());
44*3ac0a46fSAndroid Build Coastguard Worker 
45*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_FALSE(module.GetValue(300).has_value());
46*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_FALSE(module.GetString(300).has_value());
47*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_EQ(module.GetMeasurement(300).value().GetUnit(), measure.GetUnit());
48*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_EQ(module.GetMeasurement(300).value().GetValue(), measure.GetValue());
49*3ac0a46fSAndroid Build Coastguard Worker 
50*3ac0a46fSAndroid Build Coastguard Worker   module.RemoveKey(100);
51*3ac0a46fSAndroid Build Coastguard Worker   module.RemoveKey(200);
52*3ac0a46fSAndroid Build Coastguard Worker   module.RemoveKey(300);
53*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_FALSE(module.HasKey(100));
54*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_FALSE(module.HasKey(200));
55*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_FALSE(module.HasKey(300));
56*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_FALSE(module.GetValue(100).has_value());
57*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_FALSE(module.GetString(200).has_value());
58*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_FALSE(module.GetMeasurement(200).has_value());
59*3ac0a46fSAndroid Build Coastguard Worker }
60*3ac0a46fSAndroid Build Coastguard Worker 
TEST(CFXJSEMapModule,KeyCollision)61*3ac0a46fSAndroid Build Coastguard Worker TEST(CFXJSEMapModule, KeyCollision) {
62*3ac0a46fSAndroid Build Coastguard Worker   const int value = 37;
63*3ac0a46fSAndroid Build Coastguard Worker   WideString str(L"foo");
64*3ac0a46fSAndroid Build Coastguard Worker   CXFA_Measurement measure(L"1 pt");
65*3ac0a46fSAndroid Build Coastguard Worker   CFXJSE_MapModule module;
66*3ac0a46fSAndroid Build Coastguard Worker 
67*3ac0a46fSAndroid Build Coastguard Worker   module.SetValue(100, value);
68*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_TRUE(module.HasKey(100));
69*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_EQ(module.GetValue(100).value(), value);
70*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_FALSE(module.GetString(100).has_value());
71*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_FALSE(module.GetMeasurement(100).has_value());
72*3ac0a46fSAndroid Build Coastguard Worker 
73*3ac0a46fSAndroid Build Coastguard Worker   module.SetString(100, str);
74*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_TRUE(module.HasKey(100));
75*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_FALSE(module.GetValue(100).has_value());
76*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_EQ(module.GetString(100).value(), str);
77*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_FALSE(module.GetMeasurement(100).has_value());
78*3ac0a46fSAndroid Build Coastguard Worker 
79*3ac0a46fSAndroid Build Coastguard Worker   module.SetMeasurement(100, measure);
80*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_FALSE(module.GetValue(100).has_value());
81*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_FALSE(module.GetString(100).has_value());
82*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_EQ(module.GetMeasurement(100).value().GetUnit(), measure.GetUnit());
83*3ac0a46fSAndroid Build Coastguard Worker 
84*3ac0a46fSAndroid Build Coastguard Worker   module.SetValue(100, value);
85*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_TRUE(module.HasKey(100));
86*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_EQ(module.GetValue(100).value(), value);
87*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_FALSE(module.GetString(100).has_value());
88*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_FALSE(module.GetMeasurement(100).has_value());
89*3ac0a46fSAndroid Build Coastguard Worker }
90*3ac0a46fSAndroid Build Coastguard Worker 
TEST(CFXJSEMapModule,MergeData)91*3ac0a46fSAndroid Build Coastguard Worker TEST(CFXJSEMapModule, MergeData) {
92*3ac0a46fSAndroid Build Coastguard Worker   const int value1 = 42;
93*3ac0a46fSAndroid Build Coastguard Worker   const int value2 = -1999;
94*3ac0a46fSAndroid Build Coastguard Worker   WideString string1(L"foo");
95*3ac0a46fSAndroid Build Coastguard Worker   WideString string2(L"foo");
96*3ac0a46fSAndroid Build Coastguard Worker   CXFA_Measurement measure1(L"1 pt");
97*3ac0a46fSAndroid Build Coastguard Worker   CXFA_Measurement measure2(L"2 mm");
98*3ac0a46fSAndroid Build Coastguard Worker   CFXJSE_MapModule module1;
99*3ac0a46fSAndroid Build Coastguard Worker   CFXJSE_MapModule module2;
100*3ac0a46fSAndroid Build Coastguard Worker 
101*3ac0a46fSAndroid Build Coastguard Worker   module1.SetValue(100, value1);
102*3ac0a46fSAndroid Build Coastguard Worker   module1.SetValue(101, value1);
103*3ac0a46fSAndroid Build Coastguard Worker   module1.SetString(200, string1);
104*3ac0a46fSAndroid Build Coastguard Worker   module1.SetString(201, string1);
105*3ac0a46fSAndroid Build Coastguard Worker   module1.SetMeasurement(300, measure1);
106*3ac0a46fSAndroid Build Coastguard Worker   module1.SetMeasurement(301, measure1);
107*3ac0a46fSAndroid Build Coastguard Worker 
108*3ac0a46fSAndroid Build Coastguard Worker   module2.SetString(100, string2);
109*3ac0a46fSAndroid Build Coastguard Worker   module2.SetMeasurement(200, measure2);
110*3ac0a46fSAndroid Build Coastguard Worker   module2.SetValue(300, value2);
111*3ac0a46fSAndroid Build Coastguard Worker 
112*3ac0a46fSAndroid Build Coastguard Worker   module1.MergeDataFrom(&module2);
113*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_EQ(module1.GetString(100).value(), string2);
114*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_EQ(module1.GetValue(101).value(), value1);
115*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_EQ(module1.GetMeasurement(200).value().GetUnit(), measure2.GetUnit());
116*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_EQ(module1.GetString(201).value(), string1);
117*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_EQ(module1.GetValue(300).value(), value2);
118*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_EQ(module1.GetMeasurement(301).value().GetUnit(), measure1.GetUnit());
119*3ac0a46fSAndroid Build Coastguard Worker 
120*3ac0a46fSAndroid Build Coastguard Worker   // module2 is undisturbed.
121*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_EQ(module2.GetString(100).value(), string2);
122*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_EQ(module2.GetMeasurement(200).value().GetUnit(), measure2.GetUnit());
123*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_EQ(module2.GetValue(300).value(), value2);
124*3ac0a46fSAndroid Build Coastguard Worker }
125