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