/*
* Copyright (C) 2008 Steve Ratcliffe
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License 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.
*
*
* Author: Steve Ratcliffe
* Create date: 09-Dec-2008
*/
package uk.me.parabola.mkgmap.reader.osm;
import java.util.Arrays;
import java.util.Iterator;
import static org.junit.Assert.*;
import org.junit.Test;
public class TagsTest {
private static final String[][] SMALL_SET = {
{"highway", "primary"},
{"a", "1"},
{"b", "2"},
{"c", "3"},
{"d", "4"},
};
private static final String[][] LARGE_SET = {
{"jl1", "99"}, {"jl2", "99"}, {"jl3", "99"}, {"jl4", "99"},
{"kl1", "99"}, {"kl2", "99"}, {"kl3", "99"}, {"kl4", "99"},
{"ll1", "99"}, {"ll2", "99"}, {"ll3", "99"}, {"ll4", "99"},
{"ml1", "99"}, {"ml2", "99"}, {"ml3", "99"}, {"ml4", "99"},
{"nl1", "99"}, {"nl2", "99"}, {"nl3", "99"}, {"nl4", "99"},
{"jL1", "99"}, {"jL2", "99"}, {"jL3", "99"}, {"jL4", "99"},
{"kL1", "99"}, {"kL2", "99"}, {"kL3", "99"}, {"kL4", "99"},
{"LL1", "99"}, {"LL2", "99"}, {"LL3", "99"}, {"LL4", "99"},
{"mL1", "99"}, {"mL2", "99"}, {"mL3", "99"}, {"mL4", "99"},
{"nL1", "99"}, {"nL2", "99"}, {"nL3", "99"}, {"nL4", "99"},
};
/**
* Not needing a resize.
*/
@Test
public void testSmallSet() {
Tags tags = smallSetTags();
for (String[] ss : SMALL_SET) {
assertEquals(ss[1], tags.get(ss[0]));
}
}
/**
* Larger than the initial size, and so will need to be resized.
*/
@Test
public void testLargeSet() {
Tags tags = new Tags();
for (String[] ss : LARGE_SET) {
tags.put(ss[0], ss[1]);
}
for (String[] ss : LARGE_SET) {
assertEquals(ss[1], tags.get(ss[0]));
}
}
/**
* Test removing tags.
*/
@Test
public void testRemove() {
Tags tags = new Tags();
for (String[] ss : LARGE_SET)
tags.put(ss[0], ss[1]);
for (String[] ss : SMALL_SET)
tags.put(ss[0], ss[1]);
String[] toRemove = {"highway", "jl1", "d", "ml3", "nl1", "nL4",
"kl2", "kl3", "kl4", "kl5"};
for (String s : toRemove)
tags.remove(s);
for (String[] ss : LARGE_SET) {
if (Arrays.asList(toRemove).contains(ss[0]))
assertNull(tags.get(ss[0]));
else
assertEquals("find for key " + ss[0], ss[1], tags.get(ss[0]));
}
}
/**
* Create tags initialised with SMALL_SET.
*/
private Tags smallSetTags() {
Tags tags = new Tags();
for (String[] ts : SMALL_SET)
tags.put(ts[0], ts[1]);
return tags;
}
/**
* Create an iterator over the tags. This must be initialised to the
* values in SMALL_SET.
* @param tags The tags containing values from SMALL_SET.
* @return An iterator that has iterated over all the tags in set.
*/
private Iterator<String> iterateOverTags(Tags tags) {
Iterator<String> it = tags.iterator();
int n = SMALL_SET.length * 2;
for (int i = 0; i < n; i++) {
assertTrue(it.hasNext());
assertNotNull("result should be non null", it.next());
}
return it;
}
}