package org.geotools.data.efeature.tests.unit;
import java.io.Serializable;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import junit.framework.Test;
import junit.framework.TestSuite;
import junit.textui.TestRunner;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.geotools.data.DataAccessFactory.Param;
import org.geotools.data.efeature.EFeatureDataStore;
import org.geotools.data.efeature.EFeatureDataStoreFactory;
import org.geotools.data.efeature.EFeatureFactoryFinder;
import org.geotools.data.efeature.tests.impl.EFeatureTestsContextHelper;
import org.geotools.feature.NameImpl;
import org.opengis.feature.simple.SimpleFeatureType;
import org.opengis.feature.type.Name;
/**
*
* @author kengu - 4. mai 2011
*
*
* @source $URL$
*/
public class EFeatureDataStoreTest extends AbstractResourceTest {
/**
* Static logger for all {@link EFeatureDataStoreTest} instances
*/
//private static final Logger LOGGER = Logging.getLogger(EFeatureDataStoreTest.class);
private static final Set<String> TYPE_NAMES = new HashSet<String>(
Arrays.asList("efeature.EFeatureData","efeature.EFeatureCompatibleData"));
private ParameterInfoTestData eParams;
private EFeatureTestsContextHelper eContextHelper;
private EFeatureDataStoreFactory eStoreFactory;
// -----------------------------------------------------
// Tests
// -----------------------------------------------------
@org.junit.Test
public void testParametersInfo() {
Param[] params = eStoreFactory.getParametersInfo();
assertParams(eParams.getParametersInfo(),params);
}
@org.junit.Test
public void testDataStore() {
Map<String,Serializable> params = eParams.createParams(null, null);
assertFalse("Invalid parameters can be processed",eStoreFactory.canProcess(params));
params = eParams.createParams(eResourceURI.toString(), null);
assertTrue("Valid parameters can not be processed",eStoreFactory.canProcess(params));
try {
EFeatureDataStore eStore = eStoreFactory.createDataStore(params);
String[] typeNames = eStore.getTypeNames();
for(String it : typeNames) {
assertTrue("EFeatureDataStore does not contain type ["+it+"]",TYPE_NAMES.contains(it));
Name name = new NameImpl(it);
SimpleFeatureType eTypeI = eStore.eStructure().eGetFeatureInfo(it).getFeatureType();
SimpleFeatureType eTypeN = eStore.getSchema(name);
assertTrue("SimpleFeatureTypes are not same instance (Name)",eTypeI==eTypeN);
SimpleFeatureType eTypeL = eStore.getSchema(it);
assertTrue("SimpleFeatureTypes are not same instance (Local)",eTypeI==eTypeL);
}
eStore.dispose();
} catch (Exception e) {
fail(e);
}
}
// -----------------------------------------------------
// TestCase setup
// -----------------------------------------------------
/**
* Main for test runner.
*/
public static void main(String[] args) {
TestRunner.run(suite());
}
/**
* Constructor with test name.
*/
public EFeatureDataStoreTest(String name) {
super(name, "xmi", true, false);
}
/**
* Required suite builder.
* @return A test suite for this unit test.
*/
public static Test suite() {
return new TestSuite(EFeatureDataStoreTest.class);
}
@Override
protected void doSetUp() throws Exception {
//
// Initialize commonly used objects
//
eParams = new ParameterInfoTestData();
eContextHelper = new EFeatureTestsContextHelper(true, false);
eStoreFactory = EFeatureFactoryFinder.getDataStoreFactory();
}
// -----------------------------------------------------
// AbstractStandaloneTest implementation
// -----------------------------------------------------
@Override
protected ResourceSet createResourceSet() {
return eContextHelper.getResourceSet();
}
@Override
protected EditingDomain createEditingDomain(ResourceSet rset) {
return eContextHelper.getEditingDomain();
}
// -----------------------------------------------------
// Helper methods
// -----------------------------------------------------
// -----------------------------------------------------
// Test assertion methods
// -----------------------------------------------------
private static void assertParams(Param[] test, Param[] actual)
{
assertEquals("Parameter count mismatch",test.length,actual.length);
Map<String,Param> params = new HashMap<String, Param>(test.length);
for(Param it : actual) {
params.put(it.key, it);
}
for(Param it : test) {
assertTrue("Test parameter " + it.key + " not found.",params.containsKey(it.key));
}
}
}