================
@@ -0,0 +1,175 @@
+#include "ClangDocTest.h"
+#include "Generators.h"
+#include "Representation.h"
+#include "gtest/gtest.h"
+
+namespace clang {
+namespace doc {
+
+static std::unique_ptr<Generator> getJSONGenerator() {
+  auto G = doc::findGeneratorByName("json");
+  if (!G)
+    return nullptr;
+  return std::move(G.get());
+}
+
+TEST(JSONGeneratorTest, emitRecordJSON) {
+  RecordInfo I;
+  I.Name = "Foo";
+  // FIXME: FullName is not emitted correctly.
+  I.FullName = "";
+  I.IsTypeDef = false;
+  I.Namespace.emplace_back(EmptySID, "GlobalNamespace", 
InfoType::IT_namespace);
+  I.Path = "GlobalNamespace";
+  I.DefLoc = Location(1, 1, "main.cpp");
+  I.TagType = TagTypeKind::Class;
+
+  I.Template = TemplateInfo();
+  I.Template->Params.emplace_back("class T");
+
+  I.Children.Enums.emplace_back();
+  I.Children.Enums.back().Name = "Color";
+  I.Children.Enums.back().Scoped = false;
+  I.Children.Enums.back().Members.emplace_back();
+  I.Children.Enums.back().Members.back().Name = "RED";
+  I.Children.Enums.back().Members.back().Value = "0";
+
+  I.Members.emplace_back(TypeInfo("int"), "X", AccessSpecifier::AS_protected);
+
+  I.Bases.emplace_back(EmptySID, "F", "path/to/F", true,
+                       AccessSpecifier::AS_public, true);
+  I.Bases.back().Children.Functions.emplace_back();
+  I.Bases.back().Children.Functions.back().Name = "InheritedFunctionOne";
+  I.Bases.back().Members.emplace_back(TypeInfo("int"), "N",
+                                      AccessSpecifier::AS_public);
+
+  // F is in the global namespace
+  I.Parents.emplace_back(EmptySID, "F", InfoType::IT_record, "");
+  I.VirtualParents.emplace_back(EmptySID, "G", InfoType::IT_record,
+                                "path::to::G::G", "path/to/G");
+
+  I.Children.Records.emplace_back(EmptySID, "ChildStruct", InfoType::IT_record,
+                                  "path::to::A::r::ChildStruct", 
"path/to/A/r");
+  I.Children.Functions.emplace_back();
+  I.Children.Functions.back().Name = "OneFunction";
+
+  auto G = getJSONGenerator();
+  assert(G);
+  std::string Buffer;
+  llvm::raw_string_ostream Actual(Buffer);
+  auto Err = G->generateDocForInfo(&I, Actual, ClangDocContext());
+  assert(!Err);
+  std::string Expected = R"raw({
+  "Bases": [
+    {
+      "Access": "public",
+      "FullName": "",
+      "IsParent": true,
+      "IsTypedef": false,
+      "IsVirtual": true,
+      "Name": "F",
+      "Path": "path/to/F",
+      "PublicFunctions": [
+        {
+          "IsStatic": false,
+          "Name": "InheritedFunctionOne",
+          "ReturnType": {
+            "IsBuiltIn": false,
+            "IsTemplate": false,
+            "Name": "",
+            "QualName": "",
+            "USR": "0000000000000000000000000000000000000000"
+          },
+          "USR": "0000000000000000000000000000000000000000"
+        }
+      ],
+      "PublicMembers": [
+        {
+          "Name": "N",
+          "Type": "int"
+        }
+      ],
+      "TagType": "struct",
+      "USR": "0000000000000000000000000000000000000000"
+    }
+  ],
+  "Enums": [
+    {
+      "Members": [
+        {
+          "Name": "RED",
+          "Value": "0"
+        }
+      ],
+      "Name": "Color",
+      "Scoped": false,
+      "USR": "0000000000000000000000000000000000000000"
+    }
+  ],
+  "FullName": "",
+  "IsTypedef": false,
+  "Location": {
+    "Filename": "main.cpp",
+    "LineNumber": 1
+  },
+  "Name": "Foo",
+  "Namespace": [
+    "GlobalNamespace"
+  ],
+  "Parents": [
+    {
+      "Name": "F",
+      "Path": "",
+      "QualName": "",
+      "USR": "0000000000000000000000000000000000000000"
+    }
+  ],
+  "Path": "GlobalNamespace",
+  "ProtectedMembers": [
+    {
+      "Name": "X",
+      "Type": "int"
+    }
+  ],
+  "PublicFunctions": [
+    {
+      "IsStatic": false,
+      "Name": "OneFunction",
+      "ReturnType": {
+        "IsBuiltIn": false,
+        "IsTemplate": false,
+        "Name": "",
+        "QualName": "",
+        "USR": "0000000000000000000000000000000000000000"
+      },
+      "USR": "0000000000000000000000000000000000000000"
+    }
+  ],
+  "Records": [
+    {
+      "Name": "ChildStruct",
+      "Path": "path/to/A/r",
----------------
ilovepi wrote:

I'm guessing the path separator will be an issue on Windows...

https://github.com/llvm/llvm-project/pull/142483
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to