source: josm/trunk/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/ChildOrParentSelectorTest.java@ 16006

Last change on this file since 16006 was 16006, checked in by Don-vip, 4 years ago

see #18140 - reorganization of data(_nodist), images(_nodist), styles(_nodist), IDE and native files in a more practical file tree.

  • Everything belonging to the jar is now in resources (data, images, styles)
  • Everything not belonging to the jar is now in nodist (data, images, styles)
  • Everything related to OS native functions is now in native (linux, macosx, windows)
  • Everything related to an IDE is now in ide (eclipse, netbeans)
  • Property svn:eol-style set to native
File size: 7.7 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.mappaint.mapcss;
3
4import static org.junit.Assert.assertEquals;
5import static org.junit.Assert.assertFalse;
6import static org.junit.Assert.assertTrue;
7
8import java.nio.file.Files;
9import java.nio.file.Paths;
10import java.util.Arrays;
11
12import org.junit.Before;
13import org.junit.Ignore;
14import org.junit.Rule;
15import org.junit.Test;
16import org.openstreetmap.josm.data.coor.LatLon;
17import org.openstreetmap.josm.data.osm.DataSet;
18import org.openstreetmap.josm.data.osm.Node;
19import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
20import org.openstreetmap.josm.data.osm.Relation;
21import org.openstreetmap.josm.data.osm.RelationMember;
22import org.openstreetmap.josm.data.osm.Way;
23import org.openstreetmap.josm.gui.mappaint.Environment;
24import org.openstreetmap.josm.gui.mappaint.MultiCascade;
25import org.openstreetmap.josm.gui.mappaint.mapcss.Selector.ChildOrParentSelector;
26import org.openstreetmap.josm.io.OsmReader;
27import org.openstreetmap.josm.testutils.JOSMTestRules;
28
29import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
30
31/**
32 * Unit tests of {@link ChildOrParentSelector}.
33 */
34public class ChildOrParentSelectorTest {
35
36 private DataSet ds;
37
38 /**
39 * Setup rule
40 */
41 @Rule
42 @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
43 public JOSMTestRules test = new JOSMTestRules().projection();
44
45 /**
46 * Setup test
47 */
48 @Before
49 public void setUp() {
50 ds = new DataSet();
51 }
52
53 Relation relation(int id) {
54 Relation r = new Relation(id, 1);
55 ds.addPrimitive(r);
56 return r;
57 }
58
59 Node node(int id) {
60 Node n = new Node(id, 1);
61 n.setCoor(LatLon.ZERO);
62 ds.addPrimitive(n);
63 return n;
64 }
65
66 Way way(int id) {
67 Way w = new Way(id, 1);
68 ds.addPrimitive(w);
69 return w;
70 }
71
72 ChildOrParentSelector parse(String css) {
73 MapCSSStyleSource source = new MapCSSStyleSource(css);
74 source.loadStyleSource();
75 assertEquals(1, source.rules.size());
76 return (ChildOrParentSelector) source.rules.get(0).selectors.get(0);
77 }
78
79 @Test
80 @Ignore
81 public void matches_1() {
82 String css = "relation >[role=\"my_role\"] node {}";
83 ChildOrParentSelector selector = parse(css);
84
85 Relation r = relation(1);
86 Node n = node(1);
87 r.addMember(new RelationMember("my_role", n));
88 Environment e = new Environment().withChild(n);
89
90 assertTrue(selector.matches(e));
91 }
92
93 @Test
94 @Ignore
95 public void matches_2() {
96 String css = "relation >[\"my_role\"] node {}";
97 ChildOrParentSelector selector = parse(css);
98
99 Relation r = relation(1);
100 Node n = node(1);
101 r.addMember(new RelationMember("my_role", n));
102 Environment e = new Environment().withChild(n);
103
104 assertTrue(selector.matches(e));
105 }
106
107 @Test
108 @Ignore
109 public void matches_3() {
110 String css = "relation >[!\"my_role\"] node {}";
111 ChildOrParentSelector selector = parse(css);
112
113 Relation r = relation(1);
114 Node n = node(1);
115 r.addMember(new RelationMember("my_role", n));
116 Environment e = new Environment().withChild(n);
117
118 assertFalse(selector.matches(e));
119 }
120
121 @Test
122 @Ignore
123 public void matches_4() {
124 String css = "way < relation {}";
125 ChildOrParentSelector selector = parse(css);
126 assertEquals(Selector.ChildOrParentSelectorType.PARENT, selector.type);
127
128 }
129
130 @Test
131 public void matches_5() {
132 String css = "way <[role != \"my_role\"] relation {text: index();}";
133 ChildOrParentSelector selector = parse(css);
134 assertEquals(Selector.ChildOrParentSelectorType.PARENT, selector.type);
135
136 Relation r = relation(1);
137 Way w1 = way(1);
138 w1.setNodes(Arrays.asList(node(11), node(12)));
139
140 Way w2 = way(2);
141 w2.setNodes(Arrays.asList(node(21), node(22)));
142
143 Way w3 = way(3);
144 w3.setNodes(Arrays.asList(node(31), node(32)));
145
146 r.addMember(new RelationMember("my_role", w1));
147 r.addMember(new RelationMember("my_role", w2));
148 r.addMember(new RelationMember("another role", w3));
149 r.addMember(new RelationMember("yet another role", w3));
150
151 Environment e = new Environment(r, new MultiCascade(), Environment.DEFAULT_LAYER, null);
152 assertTrue(selector.matches(e));
153
154 MapCSSStyleSource source = new MapCSSStyleSource(css);
155 source.loadStyleSource();
156 source.rules.get(0).declaration.execute(e);
157 assertEquals(Float.valueOf(3f), e.getCascade(Environment.DEFAULT_LAYER).get("text", null, Float.class));
158 }
159
160 @Test
161 public void matches_6() {
162 String css = "relation >[role != \"my_role\"] way {}";
163 ChildOrParentSelector selector = parse(css);
164
165 Relation r = relation(1);
166 Way w1 = way(1);
167 w1.setNodes(Arrays.asList(node(11), node(12)));
168
169 Way w2 = way(2);
170 w2.setNodes(Arrays.asList(node(21), node(22)));
171
172 Way w3 = way(3);
173 w3.setNodes(Arrays.asList(node(31), node(32)));
174
175 r.addMember(new RelationMember("my_role", w1));
176 r.addMember(new RelationMember("my_role", w2));
177 r.addMember(new RelationMember("another role", w3));
178
179 Environment e = new Environment(w1);
180 assertFalse(selector.matches(e));
181
182 e = new Environment(w2);
183 assertFalse(selector.matches(e));
184
185 e = new Environment(w3);
186 assertTrue(selector.matches(e));
187 }
188
189 /**
190 * Test inside/contains selectors (spatial test)
191 */
192 @Test
193 public void testContains() throws Exception {
194 ds = OsmReader.parseDataSet(Files.newInputStream(Paths.get("nodist/data/amenity-in-amenity.osm")), null);
195 ChildOrParentSelector css = parse("node[tag(\"amenity\") = parent_tag(\"amenity\")] ∈ *[amenity] {}");
196 assertFalse(css.matches(new Environment(ds.getPrimitiveById(123, OsmPrimitiveType.NODE))));
197 assertTrue(css.matches(new Environment(ds.getPrimitiveById(123, OsmPrimitiveType.WAY))));
198 assertTrue(css.matches(new Environment(ds.getPrimitiveById(123, OsmPrimitiveType.RELATION))));
199 css = parse("node[tag(\"amenity\") = parent_tag(\"amenity\")] ⊆ *[amenity] {}");
200 assertFalse(css.matches(new Environment(ds.getPrimitiveById(123, OsmPrimitiveType.NODE))));
201 assertTrue(css.matches(new Environment(ds.getPrimitiveById(123, OsmPrimitiveType.WAY))));
202 assertTrue(css.matches(new Environment(ds.getPrimitiveById(123, OsmPrimitiveType.RELATION))));
203 css = parse("node[tag(\"amenity\") = parent_tag(\"amenity\")] ⊈ *[amenity] {}");
204 assertTrue(css.matches(new Environment(ds.getPrimitiveById(123, OsmPrimitiveType.NODE))));
205 assertFalse(css.matches(new Environment(ds.getPrimitiveById(123, OsmPrimitiveType.WAY))));
206 assertFalse(css.matches(new Environment(ds.getPrimitiveById(123, OsmPrimitiveType.RELATION))));
207 css = parse("*[tag(\"amenity\") = parent_tag(\"amenity\")] ⊇ *[amenity] {}");
208 assertTrue(css.matches(new Environment(ds.getPrimitiveById(123, OsmPrimitiveType.NODE))));
209 assertTrue(css.matches(new Environment(ds.getPrimitiveById(123, OsmPrimitiveType.WAY))));
210 assertFalse(css.matches(new Environment(ds.getPrimitiveById(123, OsmPrimitiveType.RELATION))));
211 css = parse("*[tag(\"amenity\") = parent_tag(\"amenity\")] ⊉ *[amenity] {}");
212 assertFalse(css.matches(new Environment(ds.getPrimitiveById(123, OsmPrimitiveType.NODE))));
213 assertFalse(css.matches(new Environment(ds.getPrimitiveById(123, OsmPrimitiveType.WAY))));
214 assertTrue(css.matches(new Environment(ds.getPrimitiveById(123, OsmPrimitiveType.RELATION))));
215 }
216}
Note: See TracBrowser for help on using the repository browser.