blob: 5c696cf867c7f4fd12a3d042a9007eca0f00ebfe [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2013 David Green and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* David Green - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.wikitext.parser.css;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringWriter;
import java.util.Iterator;
import java.util.List;
import junit.framework.TestCase;
/**
* @author David Green
*/
public class CssParserTest extends TestCase {
private CssParser parser;
@Override
protected void setUp() throws Exception {
super.setUp();
parser = new CssParser();
}
public void testDetectStyles() {
String css = "a: b and more; c: d ; e: fg; h i: j";
String[] expectedRuleNames = new String[] { "a", "c", "e", "i" };
String[] expectedRuleValues = new String[] { "b and more", "d", "fg", "j" };
Iterator<CssRule> ruleIterator = parser.createRuleIterator(css);
int count = 0;
while (ruleIterator.hasNext()) {
CssRule rule = ruleIterator.next();
++count;
assertEquals(expectedRuleNames[count - 1], rule.name);
assertEquals(expectedRuleValues[count - 1], rule.value);
}
assertEquals(expectedRuleNames.length, count);
}
public void testSimple() throws IOException {
Stylesheet stylesheet = parser.parse(readFully(CssParserTest.class.getSimpleName() + "_0.css"));
assertNotNull(stylesheet);
assertEquals(25, stylesheet.getBlocks().size());
}
private String readFully(String resourceName) throws IOException {
InputStream stream = CssParserTest.class.getResourceAsStream(resourceName);
try {
Reader reader = new InputStreamReader(stream);
int i;
StringWriter writer = new StringWriter();
while ((i = reader.read()) != -1) {
writer.write(i);
}
return writer.toString();
} finally {
stream.close();
}
}
public void testSimpleId() {
Selector selector = parser.parseSelector("#id");
assertNotNull(selector);
assertEquals(IdSelector.class, selector.getClass());
assertEquals("id", ((IdSelector) selector).getId());
}
public void testSimpleClass() {
Selector selector = parser.parseSelector(".className");
assertNotNull(selector);
assertEquals(CssClassSelector.class, selector.getClass());
assertEquals("className", ((CssClassSelector) selector).getCssClass());
}
public void testSimpleElement() {
Selector selector = parser.parseSelector("body");
assertNotNull(selector);
assertEquals(NameSelector.class, selector.getClass());
assertEquals("body", ((NameSelector) selector).getName());
}
public void testNumericElementName() {
Selector selector = parser.parseSelector("h1");
assertNotNull(selector);
assertEquals(NameSelector.class, selector.getClass());
assertEquals("h1", ((NameSelector) selector).getName());
}
public void testCompoundIdElement() {
Selector selector = parser.parseSelector("#foo a");
assertNotNull(selector);
assertEquals(CompositeSelector.class, selector.getClass());
CompositeSelector compositeSelector = (CompositeSelector) selector;
assertTrue(compositeSelector.isAnd());
assertEquals(2, compositeSelector.getComponents().size());
Selector firstComponent = compositeSelector.getComponents().get(0);
assertEquals(DescendantSelector.class, firstComponent.getClass());
Selector ancestorSelector = ((DescendantSelector) firstComponent).getAncestorSelector();
assertEquals(IdSelector.class, ancestorSelector.getClass());
assertEquals("foo", ((IdSelector) ancestorSelector).getId());
Selector secondComponent = compositeSelector.getComponents().get(1);
assertEquals(NameSelector.class, secondComponent.getClass());
assertEquals("a", ((NameSelector) secondComponent).getName());
}
public void testCompoundIdElement2() {
Selector selector = parser.parseSelector("#foo, a");
assertNotNull(selector);
assertEquals(CompositeSelector.class, selector.getClass());
CompositeSelector compositeSelector = (CompositeSelector) selector;
assertFalse(compositeSelector.isAnd());
assertEquals(2, compositeSelector.getComponents().size());
Selector firstComponent = compositeSelector.getComponents().get(0);
assertEquals(IdSelector.class, firstComponent.getClass());
assertEquals("foo", ((IdSelector) firstComponent).getId());
Selector secondComponent = compositeSelector.getComponents().get(1);
assertEquals(NameSelector.class, secondComponent.getClass());
assertEquals("a", ((NameSelector) secondComponent).getName());
}
public void testCompoundElementWithJoin() {
Selector selector = parser.parseSelector("table tr");
assertNotNull(selector);
assertEquals(CompositeSelector.class, selector.getClass());
CompositeSelector compositeSelector = (CompositeSelector) selector;
assertTrue(compositeSelector.isAnd());
assertEquals(2, compositeSelector.getComponents().size());
Selector firstComponent = compositeSelector.getComponents().get(0);
assertEquals(DescendantSelector.class, firstComponent.getClass());
Selector ancestorSelector = ((DescendantSelector) firstComponent).getAncestorSelector();
assertEquals(NameSelector.class, ancestorSelector.getClass());
assertEquals("table", ((NameSelector) ancestorSelector).getName());
Selector secondComponent = compositeSelector.getComponents().get(1);
assertEquals(NameSelector.class, secondComponent.getClass());
assertEquals("tr", ((NameSelector) secondComponent).getName());
}
public void testCompoundElementUsingDot() {
Selector selector = parser.parseSelector("table.summaryTable");
assertNotNull(selector);
assertEquals(CompositeSelector.class, selector.getClass());
CompositeSelector compositeSelector = (CompositeSelector) selector;
assertTrue(compositeSelector.isAnd());
assertEquals(2, compositeSelector.getComponents().size());
Selector firstComponent = compositeSelector.getComponents().get(0);
assertEquals(NameSelector.class, firstComponent.getClass());
assertEquals("table", ((NameSelector) firstComponent).getName());
Selector secondComponent = compositeSelector.getComponents().get(1);
assertEquals(CssClassSelector.class, secondComponent.getClass());
assertEquals("summaryTable", ((CssClassSelector) secondComponent).getCssClass());
}
public void testCompoundElementUsingDotAndJoin() {
Selector selector = parser.parseSelector("table.summaryTable tr.a1");
assertNotNull(selector);
assertEquals(CompositeSelector.class, selector.getClass());
CompositeSelector compositeSelector = (CompositeSelector) selector;
assertTrue(compositeSelector.isAnd());
assertEquals(2, compositeSelector.getComponents().size());
}
public void testComments() {
Stylesheet stylesheet = parser.parse("tr { /* font-size: 115%; */ font-size: 100%; } /* foo { sdf: sdf; } */");
List<Block> blocks = stylesheet.getBlocks();
assertEquals(1, blocks.size());
Block block = blocks.get(0);
List<CssRule> rules = block.getRules();
assertEquals(1, rules.size());
CssRule rule = rules.get(0);
assertEquals("font-size", rule.name);
assertEquals("100%", rule.value);
}
}