source: josm/trunk/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/ChildOrParentSelectorTest.groovy@ 14019

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

update to Groovy 2.5.0 and Eclipse Photon (4.8.0)

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