Skip to content

Commit

Permalink
Auto close optgroup in select
Browse files Browse the repository at this point in the history
Fixes #1313
  • Loading branch information
jhy committed Feb 9, 2020
1 parent a82d6b6 commit fbc7e76
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 2 deletions.
3 changes: 3 additions & 0 deletions CHANGES
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ jsoup changelog
"div:has(> a)" will select all "div" elements that have at least one direct child "a" element.
<https://github.com/jhy/jsoup/pull/1214>

* Bugfix: in a <select> tag, a second <optgroup> would not automatically close an earlier open <optgroup>
<https://github.com/jhy/jsoup/issues/1313>

* Improvement: added Element chaining methods for various overridden methods on Node.
<https://github.com/jhy/jsoup/issues/1193>

Expand Down
4 changes: 2 additions & 2 deletions src/main/java/org/jsoup/parser/HtmlTreeBuilderState.java
Original file line number Diff line number Diff line change
Expand Up @@ -1243,8 +1243,8 @@ else if (name.equals("option")) {
tb.insert(start);
} else if (name.equals("optgroup")) {
if (tb.currentElement().normalName().equals("option"))
tb.processEndTag("option");
else if (tb.currentElement().normalName().equals("optgroup"))
tb.processEndTag("option"); // pop option and flow to pop optgroup
if (tb.currentElement().normalName().equals("optgroup"))
tb.processEndTag("optgroup");
tb.insert(start);
} else if (name.equals("select")) {
Expand Down
19 changes: 19 additions & 0 deletions src/test/java/org/jsoup/parser/HtmlParserTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -1294,4 +1294,23 @@ public void testUNewlines() {
Document doc = Jsoup.parse("<p>" + text);
assertEquals(text, doc.text());
}

@Test public void testStartOptGroup() {
// https://github.com/jhy/jsoup/issues/1313
String html = "<select>\n" +
" <optgroup label=\"a\">\n" +
" <option>one\n" +
" <option>two\n" +
" <option>three\n" +
" <optgroup label=\"b\">\n" +
" <option>four\n" +
" <option>fix\n" +
" <option>six\n" +
"</select>";
Document doc = Jsoup.parse(html);
Element select = doc.selectFirst("select");
//assertEquals(2, select.childrenSize());

assertEquals("<optgroup label=\"a\"> <option>one </option><option>two </option><option>three </option></optgroup><optgroup label=\"b\"> <option>four </option><option>fix </option><option>six </option></optgroup>", select.html());
}
}

0 comments on commit fbc7e76

Please sign in to comment.