|
2 | 2 |
|
3 | 3 | import org.jsoup.Jsoup;
|
4 | 4 | import org.jsoup.nodes.Document;
|
| 5 | +import org.jsoup.nodes.Element; |
5 | 6 | import org.junit.jupiter.api.Test;
|
6 | 7 |
|
7 | 8 | import static org.jsoup.select.EvaluatorDebug.asElement;
|
@@ -182,4 +183,28 @@ public void exceptOnUnhandledEvaluator() {
|
182 | 183 | assertEquals("(Or (And (Id '#el')(AttributeWithValueContaining '[class*=child]'))(Class '.some-other-selector'))", sexpr("#el[class*=child], .some-other-selector"));
|
183 | 184 | assertEquals("(Or (And (AttributeWithValueContaining '[class*=child]')(Ancestor (Id '#parent')))(And (Class '.nested')(Ancestor (Class '.some-other-selector'))))", sexpr("#parent [class*=child], .some-other-selector .nested"));
|
184 | 185 | }
|
| 186 | + |
| 187 | + @Test void parsesEscapedSubqueries() { |
| 188 | + String html = "<div class='-4a'>One</div> <div id='-4a'>Two</div>"; |
| 189 | + Document doc = Jsoup.parse(html); |
| 190 | + |
| 191 | + String classQ = "div.-\\34 a"; |
| 192 | + Element div1 = doc.expectFirst(classQ); |
| 193 | + assertEquals("One", div1.wholeText()); |
| 194 | + |
| 195 | + String idQ = "#-\\34 a"; |
| 196 | + Element div2 = doc.expectFirst(idQ); |
| 197 | + assertEquals("Two", div2.wholeText()); |
| 198 | + |
| 199 | + String genClassQ = "html > body > div.-\\34 a"; |
| 200 | + assertEquals(genClassQ, div1.cssSelector()); |
| 201 | + assertSame(div1, doc.expectFirst(genClassQ)); |
| 202 | + |
| 203 | + String deepIdQ = "html > body > #-\\34 a"; |
| 204 | + assertEquals(idQ, div2.cssSelector()); |
| 205 | + assertSame(div2, doc.expectFirst(deepIdQ)); |
| 206 | + |
| 207 | + assertEquals("(ImmediateParentRun (Tag 'html')(Tag 'body')(And (Tag 'div')(Class '.-4a')))", sexpr(genClassQ)); |
| 208 | + assertEquals("(ImmediateParentRun (Tag 'html')(Tag 'body')(Id '#-4a'))", sexpr(deepIdQ)); |
| 209 | + } |
185 | 210 | }
|
0 commit comments