Skip to content

Commit 7967a64

Browse files
authored
Merge pull request #32 from anonyein/origin
Normalize the evaluator key prior to validation
2 parents 0aed0ab + bbb56af commit 7967a64

File tree

2 files changed

+11
-11
lines changed

2 files changed

+11
-11
lines changed

src/main/java/org/jsoup/select/QueryParser.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,7 @@ private Evaluator byAttribute() {
345345

346346
private Evaluator evaluatorForAttribute(TokenQueue cq) {
347347
String key = cq.consumeToAny(AttributeEvals); // eq, not, start, end, contain, match, (no val)
348+
key = normalize(key);
348349
Validate.notEmpty(key);
349350
Validate.isFalse(key.equals("abs:"), "Absolute attribute key must have a name");
350351
cq.consumeWhitespace();

src/test/java/org/jsoup/select/SelectorTest.java

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import org.jsoup.nodes.TextNode;
1111
import org.jsoup.parser.Parser;
1212
import org.junit.jupiter.api.Test;
13+
import org.junit.jupiter.params.ParameterizedTest;
14+
import org.junit.jupiter.params.provider.ValueSource;
1315

1416
import java.util.List;
1517
import java.util.Locale;
@@ -1768,17 +1770,14 @@ public void testAncestorChain() {
17681770
assertSelectedIds(doc.select("div[data*='']"), "1", "2", "3");
17691771
}
17701772

1771-
@Test void parseExceptionOnEmptyAbsKey() {
1772-
// was previously firing at match time, not eval time
1773-
String q = "[abs:!=]";
1774-
boolean threw = false;
1775-
try {
1776-
Evaluator e = Selector.evaluatorOf(q);
1777-
} catch (Selector.SelectorParseException ex) {
1778-
threw = true;
1779-
assertEquals("Absolute attribute key must have a name", ex.getMessage());
1780-
}
1781-
assertTrue(threw);
1773+
@ParameterizedTest
1774+
@ValueSource(strings = {"[abs:!=]", "[ abs:^=]"})
1775+
void parseExceptionOnEmptyAbsKey(String query) {
1776+
Selector.SelectorParseException ex = assertThrows(
1777+
Selector.SelectorParseException.class,
1778+
() -> Selector.evaluatorOf(query)
1779+
);
1780+
assertEquals("Absolute attribute key must have a name", ex.getMessage());
17821781
}
17831782

17841783
@Test void parseExceptionOnEmptyKeyVal() {

0 commit comments

Comments
 (0)