package se.kodapan.osm.parser.xml.instantiated;
import junit.framework.TestCase;
import se.kodapan.osm.domain.Node;
import se.kodapan.osm.domain.Relation;
import se.kodapan.osm.domain.RelationMembership;
import se.kodapan.osm.domain.Way;
import se.kodapan.osm.domain.root.PojoRoot;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.util.HashSet;
import java.util.Set;
/**
* @author kalle
* @since 2013-05-01 16:25
*/
public class TestInstantiatedOsmXmlParser extends TestCase {
public void testBadData() throws Exception {
InstantiatedOsmXmlParser parser = InstantiatedOsmXmlParser.newInstance();
try {
parser.parse(new StringReader("<foo>bar"));
fail("Should throw an exception due to bad input data!");
} catch (Exception e) {
// all good
}
}
public void testFjallbacka() throws Exception {
PojoRoot root = new PojoRoot();
InstantiatedOsmXmlParser parser = InstantiatedOsmXmlParser.newInstance();
parser.setRoot(root);
parser.parse(new InputStreamReader(getClass().getResourceAsStream("/fjallbacka.osm.xml"), "UTF8"));
assertEquals(36393, root.getNodes().size());
assertEquals(4103, root.getWays().size());
assertEquals(87, root.getRelations().size());
}
public void testMalmoe() throws Exception {
PojoRoot root = new PojoRoot();
InstantiatedOsmXmlParser parser = InstantiatedOsmXmlParser.newInstance();
parser.setRoot(root);
parser.parse(new InputStreamReader(getClass().getResourceAsStream("/malmoe.osm.xml"), "UTF8"));
Set<Way> ways = new HashSet<Way>();
for (Node node : root.getNodes().values()) {
ways.clear();
if (node.getWaysMemberships() != null) {
for (Way wayMember : node.getWaysMemberships()) {
if (!ways.add(wayMember)) {
fail("Multiple memberships of the same way!");
}
}
}
}
Set<Relation> relations = new HashSet<Relation>();
for (Node node : root.getNodes().values()) {
relations.clear();
if (node.getRelationMemberships() != null) {
for (RelationMembership membership : node.getRelationMemberships()) {
if (!relations.add(membership.getRelation())) {
fail("Multiple memberships of the same relation!");
}
}
}
}
for (Way way : root.getWays().values()) {
relations.clear();
if (way.getRelationMemberships() != null) {
for (RelationMembership membership : way.getRelationMemberships()) {
if (!relations.add(membership.getRelation())) {
fail("Multiple memberships of the same relation!");
}
}
}
}
for (Relation relation : root.getRelations().values()) {
relations.clear();
if (relation.getRelationMemberships() != null) {
for (RelationMembership membership : relation.getRelationMemberships()) {
if (!relations.add(membership.getRelation())) {
fail("Multiple memberships of the same relation!");
}
}
}
}
}
}