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