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, 12 months 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.