source: josm/trunk/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/ConditionTest.java@ 18037

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

fix #21064 - Add JUnit 5 extension for preferences (patch by taylor.smock)

  • Property svn:eol-style set to native
File size: 8.8 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.mappaint.mapcss;
3
4import static org.junit.jupiter.api.Assertions.assertEquals;
5import static org.junit.jupiter.api.Assertions.assertFalse;
6import static org.junit.jupiter.api.Assertions.assertTrue;
7
8import org.junit.jupiter.api.BeforeEach;
9import org.junit.jupiter.api.Test;
10import org.openstreetmap.josm.data.osm.OsmPrimitive;
11import org.openstreetmap.josm.data.osm.OsmUtils;
12import org.openstreetmap.josm.gui.mappaint.Environment;
13import org.openstreetmap.josm.gui.mappaint.mapcss.Condition.Context;
14import org.openstreetmap.josm.gui.mappaint.mapcss.Condition.TagCondition;
15import org.openstreetmap.josm.gui.mappaint.mapcss.ConditionFactory.Op;
16import org.openstreetmap.josm.gui.mappaint.mapcss.ConditionFactory.SimpleKeyValueCondition;
17import org.openstreetmap.josm.testutils.annotations.BasicPreferences;
18
19/**
20 * This test universally tests all {@link Condition}s.
21 * @author Michael Zangl
22 */
23// We need prefs for nodes
24@BasicPreferences
25class ConditionTest {
26 private OsmPrimitive node0;
27 private OsmPrimitive node1;
28 private OsmPrimitive node2;
29 private OsmPrimitive node3;
30 private OsmPrimitive node4;
31
32 /**
33 * Set up some useful test data.
34 */
35 @BeforeEach
36 public void setUp() {
37 node0 = OsmUtils.createPrimitive("n");
38 node1 = OsmUtils.createPrimitive("n k1=v1 k2=v1 f1=0.2 r1=ababx c1=xya one=a;b");
39 node2 = OsmUtils.createPrimitive("n k1=v1 k2=v1a f1=0.8 r1=abxabxab c1=xy one=a;;x");
40 node3 = OsmUtils.createPrimitive("n k1=v1 f1=-100 c1=axy one=x;y;z");
41 node4 = OsmUtils.createPrimitive("n k1=v2a k2=v3 f1=x r1=abab c1=axya one=x;a;y");
42 }
43
44 /**
45 * Test {@link Op#EQ}.
46 */
47 @Test
48 void testKeyValueEq() {
49 Condition op = ConditionFactory.createKeyValueCondition("k1", "v1", Op.EQ, Context.PRIMITIVE, false);
50 assertFalse(op.applies(genEnv(node0)));
51 assertTrue(op.applies(genEnv(node1)));
52 assertTrue(op.applies(genEnv(node2)));
53 assertTrue(op.applies(genEnv(node3)));
54 assertFalse(op.applies(genEnv(node4)));
55
56 assertTrue(op instanceof SimpleKeyValueCondition);
57 assertEquals("[k1=v1]", op.toString());
58 assertEquals("k1", ((TagCondition) op).asTag(null).getKey());
59 assertEquals("v1", ((TagCondition) op).asTag(null).getValue());
60 }
61
62 /**
63 * Test {@link Op#EQ} and interpretation as key
64 */
65 @Test
66 void testKeyValueEqAsKey() {
67 Condition op = ConditionFactory.createKeyValueCondition("k1", "k2", Op.EQ, Context.PRIMITIVE, true);
68 assertFalse(op.applies(genEnv(node0)));
69 assertTrue(op.applies(genEnv(node1)));
70 assertFalse(op.applies(genEnv(node2)));
71 assertFalse(op.applies(genEnv(node3)));
72 assertFalse(op.applies(genEnv(node4)));
73
74 assertEquals("k1", ((TagCondition) op).asTag(null).getKey());
75 assertEquals("k2", ((TagCondition) op).asTag(null).getValue());
76 }
77
78 /**
79 * Test {@link Op#NEQ}
80 */
81 @Test
82 void testKeyValueNeq() {
83 Condition op = ConditionFactory.createKeyValueCondition("k1", "v1", Op.NEQ, Context.PRIMITIVE, false);
84 assertTrue(op.applies(genEnv(node0)));
85 assertFalse(op.applies(genEnv(node1)));
86 assertFalse(op.applies(genEnv(node2)));
87 assertFalse(op.applies(genEnv(node3)));
88 assertTrue(op.applies(genEnv(node4)));
89 }
90
91 /**
92 * Test {@link Op#GREATER_OR_EQUAL}
93 */
94 @Test
95 void testKeyValueGreatherEq() {
96 Condition op = ConditionFactory.createKeyValueCondition("f1", "0.2", Op.GREATER_OR_EQUAL, Context.PRIMITIVE, false);
97 assertFalse(op.applies(genEnv(node0)));
98 assertTrue(op.applies(genEnv(node1)));
99 assertTrue(op.applies(genEnv(node2)));
100 assertFalse(op.applies(genEnv(node3)));
101 assertFalse(op.applies(genEnv(node4)));
102 }
103
104 /**
105 * Test {@link Op#GREATER}
106 */
107 @Test
108 void testKeyValueGreather() {
109 Condition op = ConditionFactory.createKeyValueCondition("f1", "0.2", Op.GREATER, Context.PRIMITIVE, false);
110 assertFalse(op.applies(genEnv(node0)));
111 assertFalse(op.applies(genEnv(node1)));
112 assertTrue(op.applies(genEnv(node2)));
113 assertFalse(op.applies(genEnv(node3)));
114 assertFalse(op.applies(genEnv(node4)));
115 }
116
117 /**
118 * Test {@link Op#LESS_OR_EQUAL}
119 */
120 @Test
121 void testKeyValueLessEq() {
122 Condition op = ConditionFactory.createKeyValueCondition("f1", "0.2", Op.LESS_OR_EQUAL, Context.PRIMITIVE, false);
123 assertFalse(op.applies(genEnv(node0)));
124 assertTrue(op.applies(genEnv(node1)));
125 assertFalse(op.applies(genEnv(node2)));
126 assertTrue(op.applies(genEnv(node3)));
127 assertFalse(op.applies(genEnv(node4)));
128 }
129
130 /**
131 * Test {@link Op#LESS}
132 */
133 @Test
134 void testKeyValueLess() {
135 Condition op = ConditionFactory.createKeyValueCondition("f1", "0.2", Op.LESS, Context.PRIMITIVE, false);
136 assertFalse(op.applies(genEnv(node0)));
137 assertFalse(op.applies(genEnv(node1)));
138 assertFalse(op.applies(genEnv(node2)));
139 assertTrue(op.applies(genEnv(node3)));
140 assertFalse(op.applies(genEnv(node4)));
141 }
142
143 /**
144 * Test {@link Op#REGEX}
145 */
146 @Test
147 void testKeyValueRegex() {
148 Condition op = ConditionFactory.createKeyValueCondition("r1", "(ab){2}", Op.REGEX, Context.PRIMITIVE, false);
149 assertFalse(op.applies(genEnv(node0)));
150 assertTrue(op.applies(genEnv(node1)));
151 assertFalse(op.applies(genEnv(node2)));
152 assertFalse(op.applies(genEnv(node3)));
153 assertTrue(op.applies(genEnv(node4)));
154 }
155
156 /**
157 * Test {@link Op#NREGEX}
158 */
159 @Test
160 void testKeyValueNregex() {
161 Condition op = ConditionFactory.createKeyValueCondition("r1", "(ab){2}", Op.NREGEX, Context.PRIMITIVE, false);
162 assertTrue(op.applies(genEnv(node0)));
163 assertFalse(op.applies(genEnv(node1)));
164 assertTrue(op.applies(genEnv(node2)));
165 assertTrue(op.applies(genEnv(node3)));
166 assertFalse(op.applies(genEnv(node4)));
167 }
168
169 /**
170 * Test {@link Op#ONE_OF}
171 */
172 @Test
173 void testKeyValueOneOf() {
174 Condition op = ConditionFactory.createKeyValueCondition("one", "a", Op.ONE_OF, Context.PRIMITIVE, false);
175 assertFalse(op.applies(genEnv(node0)));
176 assertTrue(op.applies(genEnv(node1)));
177 assertTrue(op.applies(genEnv(node2)));
178 assertFalse(op.applies(genEnv(node3)));
179 assertTrue(op.applies(genEnv(node4)));
180 }
181
182 /**
183 * Test {@link Op#BEGINS_WITH}
184 */
185 @Test
186 void testKeyValueBeginsWith() {
187 Condition op = ConditionFactory.createKeyValueCondition("c1", "xy", Op.BEGINS_WITH, Context.PRIMITIVE, false);
188 assertFalse(op.applies(genEnv(node0)));
189 assertTrue(op.applies(genEnv(node1)));
190 assertTrue(op.applies(genEnv(node2)));
191 assertFalse(op.applies(genEnv(node3)));
192 assertFalse(op.applies(genEnv(node4)));
193 }
194
195 /**
196 * Test {@link Op#ENDS_WITH}
197 */
198 @Test
199 void testKeyValueEndsWith() {
200 Condition op = ConditionFactory.createKeyValueCondition("c1", "xy", Op.ENDS_WITH, Context.PRIMITIVE, false);
201 assertFalse(op.applies(genEnv(node0)));
202 assertFalse(op.applies(genEnv(node1)));
203 assertTrue(op.applies(genEnv(node2)));
204 assertTrue(op.applies(genEnv(node3)));
205 assertFalse(op.applies(genEnv(node4)));
206 }
207
208 /**
209 * Test {@link Op#CONTAINS}
210 */
211 @Test
212 void testKeyValueContains() {
213 Condition op = ConditionFactory.createKeyValueCondition("c1", "xy", Op.CONTAINS, Context.PRIMITIVE, false);
214 assertFalse(op.applies(genEnv(node0)));
215 assertTrue(op.applies(genEnv(node1)));
216 assertTrue(op.applies(genEnv(node2)));
217 assertTrue(op.applies(genEnv(node3)));
218 assertTrue(op.applies(genEnv(node4)));
219 }
220
221 /**
222 * Test of {@link ConditionFactory#createRegexpKeyRegexpValueCondition(String, String, Op)}
223 */
224 @Test
225 void testRegexpKeyValueRegexpCondition() {
226 Condition op = ConditionFactory.createRegexpKeyRegexpValueCondition("^k", "\\da", Op.REGEX);
227 assertFalse(op.applies(genEnv(node0)));
228 assertFalse(op.applies(genEnv(node1)));
229 assertTrue(op.applies(genEnv(node2)));
230 assertFalse(op.applies(genEnv(node3)));
231 assertTrue(op.applies(genEnv(node4)));
232
233 Condition notOp = ConditionFactory.createRegexpKeyRegexpValueCondition("^k", "\\da", Op.NREGEX);
234 assertTrue(notOp.applies(genEnv(node0)));
235 assertTrue(notOp.applies(genEnv(node1)));
236 assertFalse(notOp.applies(genEnv(node2)));
237 assertTrue(notOp.applies(genEnv(node3)));
238 assertFalse(notOp.applies(genEnv(node4)));
239 }
240
241 private Environment genEnv(OsmPrimitive primitive) {
242 return new Environment(primitive);
243 }
244}
Note: See TracBrowser for help on using the repository browser.