/* (c) 2014 - 2015 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geotools.data.csv.parse; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.NoSuchElementException; import org.geotools.data.csv.CSVFileState; import org.junit.Test; import org.opengis.feature.simple.SimpleFeature; import org.opengis.feature.simple.SimpleFeatureType; import org.opengis.feature.type.AttributeDescriptor; import org.opengis.feature.type.GeometryDescriptor; public class CSVAttributesOnlyStrategyTest { @Test public void testBuildFeatureType() { String input = CSVTestStrategySupport.buildInputString("quux,morx\n"); CSVFileState fileState = new CSVFileState(input, "foo"); CSVStrategy strategy = new CSVAttributesOnlyStrategy(fileState); SimpleFeatureType featureType = strategy.getFeatureType(); assertEquals("Invalid attribute count", 2, featureType.getAttributeCount()); assertEquals("Invalid featuretype name", "foo", featureType.getName().getLocalPart()); assertEquals("Invalid name", "foo", featureType.getTypeName()); List<AttributeDescriptor> attrs = featureType.getAttributeDescriptors(); assertEquals("Invalid number of attributes", 2, attrs.size()); List<String> attrNames = new ArrayList<String>(2); for (AttributeDescriptor attr : attrs) { if (!(attr instanceof GeometryDescriptor)) { attrNames.add(attr.getName().getLocalPart()); } } Collections.sort(attrNames); assertEquals("Invalid property descriptor", "morx", attrNames.get(0)); assertEquals("Invalid property descriptor", "quux", attrNames.get(1)); } @Test public void testCreateFeature() throws IOException { String input = CSVTestStrategySupport.buildInputString("fleem,zoo,morx", "3,4,car", "8,9.9,cdr"); CSVFileState fileState = new CSVFileState(input, "bar"); CSVStrategy strategy = new CSVAttributesOnlyStrategy(fileState); SimpleFeatureType featureType = strategy.getFeatureType(); assertEquals("Invalid attribute count", 3, featureType.getAttributeCount()); List<AttributeDescriptor> attrs = featureType.getAttributeDescriptors(); CSVTestStrategySupport.verifyType(attrs.get(0), Integer.class); CSVTestStrategySupport.verifyType(attrs.get(1), Double.class); CSVTestStrategySupport.verifyType(attrs.get(2), String.class); CSVIterator iterator = strategy.iterator(); assertTrue("next value not read", iterator.hasNext()); SimpleFeature feature = iterator.next(); assertEquals("Invalid feature property", 3, feature.getAttribute("fleem")); assertEquals("Invalid feature property", 4.0, Double.parseDouble(feature.getAttribute("zoo").toString()), 0.1); assertEquals("Invalid feature property", "car", feature.getAttribute("morx")); assertTrue("next value not read", iterator.hasNext()); feature = iterator.next(); assertEquals("Invalid feature property", 8, feature.getAttribute("fleem")); assertEquals("Invalid feature property", 9.9, Double.parseDouble(feature.getAttribute("zoo").toString()), 0.1); assertEquals("Invalid feature property", "cdr", feature.getAttribute("morx")); assertFalse("extra next value", iterator.hasNext()); try { iterator.next(); fail("NoSuchElementException should have been thrown"); } catch (NoSuchElementException e) { assertTrue(true); } } @Test public void testCreateNoGeometry() throws IOException { String input = CSVTestStrategySupport.buildInputString("blub", "fubar"); CSVFileState fileState = new CSVFileState(input, "zul"); CSVStrategy strategy = new CSVAttributesOnlyStrategy(fileState); CSVIterator iterator = strategy.iterator(); assertTrue("next value not read", iterator.hasNext()); SimpleFeature feature = iterator.next(); Object defaultGeometry = feature.getDefaultGeometry(); assertNull("Unexpected geometry", defaultGeometry); } }