1 // Copyright 2019 The Chromium 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 #include "util/json/json_value.h"
6
7 #include "gtest/gtest.h"
8 #include "platform/base/error.h"
9 #include "util/json/json_serialization.h"
10
11 namespace openscreen {
12
TEST(JsonValueTest,GetInt)13 TEST(JsonValueTest, GetInt) {
14 absl::string_view obj(R"!({"key1": 17, "key2": 32.3, "key3": "asdf"})!");
15 ErrorOr<Json::Value> value_or_error = json::Parse(obj);
16 ASSERT_TRUE(value_or_error);
17 Json::Value& value = value_or_error.value();
18 absl::optional<int> result1 =
19 MaybeGetInt(value, JSON_EXPAND_FIND_CONSTANT_ARGS("key1"));
20 absl::optional<int> result2 =
21 MaybeGetInt(value, JSON_EXPAND_FIND_CONSTANT_ARGS("key2"));
22 absl::optional<int> result3 =
23 MaybeGetInt(value, JSON_EXPAND_FIND_CONSTANT_ARGS("key42"));
24 EXPECT_FALSE(result2);
25 EXPECT_FALSE(result3);
26
27 ASSERT_TRUE(result1);
28 EXPECT_EQ(result1.value(), 17);
29 }
30
TEST(JsonValueTest,GetString)31 TEST(JsonValueTest, GetString) {
32 absl::string_view obj(
33 R"!({"key1": 17, "key2": 32.3, "key3": "asdf", "key4": ""})!");
34 ErrorOr<Json::Value> value_or_error = json::Parse(obj);
35 ASSERT_TRUE(value_or_error);
36 Json::Value& value = value_or_error.value();
37 absl::optional<absl::string_view> result1 =
38 MaybeGetString(value, JSON_EXPAND_FIND_CONSTANT_ARGS("key3"));
39 absl::optional<absl::string_view> result2 =
40 MaybeGetString(value, JSON_EXPAND_FIND_CONSTANT_ARGS("key2"));
41 absl::optional<absl::string_view> result3 =
42 MaybeGetString(value, JSON_EXPAND_FIND_CONSTANT_ARGS("key42"));
43 absl::optional<absl::string_view> result4 =
44 MaybeGetString(value, JSON_EXPAND_FIND_CONSTANT_ARGS("key4"));
45
46 EXPECT_FALSE(result2);
47 EXPECT_FALSE(result3);
48
49 ASSERT_TRUE(result1);
50 EXPECT_EQ(result1.value(), "asdf");
51 ASSERT_TRUE(result4);
52 EXPECT_EQ(result4.value(), "");
53 }
54
55 } // namespace openscreen
56