package org.geotools.data.efeature.tests.unit; import java.io.Serializable; import java.util.Map; import java.util.logging.Level; import junit.framework.Test; import junit.framework.TestSuite; import junit.textui.TestRunner; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.edit.domain.EditingDomain; import org.geotools.data.efeature.EFeature; import org.geotools.data.efeature.EFeatureDataStore; import org.geotools.data.efeature.EFeatureDataStoreFactory; import org.geotools.data.efeature.EFeatureFactoryFinder; import org.geotools.data.efeature.EFeatureReader; import org.geotools.data.efeature.ESimpleFeature; import org.geotools.data.efeature.tests.EFeatureCompatibleData; import org.geotools.data.efeature.tests.EFeatureData; import org.geotools.data.efeature.tests.impl.EFeatureTestsContextHelper; import org.opengis.feature.simple.SimpleFeature; /** * * @author kengu - 4. mai 2011 * */ public class EFeatureReaderTest extends AbstractResourceTest { private static boolean binary = false; private int eFeatureCount = 200; private EFeatureTestData eData; private Object[][] eTypeData = new Object[][]{ {"efeature.EFeatureCompatibleData",EFeatureCompatibleData.class,0}, {"efeature.EFeatureData",EFeatureData.class,0}}; private ParameterInfoTestData eParams; private EFeatureDataStoreFactory eStoreFactory; private EFeatureTestsContextHelper eContextHelper; // ----------------------------------------------------- // Tests // ----------------------------------------------------- @org.junit.Test public void testFeatureReader() { EFeatureDataStore eStore; Map<String,Serializable> params; try { params = eParams.createParams(eResourceURI.toString(), null); eStore = eStoreFactory.createDataStore(params); dTime(); for(Object[] it : eTypeData) { // // Assert structure // String eType = it[0].toString(); Class<?> cls = (Class<?>)it[1]; int count = 0; int icount = Integer.valueOf(it[2].toString()); EFeatureReader eReader = eStore.getFeatureReader(eType); while(eReader.hasNext()) { SimpleFeature feature = eReader.next(); assertTrue("Feature[" + count + "]: does not implement ESimpleFeature",feature instanceof ESimpleFeature); EObject eObject = ((ESimpleFeature)feature).eObject(); assertNotNull("Feature[" + count + "]: is not contained by an EObject",eObject); assertTrue("EObject[" + count + "]: returned by ESimpleFeature is not an " + eType + " instance",cls.isInstance(eObject)); EFeature eFeature = ((ESimpleFeature)feature).eFeature(); assertNotNull("Feature[" + count + "]: is not contained by an EFeature",eFeature); //assertTrue("EFeature data and Feature are not identical",feature==eFeature.getData()); Object n = feature.getAttribute("attribute"); assertNotNull("Attribute[" + count + "]: data is null",n); Object g = feature.getAttribute("geometry"); assertNotNull("Geometry[" + count + "]: data is null",g); count++; } assertEquals("Feature count mismatch",icount,count); trace("Count["+eType+"]: " + count,TIME_DELTA); // // Assert validation optimization // //eReader.reset(); //while(eReader.hasNext()); } eStore.dispose(); } catch (Exception e) { LOGGER.log(Level.SEVERE, e.getMessage(), e); fail(e); } } // ----------------------------------------------------- // TestCase setup // ----------------------------------------------------- /** * Main for test runner. */ public static void main(String[] args) { TestRunner.run(suite()); } /** * Constructor with test name. */ public EFeatureReaderTest(String name) { super(name, binary ? "bin" : "xmi", true, false); } /** * Required suite builder. * @return A test suite for this unit test. */ public static Test suite() { return new TestSuite(EFeatureReaderTest.class); } @Override protected void doSetUp() throws Exception { // // Initialize commonly used objects // eParams = new ParameterInfoTestData(); eContextHelper = new EFeatureTestsContextHelper(true, binary); eStoreFactory = EFeatureFactoryFinder.getDataStoreFactory(); // // Update test data // int fcount = eFeatureCount/2; int gcount = eFeatureCount - fcount; eTypeData[0][2] = fcount; eTypeData[1][2] = gcount; } // ----------------------------------------------------- // AbstractStandaloneTest implementation // ----------------------------------------------------- @Override protected ResourceSet createResourceSet() { return eContextHelper.getResourceSet(); } @Override protected EditingDomain createEditingDomain(ResourceSet rset) { return eContextHelper.getEditingDomain(); } @Override protected void createTestData(String name, Resource eResource) throws Exception { // // Create data used by all tests // eData = new EFeatureTestData(eResource); eData.random(10,(Integer)eTypeData[0][2],(Integer)eTypeData[1][2]); eData.save(); } // ----------------------------------------------------- // Helper methods // ----------------------------------------------------- // ----------------------------------------------------- // Test assertion methods // ----------------------------------------------------- }