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

Last change on this file since 9585 was 9214, checked in by Don-vip, 8 years ago

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