// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.tools; import java.util.Collections; import java.util.HashMap; import java.util.Map; import org.junit.Assert; import org.junit.Rule; import org.junit.Test; import org.openstreetmap.josm.testutils.JOSMTestRules; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Unit tests of {@link TextTagParser} class. */ public class TextTagParserTest { /** * Some of this depends on preferences. */ @Rule @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD") public JOSMTestRules test = new JOSMTestRules().preferences(); /** * Test of {@link TextTagParser#unescape} method. */ @Test public void testUnescape() { String s, s1; s = "\"2 3 4\""; s1 = "2 3 4"; Assert.assertEquals(s1, TextTagParser.unescape(s)); s = "\"2 \\\"3\\\" 4\""; s1 = "2 \"3\" 4"; Assert.assertEquals(s1, TextTagParser.unescape(s)); s = "\"2 3 ===4===\""; s1 = "2 3 ===4==="; Assert.assertEquals(s1, TextTagParser.unescape(s)); s = "\"2 3 \\\\\\\\===4===\""; s1 = "2 3 \\\\===4==="; Assert.assertEquals(s1, TextTagParser.unescape(s)); } /** * Test of {@link TextTagParser#readTagsFromText} method with tabs and new lines. */ @Test public void testTNformat() { String txt = " a \t 1 \n\n\n b\t2 \n c \t the value with \"quotes\""; Map<String, String> correctTags = new HashMap<String, String>() { { put("a", "1"); put("b", "2"); put("c", "the value with \"quotes\""); } }; Map<String, String> tags = TextTagParser.readTagsFromText(txt); Assert.assertEquals(correctTags, tags); } /** * Test of {@link TextTagParser#readTagsFromText} method with quotes. */ @Test public void testEQformat() { String txt = "key1=value key2=\"long value\" tag3=\"hotel \\\"Quote\\\"\""; Map<String, String> correctTags = new HashMap<String, String>() { { put("key1", "value"); put("key2", "long value"); put("tag3", "hotel \"Quote\""); } }; Map<String, String> tags = TextTagParser.readTagsFromText(txt); Assert.assertEquals(correctTags, tags); } /** * Test of {@link TextTagParser#readTagsFromText} method with JSON. */ @Test public void testJSONformat() { String txt; Map<String, String> tags, correctTags; txt = "{ \"a\":\"1\", \"b\":\"2 3 4\" }"; correctTags = new HashMap<String, String>() { { put("a", "1"); put("b", "2 3 4"); } }; tags = TextTagParser.readTagsFromText(txt); Assert.assertEquals(correctTags, tags); txt = "\"a\" : \"1 1 1\", \"b2\" :\"2 \\\"3 qwe\\\" 4\""; correctTags = new HashMap<String, String>() { { put("a", "1 1 1"); put("b2", "2 \"3 qwe\" 4"); } }; tags = TextTagParser.readTagsFromText(txt); Assert.assertEquals(correctTags, tags); txt = " \"aыыы\" : \"val\\\"\\\"\\\"ue1\""; correctTags = new HashMap<String, String>() { { put("aыыы", "val\"\"\"ue1"); } }; tags = TextTagParser.readTagsFromText(txt); Assert.assertEquals(correctTags, tags); } /** * Test of {@link TextTagParser#readTagsFromText} method with free format. */ @Test public void testFreeformat() { String txt = "a 1 b=2 c=\"hello === \\\"\\\"world\""; Map<String, String> correctTags = new HashMap<String, String>() { { put("a", "1"); put("b", "2"); put("c", "hello === \"\"world"); } }; Map<String, String> tags = TextTagParser.readTagsFromText(txt); Assert.assertEquals(correctTags, tags); } /** * Test of {@link TextTagParser#readTagsFromText} method (error detection). */ @Test public void testErrorDetect() { String txt = "a=2 b=3 4"; Map<String, String> tags = TextTagParser.readTagsFromText(txt); Assert.assertEquals(Collections.EMPTY_MAP, tags); } /** * Test of {@link TextTagParser#readTagsFromText} method with tabs. */ @Test public void testTab() { Assert.assertEquals(TextTagParser.readTagsFromText("shop\tjewelry"), Collections.singletonMap("shop", "jewelry")); Assert.assertEquals(TextTagParser.readTagsFromText("!shop\tjewelry"), Collections.singletonMap("shop", "jewelry")); Assert.assertEquals(TextTagParser.readTagsFromText("!!!shop\tjewelry"), Collections.singletonMap("shop", "jewelry")); Assert.assertEquals(TextTagParser.readTagsFromText("shop\t\t\tjewelry"), Collections.singletonMap("shop", "jewelry")); } }