Package org.locationtech.geogig.geotools.cli.porcelain

Source Code of org.locationtech.geogig.geotools.cli.porcelain.TestHelper

/* Copyright (c) 2013-2014 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:
* Gabriel Roldan (Boundless) - initial implementation
*/
package org.locationtech.geogig.geotools.cli.porcelain;

import static org.mockito.Matchers.anyMapOf;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;

import java.io.IOException;
import java.io.Serializable;

import org.geotools.data.AbstractDataStoreFactory;
import org.geotools.data.memory.MemoryDataStore;
import org.geotools.feature.simple.SimpleFeatureBuilder;
import org.geotools.feature.simple.SimpleFeatureTypeBuilder;
import org.geotools.referencing.CRS;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.feature.simple.SimpleFeatureType;

import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.geom.Point;

public class TestHelper {

    public static AbstractDataStoreFactory createTestFactory() throws Exception {

        SimpleFeatureTypeBuilder builder = new SimpleFeatureTypeBuilder();
        builder.setCRS(CRS.decode("EPSG:4326"));
        builder.add("geom", Point.class);
        builder.add("label", String.class);
        builder.setName("table1");

        SimpleFeatureType type = builder.buildFeatureType();

        SimpleFeatureTypeBuilder builder2 = new SimpleFeatureTypeBuilder();
        builder2.setCRS(CRS.decode("EPSG:4326"));
        builder2.add("geom", Point.class);
        builder2.add("name", String.class);
        builder2.setName("table2");

        SimpleFeatureType type2 = builder2.buildFeatureType();

        SimpleFeatureTypeBuilder builder3 = new SimpleFeatureTypeBuilder();
        builder3.setCRS(CRS.decode("EPSG:4326"));
        builder3.add("geom", Point.class);
        builder3.add("name", String.class);
        builder3.add("number", Long.class);
        builder3.setName("table3");

        SimpleFeatureTypeBuilder builder4 = new SimpleFeatureTypeBuilder();
        builder4.setCRS(CRS.decode("EPSG:4326"));
        builder4.add("geom", Point.class);
        builder4.add("number", Double.class);
        builder4.setName("table4");

        // A table with a shp-like structure
        SimpleFeatureTypeBuilder builderShp = new SimpleFeatureTypeBuilder();
        builderShp.setCRS(CRS.decode("EPSG:4326"));
        builderShp.add("the_geom", Point.class);
        builderShp.add("number", Double.class);
        builderShp.add("number2", Double.class);
        builderShp.setName("shpLikeTable");

        SimpleFeatureTypeBuilder builderShp2 = new SimpleFeatureTypeBuilder();
        builderShp2.setCRS(CRS.decode("EPSG:4326"));
        builderShp2.add("the_geom", Point.class);
        builderShp2.add("number", Double.class);
        builderShp2.add("number2", Integer.class);
        builderShp2.setName("shpLikeTable2");

        // A table with a geojson-like structure
        SimpleFeatureTypeBuilder builderGeoJson = new SimpleFeatureTypeBuilder();
        builderGeoJson.setCRS(CRS.decode("EPSG:4326"));
        builderGeoJson.add("number", Double.class);
        builderGeoJson.add("number2", Double.class);
        builderGeoJson.add("geom", Point.class);
        builderGeoJson.setName("GeoJsonLikeTable");

        SimpleFeatureTypeBuilder builderGeoJson2 = new SimpleFeatureTypeBuilder();
        builderGeoJson2.setCRS(CRS.decode("EPSG:23030"));
        builderGeoJson2.add("number", Double.class);
        builderGeoJson2.add("number2", Double.class);
        builderGeoJson2.add("geom", Point.class);
        builderGeoJson2.setName("GeoJsonLikeTable2");

        SimpleFeatureType type3 = builder3.buildFeatureType();

        SimpleFeatureType typeShp = builderShp.buildFeatureType();
        SimpleFeatureType typeShp2 = builderShp2.buildFeatureType();
        SimpleFeatureType typeGeoJson = builderGeoJson.buildFeatureType();
        SimpleFeatureType typeGeoJson2 = builderGeoJson2.buildFeatureType();

        GeometryFactory gf = new GeometryFactory();
        SimpleFeature f1 = SimpleFeatureBuilder.build(type,
                new Object[] { gf.createPoint(new Coordinate(5, 8)), "feature1" },
                "table1.feature1");
        SimpleFeature f2 = SimpleFeatureBuilder.build(type,
                new Object[] { gf.createPoint(new Coordinate(5, 4)), "feature2" },
                "table1.feature2");
        SimpleFeature f3 = SimpleFeatureBuilder.build(type2,
                new Object[] { gf.createPoint(new Coordinate(3, 2)), "feature3" },
                "table2.feature3");
        SimpleFeature f4 = SimpleFeatureBuilder.build(type3,
                new Object[] { gf.createPoint(new Coordinate(0, 5)), "feature4", 1000 },
                "table2.feature4");
        SimpleFeature f5 = SimpleFeatureBuilder.build(typeShp,
                new Object[] { gf.createPoint(new Coordinate(0, 6)), 2.2, 1000 }, "feature1");
        SimpleFeature f6 = SimpleFeatureBuilder.build(typeShp2,
                new Object[] { gf.createPoint(new Coordinate(0, 7)), 3.2, 1100.0 }, "feature1");
        SimpleFeature f7 = SimpleFeatureBuilder.build(typeGeoJson,
                new Object[] { 4.2, 1200, gf.createPoint(new Coordinate(0, 8)) }, "feature1");
        SimpleFeature f8 = SimpleFeatureBuilder.build(typeGeoJson2,
                new Object[] { 4.2, 1200, gf.createPoint(new Coordinate(0, 9)) }, "feature1");

        MemoryDataStore testDataStore = new MemoryDataStore();
        testDataStore.addFeature(f1);
        testDataStore.addFeature(f2);
        testDataStore.addFeature(f3);
        testDataStore.addFeature(f4);
        testDataStore.addFeature(f5);
        testDataStore.addFeature(f6);
        testDataStore.addFeature(f7);
        testDataStore.addFeature(f8);
        testDataStore.createSchema(builder4.buildFeatureType());

        final AbstractDataStoreFactory factory = mock(AbstractDataStoreFactory.class);
        when(factory.createDataStore(anyMapOf(String.class, Serializable.class))).thenReturn(
                testDataStore);
        when(factory.canProcess(anyMapOf(String.class, Serializable.class))).thenReturn(true);

        return factory;
    }

