Skip to content

Commit 1bcb54b

Browse files
committed
Various fixes for the selector specifity calculation and same more test cases added
1 parent 795208e commit 1bcb54b

File tree

3 files changed

+80
-44
lines changed

3 files changed

+80
-44
lines changed

src/changes/changes.xml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,13 @@
77
</properties>
88

99
<body>
10-
<release version="1.0.06" date="xx.xx.2018" description="Initial fork based on CSSParser">
10+
<release version="1.1.0" date="xx.xx.2018" description="Bugfixes">
11+
<action type="fix" dev="rbri">
12+
Various fixes for the selector specifity calculation and same more test cases added.
13+
</action>
14+
</release>
15+
16+
<release version="1.0.0" date="25.03.2018" description="Initial fork based on CSSParser">
1117
</release>
1218
</body>
1319
</document>

src/main/java/com/gargoylesoftware/css/parser/selector/SelectorSpecificity.java

Lines changed: 7 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,7 @@
1616

1717
import java.io.Serializable;
1818

19-
import com.gargoylesoftware.css.parser.condition.AttributeCondition;
20-
import com.gargoylesoftware.css.parser.condition.BeginHyphenAttributeCondition;
2119
import com.gargoylesoftware.css.parser.condition.Condition;
22-
import com.gargoylesoftware.css.parser.condition.OneOfAttributeCondition;
23-
import com.gargoylesoftware.css.parser.condition.PrefixAttributeCondition;
24-
import com.gargoylesoftware.css.parser.condition.SubstringAttributeCondition;
25-
import com.gargoylesoftware.css.parser.condition.SuffixAttributeCondition;
2620

