Package org.locationtech.udig.validation.test

Source Code of org.locationtech.udig.validation.test.FeatureValidationTest

/* uDig - User Friendly Desktop Internet GIS client
* http://udig.refractions.net
* (C) 2006, Refractions Research Inc.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* (http://www.eclipse.org/legal/epl-v10.html), and the Refractions BSD
* License v1.0 (http://udig.refractions.net/files/bsd3-v10.html).
*/
package org.locationtech.udig.validation.test;

import static org.junit.Assert.assertEquals;

import java.awt.Dimension;

import org.locationtech.udig.catalog.IGeoResource;
import org.locationtech.udig.project.ILayer;
import org.locationtech.udig.project.command.AbstractCommand;
import org.locationtech.udig.project.internal.Map;
import org.locationtech.udig.project.tests.support.MapTests;
import org.locationtech.udig.ui.tests.support.UDIGTestUtil;
import org.locationtech.udig.validation.ValidateGeometry;
import org.locationtech.udig.validation.ValidateLineMustBeASinglePart;
import org.locationtech.udig.validation.ValidateLineNoSelfIntersect;
import org.locationtech.udig.validation.ValidateLineNoSelfOverlapping;
import org.locationtech.udig.validation.ValidateNullZero;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.swt.widgets.Display;
import org.geotools.data.DataUtilities;
import org.geotools.feature.simple.SimpleFeatureBuilder;
import org.geotools.referencing.crs.DefaultEngineeringCRS;
import org.junit.Ignore;
import org.junit.Test;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.feature.simple.SimpleFeatureType;
import org.opengis.filter.Id;

import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.geom.LineString;

public class FeatureValidationTest {

    /*
     * Test method for 'org.locationtech.udig.validation.ValidateGeometry.op(Display, Object,
     * IProgressMonitor)'
     */
    @Ignore
    @Test
    public void testGeometryOp() throws Exception {
        SimpleFeature[] features = UDIGTestUtil.createDefaultTestFeatures("someType", 5); //$NON-NLS-1$
        Geometry geometry = (Geometry) features[0].getDefaultGeometry();
    geometry.getCoordinates()[0].x = 2;
        //features[0].setDefaultGeometry(null);
        IGeoResource resource = MapTests.createGeoResource(features, true);
        Map map = MapTests.createNonDynamicMapAndRenderer(resource, new Dimension(500,512));
        ValidateGeometry isValidGeometry = new ValidateGeometry();
        isValidGeometry.op(Display.getDefault(), map.getLayersInternal().get(0), new NullProgressMonitor());
        assertEquals(1,isValidGeometry.results.failedFeatures.size());
        map.sendCommandSync(new AbstractCommand(){

            public void run( IProgressMonitor monitor ) throws Exception {
            }

            public String getName() {
                return null;
            }
           
        });//send a sync command so async doesn't give us a false junit failure
       
        //System.out.println("\n"+map.getLayersInternal().get(0).getFilter().getClass());
        Id filter = (Id) map.getLayersInternal().get(0).getFilter();
        String[] fids = filter.getIDs().toArray(new String[0]);
        assertEquals(1,fids[0].length());
        assertEquals(features[0].getID(),fids[0]);
    }

