Skip to content

Commit 5853326

Browse files
committed
fix a nasty hack in the code to access the second element from the stack - this hack was broken during the switch from Stack to Deque (see #45)
1 parent d565ee8 commit 5853326

File tree

2 files changed

+25
-4
lines changed

2 files changed

+25
-4
lines changed

src/main/java/org/htmlunit/cssparser/parser/CSSOMParser.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,8 @@
1717
import java.io.IOException;
1818
import java.io.StringReader;
1919
import java.util.ArrayDeque;
20-
import java.util.ArrayList;
2120
import java.util.Deque;
22-
import java.util.List;
21+
import java.util.Iterator;
2322

2423
import org.htmlunit.cssparser.dom.AbstractCSSRuleImpl;
2524
import org.htmlunit.cssparser.dom.CSSCharsetRuleImpl;
@@ -423,8 +422,9 @@ public void property(final String name, final LexicalUnit value, final boolean i
423422

424423
private AbstractCSSRuleImpl getParentRule() {
425424
if (!nodeStack_.isEmpty() && nodeStack_.size() > 1) {
426-
final List<Object> nodesStack = new ArrayList<>(nodeStack_);
427-
final Object node = nodesStack.get(nodesStack.size() - 2);
425+
final Iterator<Object> iter = nodeStack_.iterator();
426+
iter.next(); // skip first
427+
final Object node = iter.next();
428428
if (node instanceof AbstractCSSRuleImpl) {
429429
return (AbstractCSSRuleImpl) node;
430430
}

src/test/java/org/htmlunit/cssparser/dom/CSSMediaRuleImplTest.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,19 @@ public void getCssText() throws Exception {
4545
assertEquals("@media print {\n body { font-size: 10pt; }\n}", mediaRule.getCssText());
4646
}
4747

48+
/**
49+
* @throws Exception if any error occurs
50+
*/
51+
@Test
52+
public void getParentRule() throws Exception {
53+
final CSSOMParser parser = new CSSOMParser();
54+
final InputSource source = new InputSource(new StringReader("@media print { body { font-size: 10pt } }"));
55+
final CSSStyleSheetImpl ss = parser.parseStyleSheet(source, null);
56+
57+
final CSSMediaRuleImpl mediaRule = (CSSMediaRuleImpl) ss.getCssRules().getRules().get(0);
58+
assertEquals(mediaRule, mediaRule.getCssRules().getRules().get(0).getParentRule());
59+
}
60+
4861
/**
4962
* @throws Exception if any error occurs
5063
*/
@@ -62,17 +75,25 @@ public void insertRule() throws Exception {
6275
mediaRule.insertRule(".testStyle { height: 43px; }", 0);
6376
assertEquals("*.testStyle { height: 43px; }", mediaRule.getCssRules().getRules().get(0).getCssText());
6477
assertEquals("*.testStyle { height: 42px; }", mediaRule.getCssRules().getRules().get(1).getCssText());
78+
assertEquals("@media print {\n *.testStyle { height: 43px; }\n *.testStyle { height: 42px; }\n}",
79+
mediaRule.getCssRules().getRules().get(0).getParentRule().getCssText());
6580

6681
mediaRule.insertRule(".testStyle { height: 44px; }", 2);
6782
assertEquals("*.testStyle { height: 43px; }", mediaRule.getCssRules().getRules().get(0).getCssText());
6883
assertEquals("*.testStyle { height: 42px; }", mediaRule.getCssRules().getRules().get(1).getCssText());
6984
assertEquals("*.testStyle { height: 44px; }", mediaRule.getCssRules().getRules().get(2).getCssText());
85+
assertEquals("@media print {\n *.testStyle { height: 43px; }"
86+
+ "\n *.testStyle { height: 42px; }\n *.testStyle { height: 44px; }\n}",
87+
mediaRule.getCssRules().getRules().get(0).getParentRule().getCssText());
7088

7189
mediaRule.insertRule(".testStyle { height: 45px; }", 2);
7290
assertEquals("*.testStyle { height: 43px; }", mediaRule.getCssRules().getRules().get(0).getCssText());
7391
assertEquals("*.testStyle { height: 42px; }", mediaRule.getCssRules().getRules().get(1).getCssText());
7492
assertEquals("*.testStyle { height: 45px; }", mediaRule.getCssRules().getRules().get(2).getCssText());
7593
assertEquals("*.testStyle { height: 44px; }", mediaRule.getCssRules().getRules().get(3).getCssText());
94+
assertEquals("@media print {\n *.testStyle { height: 43px; }\n *.testStyle { height: 42px; }"
95+
+ "\n *.testStyle { height: 45px; }\n *.testStyle { height: 44px; }\n}",
96+
mediaRule.getCssRules().getRules().get(0).getParentRule().getCssText());
7697
}
7798

7899
/**

0 commit comments

Comments
 (0)