/* Copyright (c) 2013 Boundless and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Distribution License v1.0 * which accompanies this distribution, and is available at * https://www.eclipse.org/org/documents/edl-v10.html * * Contributors: * Victor Olaya (Boundless) - initial implementation */ package org.locationtech.geogig.osm.internal; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.junit.Test; import org.locationtech.geogig.osm.cli.commands.OSMMap; import org.locationtech.geogig.osm.internal.MappingRule.DefaultField; import org.locationtech.geogig.storage.FieldType; import org.opengis.feature.simple.SimpleFeatureType; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.gson.Gson; import com.google.gson.GsonBuilder; public class MappingTest { @Test public void TestDuplicatedFieldName() { Map<String, AttributeDefinition> fields = Maps.newHashMap(); Map<String, List<String>> filters = Maps.newHashMap(); Map<String, List<String>> filtersExclude = Maps.newHashMap(); fields.put("lit", new AttributeDefinition("name", FieldType.STRING)); fields.put("geom", new AttributeDefinition("name", FieldType.POINT)); filters.put("highway", new ArrayList<String>()); try { MappingRule mappingRule = new MappingRule("mapped", filters, filtersExclude, fields, null); fail(); } catch (Exception e) { assertTrue(e.getMessage().startsWith("Duplicated")); assertTrue(e.getMessage().endsWith("name")); } } @Test public void TestJsonSerialization() { Map<String, AttributeDefinition> fields = Maps.newHashMap(); Map<String, List<String>> filters = Maps.newHashMap(); Map<String, List<String>> exclude = Maps.newHashMap(); List<DefaultField> defaultFields = Lists.newArrayList(); filters.put("highway", Lists.newArrayList("bus_stop")); exclude.put("public_transport", Lists.newArrayList("platform")); defaultFields.add(DefaultField.timestamp); defaultFields.add(DefaultField.changeset); fields.put("geom", new AttributeDefinition("geom", FieldType.POINT)); fields.put("name", new AttributeDefinition("name_alias", FieldType.STRING)); MappingRule mappingRule = new MappingRule("busstops", filters, exclude, fields, defaultFields); List<MappingRule> mappingRules = Lists.newArrayList(); mappingRules.add(mappingRule); Mapping mapping = new Mapping(mappingRules); GsonBuilder gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation(); Gson gson = gsonBuilder.create(); String s = gson.toJson(mapping); System.out.println(s); Mapping unmarshalledMapping = gson.fromJson(s, Mapping.class); assertEquals(mapping, unmarshalledMapping); } @Test public void TestLoadingFromFile() { String mappingFilename = OSMMap.class.getResource("mapping.json").getFile(); File mappingFile = new File(mappingFilename); Mapping mapping = Mapping.fromFile(mappingFile.getAbsolutePath()); List<MappingRule> rules = mapping.getRules(); assertEquals(1, rules.size()); MappingRule rule = rules.get(0); SimpleFeatureType ft = rule.getFeatureType(); assertEquals("id", ft.getDescriptor(0).getLocalName()); assertEquals("lit", ft.getDescriptor(1).getLocalName()); assertEquals("geom", ft.getDescriptor(2).getLocalName()); assertEquals("nodes", ft.getDescriptor(3).getLocalName()); } }