/** * @file test_html_renderer.cpp * @brief HTML 渲染器单元测试 */ #include #include "renderer/html_renderer.hpp" namespace tut { namespace test { class HtmlRendererTest : public ::testing::Test { protected: HtmlRenderer renderer_; }; TEST_F(HtmlRendererTest, ExtractTitle) { const std::string html = R"( Test Page

Hello

)"; EXPECT_EQ(renderer_.extractTitle(html), "Test Page"); } TEST_F(HtmlRendererTest, ExtractTitleMissing) { const std::string html = "No title"; EXPECT_EQ(renderer_.extractTitle(html), ""); } TEST_F(HtmlRendererTest, RenderSimpleParagraph) { const std::string html = "

Hello World

"; auto result = renderer_.render(html); EXPECT_FALSE(result.text.empty()); EXPECT_NE(result.text.find("Hello World"), std::string::npos); } TEST_F(HtmlRendererTest, ExtractLinks) { const std::string html = R"( Link 1 Link 2 )"; auto links = renderer_.extractLinks(html); EXPECT_EQ(links.size(), 2); } TEST_F(HtmlRendererTest, ResolveRelativeLinks) { const std::string html = R"( Link )"; auto links = renderer_.extractLinks(html, "https://example.com/dir/"); ASSERT_EQ(links.size(), 1); EXPECT_EQ(links[0].url, "https://example.com/page.html"); } TEST_F(HtmlRendererTest, SkipScriptAndStyle) { const std::string html = R"(

Visible content

)"; auto result = renderer_.render(html); EXPECT_NE(result.text.find("Visible content"), std::string::npos); EXPECT_EQ(result.text.find("alert"), std::string::npos); EXPECT_EQ(result.text.find("color: red"), std::string::npos); } TEST_F(HtmlRendererTest, RenderHeadings) { const std::string html = R"(

Heading 1

Heading 2

Paragraph

)"; auto result = renderer_.render(html); EXPECT_NE(result.text.find("Heading 1"), std::string::npos); EXPECT_NE(result.text.find("Heading 2"), std::string::npos); } TEST_F(HtmlRendererTest, RenderList) { const std::string html = R"( )"; auto result = renderer_.render(html); EXPECT_NE(result.text.find("Item 1"), std::string::npos); EXPECT_NE(result.text.find("Item 2"), std::string::npos); } TEST_F(HtmlRendererTest, RenderWithoutColors) { const std::string html = "Link"; RenderOptions options; options.use_colors = false; auto result = renderer_.render(html, options); // 不应该包含 ANSI 转义码 EXPECT_EQ(result.text.find("\033["), std::string::npos); } } // namespace test } // namespace tut