blob: 31a6a149e33c45467c980d78625dc7d6193bd138 [file] [log] [blame] [edit]
//===-- SymbolDocumentationTests.cpp --------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#include "SymbolDocumentation.h"
#include "support/Markup.h"
#include "clang/Basic/CommentOptions.h"
#include "llvm/ADT/StringRef.h"
#include "gtest/gtest.h"
namespace clang {
namespace clangd {
TEST(SymbolDocumentation, UnhandledDocs) {
CommentOptions CommentOpts;
struct Case {
llvm::StringRef Documentation;
llvm::StringRef ExpectedRenderEscapedMarkdown;
llvm::StringRef ExpectedRenderMarkdown;
llvm::StringRef ExpectedRenderPlainText;
} Cases[] = {
{
"foo bar",
"foo bar",
"foo bar",
"foo bar",
},
{
"foo\nbar\n",
"foo\nbar",
"foo\nbar",
"foo bar",
},
{
"foo\n\nbar\n",
"foo\n\nbar",
"foo\n\nbar",
"foo\n\nbar",
},
{
"foo \\p bar baz",
"foo `bar` baz",
"foo `bar` baz",
"foo bar baz",
},
{
"foo \\e bar baz",
"foo \\*bar\\* baz",
"foo *bar* baz",
"foo *bar* baz",
},
{
"foo \\b bar baz",
"foo \\*\\*bar\\*\\* baz",
"foo **bar** baz",
"foo **bar** baz",
},
{
"foo \\ref bar baz",
"foo \\*\\*\\\\ref\\*\\* \\*bar\\* baz",
"foo **\\ref** *bar* baz",
"foo **\\ref** *bar* baz",
},
{
"foo @ref bar baz",
"foo \\*\\*@ref\\*\\* \\*bar\\* baz",
"foo **@ref** *bar* baz",
"foo **@ref** *bar* baz",
},
{
"\\brief this is a \\n\nbrief description",
"",
"",
"",
},
{
"\\throw exception foo",
"\\*\\*\\\\throw\\*\\* \\*exception\\* foo",
"**\\throw** *exception* foo",
"**\\throw** *exception* foo",
},
{
R"(\brief this is a brief description
\li item 1
\li item 2
\arg item 3)",
R"(- item 1
- item 2
- item 3)",
R"(- item 1
- item 2
- item 3)",
R"(- item 1
- item 2
- item 3)",
},
{
"\\defgroup mygroup this is a group\nthis is not a group description",
"\\*\\*@defgroup\\*\\* `mygroup this is a group`\n\nthis is not a "
"group "
"description",
"**@defgroup** `mygroup this is a group`\n\nthis is not a group "
"description",
"**@defgroup** `mygroup this is a group`\n\nthis is not a group "
"description",
},
{
R"(\verbatim
this is a
verbatim block containing
some verbatim text
\endverbatim)",
R"(\*\*@verbatim\*\*
```
this is a
verbatim block containing
some verbatim text
```
\*\*@endverbatim\*\*)",
R"(**@verbatim**
```
this is a
verbatim block containing
some verbatim text
```
**@endverbatim**)",
R"(**@verbatim**
this is a
verbatim block containing
some verbatim text
**@endverbatim**)",
},
{
"@param foo this is a parameter\n@param bar this is another "
"parameter",
"",
"",
"",
},
{
R"(@brief brief docs
@param foo this is a parameter
\brief another brief?
\details these are details
More description
documentation)",
R"(\*\*\\brief\*\* another brief?
\*\*\\details\*\* these are details
More description
documentation)",
R"(**\brief** another brief?
**\details** these are details
More description
documentation)",
R"(**\brief** another brief?
**\details** these are details
More description documentation)",
},
{
R"(<b>this is a bold text</b>
normal text<i>this is an italic text</i>
<code>this is a code block</code>)",
R"(\<b>this is a bold text\</b>
normal text\<i>this is an italic text\</i>
\<code>this is a code block\</code>)",
R"(\<b>this is a bold text\</b>
normal text\<i>this is an italic text\</i>
\<code>this is a code block\</code>)",
"<b>this is a bold text</b> normal text<i>this is an italic text</i> "
"<code>this is a code block</code>",
},
};
for (const auto &C : Cases) {
markup::Document Doc;
SymbolDocCommentVisitor SymbolDoc(C.Documentation, CommentOpts);
SymbolDoc.docToMarkup(Doc);
EXPECT_EQ(Doc.asPlainText(), C.ExpectedRenderPlainText);
EXPECT_EQ(Doc.asMarkdown(), C.ExpectedRenderMarkdown);
EXPECT_EQ(Doc.asEscapedMarkdown(), C.ExpectedRenderEscapedMarkdown);
}
}
} // namespace clangd
} // namespace clang