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

Last change on this file since 14142 was 14064, checked in by Don-vip, 6 years ago

see #16498 - convert last unit tests to Java

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