package org.geotools.styling.css; import static org.junit.Assert.*; import org.geotools.styling.css.selector.Data; import org.geotools.styling.css.selector.Id; import org.geotools.styling.css.selector.Or; import org.geotools.styling.css.selector.PseudoClass; import org.geotools.styling.css.selector.ScaleRange; import org.geotools.styling.css.selector.Selector; import org.geotools.styling.css.selector.Specificity; import org.geotools.styling.css.selector.TypeName; import org.junit.Test; public class SpecificityTest { public static Selector ALL = Selector.ACCEPT; public static Selector ID = new Id("states.1"); public static Selector ID_COUPLE = new Id("states.1", "states.2"); public static Selector TYPENAME = new TypeName("topp:states"); public static Selector PSEUDO = PseudoClass.newPseudoClass("mark"); public static Selector PSEUDO_NTH = PseudoClass.newPseudoClass("mark", 1); public static Selector SCALE_MIN_10000 = new ScaleRange(10000, true, Double.POSITIVE_INFINITY, false); public static Selector PROPERTY = new Data("att > 10"); public static Selector PROPERTY_TWICE = new Data("att > 10 and att < 20"); public static Selector PROPERTY_TWO = new Data("att1 > 10 and att2 < 20"); public static Selector ENV = new Data("env('abc') = 10"); public static Selector VOLATILE = new Data("random() = 0.5"); private void assertSpecificity(int b, int c, int d, Selector selector) { assertEquals(new Specificity(b, c, d), selector.getSpecificity()); } @Test public void testAll() { assertSpecificity(0, 0, 0, ALL); } @Test public void testId() { assertSpecificity(1, 0, 0, ID); } @Test public void testId2() { assertSpecificity(2, 0, 0, ID_COUPLE); } @Test public void testTypename() { assertSpecificity(0, 0, 1, TYPENAME); } @Test public void testPseudo() { assertSpecificity(0, 1, 0, PSEUDO); } @Test public void testPseudoNth() { assertSpecificity(0, 2, 0, PSEUDO_NTH); } @Test public void testScaleMin10k() { assertSpecificity(0, 1, 0, SCALE_MIN_10000); } @Test public void testProperty() { assertSpecificity(0, 1, 0, PROPERTY); } @Test public void testPropertyTwice() { assertSpecificity(0, 1, 0, PROPERTY_TWICE); } @Test public void testTwoProperties() { assertSpecificity(0, 2, 0, PROPERTY_TWO); } @Test public void testEnvVariable() { assertSpecificity(0, 1, 0, ENV); } @Test public void testVolatile() { assertSpecificity(0, 1, 0, VOLATILE); } @Test public void testAnd() { assertSpecificity(0, 1, 0, Selector.and(ALL, PROPERTY)); assertSpecificity(0, 2, 0, Selector.and(ENV, PROPERTY)); assertSpecificity(1, 1, 0, Selector.and(ID, ENV)); assertSpecificity(1, 1, 1, Selector.and(ID, Selector.and(ENV, TYPENAME))); } @Test public void testOr() { assertSpecificity(0, 1, 0, new Or(ALL, PROPERTY)); assertSpecificity(0, 1, 0, new Or(ENV, PROPERTY)); assertSpecificity(1, 0, 0, new Or(ID, ENV)); assertSpecificity(1, 0, 0, new Or(ID, Selector.and(ENV, TYPENAME))); } }