blob: 3bc3dfd852f3e939b05bab0dd8906261a4a825db [file]
//===----------------------------------------------------------------------===//
//
// 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 "markdown/Markdown.h"
#include "gtest/gtest.h"
using namespace clang::doc::markdown;
using namespace llvm;
namespace {
/// Returns the text of the first TextNode child in the given inline list.
static llvm::StringRef firstChildText(const InlineList &L) {
return llvm::cast<TextNode>(L.front()).getText();
}
TEST(MarkdownNodeTest, TextNode) {
TextNode N("hello");
EXPECT_EQ(N.getKind(), NodeKind::NK_Text);
EXPECT_EQ(N.getText(), "hello");
}
TEST(MarkdownNodeTest, FencedCodeNode) {
FencedCodeNode N("cpp", "int x = 0;\nint y = 1;");
EXPECT_EQ(N.getKind(), NodeKind::NK_FencedCode);
EXPECT_EQ(N.getLang(), "cpp");
llvm::SmallVector<llvm::StringRef> Lines;
N.getCode().split(Lines, '\n');
EXPECT_EQ(Lines[0], "int x = 0;");
EXPECT_EQ(Lines[1], "int y = 1;");
}
TEST(MarkdownNodeTest, HeadingNode) {
HeadingNode N(2);
EXPECT_EQ(N.getKind(), NodeKind::NK_Heading);
EXPECT_EQ(N.getLevel(), 2u);
}
TEST(MarkdownNodeTest, ThematicBreakNode) {
ThematicBreakNode N;
EXPECT_EQ(N.getKind(), NodeKind::NK_ThematicBreak);
}
TEST(MarkdownNodeTest, InlineCodeNode) {
InlineCodeNode N("foo()");
EXPECT_EQ(N.getKind(), NodeKind::NK_InlineCode);
EXPECT_EQ(N.getCode(), "foo()");
}
TEST(MarkdownNodeTest, EmphasisNode) {
EmphasisNode N;
TextNode Child("emphasized");
N.addChild(Child);
EXPECT_EQ(N.getKind(), NodeKind::NK_Emphasis);
EXPECT_FALSE(N.children().empty());
EXPECT_EQ(firstChildText(N.children()), "emphasized");
}
TEST(MarkdownNodeTest, EmphasisRemoveChild) {
EmphasisNode N;
TextNode Child("temp");
N.addChild(Child);
EXPECT_FALSE(N.children().empty());
N.removeChild(Child);
EXPECT_TRUE(N.children().empty());
}
TEST(MarkdownNodeTest, UnorderedListNode) {
UnorderedListNode N;
EXPECT_EQ(N.getKind(), NodeKind::NK_UnorderedList);
EXPECT_TRUE(N.items().empty());
}
TEST(MarkdownNodeTest, UnorderedListRemoveItem) {
UnorderedListNode List;
ListItemNode Item;
List.addItem(Item);
EXPECT_FALSE(List.items().empty());
List.removeItem(Item);
EXPECT_TRUE(List.items().empty());
}
TEST(MarkdownNodeTest, ParagraphNode) {
ParagraphNode N;
EXPECT_EQ(N.getKind(), NodeKind::NK_Paragraph);
EXPECT_TRUE(N.children().empty());
}
TEST(MarkdownNodeTest, DocumentNode) {
DocumentNode N;
EXPECT_EQ(N.getKind(), NodeKind::NK_Document);
EXPECT_TRUE(N.children().empty());
}
TEST(MarkdownNodeTest, ParagraphWithChildren) {
ParagraphNode Para;
TextNode Child("hello");
Para.addChild(Child);
EXPECT_FALSE(Para.children().empty());
EXPECT_EQ(firstChildText(Para.children()), "hello");
}
TEST(MarkdownNodeTest, UnorderedListWithItems) {
UnorderedListNode List;
ListItemNode Item;
TextNode Child("item text");
Item.addChild(Child);
List.addItem(Item);
EXPECT_FALSE(List.items().empty());
EXPECT_EQ(firstChildText(List.items().front().children()), "item text");
}
} // namespace