    public static AbstractDataStoreFactory createEmptyTestFactory() throws Exception {

        MemoryDataStore testDataStore = new MemoryDataStore();

        final AbstractDataStoreFactory factory = mock(AbstractDataStoreFactory.class);
        when(factory.createDataStore(anyMapOf(String.class, Serializable.class))).thenReturn(
                testDataStore);
        when(factory.canProcess(anyMapOf(String.class, Serializable.class))).thenReturn(true);

        return factory;
    }

    public static AbstractDataStoreFactory createNullTestFactory() throws Exception {

        final AbstractDataStoreFactory factory = mock(AbstractDataStoreFactory.class);
        when(factory.createDataStore(anyMapOf(String.class, Serializable.class))).thenReturn(null);
        when(factory.canProcess(anyMapOf(String.class, Serializable.class))).thenReturn(true);

        return factory;
    }

    public static AbstractDataStoreFactory createFactoryWithGetNamesException() throws Exception {

        MemoryDataStore testDataStore = mock(MemoryDataStore.class);
        when(testDataStore.getNames()).thenThrow(new IOException());
        when(testDataStore.getTypeNames()).thenThrow(new RuntimeException());
        when(testDataStore.getSchema(anyString())).thenThrow(new IOException());

        final AbstractDataStoreFactory factory = mock(AbstractDataStoreFactory.class);
        when(factory.createDataStore(anyMapOf(String.class, Serializable.class))).thenReturn(
                testDataStore);
        when(factory.canProcess(anyMapOf(String.class, Serializable.class))).thenReturn(true);

        return factory;
    }

    public static AbstractDataStoreFactory createFactoryWithGetFeatureSourceException()
            throws Exception {
        SimpleFeatureTypeBuilder builder = new SimpleFeatureTypeBuilder();
        builder.setCRS(CRS.decode("EPSG:4326"));
        builder.add("geom", Point.class);
        builder.add("label", String.class);
        builder.setName("table1");
        SimpleFeatureType type = builder.buildFeatureType();

        SimpleFeatureTypeBuilder builder2 = new SimpleFeatureTypeBuilder();
        builder2.setCRS(CRS.decode("EPSG:4326"));
        builder2.add("geom", Point.class);
        builder2.add("name", String.class);
        builder2.setName("table2");
        SimpleFeatureType type2 = builder2.buildFeatureType();

        GeometryFactory gf = new GeometryFactory();
        SimpleFeature f1 = SimpleFeatureBuilder.build(type,
                new Object[] { gf.createPoint(new Coordinate(5, 8)), "feature1" }, null);
        SimpleFeature f2 = SimpleFeatureBuilder.build(type,
                new Object[] { gf.createPoint(new Coordinate(5, 4)), "feature2" }, null);
        SimpleFeature f3 = SimpleFeatureBuilder.build(type2,
                new Object[] { gf.createPoint(new Coordinate(3, 2)), "feature3" }, null);

        MemoryDataStore testDataStore = new MemoryDataStore();
        testDataStore.addFeature(f1);
        testDataStore.addFeature(f2);
        testDataStore.addFeature(f3);

        MemoryDataStore spyDataStore = spy(testDataStore);

        when(spyDataStore.getFeatureSource("table1")).thenThrow(new IOException("Exception"));

        final AbstractDataStoreFactory factory = mock(AbstractDataStoreFactory.class);
        when(factory.createDataStore(anyMapOf(String.class, Serializable.class))).thenReturn(
                spyDataStore);
        when(factory.canProcess(anyMapOf(String.class, Serializable.class))).thenReturn(true);

        return factory;
    }
}
TOP

Related Classes of org.locationtech.geogig.geotools.cli.porcelain.TestHelper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.