From aabb1f79ea2e0232b0479e3937c7d2232fb2d91c Mon Sep 17 00:00:00 2001 From: speedie Date: Fri, 17 May 2024 12:23:01 +0200 Subject: [PATCH] Add more test cases, fix a bug where tr is not in the map. --- src/docpp.cpp | 8 ++++---- tests/test.cpp | 45 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 4 deletions(-) diff --git a/src/docpp.cpp b/src/docpp.cpp index de8a2ca..8930728 100644 --- a/src/docpp.cpp +++ b/src/docpp.cpp @@ -290,7 +290,7 @@ void docpp::HTML::Section::set(const std::string& tag, const Properties& propert } std::pair docpp::HTML::resolve_tag(const Tag tag) { - static const std::unordered_map> tag_map{ + const std::unordered_map> tag_map{ {ELEMENT_EMPTY, {"", docpp::HTML::TYPE_TEXT_TAB}}, {ELEMENT_ABBREVIATION, {"abbr", docpp::HTML::TYPE_NON_SELF_CLOSING}}, {ELEMENT_ABBR, {"abbr", docpp::HTML::TYPE_NON_SELF_CLOSING}}, @@ -423,6 +423,7 @@ std::pair docpp::HTML::resolve_tag(const Tag tag {ELEMENT_TEMPLATE, {"template", docpp::HTML::TYPE_NON_SELF_CLOSING}}, {ELEMENT_TFOOT, {"tfoot", docpp::HTML::TYPE_NON_SELF_CLOSING}}, {ELEMENT_TH, {"th", docpp::HTML::TYPE_NON_SELF_CLOSING}}, + {ELEMENT_TR, {"tr", docpp::HTML::TYPE_NON_SELF_CLOSING}}, {ELEMENT_THEAD, {"thead", docpp::HTML::TYPE_NON_SELF_CLOSING}}, {ELEMENT_TIME, {"time", docpp::HTML::TYPE_NON_SELF_CLOSING}}, {ELEMENT_TITLE, {"title", docpp::HTML::TYPE_NON_SELF_CLOSING}}, @@ -440,9 +441,8 @@ std::pair docpp::HTML::resolve_tag(const Tag tag return tag_map.at(tag); } - throw docpp::invalid_argument{"Invalid tag"}; - - return {}; + const std::string throwmsg{"Invalid tag: " + std::to_string(static_cast(tag))}; + throw docpp::invalid_argument{throwmsg.c_str()}; } void docpp::HTML::Section::set(const Tag tag, const Properties& properties) { diff --git a/tests/test.cpp b/tests/test.cpp index 95c6308..dee981a 100644 --- a/tests/test.cpp +++ b/tests/test.cpp @@ -383,6 +383,50 @@ SCENARIO("Test HTML", "[HTML]") { REQUIRE(sect.get() == "

Test 1

Test 2

Test 3

"); }; + const auto test24 = []() { + const auto test = docpp::HTML::resolve_tag(docpp::HTML::ELEMENT_HTML); + const auto test2 = docpp::HTML::resolve_tag(docpp::HTML::ELEMENT_HEAD); + const auto test3 = docpp::HTML::resolve_tag(docpp::HTML::ELEMENT_BODY); + const auto test4 = docpp::HTML::resolve_tag(docpp::HTML::ELEMENT_DIV); + const auto test5 = docpp::HTML::resolve_tag(docpp::HTML::ELEMENT_NAV); + const auto test6 = docpp::HTML::resolve_tag(docpp::HTML::ELEMENT_FOOTER); + const auto test7 = docpp::HTML::resolve_tag(docpp::HTML::ELEMENT_P); + const auto test8 = docpp::HTML::resolve_tag(docpp::HTML::ELEMENT_H1); + const auto test9 = docpp::HTML::resolve_tag(docpp::HTML::ELEMENT_H2); + const auto test10 = docpp::HTML::resolve_tag(docpp::HTML::ELEMENT_H3); + const auto test11 = docpp::HTML::resolve_tag(docpp::HTML::ELEMENT_H4); + const auto test12 = docpp::HTML::resolve_tag(docpp::HTML::ELEMENT_H5); + const auto test13 = docpp::HTML::resolve_tag(docpp::HTML::ELEMENT_H6); + + docpp::HTML::Section sect = docpp::HTML::Section(docpp::HTML::ELEMENT_HTML); + docpp::HTML::Section sect2 = docpp::HTML::Section(docpp::HTML::ELEMENT_HEAD); + docpp::HTML::Section sect3 = docpp::HTML::Section(docpp::HTML::ELEMENT_BODY); + docpp::HTML::Section sect4 = docpp::HTML::Section(docpp::HTML::ELEMENT_DIV); + docpp::HTML::Section sect5 = docpp::HTML::Section(docpp::HTML::ELEMENT_NAV); + docpp::HTML::Section sect6 = docpp::HTML::Section(docpp::HTML::ELEMENT_FOOTER); + docpp::HTML::Section sect7 = docpp::HTML::Section(docpp::HTML::ELEMENT_P); + docpp::HTML::Section sect8 = docpp::HTML::Section(docpp::HTML::ELEMENT_H1); + docpp::HTML::Section sect9 = docpp::HTML::Section(docpp::HTML::ELEMENT_H2); + docpp::HTML::Section sect10 = docpp::HTML::Section(docpp::HTML::ELEMENT_H3); + docpp::HTML::Section sect11 = docpp::HTML::Section(docpp::HTML::ELEMENT_H4); + docpp::HTML::Section sect12 = docpp::HTML::Section(docpp::HTML::ELEMENT_H5); + docpp::HTML::Section sect13 = docpp::HTML::Section(docpp::HTML::ELEMENT_H6); + + docpp::HTML::Element elem = docpp::HTML::Element(docpp::HTML::ELEMENT_HTML);; + docpp::HTML::Element elem2 = docpp::HTML::Element(docpp::HTML::ELEMENT_HEAD); + docpp::HTML::Element elem3 = docpp::HTML::Element(docpp::HTML::ELEMENT_BODY); + docpp::HTML::Element elem4 = docpp::HTML::Element(docpp::HTML::ELEMENT_DIV); + docpp::HTML::Element elem5 = docpp::HTML::Element(docpp::HTML::ELEMENT_NAV); + docpp::HTML::Element elem6 = docpp::HTML::Element(docpp::HTML::ELEMENT_FOOTER); + docpp::HTML::Element elem7 = docpp::HTML::Element(docpp::HTML::ELEMENT_P); + docpp::HTML::Element elem8 = docpp::HTML::Element(docpp::HTML::ELEMENT_H1); + docpp::HTML::Element elem9 = docpp::HTML::Element(docpp::HTML::ELEMENT_H2); + docpp::HTML::Element elem10 = docpp::HTML::Element(docpp::HTML::ELEMENT_H3); + docpp::HTML::Element elem11 = docpp::HTML::Element(docpp::HTML::ELEMENT_H4); + docpp::HTML::Element elem12 = docpp::HTML::Element(docpp::HTML::ELEMENT_H5); + docpp::HTML::Element elem13 = docpp::HTML::Element(docpp::HTML::ELEMENT_H6); + }; + std::vector tests{ test1, test2, @@ -407,6 +451,7 @@ SCENARIO("Test HTML", "[HTML]") { test21, test22, test23, + test24, }; for (const auto& test : tests) {