180814287SRaphael Isemann //===-- StructuredDataTest.cpp --------------------------------------------===//
2f2a8bccfSPavel Labath //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6f2a8bccfSPavel Labath //
7f2a8bccfSPavel Labath //===----------------------------------------------------------------------===//
8f2a8bccfSPavel Labath
9f2a8bccfSPavel Labath #include "gtest/gtest.h"
10f2a8bccfSPavel Labath
11a6db4167STim Hammerquist #include "TestingSupport/TestUtilities.h"
12f2a8bccfSPavel Labath #include "lldb/Utility/Status.h"
13f2a8bccfSPavel Labath #include "lldb/Utility/StreamString.h"
14f2a8bccfSPavel Labath #include "lldb/Utility/StructuredData.h"
15f2a8bccfSPavel Labath #include "llvm/Support/Path.h"
16f2a8bccfSPavel Labath
17f2a8bccfSPavel Labath using namespace lldb;
18f2a8bccfSPavel Labath using namespace lldb_private;
19f2a8bccfSPavel Labath
TEST(StructuredDataTest,StringDump)207ed3e22fSPavel Labath TEST(StructuredDataTest, StringDump) {
21f2a8bccfSPavel Labath std::pair<llvm::StringRef, llvm::StringRef> TestCases[] = {
22f2a8bccfSPavel Labath {R"(asdfg)", R"("asdfg")"},
23f2a8bccfSPavel Labath {R"(as"df)", R"("as\"df")"},
24f2a8bccfSPavel Labath {R"(as\df)", R"("as\\df")"},
25f2a8bccfSPavel Labath };
26f2a8bccfSPavel Labath for (auto P : TestCases) {
27f2a8bccfSPavel Labath StreamString S;
28f2a8bccfSPavel Labath const bool pretty_print = false;
29f2a8bccfSPavel Labath StructuredData::String(P.first).Dump(S, pretty_print);
30f2a8bccfSPavel Labath EXPECT_EQ(P.second, S.GetString());
31f2a8bccfSPavel Labath }
32f2a8bccfSPavel Labath }
33f2a8bccfSPavel Labath
34e861d053SMed Ismail Bennani TEST(StructuredDataTest, GetDescriptionEmpty) {
35e861d053SMed Ismail Bennani Status status;
36e861d053SMed Ismail Bennani auto object_sp = StructuredData::ParseJSON("{}");
37e861d053SMed Ismail Bennani ASSERT_NE(nullptr, object_sp);
38e861d053SMed Ismail Bennani
39e861d053SMed Ismail Bennani StreamString S;
40e861d053SMed Ismail Bennani object_sp->GetDescription(S);
41*40afc69eSMed Ismail Bennani EXPECT_EQ(0u, S.GetSize());
42e861d053SMed Ismail Bennani }
43e861d053SMed Ismail Bennani
44e861d053SMed Ismail Bennani TEST(StructuredDataTest, GetDescriptionBasic) {
45e861d053SMed Ismail Bennani Status status;
46e861d053SMed Ismail Bennani std::string input = GetInputFilePath("StructuredData-basic.json");
47e861d053SMed Ismail Bennani auto object_sp = StructuredData::ParseJSONFromFile(FileSpec(input), status);
48e861d053SMed Ismail Bennani ASSERT_NE(nullptr, object_sp);
49e861d053SMed Ismail Bennani
50e861d053SMed Ismail Bennani const std::string expected = "[0]: 1\n"
51e861d053SMed Ismail Bennani "[1]: 2\n"
52e861d053SMed Ismail Bennani "[2]: 3";
53e861d053SMed Ismail Bennani
54e861d053SMed Ismail Bennani StreamString S;
55e861d053SMed Ismail Bennani object_sp->GetDescription(S);
56e861d053SMed Ismail Bennani EXPECT_EQ(expected, S.GetString());
57e861d053SMed Ismail Bennani }
58e861d053SMed Ismail Bennani
59e861d053SMed Ismail Bennani TEST(StructuredDataTest, GetDescriptionNested) {
60e861d053SMed Ismail Bennani Status status;
61e861d053SMed Ismail Bennani std::string input = GetInputFilePath("StructuredData-nested.json");
62e861d053SMed Ismail Bennani auto object_sp = StructuredData::ParseJSONFromFile(FileSpec(input), status);
63e861d053SMed Ismail Bennani ASSERT_NE(nullptr, object_sp);
64e861d053SMed Ismail Bennani
65e861d053SMed Ismail Bennani const std::string expected = "my_dict:\n"
66e861d053SMed Ismail Bennani " [0]:\n"
67e861d053SMed Ismail Bennani " three: 3\n"
68e861d053SMed Ismail Bennani " two: 2\n"
69e861d053SMed Ismail Bennani " [1]:\n"
70e861d053SMed Ismail Bennani " four:\n"
71e861d053SMed Ismail Bennani " val: 4\n"
72e861d053SMed Ismail Bennani " [2]: 1";
73e861d053SMed Ismail Bennani
74e861d053SMed Ismail Bennani StreamString S;
75e861d053SMed Ismail Bennani object_sp->GetDescription(S);
76e861d053SMed Ismail Bennani EXPECT_EQ(expected, S.GetString());
77e861d053SMed Ismail Bennani }
78e861d053SMed Ismail Bennani
79e861d053SMed Ismail Bennani TEST(StructuredDataTest, GetDescriptionFull) {
80e861d053SMed Ismail Bennani Status status;
81e861d053SMed Ismail Bennani std::string input = GetInputFilePath("StructuredData-full.json");
82e861d053SMed Ismail Bennani auto object_sp = StructuredData::ParseJSONFromFile(FileSpec(input), status);
83e861d053SMed Ismail Bennani ASSERT_NE(nullptr, object_sp);
84e861d053SMed Ismail Bennani
85e861d053SMed Ismail Bennani const std::string expected = "Array:\n"
86e861d053SMed Ismail Bennani " [0]: 3.140000\n"
87e861d053SMed Ismail Bennani " [1]:\n"
88e861d053SMed Ismail Bennani " key: val\n"
89e861d053SMed Ismail Bennani "Dictionary:\n"
90e861d053SMed Ismail Bennani " FalseBool: False\n"
91e861d053SMed Ismail Bennani "Integer: 1\n"
92e861d053SMed Ismail Bennani "Null: NULL\n"
93e861d053SMed Ismail Bennani "String: value\n"
94e861d053SMed Ismail Bennani "TrueBool: True";
95e861d053SMed Ismail Bennani
96e861d053SMed Ismail Bennani StreamString S;
97e861d053SMed Ismail Bennani object_sp->GetDescription(S);
98e861d053SMed Ismail Bennani EXPECT_EQ(expected, S.GetString());
99e861d053SMed Ismail Bennani }
100e861d053SMed Ismail Bennani
1017ed3e22fSPavel Labath TEST(StructuredDataTest, ParseJSONFromFile) {
102f2a8bccfSPavel Labath Status status;
103f2a8bccfSPavel Labath auto object_sp = StructuredData::ParseJSONFromFile(
1048f3be7a3SJonas Devlieghere FileSpec("non-existing-file.json"), status);
105f2a8bccfSPavel Labath EXPECT_EQ(nullptr, object_sp);
106f2a8bccfSPavel Labath
1077ed3e22fSPavel Labath std::string input = GetInputFilePath("StructuredData-basic.json");
1088f3be7a3SJonas Devlieghere object_sp = StructuredData::ParseJSONFromFile(FileSpec(input), status);
109f2a8bccfSPavel Labath ASSERT_NE(nullptr, object_sp);
110f2a8bccfSPavel Labath
111f2a8bccfSPavel Labath StreamString S;
112f2a8bccfSPavel Labath object_sp->Dump(S, false);
113f2a8bccfSPavel Labath EXPECT_EQ("[1,2,3]", S.GetString());
114f2a8bccfSPavel Labath }
115