xref: /llvm-project/lldb/unittests/Utility/StructuredDataTest.cpp (revision 40afc69e6dc0cc39e9e090ed96df95d6334db17c)
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