// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.plugins.graphview.core.access;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import org.openstreetmap.josm.TestUtils;
import org.openstreetmap.josm.plugins.graphview.core.data.MapBasedTagGroup;
import org.openstreetmap.josm.plugins.graphview.core.data.Tag;
import org.openstreetmap.josm.plugins.graphview.core.data.TagGroup;
public class AccessRulesetReaderTest {
@Test
public void testReadAccessRuleset_valid_classes() throws IOException {
InputStream is = new FileInputStream(TestUtils.getTestDataRoot()+"accessRuleset_valid.xml");
AccessRuleset ruleset = AccessRulesetReader.readAccessRuleset(is);
assertNotNull(ruleset);
assertEquals("vehicle", ruleset.getAccessHierarchyAncestors("vehicle").get(0));
assertEquals("motor_vehicle", ruleset.getAccessHierarchyAncestors("motor_vehicle").get(0));
assertEquals("vehicle", ruleset.getAccessHierarchyAncestors("motor_vehicle").get(1));
assertEquals("bus", ruleset.getAccessHierarchyAncestors("bus").get(0));
assertEquals("motor_vehicle", ruleset.getAccessHierarchyAncestors("bus").get(1));
assertEquals("vehicle", ruleset.getAccessHierarchyAncestors("bus").get(2));
assertEquals("bicycle", ruleset.getAccessHierarchyAncestors("bicycle").get(0));
assertEquals("vehicle", ruleset.getAccessHierarchyAncestors("bicycle").get(1));
assertFalse(ruleset.getAccessHierarchyAncestors("bus").contains("bicycle"));
assertSame(ruleset.getAccessHierarchyAncestors("boat").size(), 0);
}
@Test
public void testReadAccessRuleset_valid_basetags() throws IOException {
InputStream is = new FileInputStream(TestUtils.getTestDataRoot()+"accessRuleset_valid.xml");
AccessRuleset ruleset = AccessRulesetReader.readAccessRuleset(is);
assertNotNull(ruleset);
assertSame(2, ruleset.getBaseTags().size());
assertTrue(ruleset.getBaseTags().contains(new Tag("highway", "residential")));
assertTrue(ruleset.getBaseTags().contains(new Tag("highway", "cycleway")));
assertFalse(ruleset.getBaseTags().contains(new Tag("building", "residential")));
assertFalse(ruleset.getBaseTags().contains(new Tag("highway", "stop")));
}
@Test
public void testReadAccessRuleset_valid_implications() throws IOException {
InputStream is = new FileInputStream(TestUtils.getTestDataRoot()+"accessRuleset_valid.xml");
AccessRuleset ruleset = AccessRulesetReader.readAccessRuleset(is);
assertNotNull(ruleset);
List<Implication> implications = ruleset.getImplications();
assertSame(3, implications.size());
TagGroup[] tagGroups = new TagGroup[4];
tagGroups[0] = createTagGroup(new Tag("highway", "cycleway"));
tagGroups[1] = createTagGroup(new Tag("highway", "steps"));
tagGroups[2] = createTagGroup(new Tag("highway", "steps"), new Tag("escalator", "yes"));
tagGroups[3] = createTagGroup(new Tag("disused", "yes"), new Tag("construction", "no"));
for (Implication implication : implications) {
for (int i = 0; i < tagGroups.length; i++) {
tagGroups[i] = implication.apply(tagGroups[i]);
}
}
assertSame(2, tagGroups[0].size());
assertTrue(tagGroups[0].contains(new Tag("bicycle", "designated")));
assertSame(2, tagGroups[1].size());
assertTrue(tagGroups[1].contains(new Tag("normal_steps", "yes")));
assertSame(2, tagGroups[2].size());
assertFalse(tagGroups[2].contains(new Tag("normal_steps", "yes")));
assertSame(3, tagGroups[3].size());
assertTrue(tagGroups[3].contains(new Tag("usable", "no")));
}
private static TagGroup createTagGroup(Tag... tags) {
Map<String, String> tagMap = new HashMap<>();
for (Tag tag : tags) {
tagMap.put(tag.key, tag.value);
}
return new MapBasedTagGroup(tagMap);
}
}