Relax validator to support `[^]` any attribute prefix
This discovered functionality previously worked.
Relates to #2079
diff --git a/src/main/java/org/jsoup/select/Evaluator.java b/src/main/java/org/jsoup/select/Evaluator.java
index 2448969..9e0b622 100644
--- a/src/main/java/org/jsoup/select/Evaluator.java
+++ b/src/main/java/org/jsoup/select/Evaluator.java
@@ -191,7 +191,7 @@
private final String keyPrefix;
public AttributeStarting(String keyPrefix) {
- Validate.notEmpty(keyPrefix);
+ Validate.notNull(keyPrefix); // OK to be empty - will find elements with any attributes
this.keyPrefix = lowerCase(keyPrefix);
}
diff --git a/src/test/java/org/jsoup/select/SelectorTest.java b/src/test/java/org/jsoup/select/SelectorTest.java
index fd5740e..3ac0d62 100644
--- a/src/test/java/org/jsoup/select/SelectorTest.java
+++ b/src/test/java/org/jsoup/select/SelectorTest.java
@@ -1230,4 +1230,17 @@
Elements els = doc.select(q);
assertEquals(3, els.size());
}
+
+ @Test public void emptyAttributePrefix() {
+ // https://github.com/jhy/jsoup/issues/2079
+ // Discovered feature: [^] should find elements with any attribute (any prefix)
+ String html = "<p one>One<p one two>Two<p>Three";
+ Document doc = Jsoup.parse(html);
+
+ Elements els = doc.select("[^]");
+ assertSelectedOwnText(els, "One", "Two");
+
+ Elements emptyAttr = doc.select("p:not([^])");
+ assertSelectedOwnText(emptyAttr, "Three");
+ }
}