155974d3bSJulie Hockett //===-- clang-doc/YAMLGeneratorTest.cpp
255974d3bSJulie Hockett //------------------------------------===//
355974d3bSJulie Hockett //
42946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
52946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
62946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
755974d3bSJulie Hockett //
855974d3bSJulie Hockett //===----------------------------------------------------------------------===//
955974d3bSJulie Hockett
1055974d3bSJulie Hockett #include "ClangDocTest.h"
1155974d3bSJulie Hockett #include "Generators.h"
1255974d3bSJulie Hockett #include "Representation.h"
1355974d3bSJulie Hockett #include "gtest/gtest.h"
1455974d3bSJulie Hockett
1555974d3bSJulie Hockett namespace clang {
1655974d3bSJulie Hockett namespace doc {
1755974d3bSJulie Hockett
getYAMLGenerator()1855974d3bSJulie Hockett std::unique_ptr<Generator> getYAMLGenerator() {
1955974d3bSJulie Hockett auto G = doc::findGeneratorByName("yaml");
2055974d3bSJulie Hockett if (!G)
2155974d3bSJulie Hockett return nullptr;
2255974d3bSJulie Hockett return std::move(G.get());
2355974d3bSJulie Hockett }
2455974d3bSJulie Hockett
TEST(YAMLGeneratorTest,emitNamespaceYAML)2555974d3bSJulie Hockett TEST(YAMLGeneratorTest, emitNamespaceYAML) {
2655974d3bSJulie Hockett NamespaceInfo I;
2755974d3bSJulie Hockett I.Name = "Namespace";
282c1c9a24SJulie Hockett I.Path = "path/to/A";
2955974d3bSJulie Hockett I.Namespace.emplace_back(EmptySID, "A", InfoType::IT_namespace);
3055974d3bSJulie Hockett
314a68babdSBrett Wilson I.Children.Namespaces.emplace_back(
324a68babdSBrett Wilson EmptySID, "ChildNamespace", InfoType::IT_namespace,
334a68babdSBrett Wilson "path::to::A::Namespace::ChildNamespace", "path/to/A/Namespace");
3421fb70c6SBrett Wilson I.Children.Records.emplace_back(EmptySID, "ChildStruct", InfoType::IT_record,
354a68babdSBrett Wilson "path::to::A::Namespace::ChildStruct",
3621fb70c6SBrett Wilson "path/to/A/Namespace");
3721fb70c6SBrett Wilson I.Children.Functions.emplace_back();
3821fb70c6SBrett Wilson I.Children.Functions.back().Name = "OneFunction";
3921fb70c6SBrett Wilson I.Children.Functions.back().Access = AccessSpecifier::AS_none;
4021fb70c6SBrett Wilson I.Children.Enums.emplace_back();
4121fb70c6SBrett Wilson I.Children.Enums.back().Name = "OneEnum";
4255974d3bSJulie Hockett
4355974d3bSJulie Hockett auto G = getYAMLGenerator();
4455974d3bSJulie Hockett assert(G);
4555974d3bSJulie Hockett std::string Buffer;
4655974d3bSJulie Hockett llvm::raw_string_ostream Actual(Buffer);
47acd35f6cSDiego Astiazaran auto Err = G->generateDocForInfo(&I, Actual, ClangDocContext());
4855974d3bSJulie Hockett assert(!Err);
4955974d3bSJulie Hockett std::string Expected =
5055974d3bSJulie Hockett R"raw(---
5155974d3bSJulie Hockett USR: '0000000000000000000000000000000000000000'
5255974d3bSJulie Hockett Name: 'Namespace'
532c1c9a24SJulie Hockett Path: 'path/to/A'
5455974d3bSJulie Hockett Namespace:
5555974d3bSJulie Hockett - Type: Namespace
5655974d3bSJulie Hockett Name: 'A'
574a68babdSBrett Wilson QualName: 'A'
5855974d3bSJulie Hockett ChildNamespaces:
5955974d3bSJulie Hockett - Type: Namespace
6055974d3bSJulie Hockett Name: 'ChildNamespace'
614a68babdSBrett Wilson QualName: 'path::to::A::Namespace::ChildNamespace'
62e27f778aSDiego Astiazaran Path: 'path/to/A/Namespace'
6355974d3bSJulie Hockett ChildRecords:
6455974d3bSJulie Hockett - Type: Record
6555974d3bSJulie Hockett Name: 'ChildStruct'
664a68babdSBrett Wilson QualName: 'path::to::A::Namespace::ChildStruct'
67e27f778aSDiego Astiazaran Path: 'path/to/A/Namespace'
6855974d3bSJulie Hockett ChildFunctions:
6955974d3bSJulie Hockett - USR: '0000000000000000000000000000000000000000'
7055974d3bSJulie Hockett Name: 'OneFunction'
71c0830f55SScott Linder ReturnType: {}
7255974d3bSJulie Hockett ChildEnums:
7355974d3bSJulie Hockett - USR: '0000000000000000000000000000000000000000'
7455974d3bSJulie Hockett Name: 'OneEnum'
7555974d3bSJulie Hockett ...
7655974d3bSJulie Hockett )raw";
7755974d3bSJulie Hockett EXPECT_EQ(Expected, Actual.str());
7855974d3bSJulie Hockett }
7955974d3bSJulie Hockett
TEST(YAMLGeneratorTest,emitRecordYAML)8055974d3bSJulie Hockett TEST(YAMLGeneratorTest, emitRecordYAML) {
8155974d3bSJulie Hockett RecordInfo I;
8255974d3bSJulie Hockett I.Name = "r";
83e27f778aSDiego Astiazaran I.Path = "path/to/A";
8468266828SBrett Wilson I.IsTypeDef = true;
8555974d3bSJulie Hockett I.Namespace.emplace_back(EmptySID, "A", InfoType::IT_namespace);
8655974d3bSJulie Hockett
8755974d3bSJulie Hockett I.DefLoc = Location(10, llvm::SmallString<16>{"test.cpp"});
8855974d3bSJulie Hockett I.Loc.emplace_back(12, llvm::SmallString<16>{"test.cpp"});
8955974d3bSJulie Hockett
904a68babdSBrett Wilson I.Members.emplace_back(TypeInfo("int"), "X", AccessSpecifier::AS_private);
9199baa10fSBrett Wilson
9299baa10fSBrett Wilson // Member documentation.
9399baa10fSBrett Wilson CommentInfo TopComment;
9499baa10fSBrett Wilson TopComment.Kind = "FullComment";
9599baa10fSBrett Wilson TopComment.Children.emplace_back(std::make_unique<CommentInfo>());
9699baa10fSBrett Wilson CommentInfo *Brief = TopComment.Children.back().get();
9799baa10fSBrett Wilson Brief->Kind = "ParagraphComment";
9899baa10fSBrett Wilson Brief->Children.emplace_back(std::make_unique<CommentInfo>());
9999baa10fSBrett Wilson Brief->Children.back()->Kind = "TextComment";
10099baa10fSBrett Wilson Brief->Children.back()->Name = "ParagraphComment";
10199baa10fSBrett Wilson Brief->Children.back()->Text = "Value of the thing.";
10299baa10fSBrett Wilson I.Members.back().Description.push_back(std::move(TopComment));
10399baa10fSBrett Wilson
104*edd690b0SVlad Serebrennikov I.TagType = TagTypeKind::Class;
105ba3d595fSDiego Astiazaran I.Bases.emplace_back(EmptySID, "F", "path/to/F", true,
106ba3d595fSDiego Astiazaran AccessSpecifier::AS_public, true);
10721fb70c6SBrett Wilson I.Bases.back().Children.Functions.emplace_back();
10821fb70c6SBrett Wilson I.Bases.back().Children.Functions.back().Name = "InheritedFunctionOne";
1094a68babdSBrett Wilson I.Bases.back().Members.emplace_back(TypeInfo("int"), "N",
110ba3d595fSDiego Astiazaran AccessSpecifier::AS_private);
11115e468e0SDiego Astiazaran // F is in the global namespace
11215e468e0SDiego Astiazaran I.Parents.emplace_back(EmptySID, "F", InfoType::IT_record, "");
1132c1c9a24SJulie Hockett I.VirtualParents.emplace_back(EmptySID, "G", InfoType::IT_record,
1144a68babdSBrett Wilson "path::to::G::G", "path/to/G");
11555974d3bSJulie Hockett
11621fb70c6SBrett Wilson I.Children.Records.emplace_back(EmptySID, "ChildStruct", InfoType::IT_record,
1174a68babdSBrett Wilson "path::to::A::r::ChildStruct", "path/to/A/r");
11821fb70c6SBrett Wilson I.Children.Functions.emplace_back();
11921fb70c6SBrett Wilson I.Children.Functions.back().Name = "OneFunction";
12021fb70c6SBrett Wilson I.Children.Enums.emplace_back();
12121fb70c6SBrett Wilson I.Children.Enums.back().Name = "OneEnum";
12255974d3bSJulie Hockett
12355974d3bSJulie Hockett auto G = getYAMLGenerator();
12455974d3bSJulie Hockett assert(G);
12555974d3bSJulie Hockett std::string Buffer;
12655974d3bSJulie Hockett llvm::raw_string_ostream Actual(Buffer);
127acd35f6cSDiego Astiazaran auto Err = G->generateDocForInfo(&I, Actual, ClangDocContext());
12855974d3bSJulie Hockett assert(!Err);
12955974d3bSJulie Hockett std::string Expected =
13055974d3bSJulie Hockett R"raw(---
13155974d3bSJulie Hockett USR: '0000000000000000000000000000000000000000'
13255974d3bSJulie Hockett Name: 'r'
133e27f778aSDiego Astiazaran Path: 'path/to/A'
13455974d3bSJulie Hockett Namespace:
13555974d3bSJulie Hockett - Type: Namespace
13655974d3bSJulie Hockett Name: 'A'
1374a68babdSBrett Wilson QualName: 'A'
13855974d3bSJulie Hockett DefLocation:
13955974d3bSJulie Hockett LineNumber: 10
14055974d3bSJulie Hockett Filename: 'test.cpp'
14155974d3bSJulie Hockett Location:
14255974d3bSJulie Hockett - LineNumber: 12
14355974d3bSJulie Hockett Filename: 'test.cpp'
14455974d3bSJulie Hockett TagType: Class
14568266828SBrett Wilson IsTypeDef: true
14655974d3bSJulie Hockett Members:
14755974d3bSJulie Hockett - Type:
14855974d3bSJulie Hockett Name: 'int'
1494a68babdSBrett Wilson QualName: 'int'
15055974d3bSJulie Hockett Name: 'X'
15155974d3bSJulie Hockett Access: Private
15299baa10fSBrett Wilson Description:
15399baa10fSBrett Wilson - Kind: 'FullComment'
15499baa10fSBrett Wilson Children:
15599baa10fSBrett Wilson - Kind: 'ParagraphComment'
15699baa10fSBrett Wilson Children:
15799baa10fSBrett Wilson - Kind: 'TextComment'
15899baa10fSBrett Wilson Text: 'Value of the thing.'
15999baa10fSBrett Wilson Name: 'ParagraphComment'
160ba3d595fSDiego Astiazaran Bases:
161ba3d595fSDiego Astiazaran - USR: '0000000000000000000000000000000000000000'
162ba3d595fSDiego Astiazaran Name: 'F'
163ba3d595fSDiego Astiazaran Path: 'path/to/F'
16468266828SBrett Wilson TagType: Struct
165ba3d595fSDiego Astiazaran Members:
166ba3d595fSDiego Astiazaran - Type:
167ba3d595fSDiego Astiazaran Name: 'int'
1684a68babdSBrett Wilson QualName: 'int'
169ba3d595fSDiego Astiazaran Name: 'N'
170ba3d595fSDiego Astiazaran Access: Private
171ba3d595fSDiego Astiazaran ChildFunctions:
172ba3d595fSDiego Astiazaran - USR: '0000000000000000000000000000000000000000'
173ba3d595fSDiego Astiazaran Name: 'InheritedFunctionOne'
174ba3d595fSDiego Astiazaran ReturnType: {}
175ba3d595fSDiego Astiazaran Access: Public
176ba3d595fSDiego Astiazaran IsVirtual: true
177ba3d595fSDiego Astiazaran Access: Public
178ba3d595fSDiego Astiazaran IsParent: true
17955974d3bSJulie Hockett Parents:
18055974d3bSJulie Hockett - Type: Record
18155974d3bSJulie Hockett Name: 'F'
18255974d3bSJulie Hockett VirtualParents:
18355974d3bSJulie Hockett - Type: Record
18455974d3bSJulie Hockett Name: 'G'
1854a68babdSBrett Wilson QualName: 'path::to::G::G'
1862c1c9a24SJulie Hockett Path: 'path/to/G'
18755974d3bSJulie Hockett ChildRecords:
18855974d3bSJulie Hockett - Type: Record
18955974d3bSJulie Hockett Name: 'ChildStruct'
1904a68babdSBrett Wilson QualName: 'path::to::A::r::ChildStruct'
191e27f778aSDiego Astiazaran Path: 'path/to/A/r'
19255974d3bSJulie Hockett ChildFunctions:
19355974d3bSJulie Hockett - USR: '0000000000000000000000000000000000000000'
19455974d3bSJulie Hockett Name: 'OneFunction'
195c0830f55SScott Linder ReturnType: {}
1966a29ae4bSDiego Astiazaran Access: Public
19755974d3bSJulie Hockett ChildEnums:
19855974d3bSJulie Hockett - USR: '0000000000000000000000000000000000000000'
19955974d3bSJulie Hockett Name: 'OneEnum'
20055974d3bSJulie Hockett ...
20155974d3bSJulie Hockett )raw";
20255974d3bSJulie Hockett EXPECT_EQ(Expected, Actual.str());
20355974d3bSJulie Hockett }
20455974d3bSJulie Hockett
TEST(YAMLGeneratorTest,emitFunctionYAML)20555974d3bSJulie Hockett TEST(YAMLGeneratorTest, emitFunctionYAML) {
20655974d3bSJulie Hockett FunctionInfo I;
20755974d3bSJulie Hockett I.Name = "f";
20855974d3bSJulie Hockett I.Namespace.emplace_back(EmptySID, "A", InfoType::IT_namespace);
20955974d3bSJulie Hockett
21055974d3bSJulie Hockett I.DefLoc = Location(10, llvm::SmallString<16>{"test.cpp"});
21155974d3bSJulie Hockett I.Loc.emplace_back(12, llvm::SmallString<16>{"test.cpp"});
21255974d3bSJulie Hockett
2136a29ae4bSDiego Astiazaran I.Access = AccessSpecifier::AS_none;
2146a29ae4bSDiego Astiazaran
2154a68babdSBrett Wilson I.ReturnType = TypeInfo(Reference(EmptySID, "void", InfoType::IT_default));
2164a68babdSBrett Wilson I.Params.emplace_back(TypeInfo("int"), "P");
2174a68babdSBrett Wilson I.Params.emplace_back(TypeInfo("double"), "D");
218e191086bSBrett Wilson I.Params.back().DefaultValue = "2.0 * M_PI";
21955974d3bSJulie Hockett I.IsMethod = true;
22055974d3bSJulie Hockett I.Parent = Reference(EmptySID, "Parent", InfoType::IT_record);
22155974d3bSJulie Hockett
22255974d3bSJulie Hockett auto G = getYAMLGenerator();
22355974d3bSJulie Hockett assert(G);
22455974d3bSJulie Hockett std::string Buffer;
22555974d3bSJulie Hockett llvm::raw_string_ostream Actual(Buffer);
226acd35f6cSDiego Astiazaran auto Err = G->generateDocForInfo(&I, Actual, ClangDocContext());
22755974d3bSJulie Hockett assert(!Err);
22855974d3bSJulie Hockett std::string Expected =
22955974d3bSJulie Hockett R"raw(---
23055974d3bSJulie Hockett USR: '0000000000000000000000000000000000000000'
23155974d3bSJulie Hockett Name: 'f'
23255974d3bSJulie Hockett Namespace:
23355974d3bSJulie Hockett - Type: Namespace
23455974d3bSJulie Hockett Name: 'A'
2354a68babdSBrett Wilson QualName: 'A'
23655974d3bSJulie Hockett DefLocation:
23755974d3bSJulie Hockett LineNumber: 10
23855974d3bSJulie Hockett Filename: 'test.cpp'
23955974d3bSJulie Hockett Location:
24055974d3bSJulie Hockett - LineNumber: 12
24155974d3bSJulie Hockett Filename: 'test.cpp'
24255974d3bSJulie Hockett IsMethod: true
24355974d3bSJulie Hockett Parent:
24455974d3bSJulie Hockett Type: Record
24555974d3bSJulie Hockett Name: 'Parent'
2464a68babdSBrett Wilson QualName: 'Parent'
24755974d3bSJulie Hockett Params:
24855974d3bSJulie Hockett - Type:
24955974d3bSJulie Hockett Name: 'int'
2504a68babdSBrett Wilson QualName: 'int'
25155974d3bSJulie Hockett Name: 'P'
252e191086bSBrett Wilson - Type:
253e191086bSBrett Wilson Name: 'double'
2544a68babdSBrett Wilson QualName: 'double'
255e191086bSBrett Wilson Name: 'D'
256e191086bSBrett Wilson DefaultValue: '2.0 * M_PI'
25755974d3bSJulie Hockett ReturnType:
25855974d3bSJulie Hockett Type:
25955974d3bSJulie Hockett Name: 'void'
2604a68babdSBrett Wilson QualName: 'void'
26155974d3bSJulie Hockett ...
26255974d3bSJulie Hockett )raw";
26355974d3bSJulie Hockett EXPECT_EQ(Expected, Actual.str());
26455974d3bSJulie Hockett }
26555974d3bSJulie Hockett
266eaa7b324SBrett Wilson // Tests the equivalent of:
267eaa7b324SBrett Wilson // namespace A {
268eaa7b324SBrett Wilson // enum e { X };
269eaa7b324SBrett Wilson // }
TEST(YAMLGeneratorTest,emitSimpleEnumYAML)270eaa7b324SBrett Wilson TEST(YAMLGeneratorTest, emitSimpleEnumYAML) {
27155974d3bSJulie Hockett EnumInfo I;
27255974d3bSJulie Hockett I.Name = "e";
27355974d3bSJulie Hockett I.Namespace.emplace_back(EmptySID, "A", InfoType::IT_namespace);
27455974d3bSJulie Hockett
27555974d3bSJulie Hockett I.DefLoc = Location(10, llvm::SmallString<16>{"test.cpp"});
27655974d3bSJulie Hockett I.Loc.emplace_back(12, llvm::SmallString<16>{"test.cpp"});
27755974d3bSJulie Hockett
27855974d3bSJulie Hockett I.Members.emplace_back("X");
279eaa7b324SBrett Wilson I.Scoped = false;
28055974d3bSJulie Hockett
28155974d3bSJulie Hockett auto G = getYAMLGenerator();
28255974d3bSJulie Hockett assert(G);
28355974d3bSJulie Hockett std::string Buffer;
28455974d3bSJulie Hockett llvm::raw_string_ostream Actual(Buffer);
285acd35f6cSDiego Astiazaran auto Err = G->generateDocForInfo(&I, Actual, ClangDocContext());
28655974d3bSJulie Hockett assert(!Err);
28755974d3bSJulie Hockett std::string Expected =
28855974d3bSJulie Hockett R"raw(---
28955974d3bSJulie Hockett USR: '0000000000000000000000000000000000000000'
29055974d3bSJulie Hockett Name: 'e'
29155974d3bSJulie Hockett Namespace:
29255974d3bSJulie Hockett - Type: Namespace
29355974d3bSJulie Hockett Name: 'A'
2944a68babdSBrett Wilson QualName: 'A'
29555974d3bSJulie Hockett DefLocation:
29655974d3bSJulie Hockett LineNumber: 10
29755974d3bSJulie Hockett Filename: 'test.cpp'
29855974d3bSJulie Hockett Location:
29955974d3bSJulie Hockett - LineNumber: 12
30055974d3bSJulie Hockett Filename: 'test.cpp'
30155974d3bSJulie Hockett Members:
302eaa7b324SBrett Wilson - Name: 'X'
303eaa7b324SBrett Wilson Value: '0'
304eaa7b324SBrett Wilson ...
305eaa7b324SBrett Wilson )raw";
306eaa7b324SBrett Wilson EXPECT_EQ(Expected, Actual.str());
307eaa7b324SBrett Wilson }
308eaa7b324SBrett Wilson
309eaa7b324SBrett Wilson // Tests the equivalent of:
310eaa7b324SBrett Wilson // enum class e : short { X = FOO_BAR + 2 };
TEST(YAMLGeneratorTest,enumTypedScopedEnumYAML)311eaa7b324SBrett Wilson TEST(YAMLGeneratorTest, enumTypedScopedEnumYAML) {
312eaa7b324SBrett Wilson EnumInfo I;
313eaa7b324SBrett Wilson I.Name = "e";
314eaa7b324SBrett Wilson
315eaa7b324SBrett Wilson I.Members.emplace_back("X", "-9876", "FOO_BAR + 2");
316eaa7b324SBrett Wilson I.Scoped = true;
317eaa7b324SBrett Wilson I.BaseType = TypeInfo("short");
318eaa7b324SBrett Wilson
319eaa7b324SBrett Wilson auto G = getYAMLGenerator();
320eaa7b324SBrett Wilson assert(G);
321eaa7b324SBrett Wilson std::string Buffer;
322eaa7b324SBrett Wilson llvm::raw_string_ostream Actual(Buffer);
323eaa7b324SBrett Wilson auto Err = G->generateDocForInfo(&I, Actual, ClangDocContext());
324eaa7b324SBrett Wilson assert(!Err);
325eaa7b324SBrett Wilson std::string Expected =
326eaa7b324SBrett Wilson R"raw(---
327eaa7b324SBrett Wilson USR: '0000000000000000000000000000000000000000'
328eaa7b324SBrett Wilson Name: 'e'
329eaa7b324SBrett Wilson Scoped: true
330eaa7b324SBrett Wilson BaseType:
331eaa7b324SBrett Wilson Type:
332eaa7b324SBrett Wilson Name: 'short'
3334a68babdSBrett Wilson QualName: 'short'
334eaa7b324SBrett Wilson Members:
335eaa7b324SBrett Wilson - Name: 'X'
336eaa7b324SBrett Wilson Value: '-9876'
337eaa7b324SBrett Wilson Expr: 'FOO_BAR + 2'
33855974d3bSJulie Hockett ...
33955974d3bSJulie Hockett )raw";
34055974d3bSJulie Hockett EXPECT_EQ(Expected, Actual.str());
34155974d3bSJulie Hockett }
34255974d3bSJulie Hockett
TEST(YAMLGeneratorTest,enumTypedefYAML)34321fb70c6SBrett Wilson TEST(YAMLGeneratorTest, enumTypedefYAML) {
34421fb70c6SBrett Wilson TypedefInfo I;
34521fb70c6SBrett Wilson I.Name = "MyUsing";
34621fb70c6SBrett Wilson I.Underlying = TypeInfo("int");
34721fb70c6SBrett Wilson I.IsUsing = true;
34821fb70c6SBrett Wilson
34921fb70c6SBrett Wilson auto G = getYAMLGenerator();
35021fb70c6SBrett Wilson assert(G);
35121fb70c6SBrett Wilson std::string Buffer;
35221fb70c6SBrett Wilson llvm::raw_string_ostream Actual(Buffer);
35321fb70c6SBrett Wilson auto Err = G->generateDocForInfo(&I, Actual, ClangDocContext());
35421fb70c6SBrett Wilson assert(!Err);
35521fb70c6SBrett Wilson std::string Expected =
35621fb70c6SBrett Wilson R"raw(---
35721fb70c6SBrett Wilson USR: '0000000000000000000000000000000000000000'
35821fb70c6SBrett Wilson Name: 'MyUsing'
35921fb70c6SBrett Wilson Underlying:
36021fb70c6SBrett Wilson Name: 'int'
3614a68babdSBrett Wilson QualName: 'int'
36221fb70c6SBrett Wilson IsUsing: true
36321fb70c6SBrett Wilson ...
36421fb70c6SBrett Wilson )raw";
36521fb70c6SBrett Wilson EXPECT_EQ(Expected, Actual.str());
36621fb70c6SBrett Wilson }
36721fb70c6SBrett Wilson
TEST(YAMLGeneratorTest,emitCommentYAML)36855974d3bSJulie Hockett TEST(YAMLGeneratorTest, emitCommentYAML) {
36955974d3bSJulie Hockett FunctionInfo I;
37055974d3bSJulie Hockett I.Name = "f";
37155974d3bSJulie Hockett I.DefLoc = Location(10, llvm::SmallString<16>{"test.cpp"});
3720afc6085SBrett Wilson I.ReturnType = TypeInfo("void");
3730afc6085SBrett Wilson I.Params.emplace_back(TypeInfo("int"), "I");
3740afc6085SBrett Wilson I.Params.emplace_back(TypeInfo("int"), "J");
3756a29ae4bSDiego Astiazaran I.Access = AccessSpecifier::AS_none;
37655974d3bSJulie Hockett
37755974d3bSJulie Hockett CommentInfo Top;
37855974d3bSJulie Hockett Top.Kind = "FullComment";
37955974d3bSJulie Hockett
3801c705d9cSJonas Devlieghere Top.Children.emplace_back(std::make_unique<CommentInfo>());
38155974d3bSJulie Hockett CommentInfo *BlankLine = Top.Children.back().get();
38255974d3bSJulie Hockett BlankLine->Kind = "ParagraphComment";
3831c705d9cSJonas Devlieghere BlankLine->Children.emplace_back(std::make_unique<CommentInfo>());
38455974d3bSJulie Hockett BlankLine->Children.back()->Kind = "TextComment";
38555974d3bSJulie Hockett
3861c705d9cSJonas Devlieghere Top.Children.emplace_back(std::make_unique<CommentInfo>());
38755974d3bSJulie Hockett CommentInfo *Brief = Top.Children.back().get();
38855974d3bSJulie Hockett Brief->Kind = "ParagraphComment";
3891c705d9cSJonas Devlieghere Brief->Children.emplace_back(std::make_unique<CommentInfo>());
39055974d3bSJulie Hockett Brief->Children.back()->Kind = "TextComment";
39155974d3bSJulie Hockett Brief->Children.back()->Name = "ParagraphComment";
39255974d3bSJulie Hockett Brief->Children.back()->Text = " Brief description.";
39355974d3bSJulie Hockett
3941c705d9cSJonas Devlieghere Top.Children.emplace_back(std::make_unique<CommentInfo>());
39555974d3bSJulie Hockett CommentInfo *Extended = Top.Children.back().get();
39655974d3bSJulie Hockett Extended->Kind = "ParagraphComment";
3971c705d9cSJonas Devlieghere Extended->Children.emplace_back(std::make_unique<CommentInfo>());
39855974d3bSJulie Hockett Extended->Children.back()->Kind = "TextComment";
39955974d3bSJulie Hockett Extended->Children.back()->Text = " Extended description that";
4001c705d9cSJonas Devlieghere Extended->Children.emplace_back(std::make_unique<CommentInfo>());
40155974d3bSJulie Hockett Extended->Children.back()->Kind = "TextComment";
40255974d3bSJulie Hockett Extended->Children.back()->Text = " continues onto the next line.";
40355974d3bSJulie Hockett
4041c705d9cSJonas Devlieghere Top.Children.emplace_back(std::make_unique<CommentInfo>());
40555974d3bSJulie Hockett CommentInfo *HTML = Top.Children.back().get();
40655974d3bSJulie Hockett HTML->Kind = "ParagraphComment";
4071c705d9cSJonas Devlieghere HTML->Children.emplace_back(std::make_unique<CommentInfo>());
40855974d3bSJulie Hockett HTML->Children.back()->Kind = "TextComment";
4091c705d9cSJonas Devlieghere HTML->Children.emplace_back(std::make_unique<CommentInfo>());
41055974d3bSJulie Hockett HTML->Children.back()->Kind = "HTMLStartTagComment";
41155974d3bSJulie Hockett HTML->Children.back()->Name = "ul";
41255974d3bSJulie Hockett HTML->Children.back()->AttrKeys.emplace_back("class");
41355974d3bSJulie Hockett HTML->Children.back()->AttrValues.emplace_back("test");
4141c705d9cSJonas Devlieghere HTML->Children.emplace_back(std::make_unique<CommentInfo>());
41555974d3bSJulie Hockett HTML->Children.back()->Kind = "HTMLStartTagComment";
41655974d3bSJulie Hockett HTML->Children.back()->Name = "li";
4171c705d9cSJonas Devlieghere HTML->Children.emplace_back(std::make_unique<CommentInfo>());
41855974d3bSJulie Hockett HTML->Children.back()->Kind = "TextComment";
41955974d3bSJulie Hockett HTML->Children.back()->Text = " Testing.";
4201c705d9cSJonas Devlieghere HTML->Children.emplace_back(std::make_unique<CommentInfo>());
42155974d3bSJulie Hockett HTML->Children.back()->Kind = "HTMLEndTagComment";
42255974d3bSJulie Hockett HTML->Children.back()->Name = "ul";
42355974d3bSJulie Hockett HTML->Children.back()->SelfClosing = true;
42455974d3bSJulie Hockett
4251c705d9cSJonas Devlieghere Top.Children.emplace_back(std::make_unique<CommentInfo>());
42655974d3bSJulie Hockett CommentInfo *Verbatim = Top.Children.back().get();
42755974d3bSJulie Hockett Verbatim->Kind = "VerbatimBlockComment";
42855974d3bSJulie Hockett Verbatim->Name = "verbatim";
42955974d3bSJulie Hockett Verbatim->CloseName = "endverbatim";
4301c705d9cSJonas Devlieghere Verbatim->Children.emplace_back(std::make_unique<CommentInfo>());
43155974d3bSJulie Hockett Verbatim->Children.back()->Kind = "VerbatimBlockLineComment";
43255974d3bSJulie Hockett Verbatim->Children.back()->Text = " The description continues.";
43355974d3bSJulie Hockett
4341c705d9cSJonas Devlieghere Top.Children.emplace_back(std::make_unique<CommentInfo>());
43555974d3bSJulie Hockett CommentInfo *ParamOut = Top.Children.back().get();
43655974d3bSJulie Hockett ParamOut->Kind = "ParamCommandComment";
43755974d3bSJulie Hockett ParamOut->Direction = "[out]";
43855974d3bSJulie Hockett ParamOut->ParamName = "I";
43955974d3bSJulie Hockett ParamOut->Explicit = true;
4401c705d9cSJonas Devlieghere ParamOut->Children.emplace_back(std::make_unique<CommentInfo>());
44155974d3bSJulie Hockett ParamOut->Children.back()->Kind = "ParagraphComment";
44255974d3bSJulie Hockett ParamOut->Children.back()->Children.emplace_back(
4431c705d9cSJonas Devlieghere std::make_unique<CommentInfo>());
44455974d3bSJulie Hockett ParamOut->Children.back()->Children.back()->Kind = "TextComment";
44555974d3bSJulie Hockett ParamOut->Children.back()->Children.emplace_back(
4461c705d9cSJonas Devlieghere std::make_unique<CommentInfo>());
44755974d3bSJulie Hockett ParamOut->Children.back()->Children.back()->Kind = "TextComment";
44855974d3bSJulie Hockett ParamOut->Children.back()->Children.back()->Text = " is a parameter.";
44955974d3bSJulie Hockett
4501c705d9cSJonas Devlieghere Top.Children.emplace_back(std::make_unique<CommentInfo>());
45155974d3bSJulie Hockett CommentInfo *ParamIn = Top.Children.back().get();
45255974d3bSJulie Hockett ParamIn->Kind = "ParamCommandComment";
45355974d3bSJulie Hockett ParamIn->Direction = "[in]";
45455974d3bSJulie Hockett ParamIn->ParamName = "J";
4551c705d9cSJonas Devlieghere ParamIn->Children.emplace_back(std::make_unique<CommentInfo>());
45655974d3bSJulie Hockett ParamIn->Children.back()->Kind = "ParagraphComment";
45755974d3bSJulie Hockett ParamIn->Children.back()->Children.emplace_back(
4581c705d9cSJonas Devlieghere std::make_unique<CommentInfo>());
45955974d3bSJulie Hockett ParamIn->Children.back()->Children.back()->Kind = "TextComment";
46055974d3bSJulie Hockett ParamIn->Children.back()->Children.back()->Text = " is a parameter.";
46155974d3bSJulie Hockett ParamIn->Children.back()->Children.emplace_back(
4621c705d9cSJonas Devlieghere std::make_unique<CommentInfo>());
46355974d3bSJulie Hockett ParamIn->Children.back()->Children.back()->Kind = "TextComment";
46455974d3bSJulie Hockett
4651c705d9cSJonas Devlieghere Top.Children.emplace_back(std::make_unique<CommentInfo>());
46655974d3bSJulie Hockett CommentInfo *Return = Top.Children.back().get();
46755974d3bSJulie Hockett Return->Kind = "BlockCommandComment";
46855974d3bSJulie Hockett Return->Name = "return";
46955974d3bSJulie Hockett Return->Explicit = true;
4701c705d9cSJonas Devlieghere Return->Children.emplace_back(std::make_unique<CommentInfo>());
47155974d3bSJulie Hockett Return->Children.back()->Kind = "ParagraphComment";
47255974d3bSJulie Hockett Return->Children.back()->Children.emplace_back(
4731c705d9cSJonas Devlieghere std::make_unique<CommentInfo>());
47455974d3bSJulie Hockett Return->Children.back()->Children.back()->Kind = "TextComment";
47555974d3bSJulie Hockett Return->Children.back()->Children.back()->Text = "void";
47655974d3bSJulie Hockett
47755974d3bSJulie Hockett I.Description.emplace_back(std::move(Top));
47855974d3bSJulie Hockett
47955974d3bSJulie Hockett auto G = getYAMLGenerator();
48055974d3bSJulie Hockett assert(G);
48155974d3bSJulie Hockett std::string Buffer;
48255974d3bSJulie Hockett llvm::raw_string_ostream Actual(Buffer);
483acd35f6cSDiego Astiazaran auto Err = G->generateDocForInfo(&I, Actual, ClangDocContext());
48455974d3bSJulie Hockett assert(!Err);
48555974d3bSJulie Hockett std::string Expected =
48655974d3bSJulie Hockett R"raw(---
48755974d3bSJulie Hockett USR: '0000000000000000000000000000000000000000'
48855974d3bSJulie Hockett Name: 'f'
48955974d3bSJulie Hockett Description:
49055974d3bSJulie Hockett - Kind: 'FullComment'
49155974d3bSJulie Hockett Children:
49255974d3bSJulie Hockett - Kind: 'ParagraphComment'
49355974d3bSJulie Hockett Children:
49455974d3bSJulie Hockett - Kind: 'TextComment'
49555974d3bSJulie Hockett - Kind: 'ParagraphComment'
49655974d3bSJulie Hockett Children:
49755974d3bSJulie Hockett - Kind: 'TextComment'
49855974d3bSJulie Hockett Text: ' Brief description.'
49955974d3bSJulie Hockett Name: 'ParagraphComment'
50055974d3bSJulie Hockett - Kind: 'ParagraphComment'
50155974d3bSJulie Hockett Children:
50255974d3bSJulie Hockett - Kind: 'TextComment'
50355974d3bSJulie Hockett Text: ' Extended description that'
50455974d3bSJulie Hockett - Kind: 'TextComment'
50555974d3bSJulie Hockett Text: ' continues onto the next line.'
50655974d3bSJulie Hockett - Kind: 'ParagraphComment'
50755974d3bSJulie Hockett Children:
50855974d3bSJulie Hockett - Kind: 'TextComment'
50955974d3bSJulie Hockett - Kind: 'HTMLStartTagComment'
51055974d3bSJulie Hockett Name: 'ul'
51155974d3bSJulie Hockett AttrKeys:
51255974d3bSJulie Hockett - 'class'
51355974d3bSJulie Hockett AttrValues:
51455974d3bSJulie Hockett - 'test'
51555974d3bSJulie Hockett - Kind: 'HTMLStartTagComment'
51655974d3bSJulie Hockett Name: 'li'
51755974d3bSJulie Hockett - Kind: 'TextComment'
51855974d3bSJulie Hockett Text: ' Testing.'
51955974d3bSJulie Hockett - Kind: 'HTMLEndTagComment'
52055974d3bSJulie Hockett Name: 'ul'
52155974d3bSJulie Hockett SelfClosing: true
52255974d3bSJulie Hockett - Kind: 'VerbatimBlockComment'
52355974d3bSJulie Hockett Name: 'verbatim'
52455974d3bSJulie Hockett CloseName: 'endverbatim'
52555974d3bSJulie Hockett Children:
52655974d3bSJulie Hockett - Kind: 'VerbatimBlockLineComment'
52755974d3bSJulie Hockett Text: ' The description continues.'
52855974d3bSJulie Hockett - Kind: 'ParamCommandComment'
52955974d3bSJulie Hockett Direction: '[out]'
53055974d3bSJulie Hockett ParamName: 'I'
53155974d3bSJulie Hockett Explicit: true
53255974d3bSJulie Hockett Children:
53355974d3bSJulie Hockett - Kind: 'ParagraphComment'
53455974d3bSJulie Hockett Children:
53555974d3bSJulie Hockett - Kind: 'TextComment'
53655974d3bSJulie Hockett - Kind: 'TextComment'
53755974d3bSJulie Hockett Text: ' is a parameter.'
53855974d3bSJulie Hockett - Kind: 'ParamCommandComment'
53955974d3bSJulie Hockett Direction: '[in]'
54055974d3bSJulie Hockett ParamName: 'J'
54155974d3bSJulie Hockett Children:
54255974d3bSJulie Hockett - Kind: 'ParagraphComment'
54355974d3bSJulie Hockett Children:
54455974d3bSJulie Hockett - Kind: 'TextComment'
54555974d3bSJulie Hockett Text: ' is a parameter.'
54655974d3bSJulie Hockett - Kind: 'TextComment'
54755974d3bSJulie Hockett - Kind: 'BlockCommandComment'
54855974d3bSJulie Hockett Name: 'return'
54955974d3bSJulie Hockett Explicit: true
55055974d3bSJulie Hockett Children:
55155974d3bSJulie Hockett - Kind: 'ParagraphComment'
55255974d3bSJulie Hockett Children:
55355974d3bSJulie Hockett - Kind: 'TextComment'
55455974d3bSJulie Hockett Text: 'void'
55555974d3bSJulie Hockett DefLocation:
55655974d3bSJulie Hockett LineNumber: 10
55755974d3bSJulie Hockett Filename: 'test.cpp'
55855974d3bSJulie Hockett Params:
55955974d3bSJulie Hockett - Type:
56055974d3bSJulie Hockett Name: 'int'
5614a68babdSBrett Wilson QualName: 'int'
56255974d3bSJulie Hockett Name: 'I'
56355974d3bSJulie Hockett - Type:
56455974d3bSJulie Hockett Name: 'int'
5654a68babdSBrett Wilson QualName: 'int'
56655974d3bSJulie Hockett Name: 'J'
56755974d3bSJulie Hockett ReturnType:
56855974d3bSJulie Hockett Type:
56955974d3bSJulie Hockett Name: 'void'
5704a68babdSBrett Wilson QualName: 'void'
57155974d3bSJulie Hockett ...
57255974d3bSJulie Hockett )raw";
57355974d3bSJulie Hockett
57455974d3bSJulie Hockett EXPECT_EQ(Expected, Actual.str());
57555974d3bSJulie Hockett }
57655974d3bSJulie Hockett
57755974d3bSJulie Hockett } // namespace doc
57855974d3bSJulie Hockett } // namespace clang
579