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

Last change on this file since 9214 was 9214, checked in by Don-vip, 5 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.