Add more test cases, fix a bug where tr is not in the map.

This commit is contained in:
Jacob 2024-05-17 12:23:01 +02:00
parent 8d3e23ac5a
commit aabb1f79ea
2 changed files with 49 additions and 4 deletions

View file

@ -290,7 +290,7 @@ void docpp::HTML::Section::set(const std::string& tag, const Properties& propert
} }
std::pair<std::string, docpp::HTML::Type> docpp::HTML::resolve_tag(const Tag tag) { std::pair<std::string, docpp::HTML::Type> docpp::HTML::resolve_tag(const Tag tag) {
static const std::unordered_map<Tag, std::pair<std::string, docpp::HTML::Type>> tag_map{ const std::unordered_map<docpp::HTML::Tag, std::pair<std::string, docpp::HTML::Type>> tag_map{
{ELEMENT_EMPTY, {"", docpp::HTML::TYPE_TEXT_TAB}}, {ELEMENT_EMPTY, {"", docpp::HTML::TYPE_TEXT_TAB}},
{ELEMENT_ABBREVIATION, {"abbr", docpp::HTML::TYPE_NON_SELF_CLOSING}}, {ELEMENT_ABBREVIATION, {"abbr", docpp::HTML::TYPE_NON_SELF_CLOSING}},
{ELEMENT_ABBR, {"abbr", docpp::HTML::TYPE_NON_SELF_CLOSING}}, {ELEMENT_ABBR, {"abbr", docpp::HTML::TYPE_NON_SELF_CLOSING}},
@ -423,6 +423,7 @@ std::pair<std::string, docpp::HTML::Type> docpp::HTML::resolve_tag(const Tag tag
{ELEMENT_TEMPLATE, {"template", docpp::HTML::TYPE_NON_SELF_CLOSING}}, {ELEMENT_TEMPLATE, {"template", docpp::HTML::TYPE_NON_SELF_CLOSING}},
{ELEMENT_TFOOT, {"tfoot", 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_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_THEAD, {"thead", docpp::HTML::TYPE_NON_SELF_CLOSING}},
{ELEMENT_TIME, {"time", docpp::HTML::TYPE_NON_SELF_CLOSING}}, {ELEMENT_TIME, {"time", docpp::HTML::TYPE_NON_SELF_CLOSING}},
{ELEMENT_TITLE, {"title", docpp::HTML::TYPE_NON_SELF_CLOSING}}, {ELEMENT_TITLE, {"title", docpp::HTML::TYPE_NON_SELF_CLOSING}},
@ -440,9 +441,8 @@ std::pair<std::string, docpp::HTML::Type> docpp::HTML::resolve_tag(const Tag tag
return tag_map.at(tag); return tag_map.at(tag);
} }
throw docpp::invalid_argument{"Invalid tag"}; const std::string throwmsg{"Invalid tag: " + std::to_string(static_cast<int>(tag))};
throw docpp::invalid_argument{throwmsg.c_str()};
return {};
} }
void docpp::HTML::Section::set(const Tag tag, const Properties& properties) { void docpp::HTML::Section::set(const Tag tag, const Properties& properties) {

View file

@ -383,6 +383,50 @@ SCENARIO("Test HTML", "[HTML]") {
REQUIRE(sect.get<std::string>() == "<p>Test 1</p><p>Test 2</p><p>Test 3</p>"); REQUIRE(sect.get<std::string>() == "<p>Test 1</p><p>Test 2</p><p>Test 3</p>");
}; };
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<void (*)()> tests{ std::vector<void (*)()> tests{
test1, test1,
test2, test2,
@ -407,6 +451,7 @@ SCENARIO("Test HTML", "[HTML]") {
test21, test21,
test22, test22,
test23, test23,
test24,
}; };
for (const auto& test : tests) { for (const auto& test : tests) {