    /*
     * Test method for 'org.locationtech.udig.validation.ValidateLineMustBeASinglePart.op(Display,
     * Object, IProgressMonitor)'
     */
    @Ignore
    @Test
    public void testLineMustBeASinglePartOp() throws Exception {
        //create features suitable for the test
        GeometryFactory factory=new GeometryFactory();
        // test with 2 lines: 2 points, 3 points
        // - only the 2 point line should pass
        LineString[] line = new LineString[3];
        line[0] = factory.createLineString(new Coordinate[]{new Coordinate(15, 15),
                new Coordinate(20, 20),});
        line[1] = factory.createLineString(new Coordinate[]{new Coordinate(10, 15),
                new Coordinate(20, 25), new Coordinate(30, 35),});
       
        String[] attrValues = new String[3];
        attrValues[0] = "value0"; attrValues[1] = "value1"; attrValues[2] = "value2"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$

        SimpleFeatureType ft=DataUtilities.createType("myLineType", "*geom:LineString,name:String"); //$NON-NLS-1$ //$NON-NLS-2$
        ft=DataUtilities.createSubType(ft, null, DefaultEngineeringCRS.CARTESIAN_2D);
        SimpleFeature[] features=new SimpleFeature[2];
        // add lines
        features[0]=SimpleFeatureBuilder.build(ft,new Object[]{line[0], attrValues[0]}, Integer.toString(0));   
        features[1]=SimpleFeatureBuilder.build(ft,new Object[]{line[1], attrValues[1]}, Integer.toString(1));   
       
        IGeoResource resource = MapTests.createGeoResource(features, true);
        Map map = MapTests.createNonDynamicMapAndRenderer(resource, new Dimension(500,512));
        ValidateLineMustBeASinglePart isValidLine = new ValidateLineMustBeASinglePart();
        isValidLine.op(Display.getDefault(), map.getLayersInternal().get(0), new NullProgressMonitor());
        //System.out.println(isValidLine.genericResults.failedFeatures.size()+" failed feature");
        assertEquals(1,isValidLine.results.failedFeatures.size());
        map.sendCommandSync(new AbstractCommand(){

            public void run( IProgressMonitor monitor ) throws Exception {
            }

            public String getName() {
                return null;
            }
           
        });//send a sync command so async doesn't give us a false junit failure
       
        Id filter = (Id) map.getLayersInternal().get(0).getFilter();
        String[] fids = filter.getIDs().toArray(new String[0]);
        //System.out.println(fids[0].length()+" features in FID");
        assertEquals(1,fids[0].length()); //only 1 feature failed?
        assertEquals(features[1].getID(),fids[0]); //feature 1 failed?
    }

    /*
     * Test method for 'org.locationtech.udig.validation.ValidateLineNoSelfIntersect.op(Display,
     * Object, IProgressMonitor)'
     */
    @Ignore
    @Test
    public void testLineNoSelfIntersectOp() throws Exception {
        //create features suitable for the test
        GeometryFactory factory=new GeometryFactory();
        // test with 2 lines: a non-self-intersecting line, a self-intersecting line
        LineString[] line = new LineString[3];
        line[0] = factory.createLineString(new Coordinate[]{new Coordinate(10, 10),
                new Coordinate(10, 20),});
        line[1] = factory.createLineString(new Coordinate[]{new Coordinate(20, 10),
                new Coordinate(20, 20), new Coordinate(30, 15), new Coordinate(15, 15),});
       
        String[] attrValues = new String[2];
        attrValues[0] = "value0"; attrValues[1] = "value1"; //$NON-NLS-1$ //$NON-NLS-2$

        SimpleFeatureType ft=DataUtilities.createType("myLineType", "*geom:LineString,name:String"); //$NON-NLS-1$ //$NON-NLS-2$
        ft=DataUtilities.createSubType(ft, null, DefaultEngineeringCRS.CARTESIAN_2D);
        SimpleFeature[] features=new SimpleFeature[2];
        // add lines
        features[0]=SimpleFeatureBuilder.build(ft,new Object[]{line[0], attrValues[0]}, Integer.toString(0));   
        features[1]=SimpleFeatureBuilder.build(ft,new Object[]{line[1], attrValues[1]}, Integer.toString(1));   
       
        IGeoResource resource = MapTests.createGeoResource(features, true);
        Map map = MapTests.createNonDynamicMapAndRenderer(resource, new Dimension(500,512));
        ValidateLineNoSelfIntersect isValidLine = new ValidateLineNoSelfIntersect();
        isValidLine.op(Display.getDefault(), map.getLayersInternal().get(0), new NullProgressMonitor());
        //System.out.println(isValidLine.genericResults.failedFeatures.size()+" failed feature");
        assertEquals(1,isValidLine.results.failedFeatures.size());
        map.sendCommandSync(new AbstractCommand(){

            public void run( IProgressMonitor monitor ) throws Exception {
            }

            public String getName() {
                return null;
            }
           
        });//send a sync command so async doesn't give us a false junit failure
       
        Id filter = (Id) map.getLayersInternal().get(0).getFilter();
        String[] fids = filter.getIDs().toArray(new String[0]);
        //System.out.println(fids[0].length()+" features in FID");
        assertEquals(1,fids[0].length()); //only 1 feature failed?
        assertEquals(features[1].getID(),fids[0]); //feature 1 failed?
    }

