xref: /aosp_15_r20/external/cronet/base/json/values_util_unittest.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2019 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #include "base/json/values_util.h"
6*6777b538SAndroid Build Coastguard Worker 
7*6777b538SAndroid Build Coastguard Worker #include <limits>
8*6777b538SAndroid Build Coastguard Worker #include <string_view>
9*6777b538SAndroid Build Coastguard Worker 
10*6777b538SAndroid Build Coastguard Worker #include "base/files/file_path.h"
11*6777b538SAndroid Build Coastguard Worker #include "base/time/time.h"
12*6777b538SAndroid Build Coastguard Worker #include "base/unguessable_token.h"
13*6777b538SAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h"
14*6777b538SAndroid Build Coastguard Worker 
15*6777b538SAndroid Build Coastguard Worker namespace base {
16*6777b538SAndroid Build Coastguard Worker 
17*6777b538SAndroid Build Coastguard Worker namespace {
18*6777b538SAndroid Build Coastguard Worker 
TEST(ValuesUtilTest,BasicInt64Limits)19*6777b538SAndroid Build Coastguard Worker TEST(ValuesUtilTest, BasicInt64Limits) {
20*6777b538SAndroid Build Coastguard Worker   constexpr struct {
21*6777b538SAndroid Build Coastguard Worker     int64_t input;
22*6777b538SAndroid Build Coastguard Worker     std::string_view expected;
23*6777b538SAndroid Build Coastguard Worker   } kTestCases[] = {
24*6777b538SAndroid Build Coastguard Worker       {0, "0"},
25*6777b538SAndroid Build Coastguard Worker       {-1234, "-1234"},
26*6777b538SAndroid Build Coastguard Worker       {5678, "5678"},
27*6777b538SAndroid Build Coastguard Worker       {std::numeric_limits<int64_t>::lowest(), "-9223372036854775808"},
28*6777b538SAndroid Build Coastguard Worker       {std::numeric_limits<int64_t>::max(), "9223372036854775807"},
29*6777b538SAndroid Build Coastguard Worker   };
30*6777b538SAndroid Build Coastguard Worker   for (const auto& test_case : kTestCases) {
31*6777b538SAndroid Build Coastguard Worker     int64_t input = test_case.input;
32*6777b538SAndroid Build Coastguard Worker     TimeDelta time_delta_input = Microseconds(input);
33*6777b538SAndroid Build Coastguard Worker     Time time_input = Time::FromDeltaSinceWindowsEpoch(time_delta_input);
34*6777b538SAndroid Build Coastguard Worker     Value expected(test_case.expected);
35*6777b538SAndroid Build Coastguard Worker     SCOPED_TRACE(testing::Message()
36*6777b538SAndroid Build Coastguard Worker                  << "input: " << input << ", expected: " << expected);
37*6777b538SAndroid Build Coastguard Worker 
38*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(Int64ToValue(input), expected);
39*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(*ValueToInt64(&expected), input);
40*6777b538SAndroid Build Coastguard Worker 
41*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(TimeDeltaToValue(time_delta_input), expected);
42*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(*ValueToTimeDelta(&expected), time_delta_input);
43*6777b538SAndroid Build Coastguard Worker 
44*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(TimeToValue(time_input), expected);
45*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(*ValueToTime(&expected), time_input);
46*6777b538SAndroid Build Coastguard Worker   }
47*6777b538SAndroid Build Coastguard Worker }
48*6777b538SAndroid Build Coastguard Worker 
TEST(ValuesUtilTest,InvalidInt64Values)49*6777b538SAndroid Build Coastguard Worker TEST(ValuesUtilTest, InvalidInt64Values) {
50*6777b538SAndroid Build Coastguard Worker   const std::unique_ptr<Value> kTestCases[] = {
51*6777b538SAndroid Build Coastguard Worker       nullptr,
52*6777b538SAndroid Build Coastguard Worker       std::make_unique<Value>(),
53*6777b538SAndroid Build Coastguard Worker       std::make_unique<Value>(0),
54*6777b538SAndroid Build Coastguard Worker       std::make_unique<Value>(1234),
55*6777b538SAndroid Build Coastguard Worker       std::make_unique<Value>(true),
56*6777b538SAndroid Build Coastguard Worker       std::make_unique<Value>(Value::Type::BINARY),
57*6777b538SAndroid Build Coastguard Worker       std::make_unique<Value>(Value::Type::LIST),
58*6777b538SAndroid Build Coastguard Worker       std::make_unique<Value>(Value::Type::DICT),
59*6777b538SAndroid Build Coastguard Worker       std::make_unique<Value>(""),
60*6777b538SAndroid Build Coastguard Worker       std::make_unique<Value>("abcd"),
61*6777b538SAndroid Build Coastguard Worker       std::make_unique<Value>("1234.0"),
62*6777b538SAndroid Build Coastguard Worker       std::make_unique<Value>("1234a"),
63*6777b538SAndroid Build Coastguard Worker       std::make_unique<Value>("a1234"),
64*6777b538SAndroid Build Coastguard Worker   };
65*6777b538SAndroid Build Coastguard Worker   for (const auto& test_case : kTestCases) {
66*6777b538SAndroid Build Coastguard Worker     EXPECT_FALSE(ValueToInt64(test_case.get()));
67*6777b538SAndroid Build Coastguard Worker     EXPECT_FALSE(ValueToTimeDelta(test_case.get()));
68*6777b538SAndroid Build Coastguard Worker     EXPECT_FALSE(ValueToTime(test_case.get()));
69*6777b538SAndroid Build Coastguard Worker   }
70*6777b538SAndroid Build Coastguard Worker }
71*6777b538SAndroid Build Coastguard Worker 
TEST(ValuesUtilTest,FilePath)72*6777b538SAndroid Build Coastguard Worker TEST(ValuesUtilTest, FilePath) {
73*6777b538SAndroid Build Coastguard Worker   // Ω is U+03A9 GREEK CAPITAL LETTER OMEGA, a non-ASCII character.
74*6777b538SAndroid Build Coastguard Worker   constexpr std::string_view kTestCases[] = {
75*6777b538SAndroid Build Coastguard Worker       "/unix/Ω/path.dat",
76*6777b538SAndroid Build Coastguard Worker       "C:\\windows\\Ω\\path.dat",
77*6777b538SAndroid Build Coastguard Worker   };
78*6777b538SAndroid Build Coastguard Worker   for (auto test_case : kTestCases) {
79*6777b538SAndroid Build Coastguard Worker     FilePath input = FilePath::FromUTF8Unsafe(test_case);
80*6777b538SAndroid Build Coastguard Worker     Value expected(test_case);
81*6777b538SAndroid Build Coastguard Worker     SCOPED_TRACE(testing::Message() << "test_case: " << test_case);
82*6777b538SAndroid Build Coastguard Worker 
83*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(FilePathToValue(input), expected);
84*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(*ValueToFilePath(&expected), input);
85*6777b538SAndroid Build Coastguard Worker   }
86*6777b538SAndroid Build Coastguard Worker }
87*6777b538SAndroid Build Coastguard Worker 
TEST(ValuesUtilTest,UnguessableToken)88*6777b538SAndroid Build Coastguard Worker TEST(ValuesUtilTest, UnguessableToken) {
89*6777b538SAndroid Build Coastguard Worker   constexpr struct {
90*6777b538SAndroid Build Coastguard Worker     uint64_t high;
91*6777b538SAndroid Build Coastguard Worker     uint64_t low;
92*6777b538SAndroid Build Coastguard Worker     std::string_view expected;
93*6777b538SAndroid Build Coastguard Worker   } kTestCases[] = {
94*6777b538SAndroid Build Coastguard Worker       {0x123456u, 0x9ABCu, "5634120000000000BC9A000000000000"},
95*6777b538SAndroid Build Coastguard Worker   };
96*6777b538SAndroid Build Coastguard Worker   for (const auto& test_case : kTestCases) {
97*6777b538SAndroid Build Coastguard Worker     UnguessableToken input =
98*6777b538SAndroid Build Coastguard Worker         UnguessableToken::CreateForTesting(test_case.high, test_case.low);
99*6777b538SAndroid Build Coastguard Worker     Value expected(test_case.expected);
100*6777b538SAndroid Build Coastguard Worker     SCOPED_TRACE(testing::Message() << "expected: " << test_case.expected);
101*6777b538SAndroid Build Coastguard Worker 
102*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(UnguessableTokenToValue(input), expected);
103*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(*ValueToUnguessableToken(&expected), input);
104*6777b538SAndroid Build Coastguard Worker   }
105*6777b538SAndroid Build Coastguard Worker }
106*6777b538SAndroid Build Coastguard Worker 
107*6777b538SAndroid Build Coastguard Worker }  // namespace
108*6777b538SAndroid Build Coastguard Worker 
109*6777b538SAndroid Build Coastguard Worker }  // namespace base
110