/* * Copyright (C) 2013. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 or * version 2 as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. */ package uk.me.parabola.mkgmap.osmstyle.actions; import uk.me.parabola.mkgmap.reader.osm.Element; import uk.me.parabola.mkgmap.reader.osm.Way; import static uk.me.parabola.imgfmt.app.net.AccessTagsAndBits.*; import org.junit.Test; import static org.junit.Assert.*; public class AddAccessActionTest { private static final String ACCESSVAL = "no"; /** * If there are no substitutions, then the exact same string is * used. */ @Test public void testNoSub() { String value = "fred"; Action act = new AddAccessAction(value, false); Element el = stdElement(); act.perform(el); for (String accessTag : ACCESS_TAGS.keySet()) { assertSame("a not changed", value, el.getTag(accessTag)); } } /** * Simple test, substituting the whole string. */ @Test public void testBareSubst() { Action act = new AddAccessAction("${access}", false); Element el = stdElement(); act.perform(el); for (String accessTag : ACCESS_TAGS.keySet()) { assertEquals("subst access", ACCESSVAL, el.getTag(accessTag)); } } /** * If a substitution tag has no value then the value of the tag is not * changed by the action. */ @Test public void testNoValue() { Action act = new AddAccessAction("${noexist}", true); Element el = stdElement(); String val = "before"; el.addTag("mkgmap:bicycle", val); act.perform(el); assertSame("no substitution", val, el.getTag("mkgmap:bicycle")); } /** * If modify is set to false each single access tag should only be set * if it is not already set. */ @Test public void testNoOverwriteValue() { Action act = new AddAccessAction("${access}", false); Element el = stdElement(); el.addTag("mkgmap:bicycle", "yes"); act.perform(el); for (String accessTag : ACCESS_TAGS.keySet()) { if ("mkgmap:bicycle".equals(accessTag)) assertEquals("no overwrite", "yes", el.getTag(accessTag)); else assertEquals("no overwrite", "no", el.getTag(accessTag)); } } /** * If modify is set to true all access tags should be set * no matter if they are set before. */ @Test public void testOverwriteValue() { Action act = new AddAccessAction("${access}", true); Element el = stdElement(); el.addTag("mkgmap:bicycle", "yes"); act.perform(el); for (String accessTag : ACCESS_TAGS.keySet()) { assertEquals("no overwrite", "no", el.getTag(accessTag)); } } /** * The add/set commands now support alternatives just like the name command * has always done. * Several alternatives, but none match. */ @Test public void testNoMatchingAlternatives() { AddAccessAction act = new AddAccessAction("${notset}", false); act.add("${hello}"); act.add("${world}"); Element el = stdElement(); act.perform(el); for (String accessTag : ACCESS_TAGS.keySet()) assertNull(accessTag+"a not set", el.getTag(accessTag)); } /** * Several alternatives and the first one matches. */ @Test public void testFirstAlternativeMatches() { AddAccessAction act = new AddAccessAction("${access}", false); act.add("${hello}"); act.add("${world}"); Element el = stdElement(); el.addTag("hello", "hello"); act.perform(el); for (String accessTag : ACCESS_TAGS.keySet()) assertEquals(accessTag+" is set", ACCESSVAL, el.getTag(accessTag)); } /** * Several alternatives and the second one matches. */ @Test public void testSecondAlternativeMatches() { AddAccessAction act = new AddAccessAction("${hello}", false); act.add("${access}"); act.add("${world}"); Element el = stdElement(); el.addTag("world", "world"); act.perform(el); for (String accessTag : ACCESS_TAGS.keySet()) assertEquals(accessTag+" is set", ACCESSVAL, el.getTag(accessTag)); } private Element stdElement() { Element el1 = new Way(1); el1.addTag("access", ACCESSVAL); el1.addTag("bicycle", "yes"); el1.addTag("foot", "private"); el1.addTag("highway", "track"); return el1; } }