protected override IList <ITest> CreateTestInstances(object[] args)
        {
            var featureClass      = (IFeatureClass)args[0];
            var referenceClass    = (IFeatureClass)args[1];
            var referenceSubtypes = (int[])args[2];
            var featureClassRules = (string[])args[3];

            ConstrParams pars =
                ConstrParams.Create(featureClass, referenceSubtypes, featureClassRules);
            var notNearTest = new QaTopoNotNear(featureClass, referenceClass, pars.MaxNear,
                                                pars.FeatureClassNear,
                                                "0", 0, 0, is3D: false);

            if (pars.RightSideNears != null)
            {
                notNearTest.RightSideNears = pars.RightSideNears;
            }

            notNearTest.IgnoreNeighborCondition = pars.IgnoreNeighborCondition;
            notNearTest.UnconnectedLineCapStyle = LineCapStyle.Butt;

            var intersectTest =
                new QaIntersectsOther(featureClass, referenceClass, pars.IgnoreNeighborCondition);

            return(new List <ITest> {
                notNearTest, intersectTest
            });
        }
        public void CanIgnoreArea()
        {
            IFeatureWorkspace ws = TestWorkspaceUtils.CreateInMemoryWorkspace("ignoreArea");

            IFieldsEdit fields = new FieldsClass();

            fields.AddField(FieldUtils.CreateOIDField());
            fields.AddField(FieldUtils.CreateField("Objektart",
                                                   esriFieldType.esriFieldTypeInteger));
            fields.AddField(FieldUtils.CreateShapeField(
                                "Shape", esriGeometryType.esriGeometryPolyline,
                                SpatialReferenceUtils.CreateSpatialReference
                                    ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95,
                                    true), 1000));

            IFeatureClass lineFc = DatasetUtils.CreateSimpleFeatureClass(ws, "lineFc", fields);

            fields = new FieldsClass();
            fields.AddField(FieldUtils.CreateOIDField());
            fields.AddField(FieldUtils.CreateField("Objektart",
                                                   esriFieldType.esriFieldTypeInteger));
            fields.AddField(FieldUtils.CreateShapeField(
                                "Shape", esriGeometryType.esriGeometryPolygon,
                                SpatialReferenceUtils.CreateSpatialReference
                                    ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95,
                                    true), 1000));

            IFeatureClass areaFc = DatasetUtils.CreateSimpleFeatureClass(ws, "areaFc", fields);

            fields = new FieldsClass();
            fields.AddField(FieldUtils.CreateOIDField());
            fields.AddField(FieldUtils.CreateField("Objektart",
                                                   esriFieldType.esriFieldTypeInteger));
            fields.AddField(FieldUtils.CreateShapeField(
                                "Shape", esriGeometryType.esriGeometryPolygon,
                                SpatialReferenceUtils.CreateSpatialReference
                                    ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95,
                                    true), 1000));

            IFeatureClass ignoreFc = DatasetUtils.CreateSimpleFeatureClass(ws, "ignoreFc", fields);

            ((IWorkspaceEdit)ws).StartEditing(false);
            ((IWorkspaceEdit)ws).StopEditing(true);

            ((IWorkspaceEdit)ws).StartEditing(false);
            ((IWorkspaceEdit)ws).StopEditing(true);

            Create(lineFc, 10, CurveConstruction.StartLine(0, 0)
                   .LineTo(10, 10)
                   .Curve);

            Create(areaFc, 10, CurveConstruction.StartPoly(1, 1)
                   .LineTo(2, 1)
                   .LineTo(2, 2)
                   .LineTo(1, 2)
                   .ClosePolygon());

            Create(areaFc, 10, CurveConstruction.StartPoly(6, 6)
                   .LineTo(7, 6)
                   .LineTo(7, 7)
                   .LineTo(6, 7)
                   .ClosePolygon());

            Create(ignoreFc, 0, CurveConstruction.StartPoly(1, 1)
                   .LineTo(2, 1)
                   .LineTo(2, 2)
                   .LineTo(1, 2)
                   .ClosePolygon());

            Create(ignoreFc, 10, CurveConstruction.StartPoly(6, 6)
                   .LineTo(7, 6)
                   .LineTo(7, 7)
                   .LineTo(6, 7)
                   .ClosePolygon());

            var test = new QaIntersectsOther(lineFc, areaFc);

            test.IgnoreArea = ignoreFc;
            test.SetConstraint(2, "objektart in (10)");
            {
                // Container test
                var runner     = new QaContainerTestRunner(1000, test);
                int errorCount = runner.Execute();

                Assert.AreEqual(
                    1, errorCount);                     // only line errors, point error is removed by test container!
            }
            {
                // simple test
                var runner     = new QaTestRunner(test);
                int errorCount = runner.Execute();

                Assert.AreEqual(2, errorCount);                 // line AND point errors!
            }
        }