    /*
     * Test method for 'org.locationtech.udig.validation.ValidateLineNoSelfOverlap.op(Display,
     * Object, IProgressMonitor)'
     */
    @Ignore
    @Test
    public void testLineNoSelfOverlapOp() throws Exception {
        //create features suitable for the test
        GeometryFactory factory=new GeometryFactory();
        // test with 2 lines: a non-overlapping line, an overlapping line
        LineString[] line = new LineString[3];
        line[0] = factory.createLineString(new Coordinate[]{new Coordinate(10, 10),
                new Coordinate(10, 20),});
        line[1] = factory.createLineString(new Coordinate[]{new Coordinate(20, 10),
                new Coordinate(20, 20), new Coordinate(30, 15), new Coordinate(20, 15),
                new Coordinate(20, 30)});
       
        String[] attrValues = new String[2];
        attrValues[0] = "value0"; attrValues[1] = "value1"; //$NON-NLS-1$ //$NON-NLS-2$

        SimpleFeatureType ft=DataUtilities.createType("myLineType", "*geom:LineString,name:String"); //$NON-NLS-1$ //$NON-NLS-2$
        ft=DataUtilities.createSubType(ft, null, DefaultEngineeringCRS.CARTESIAN_2D);
        SimpleFeature[] features=new SimpleFeature[2];
        // add lines
        features[0]=SimpleFeatureBuilder.build(ft,new Object[]{line[0], attrValues[0]}, Integer.toString(0));   
        features[1]=SimpleFeatureBuilder.build(ft,new Object[]{line[1], attrValues[1]}, Integer.toString(1));   
       
        IGeoResource resource = MapTests.createGeoResource(features, true);
        Map map = MapTests.createNonDynamicMapAndRenderer(resource, new Dimension(500,512));
        ValidateLineNoSelfOverlapping isValidLine = new ValidateLineNoSelfOverlapping();
        isValidLine.op(Display.getDefault(), map.getLayersInternal().get(0), new NullProgressMonitor());
        //System.out.println(isValidLine.genericResults.failedFeatures.size()+" failed feature");
        assertEquals(1,isValidLine.results.failedFeatures.size());
        map.sendCommandSync(new AbstractCommand(){

            public void run( IProgressMonitor monitor ) throws Exception {
            }

            public String getName() {
                return null;
            }
           
        });//send a sync command so async doesn't give us a false junit failure
       
        Id filter = (Id) map.getLayersInternal().get(0).getFilter();
        String[] fids = filter.getIDs().toArray(new String[0]);
        //System.out.println(fids[0].length()+" features in FID");
        assertEquals(1,fids[0].length()); //only 1 feature failed?
        assertEquals(features[1].getID(),fids[0]); //feature 1 failed?
    }

    /*
     * Test method for 'org.locationtech.udig.validation.ValidateNullZero.op(Display,
     * Object, IProgressMonitor)'
     */
    @Test
    public void testNullZeroOp() throws Exception {
        //create features suitable for the test
        GeometryFactory factory=new GeometryFactory();
        // test with 2 arbitrary features, with the second having a null attribute
        LineString[] line = new LineString[3];
        line[0] = factory.createLineString(new Coordinate[]{new Coordinate(10, 10),
                new Coordinate(10, 20),});
        line[1] = factory.createLineString(new Coordinate[]{new Coordinate(20, 10),
                new Coordinate(20, 20), new Coordinate(30, 15), new Coordinate(20, 15),
                new Coordinate(20, 30)});
       
        String[] attrValues = new String[2];
        attrValues[0] = "value0"; attrValues[1] = null; //$NON-NLS-1$

        SimpleFeatureType ft=DataUtilities.createType("myLineType", "*geom:LineString,name:String"); //$NON-NLS-1$ //$NON-NLS-2$
        ft=DataUtilities.createSubType(ft, null, DefaultEngineeringCRS.CARTESIAN_2D);
        SimpleFeature[] features=new SimpleFeature[2];
        // add lines
        features[0]=SimpleFeatureBuilder.build(ft,new Object[]{line[0], attrValues[0]}, Integer.toString(0));   
        features[1]=SimpleFeatureBuilder.build(ft,new Object[]{line[1], attrValues[1]}, Integer.toString(1));   
        //FeatureFactory ff = new FeatureFactory();
       
        IGeoResource resource = MapTests.createGeoResource(features, true);
        Map map = MapTests.createNonDynamicMapAndRenderer(resource, new Dimension(500,512));
        ValidateNullZero isValidAttr = new ValidateNullZero();

        // test the dialog
        Dialog dialog = isValidAttr.getDialog(Display.getDefault().getActiveShell(), ((ILayer) map.getLayersInternal().get(0)).getSchema());
        dialog.setBlockOnOpen(false);
        dialog.open();
        // check the default xPath
        assertEquals(isValidAttr.xPath,"geom"); // first entry in attributes //$NON-NLS-1$
        //set a new xPath
        isValidAttr.combo.select(1);
        // check the new xPath
        assertEquals(isValidAttr.xPath,"name"); // second entry in attributes //$NON-NLS-1$
       
        // other checks...
       
        System.out.println("END OF DIALOG TESTS"); //$NON-NLS-1$
        ////////assertEquals(1,isValidAttr.genericResults.failedFeatures.size());
    }

