/* (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; import static org.junit.Assert.*; import java.io.File; import java.io.IOException; import java.io.Serializable; import java.net.MalformedURLException; import java.net.URL; import java.util.Collections; import java.util.HashMap; import java.util.Map; import org.geotools.TestData; import org.geotools.data.DataUtilities; import org.geotools.data.FileDataStore; import org.geotools.data.csv.parse.CSVAttributesOnlyStrategy; import org.geotools.data.csv.parse.CSVLatLonStrategy; import org.geotools.data.csv.parse.CSVSpecifiedWKTStrategy; import org.geotools.data.csv.parse.CSVStrategy; import org.junit.Before; import org.junit.Test; public class CSVDataStoreFactoryTest { private CSVDataStoreFactory csvDataStoreFactory; private File file; private URL locationsResource; @Before public void setUp() throws Exception { csvDataStoreFactory = new CSVDataStoreFactory(); locationsResource = TestData.getResource(CSVDataStoreFactoryTest.class, "locations.csv"); assert locationsResource != null : "Could not find locations.csv resource"; file = DataUtilities.urlToFile(locationsResource); } @Test public void testBasicGetters() throws MalformedURLException { assertEquals("CSV", csvDataStoreFactory.getDisplayName()); assertEquals("Comma delimited text file", csvDataStoreFactory.getDescription()); assertTrue(csvDataStoreFactory.canProcess(locationsResource)); assertTrue(csvDataStoreFactory.getImplementationHints().isEmpty()); assertArrayEquals(new String[] { ".csv" }, csvDataStoreFactory.getFileExtensions()); assertNotNull("Invalid Parameter Info", csvDataStoreFactory.getParametersInfo()); } @Test public void testCreateDataStoreFileParams() throws Exception { Map<String, Serializable> fileParams = new HashMap<String, Serializable>(1); fileParams.put("file", file); FileDataStore dataStore = csvDataStoreFactory.createDataStore(fileParams); assertNotNull("Could not create datastore from file params", dataStore); } @Test public void testCreateDataStoreURLParams() throws Exception { Map<String, Serializable> urlParams = new HashMap<String, Serializable>(1); urlParams.put("url", locationsResource); FileDataStore dataStore = csvDataStoreFactory.createDataStore(urlParams); assertNotNull("Could not create datastore from url params", dataStore); } @Test public void testCreateDataStoreURL() throws MalformedURLException, IOException { FileDataStore dataStore = csvDataStoreFactory.createDataStore(locationsResource); assertNotNull("Failure creating data store", dataStore); } @Test public void testGetTypeName() throws IOException { FileDataStore dataStore = csvDataStoreFactory.createDataStore(locationsResource); String[] typeNames = dataStore.getTypeNames(); assertEquals("Invalid number of type names", 1, typeNames.length); assertEquals("Invalid type name", "locations", typeNames[0]); } @Test public void testCanProcessFileParams() { Map<String, Serializable> fileParams = new HashMap<String, Serializable>(1); fileParams.put("file", file); assertTrue("Did not process file params", csvDataStoreFactory.canProcess(fileParams)); } @Test public void testCanProcessURLParams() { Map<String, Serializable> urlParams = new HashMap<String, Serializable>(1); urlParams.put("url", locationsResource); assertTrue("Did not process url params", csvDataStoreFactory.canProcess(urlParams)); } @Test public void testInvalidParamsCreation() throws Exception { Map<String, Serializable> params = Collections.emptyMap(); try { csvDataStoreFactory.createDataStore(params); } catch (IllegalArgumentException e) { assertTrue(true); return; } catch (Exception e) { } fail("Did not throw illegal argument exception for null file"); } @Test public void testFileDoesNotExist() throws Exception { try { csvDataStoreFactory.createDataStoreFromFile(new File("/tmp/does-not-exist.csv")); } catch (IllegalArgumentException e) { assertTrue(true); return; } catch (Exception e) { } assertTrue("Did not throw illegal argument exception for non-existent file", false); } @Test public void testCSVStrategyDefault() throws Exception { CSVDataStore datastore = (CSVDataStore) csvDataStoreFactory.createDataStoreFromFile(file); CSVStrategy csvStrategy = datastore.getCSVStrategy(); assertEquals("Unexpected default csv strategy", CSVAttributesOnlyStrategy.class, csvStrategy.getClass()); } @Test public void testCSVStrategyGuess() throws Exception { Map<String, Serializable> params = new HashMap<String, Serializable>(); params.put("strategy", "guess"); params.put("file", file); CSVDataStore datastore = (CSVDataStore) csvDataStoreFactory.createDataStore(params); CSVStrategy csvStrategy = datastore.getCSVStrategy(); assertEquals("Unexpected strategy", CSVLatLonStrategy.class, csvStrategy.getClass()); } @Test public void testCSVStrategySpecifiedBadParams() throws Exception { Map<String, Serializable> params = new HashMap<String, Serializable>(); params.put("strategy", "specify"); params.put("file", file); try { csvDataStoreFactory.createDataStore(params); } catch (IllegalArgumentException e) { return; } fail("Expected illegal argument exception for missing latField and lngField"); } @Test public void testCSVStrategySpecified() throws Exception { Map<String, Serializable> params = new HashMap<String, Serializable>(); params.put("strategy", "specify"); params.put("file", file); params.put("latField", "foo"); params.put("lngField", "bar"); CSVDataStore datastore = (CSVDataStore) csvDataStoreFactory.createDataStore(params); CSVStrategy csvStrategy = datastore.getCSVStrategy(); assertEquals("Unexpected strategy", CSVLatLonStrategy.class, csvStrategy.getClass()); } @Test public void testCSVStrategyWKTMissingWktField() throws IOException { Map<String, Serializable> params = new HashMap<String, Serializable>(); params.put("strategy", "wkt"); params.put("file", file); try { csvDataStoreFactory.createDataStore(params); } catch (IllegalArgumentException e) { return; } fail("Expected illegal argument exception for missing wktField"); } @Test public void testCSVStrategyWKT() throws IOException { Map<String, Serializable> params = new HashMap<String, Serializable>(); params.put("strategy", "wkt"); params.put("wktField", "whatever"); params.put("file", file); CSVDataStore datastore = (CSVDataStore) csvDataStoreFactory.createDataStore(params); CSVStrategy csvStrategy = datastore.getCSVStrategy(); assertEquals("Unexpected strategy", CSVSpecifiedWKTStrategy.class, csvStrategy.getClass()); } @Test public void testNamespace() throws IOException { Map<String, Serializable> params = new HashMap<String, Serializable>(); String namespaceURI = "http://www.geotools.org/csv"; params.put("namespace", namespaceURI); params.put("wktField", "whatever"); params.put("file", file); CSVDataStore datastore = (CSVDataStore) csvDataStoreFactory.createDataStore(params); assertEquals(namespaceURI, datastore.getNamespaceURI()); assertEquals(namespaceURI, datastore.getTypeName().getNamespaceURI()); } }