diff options
author | blank X <blankie@nixnetmail.com> | 2022-03-26 16:56:33 +0700 |
---|---|---|
committer | blank X <blankie@nixnetmail.com> | 2022-03-27 19:57:59 +0700 |
commit | 6aa1bbc3eb4f7104fccbb593b67ff0e11aba135b (patch) | |
tree | c5bec7cee5a56f39acbba0af7333274a60971768 /test | |
parent | 5ef27bfe2e94ba72edfa2567507e02c2df153ee3 (diff) |
Rewrite decode_entities to ignore unknown and invalid entities
Diffstat (limited to 'test')
-rw-r--r-- | test/tagsouppullparser.cpp | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/test/tagsouppullparser.cpp b/test/tagsouppullparser.cpp index 21d36d18..a7096d70 100644 --- a/test/tagsouppullparser.cpp +++ b/test/tagsouppullparser.cpp @@ -222,3 +222,58 @@ TEST_CASE("TagSoupPullParser can decode HTML entities", "[TagSoupPullParser]") REQUIRE(e == TagSoupPullParser::Event::END_DOCUMENT); } } + +TEST_CASE("TagSoupPullParser ignores unknown and invalid entities", + "[TagSoupPullParser]") +{ + SECTION("Missing semicolon") { + std::istringstream input_stream("some & text"); + + TagSoupPullParser xpp(input_stream); + TagSoupPullParser::Event e; + + e = xpp.get_event_type(); + REQUIRE(e == TagSoupPullParser::Event::START_DOCUMENT); + + e = xpp.next(); + REQUIRE(e == TagSoupPullParser::Event::TEXT); + REQUIRE(xpp.get_text() == "some & text"); + + e = xpp.next(); + REQUIRE(e == TagSoupPullParser::Event::END_DOCUMENT); + } + + SECTION("Unknown entity") { + std::istringstream input_stream("some &more; text"); + + TagSoupPullParser xpp(input_stream); + TagSoupPullParser::Event e; + + e = xpp.get_event_type(); + REQUIRE(e == TagSoupPullParser::Event::START_DOCUMENT); + + e = xpp.next(); + REQUIRE(e == TagSoupPullParser::Event::TEXT); + REQUIRE(xpp.get_text() == "some &more; text"); + + e = xpp.next(); + REQUIRE(e == TagSoupPullParser::Event::END_DOCUMENT); + } + + SECTION("Valid entities after invalid entities") { + std::istringstream input_stream("a lone ampersand: &, and some entities: <>"); + + TagSoupPullParser xpp(input_stream); + TagSoupPullParser::Event e; + + e = xpp.get_event_type(); + REQUIRE(e == TagSoupPullParser::Event::START_DOCUMENT); + + e = xpp.next(); + REQUIRE(e == TagSoupPullParser::Event::TEXT); + REQUIRE(xpp.get_text() == "a lone ampersand: &, and some entities: <>"); + + e = xpp.next(); + REQUIRE(e == TagSoupPullParser::Event::END_DOCUMENT); + } +} |