aboutsummaryrefslogtreecommitdiff
path: root/clang-tools-extra/clangd/unittests/SymbolDocumentationTests.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang-tools-extra/clangd/unittests/SymbolDocumentationTests.cpp')
-rw-r--r--clang-tools-extra/clangd/unittests/SymbolDocumentationTests.cpp161
1 files changed, 161 insertions, 0 deletions
diff --git a/clang-tools-extra/clangd/unittests/SymbolDocumentationTests.cpp b/clang-tools-extra/clangd/unittests/SymbolDocumentationTests.cpp
new file mode 100644
index 0000000..69eb13b
--- /dev/null
+++ b/clang-tools-extra/clangd/unittests/SymbolDocumentationTests.cpp
@@ -0,0 +1,161 @@
+//===-- 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, Parse) {
+
+ 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",
+ "\\*\\*\\\\brief\\*\\* this is a \nbrief description",
+ "**\\brief** this is a \nbrief description",
+ "**\\brief** this is a\nbrief description",
+ },
+ {
+ "\\throw exception foo",
+ "\\*\\*\\\\throw\\*\\* \\*exception\\* foo",
+ "**\\throw** *exception* foo",
+ "**\\throw** *exception* foo",
+ },
+ {
+ "\\brief this is a brief description\n\n\\li item 1\n\\li item "
+ "2\n\\arg item 3",
+ "\\*\\*\\\\brief\\*\\* this is a brief description\n\n- item 1\n\n- "
+ "item "
+ "2\n\n- "
+ "item 3",
+ "**\\brief** this is a brief description\n\n- item 1\n\n- item "
+ "2\n\n- "
+ "item 3",
+ "**\\brief** this is a brief description\n\n- item 1\n\n- item "
+ "2\n\n- "
+ "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",
+ },
+ {
+ "\\verbatim\nthis is a\nverbatim block containing\nsome verbatim "
+ "text\n\\endverbatim",
+ "\\*\\*@verbatim\\*\\*\n\n```\nthis is a\nverbatim block "
+ "containing\nsome "
+ "verbatim text\n```\n\n\\*\\*@endverbatim\\*\\*",
+ "**@verbatim**\n\n```\nthis is a\nverbatim block containing\nsome "
+ "verbatim text\n```\n\n**@endverbatim**",
+ "**@verbatim**\n\nthis is a\nverbatim block containing\nsome "
+ "verbatim text\n\n**@endverbatim**",
+ },
+ {
+ "@param foo this is a parameter\n@param bar this is another "
+ "parameter",
+ "",
+ "",
+ "",
+ },
+ {
+ "@brief brief docs\n\n@param foo this is a parameter\n\nMore "
+ "description\ndocumentation",
+ "\\*\\*@brief\\*\\* brief docs\n\nMore description\ndocumentation",
+ "**@brief** brief docs\n\nMore description\ndocumentation",
+ "**@brief** brief docs\n\nMore description documentation",
+ },
+ {
+ "<b>this is a bold text</b>\nnormal text\n<i>this is an italic "
+ "text</i>\n<code>this is a code block</code>",
+ "\\<b>this is a bold text\\</b>\nnormal text\n\\<i>this is an italic "
+ "text\\</i>\n\\<code>this is a code block\\</code>",
+ "\\<b>this is a bold text\\</b>\nnormal text\n\\<i>this is an italic "
+ "text\\</i>\n\\<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