package org.mt4j.test.css;
import java.util.HashMap;
import java.util.List;
import junit.framework.TestCase;
import org.junit.Before;
import org.junit.Test;
import org.mt4j.components.css.parser.CSSParserConnection;
import org.mt4j.components.css.style.CSSSelector;
import org.mt4j.components.css.style.CSSStyle;
import org.mt4j.components.css.util.CSSKeywords.CSSSelectorType;
import org.mt4j.util.MTColor;
public class SelectorTest extends TestCase {
StartTestApp app = new StartTestApp();
CSSParserConnection pc;
List<CSSStyle> styles;
HashMap<CSSSelector, MTColor> hm = new HashMap<CSSSelector, MTColor>();
@Before
public void setUp() {
pc = new CSSParserConnection("junit/selectortest.css", app);
styles= pc.getCssh().getStyles();
hm.clear();
for (CSSStyle s: styles) {
hm.put(s.getSelector(), s.getBackgroundColor());
}
}
protected void tearDown() {
//app.destroy();
}
@Test
public void testSimpleSelectors() {
CSSSelector h1 = new CSSSelector("H1", CSSSelectorType.TYPE);
CSSSelector id = new CSSSelector("ID", CSSSelectorType.ID);
CSSSelector c0 = new CSSSelector("c0", CSSSelectorType.CLASS);
MTColor green = new MTColor(0,128,0,255);
MTColor red = new MTColor(255,0,0,255);
MTColor blue = new MTColor(0,0,255,255);
assertTrue(hm.get(h1).equals(red));
assertTrue(hm.get(id).equals(blue));
assertTrue(hm.get(c0).equals(green));
}
@Test
public void testMultipleSelectors() {
CSSSelector h2 = new CSSSelector("H2", CSSSelectorType.TYPE);
CSSSelector id3 = new CSSSelector("ID3", CSSSelectorType.ID);
CSSSelector c4 = new CSSSelector("c4", CSSSelectorType.CLASS);
MTColor black = new MTColor(0,0,0,255);
MTColor purple = new MTColor(128,0,128,255);
MTColor silver = new MTColor(192,192,192,255);
assertTrue(hm.get(h2).equals(black));
assertTrue(hm.get(id3).equals(purple));
assertTrue(hm.get(c4).equals(silver));
}
@Test
public void testUniversalSelector() {
CSSSelector star = new CSSSelector("*", CSSSelectorType.UNIVERSAL);
CSSSelector h5 = new CSSSelector("H5", CSSSelectorType.TYPE);
CSSSelector id5 = new CSSSelector("ID5", CSSSelectorType.ID);
CSSSelector c5 = new CSSSelector("c5", CSSSelectorType.CLASS);
MTColor olive = new MTColor(128,128,0,255);
MTColor white = new MTColor(255,255,255,255);
MTColor gray = new MTColor(128,128,128,255);
MTColor maroon = new MTColor(128,0,0,255);
assertTrue(hm.get(star).equals(olive));
assertTrue(hm.get(h5).equals(white));
assertTrue(hm.get(id5).equals(gray));
assertTrue(hm.get(c5).equals(maroon));
}
@Test
public void testCascadingSelectors () {
CSSSelector h6h6 = new CSSSelector("H6", CSSSelectorType.TYPE);
h6h6.setSecondary("H6");
h6h6.setSecondaryType(CSSSelectorType.TYPE);
CSSSelector h6c6 = new CSSSelector("H6", CSSSelectorType.TYPE);
h6c6.setSecondary("c6");
h6c6.setSecondaryType(CSSSelectorType.CLASS);
CSSSelector h6id6 = new CSSSelector("H6", CSSSelectorType.TYPE);
h6id6.setSecondary("ID6");
h6id6.setSecondaryType(CSSSelectorType.ID);
CSSSelector c6h6 = new CSSSelector("c6", CSSSelectorType.CLASS);
c6h6.setSecondary("H6");
c6h6.setSecondaryType(CSSSelectorType.TYPE);
CSSSelector c6c6 = new CSSSelector("c6", CSSSelectorType.CLASS);
c6c6.setSecondary("c6");
c6c6.setSecondaryType(CSSSelectorType.CLASS);
CSSSelector c6id6 = new CSSSelector("c6", CSSSelectorType.CLASS);
c6id6.setSecondary("ID6");
c6id6.setSecondaryType(CSSSelectorType.ID);
CSSSelector id6h6 = new CSSSelector("ID6", CSSSelectorType.ID);
id6h6.setSecondary("H6");
id6h6.setSecondaryType(CSSSelectorType.TYPE);
CSSSelector id6c6 = new CSSSelector("ID6", CSSSelectorType.ID);
id6c6.setSecondary("c6");
id6c6.setSecondaryType(CSSSelectorType.CLASS);
CSSSelector id6id6 = new CSSSelector("ID6", CSSSelectorType.ID);
id6id6.setSecondary("ID6");
id6id6.setSecondaryType(CSSSelectorType.ID);
CSSSelector h6id7 = new CSSSelector("H6", CSSSelectorType.TYPE);
h6id7.setSecondary("ID7");
h6id7.setSecondaryType(CSSSelectorType.ID);
CSSSelector listrong = new CSSSelector("LI", CSSSelectorType.TYPE);
listrong.setSecondary("STRONG");
listrong.setSecondaryType(CSSSelectorType.TYPE);
MTColor purple = new MTColor(128,0,128,255);
MTColor green = new MTColor(0,128,0,255);
MTColor red = new MTColor(255,0,0,255);
MTColor blue = new MTColor(0,0,255,255);
assertTrue(hm.get(h6h6).equals(red));
assertTrue(hm.get(h6c6).equals(blue));
assertTrue(hm.get(h6id6).equals(green));
assertTrue(hm.get(c6h6).equals(red));
assertTrue(hm.get(c6c6).equals(blue));
assertTrue(hm.get(c6id6).equals(green));
assertTrue(hm.get(id6h6).equals(red));
assertTrue(hm.get(id6c6).equals(blue));
assertTrue(hm.get(id6id6).equals(green));
assertTrue(hm.get(h6id7).equals(purple));
assertTrue(hm.get(listrong).equals(purple));
}
@Test
public void testChildSelectors() {
MTColor green = new MTColor(0,128,0,255);
MTColor red = new MTColor(255,0,0,255);
MTColor blue = new MTColor(0,0,255,255);
CSSSelector h7h8 = new CSSSelector("H7", CSSSelectorType.TYPE);
h7h8.setChild(new CSSSelector("H8", CSSSelectorType.TYPE));
CSSSelector h7id7c7 = new CSSSelector("H7", CSSSelectorType.TYPE);
CSSSelector child = new CSSSelector("ID7", CSSSelectorType.ID);
child.setSecondary("c7", CSSSelectorType.CLASS);
h7id7c7.setChild(child);
CSSSelector h7h8id7 = new CSSSelector("H7", CSSSelectorType.TYPE);
h7h8id7.setSecondary("H8", CSSSelectorType.TYPE);
h7h8id7.setChild(new CSSSelector("ID7", CSSSelectorType.ID));
h7h8id7.getChild().setSecondary("STRONG", CSSSelectorType.TYPE);
assertTrue(hm.get(h7h8).equals(red));
assertTrue(hm.get(h7id7c7).equals(blue));
assertTrue(hm.get(h7h8id7).equals(green));
}
}