Skip to content

Commit fabbc8b

Browse files
committed
::not is invalid
1 parent 60e1cdf commit fabbc8b

File tree

4 files changed

+38
-7
lines changed

4 files changed

+38
-7
lines changed

src/main/java/org/htmlunit/cssparser/parser/condition/NotPseudoClassCondition.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,25 +21,22 @@
2121
import org.htmlunit.cssparser.parser.selector.SelectorList;
2222

2323
/**
24-
* Not condition.
24+
* :not condition.
2525
*
2626
* @author Ronald Brill
2727
*/
2828
public class NotPseudoClassCondition extends AbstractLocatable implements Condition, Serializable {
2929

3030
private final SelectorList selectors_;
31-
private final boolean doubleColon_;
3231

3332
/**
3433
* Ctor.
3534
* @param selectors the selector list
3635
* @param locator the locator
37-
* @param doubleColon true if was prefixed by double colon
3836
*/
39-
public NotPseudoClassCondition(final SelectorList selectors, final Locator locator, final boolean doubleColon) {
37+
public NotPseudoClassCondition(final SelectorList selectors, final Locator locator) {
4038
selectors_ = selectors;
4139
setLocator(locator);
42-
doubleColon_ = doubleColon;
4340
}
4441

4542
@Override
@@ -72,6 +69,6 @@ public SelectorList getSelectors() {
7269

7370
@Override
7471
public String toString() {
75-
return (doubleColon_ ? "::" : ":") + "not(" + getValue() + ")";
72+
return ":not(" + getValue() + ")";
7673
}
7774
}

src/main/javacc/CSS3Parser.jj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1444,7 +1444,8 @@ Object pseudo(boolean pseudoElementFound) :
14441444
<RROUND>
14451445
{
14461446
if (pseudoElementFound) { throw toCSSParseException("duplicatePseudo", new String[] { function + selectorList + ")" }, locator); }
1447-
return new NotPseudoClassCondition(selectorList, locator, doubleColon);
1447+
if (doubleColon) { throw toCSSParseException("invalidPseudoColon", new String[] { ":" + function + selectorList + ")" }, locator); }
1448+
return new NotPseudoClassCondition(selectorList, locator);
14481449
}
14491450
)
14501451
|

src/test/java/org/htmlunit/cssparser/parser/CSS3ParserTest.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3247,6 +3247,37 @@ public void invalid_not() throws Exception {
32473247
// + " Was expecting one of: <S>, \")\".)");
32483248
}
32493249

3250+
/**
3251+
* @throws Exception if any error occurs
3252+
*/
3253+
@Test
3254+
public void syntaxErrorDoubleColon() throws Exception {
3255+
String selector = "::not(h2)";
3256+
3257+
final CSSOMParser parser = new CSSOMParser();
3258+
ErrorHandler errorHandler = new ErrorHandler();
3259+
parser.setErrorHandler(errorHandler);
3260+
3261+
parser.parseSelectors(selector);
3262+
3263+
assertEquals(1, errorHandler.getErrorCount());
3264+
assertEquals(0, errorHandler.getFatalErrorCount());
3265+
assertEquals(0, errorHandler.getWarningCount());
3266+
3267+
assertEquals("\"::not(h2)\" is not a valid selector.", errorHandler.getErrorMessage());
3268+
3269+
selector = "p::not(h4)";
3270+
errorHandler = new ErrorHandler();
3271+
parser.setErrorHandler(errorHandler);
3272+
parser.parseSelectors(selector);
3273+
3274+
assertEquals(1, errorHandler.getErrorCount());
3275+
assertEquals(0, errorHandler.getFatalErrorCount());
3276+
assertEquals(0, errorHandler.getWarningCount());
3277+
3278+
assertEquals("\"::not(h4)\" is not a valid selector.", errorHandler.getErrorMessage());
3279+
}
3280+
32503281
/**
32513282
* @throws Exception if any error occurs
32523283
*/

src/test/java/org/htmlunit/cssparser/parser/selector/SelectorSpecificityTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,8 @@ public void notTest() throws Exception {
210210
selectorSpecifity("div:not(.inner) p", "0,0,1,2");
211211
selectorSpecifity("div:not(.inner, #fakeId) p", "0,1,1,2");
212212
selectorSpecifity("a:not(#fakeId#fakeId#fakeID)", "0,3,0,1");
213+
214+
selectorSpecifity("#foo:not(#bar)", "0,2,0,0");
213215
}
214216

215217
/**

0 commit comments

Comments
 (0)