summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorblank X <blankie@nixnetmail.com>2022-03-26 16:56:33 +0700
committerblank X <blankie@nixnetmail.com>2022-03-27 19:57:59 +0700
commit6aa1bbc3eb4f7104fccbb593b67ff0e11aba135b (patch)
treec5bec7cee5a56f39acbba0af7333274a60971768 /test
parent5ef27bfe2e94ba72edfa2567507e02c2df153ee3 (diff)
Rewrite decode_entities to ignore unknown and invalid entities
Diffstat (limited to 'test')
-rw-r--r--test/tagsouppullparser.cpp55
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: &lt;&gt;");
+
+ 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);
+ }
+}