    /*
     * Test method for 'org.locationtech.udig.validation.ValidatePolygonNoGaps.op(Display,
     * Object, IProgressMonitor)'
     */
    /*public void testPolygonNoGapsOp() throws Exception {
        //create features suitable for the test
        GeometryFactory factory=new GeometryFactory();
        // test with 1 closed polygon and 1 open polygon
        Polygon[] polys = new Polygon[2];

        LinearRing ring1 = factory.createLinearRing(new Coordinate[]{
                new Coordinate(10, 10),
                new Coordinate(10, 20),
                new Coordinate(20, 20),
                new Coordinate(20, 10),
                new Coordinate(10, 10),
        });

        //note: we will break this ring when it becomes a feature
        LinearRing ring2 = factory.createLinearRing(new Coordinate[]{
                new Coordinate(30, 10),
                new Coordinate(30, 20),
                new Coordinate(40, 20),
                new Coordinate(40, 10),
                new Coordinate(30, 10),
        });
       
        polys[0]=factory.createPolygon( ring1, new LinearRing[]{});
        polys[1]=factory.createPolygon( ring2, new LinearRing[]{});

        String[] attrValues = new String[2];
        attrValues[0] = "value0"; attrValues[1] = "value1";

        SimpleFeatureType ft=DataUtilities.createType("myPolyType", "*geom:Geometry,name:String"); //$NON-NLS-1$
        ft=DataUtilities.createSubType(ft, null, DefaultEngineeringCRS.CARTESIAN_2D);
        SimpleFeature[] features=new SimpleFeature[2];
        // add lines
        features[0]=SimpleFeatureBuilder.build(ft,new Object[]{polys[0], attrValues[0]}, Integer.toString(0));   
        features[1]=SimpleFeatureBuilder.build(ft,new Object[]{polys[1], attrValues[1]}, Integer.toString(1));   
        //FeatureFactory ff = new FeatureFactory();

        //break the polygon
        System.out.println("x was "+features[1].getDefaultGeometry().getCoordinates()[4].x);
        features[1].getDefaultGeometry().getCoordinates()[4].x = 35; // 30 --> 35
        System.out.println("x is now "+features[1].getDefaultGeometry().getCoordinates()[4].x);
       
        IGeoResource resource = MapTests.createGeoResource(features, true);
        Map map = MapTests.createNonDynamicMapAndRenderer(resource, new Dimension(500,512));
        ValidatePolygonNoGaps isValidPoly = new ValidatePolygonNoGaps();
        isValidPoly.op(Display.getDefault(), map.getLayersInternal().get(0), new NullProgressMonitor());
        System.out.println(isValidPoly.genericResults.failedFeatures.size()+" failed feature(s)");
        assertEquals(1,isValidPoly.genericResults.failedFeatures.size());
        map.sendCommandSync(new AbstractCommand(){

            public void run( IProgressMonitor monitor ) throws Exception {
            }

            public Command copy() {
                return null;
            }

            public String getName() {
                return null;
            }
           
        });//send a sync command so async doesn't give us a false junit failure
       
        Id filter = (Id) map.getLayersInternal().get(0).getFilter();
        String[] fids = filter.getIDs().toArray(new String[0]);
        //System.out.println(fids[0].length()+" features in FID");
        assertEquals(1,fids[0].length()); //only 1 feature failed?
        assertEquals(features[1].getID(),fids[0]); //feature 1 failed?
    }
    */

TOP

Related Classes of org.locationtech.udig.validation.test.FeatureValidationTest

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.