2721
/**
2822
* Calculates a selector's specificity.
@@ -117,55 +111,25 @@ private void readSelectorSpecificity(final Condition condition) {
117111
fieldC_++;
118112
return;
119113
case ATTRIBUTE_CONDITION:
120-
if ("id".equalsIgnoreCase(((AttributeCondition) condition).getLocalName())) {
121-
fieldB_++;
122-
}
123-
else {
124-
fieldC_++;
125-
}
114+
fieldC_++;
126115
return;
127116
case SUBSTRING_ATTRIBUTE_CONDITION:
128-
if ("id".equalsIgnoreCase(((SubstringAttributeCondition) condition).getLocalName())) {
129-
fieldB_++;
130-
}
131-
else {
132-
fieldC_++;
133-
}
117+
fieldC_++;
134118
return;
135119
case SUFFIX_ATTRIBUTE_CONDITION:
136-
if ("id".equalsIgnoreCase(((SuffixAttributeCondition) condition).getLocalName())) {
137-
fieldB_++;
138-
}
139-
else {
140-
fieldC_++;
141-
}
120+
fieldC_++;
142121
return;
143122
case PREFIX_ATTRIBUTE_CONDITION:
144-
if ("id".equalsIgnoreCase(((PrefixAttributeCondition) condition).getLocalName())) {
145-
fieldB_++;
146-
}
147-
else {
148-
fieldC_++;
149-
}
123+
fieldC_++;
150124
return;
151125
case BEGIN_HYPHEN_ATTRIBUTE_CONDITION:
152-
if ("id".equalsIgnoreCase(((BeginHyphenAttributeCondition) condition).getLocalName())) {
153-
fieldB_++;
154-
}
155-
else {
156-
fieldC_++;
157-
}
126+
fieldC_++;
158127
return;
159128
case ONE_OF_ATTRIBUTE_CONDITION:
160-
if ("id".equalsIgnoreCase(((OneOfAttributeCondition) condition).getLocalName())) {
161-
fieldB_++;
162-
}
163-
else {
164-
fieldC_++;
165-
}
129+
fieldC_++;
166130
return;
167131
case PSEUDO_CLASS_CONDITION:
168-
fieldD_++;
132+
fieldC_++;
169133
return;
170134
case LANG_CONDITION:
171135
fieldC_++;

src/test/java/com/gargoylesoftware/css/parser/selector/SelectorSpecificityTest.java

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import static org.junit.Assert.assertEquals;
1818
import static org.junit.Assert.assertTrue;
19+
import static org.junit.Assert.assertFalse;
1920

2021
import java.io.Reader;
2122
import java.io.StringReader;
@@ -29,6 +30,7 @@
2930
* Tests for {@link SelectorSpecificity}.
3031
*
3132
* @author Marc Guillemot
33+
* @author Ronald Brill
3234
*/
3335
public class SelectorSpecificityTest {
3436

@@ -92,6 +94,38 @@ public void selectorSpecifityLangCondition() throws Exception {
9294
selectorSpecifity("li:lang(en)", "0,0,1,1");
9395
}
9496

97+
/**
98+
* @throws Exception if the test fails
99+
*/
100+
@Test
101+
public void selectorSpecifityPseudo() throws Exception {
102+
selectorSpecifity("#id div:hover > div", "0,1,1,2");
103+
}
104+
105+
/**
106+
* @throws Exception if the test fails
107+
*/
108+
@Test
109+
public void selectorSpecifityCondition() throws Exception {
110+
selectorSpecifity("a[target=_blank]", "0,0,1,1");
111+
selectorSpecifity("a[id=xy]", "0,0,1,1");
112+
113+
selectorSpecifity("a[target*='ank']", "0,0,1,1");
114+
selectorSpecifity("a[id*='xy']", "0,0,1,1");
115+
116+
selectorSpecifity("a[target$='ank']", "0,0,1,1");
117+
selectorSpecifity("a[id$='xy']", "0,0,1,1");
118+
119+
selectorSpecifity("a[target^='ank']", "0,0,1,1");
120+
selectorSpecifity("a[id^='xy']", "0,0,1,1");
121+
122+
selectorSpecifity("a[target~='ank']", "0,0,1,1");
123+
selectorSpecifity("a[id~='xy']", "0,0,1,1");
124+
125+
selectorSpecifity("a[target|='ank']", "0,0,1,1");
126+
selectorSpecifity("a[id|='xy']", "0,0,1,1");
127+
}
128+
95129
private SelectorSpecificity selectorSpecifity(final String selector, final String expectedSpecificity)
96130
throws Exception {
97131
final Reader r = new StringReader(selector);
@@ -102,4 +136,36 @@ private SelectorSpecificity selectorSpecifity(final String selector, final Strin
102136
assertEquals(expectedSpecificity, specificity.toString());
103137
return specificity;
104138
}
139+
140+
/**
141+
* @throws Exception if the test fails
142+
*/
143+
@Test
144+
public void hashCodeTest() throws Exception {
145+
final SelectorSpecificity specificy = selectorSpecifity("*", "0,0,0,0");
146+
assertTrue(specificy.hashCode() != 0);
147+
}
148+
149+
/**
150+
* @throws Exception if the test fails
151+
*/
152+
@Test
153+
public void equalsTest() throws Exception {
154+
final SelectorSpecificity specificy0 = selectorSpecifity("*", "0,0,0,0");
155+
assertFalse(specificy0.equals(null));
156+
assertFalse(specificy0.equals(""));
157+
assertTrue(specificy0.equals(specificy0));
158+
159+
final SelectorSpecificity spec0 = selectorSpecifity("*", "0,0,0,0");
160+
assertTrue(specificy0.equals(spec0));
161+
162+
final SelectorSpecificity specificy100 = selectorSpecifity("#x34y", "0,1,0,0");
163+
assertFalse(specificy0.equals(specificy100));
164+
165+
final SelectorSpecificity specificy11 = selectorSpecifity("h1 + *[rel=up]", "0,0,1,1");
166+
assertFalse(specificy0.equals(specificy11));
167+
168+
final SelectorSpecificity specificy1 = selectorSpecifity("li", "0,0,0,1");
169+
assertFalse(specificy0.equals(specificy1));
170+
}
105171
}

0 commit comments

Comments
 (0)