Example #1
0
        public void SetupFixture()
        {
            _lic.Checkout(EsriProduct.ArcEditor);

            _testWs = TestWorkspaceUtils.CreateInMemoryWorkspace("QaMinSegAngleTest");
        }
        public void SetupFixture()
        {
            _lic.Checkout();

            _testWs = TestWorkspaceUtils.CreateTestFgdbWorkspace("QaMeasuresAtPointsTest");
        }
        public void CanTestPointNotNearPolyline()
        {
            IFeatureWorkspace testWs =
                TestWorkspaceUtils.CreateInMemoryWorkspace("QaPointNotNearTest");

            IFieldsEdit fields = new FieldsClass();

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

            IFeatureClass polyFc = DatasetUtils.CreateSimpleFeatureClass(
                testWs, "polylineFc",
                fields);

            IFeatureClass pointFc = CreatePointClass(testWs, "pointFc");

            IFeature polyFeature = polyFc.CreateFeature();

            polyFeature.Shape = CurveConstruction.StartLine(0, 0, 0)
                                .LineTo(100, 0, 10)
                                .LineTo(50, 100, 10)
                                .Curve;
            polyFeature.Store();

            IFeature p1 = pointFc.CreateFeature();

            p1.Shape = GeometryFactory.CreatePoint(90, 0, 0);
            p1.Store();

            var test1  = new QaPointNotNear(pointFc, polyFc, 1.0);
            var runner = new QaContainerTestRunner(1000, test1);

            runner.Execute();
            Assert.AreEqual(1, runner.Errors.Count);

            var test2 = new QaPointNotNear(pointFc, polyFc, 1.0);

            test2.GeometryComponents = new[] { GeometryComponent.Boundary };
            runner = new QaContainerTestRunner(1000, test2);
            runner.Execute();
            Assert.AreEqual(0, runner.Errors.Count);

            var test3 = new QaPointNotNear(pointFc, polyFc, 95);

            test3.GeometryComponents = new[] { GeometryComponent.Boundary };
            runner = new QaContainerTestRunner(1000, test3);
            runner.Execute();
            Assert.AreEqual(1, runner.Errors.Count);

            var test4 = new QaPointNotNear(pointFc, polyFc, 2.0);

            test4.GeometryComponents = new[] { GeometryComponent.Vertices };
            runner = new QaContainerTestRunner(1000, test4);
            runner.Execute();
            Assert.AreEqual(0, runner.Errors.Count);

            var test5 = new QaPointNotNear(pointFc, polyFc, 11.0);

            test5.GeometryComponents = new[] { GeometryComponent.Vertices };
            runner = new QaContainerTestRunner(1000, test5);
            runner.Execute();
            Assert.AreEqual(1, runner.Errors.Count);

            var test6 = new QaPointNotNear(pointFc, polyFc, 11.0);

            test6.GeometryComponents = new[] { GeometryComponent.LineStartPoint };
            runner = new QaContainerTestRunner(1000, test6);
            runner.Execute();
            Assert.AreEqual(0, runner.Errors.Count);

            var test7 = new QaPointNotNear(pointFc, polyFc, 91.0);

            test7.GeometryComponents = new[] { GeometryComponent.LineStartPoint };
            runner = new QaContainerTestRunner(1000, test7);
            runner.Execute();
            Assert.AreEqual(1, runner.Errors.Count);

            var test8 = new QaPointNotNear(pointFc, polyFc, 91.0);

            test8.GeometryComponents = new[] { GeometryComponent.LineEndPoint };
            runner = new QaContainerTestRunner(1000, test8);
            runner.Execute();
            Assert.AreEqual(0, runner.Errors.Count);

            var test9 = new QaPointNotNear(pointFc, polyFc, 120.0);

            test9.GeometryComponents = new[] { GeometryComponent.LineEndPoint };
            runner = new QaContainerTestRunner(1000, test9);
            runner.Execute();
            Assert.AreEqual(1, runner.Errors.Count);

            var test10 = new QaPointNotNear(pointFc, polyFc, 89.0);

            test10.GeometryComponents = new[] { GeometryComponent.LineEndPoints };
            runner = new QaContainerTestRunner(1000, test10);
            runner.Execute();
            Assert.AreEqual(0, runner.Errors.Count);

            var test11 = new QaPointNotNear(pointFc, polyFc, 92.0);

            test11.GeometryComponents = new[] { GeometryComponent.LineEndPoints };
            runner = new QaContainerTestRunner(1000, test11);
            runner.Execute();
            Assert.AreEqual(1, runner.Errors.Count);
        }
 public void Setup()
 {
     _workspace = TestWorkspaceUtils.CreateTestFgdbWorkspace(GetType().Name);
 }
Example #5
0
        private static void CanDetectNtoMUnique([NotNull] IFeatureWorkspace workspace)
        {
            const string uniqueFieldName     = "FIELD_UNIQUE";
            const string foreignKeyFieldName = "FOREIGN_KEY_FIELD";

            ITable tableOrig;
            {
                IFieldsEdit fields = new FieldsClass();
                fields.AddField(FieldUtils.CreateOIDField());
                fields.AddField(FieldUtils.CreateField(uniqueFieldName,
                                                       esriFieldType.esriFieldTypeInteger));
                ITable table = TestWorkspaceUtils.CreateSimpleTable(workspace, "RelateUnique1",
                                                                    fields,
                                                                    null);
                tableOrig = table;
            }
            ITable tableRel;
            {
                IFieldsEdit fields = new FieldsClass();
                fields.AddField(FieldUtils.CreateOIDField());
                fields.AddField(FieldUtils.CreateField(foreignKeyFieldName,
                                                       esriFieldType.esriFieldTypeInteger));
                ITable table = TestWorkspaceUtils.CreateSimpleTable(workspace, "RelateUnique2",
                                                                    fields,
                                                                    null);
                tableRel = table;
            }
            IRelationshipClass rel = TestWorkspaceUtils.CreateSimpleMNRelationship(
                workspace, "NToMRelTable", tableOrig, tableRel, uniqueFieldName,
                foreignKeyFieldName);

            {
                ((IWorkspaceEdit)workspace).StartEditing(false);
                for (var i = 0; i < 10; i++)
                {
                    IRow row = tableOrig.CreateRow();
                    row.set_Value(1, i);
                    row.Store();
                }

                for (var i = 0; i < 10; i++)
                {
                    IRow row = tableRel.CreateRow();
                    row.set_Value(1, i);
                    row.Store();
                    rel.CreateRelationship((IObject)tableOrig.GetRow(i + 1),
                                           (IObject)row);
                }

                ((IWorkspaceEdit)workspace).StopEditing(true);
            }

            ITable relTab = TableJoinUtils.CreateQueryTable(rel, JoinType.InnerJoin);

            foreach (bool forceInMemoryTableSort in new[] { true, false })
            {
                var test = new QaUnique(relTab, "RelateUnique1." + uniqueFieldName)
                {
                    ForceInMemoryTableSorting = forceInMemoryTableSort
                };

                var runner = new QaTestRunner(test);
                runner.Execute();
                AssertUtils.NoError(runner);
            }
        }
Example #6
0
        private static void CanDetectNtoMNonUnique([NotNull] IFeatureWorkspace ws)
        {
            const string uniqueFieldName     = "FIELD_UNIQUE";
            const string foreignKeyFieldName = "FOREIGN_KEY_FIELD";
            const string origTableName       = "OrigTable2";
            const string destTableName       = "DestTable2";
            ITable       originTable;
            {
                IFieldsEdit fields = new FieldsClass();
                fields.AddField(FieldUtils.CreateOIDField());
                fields.AddField(FieldUtils.CreateField(uniqueFieldName,
                                                       esriFieldType.esriFieldTypeInteger));
                ITable table = TestWorkspaceUtils.CreateSimpleTable(
                    ws, origTableName, fields);
                originTable = table;
            }
            ITable destinationTable;
            {
                IFieldsEdit fields = new FieldsClass();
                fields.AddField(FieldUtils.CreateOIDField());
                fields.AddField(FieldUtils.CreateField(
                                    foreignKeyFieldName, esriFieldType.esriFieldTypeInteger));
                ITable table = TestWorkspaceUtils.CreateSimpleTable(
                    ws, destTableName, fields);

                destinationTable = table;
            }

            IRelationshipClass relClass = TestWorkspaceUtils.CreateSimpleMNRelationship(
                ws, "relNonUnique", originTable, destinationTable,
                "OrigFKey", "DestFKey");

            {
                // insert Data
                ((IWorkspaceEdit)ws).StartEditing(false);
                for (var i = 0; i < 10; i++)
                {
                    IRow row = originTable.CreateRow();
                    row.set_Value(1, i);
                    row.Store();
                }

                for (var i = 0; i < 10; i++)
                {
                    IRow row = destinationTable.CreateRow();
                    row.set_Value(1, i);
                    row.Store();

                    relClass.CreateRelationship((IObject)originTable.GetRow(i + 1),
                                                (IObject)row);
                }

                {
                    IRow row = destinationTable.CreateRow();
                    row.set_Value(1, 5);
                    row.Store();
                    relClass.CreateRelationship((IObject)originTable.GetRow(5 + 1),
                                                (IObject)row);
                }
                {
                    IRow row = destinationTable.CreateRow();
                    row.set_Value(1, 5);
                    row.Store();
                    relClass.CreateRelationship((IObject)originTable.GetRow(5 + 1),
                                                (IObject)row);
                }
                {
                    IRow row = destinationTable.CreateRow();
                    row.set_Value(1, 7);
                    row.Store();
                    relClass.CreateRelationship((IObject)originTable.GetRow(7 + 1),
                                                (IObject)row);
                }
                ((IWorkspaceEdit)ws).StopEditing(true);
            }

            ITable relTab = TableJoinUtils.CreateQueryTable(relClass, JoinType.InnerJoin);

            foreach (bool forceInMemoryTableSort in new[] { true, false })
            {
                var test = new QaUnique(relTab, origTableName + "." + uniqueFieldName)
                {
                    ForceInMemoryTableSorting = forceInMemoryTableSort
                };

                test.SetRelatedTables(new[] { originTable, destinationTable });

                var runner = new QaTestRunner(test);
                runner.Execute();
                Assert.AreEqual(5, runner.Errors.Count);
            }
        }
Example #7
0
        public void SetupFixture()
        {
            _lic.Checkout();

            _testWs = TestWorkspaceUtils.CreateTestFgdbWorkspace("QaConnectionsTest");
        }
Example #8
0
        public void SetupFixture()
        {
            _lic.Checkout();

            _testWs = TestWorkspaceUtils.CreateInMemoryWorkspace("QaMustBeNearOtherTest");
        }
Example #9
0
        public void SetupFixture()
        {
            _lic.Checkout();

            _testWs = TestWorkspaceUtils.CreateInMemoryWorkspace("QaLineConnectionFieldValues");
        }
Example #10
0
        public void TestMultipart()
        {
            IFeatureWorkspace ws         = TestWorkspaceUtils.CreateInMemoryWorkspace("TestMultipart");
            IFieldsEdit       lineFields = new FieldsClass();

            lineFields.AddField(FieldUtils.CreateOIDField());
            lineFields.AddField(FieldUtils.CreateTextField("FromVal", 50));
            lineFields.AddField(FieldUtils.CreateTextField("ToVal", 50));
            lineFields.AddField(FieldUtils.CreateShapeField(
                                    "Shape", esriGeometryType.esriGeometryPolyline,
                                    SpatialReferenceUtils.CreateSpatialReference
                                        ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95,
                                        true), 1000));

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

            IFieldsEdit pointFields = new FieldsClass();

            pointFields.AddField(FieldUtils.CreateOIDField());
            pointFields.AddField(FieldUtils.CreateTextField("Name", 50));
            pointFields.AddField(FieldUtils.CreateShapeField(
                                     "Shape", esriGeometryType.esriGeometryPoint,
                                     SpatialReferenceUtils.CreateSpatialReference
                                         ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95,
                                         true), 1000));

            IFeatureClass pointFc = DatasetUtils.CreateSimpleFeatureClass(
                ws, "TestFieldValuesExpression2", pointFields);

            IPoint center = new PointClass();

            center.PutCoords(200, 200);

            IFeature row1 = lineFc.CreateFeature();

            row1.set_Value(1, "Name");
            row1.set_Value(2, "AndererName");
            row1.Shape =
                CurveConstruction.StartLine(100, 100).LineTo(200, 160).MoveTo(100, 160)
                .LineTo(center).Curve;
            row1.Store();

            IFeature row2 = lineFc.CreateFeature();

            row2.set_Value(1, "Name");
            row2.Shape = CurveConstruction
                         .StartLine(200, 100).LineTo(300, 140).MoveTo(200, 160).LineTo(center)
                         .Curve;
            row2.Store();

            IFeature row3 = lineFc.CreateFeature();

            row3.set_Value(1, "Name");
            row3.Shape = CurveConstruction
                         .StartLine(300, 100).LineTo(300, 140).MoveTo(300, 160).LineTo(center)
                         .Curve;
            row3.Store();

            IFeature row4 = pointFc.CreateFeature();

            row4.set_Value(1, "AndererName");
            row4.Shape = center;
            row4.Store();

            string lineField = $"IIF({QaConnections.StartsIn}, FromVal, ToVal)";
            var    test      = new QaLineConnectionFieldValues(
                lineFc, lineField,
                LineFieldValuesConstraint.AllEqualOrValidPointExists,
                pointFc, "Name",
                PointFieldValuesConstraint.AllEqualAndMatchAnyLineValue);

            test.UseMultiParts = false;
            var runner = new QaContainerTestRunner(500, test);

            Assert.AreEqual(0, runner.Execute());

            test.UseMultiParts = true;
            runner             = new QaContainerTestRunner(500, test);
            Assert.AreEqual(1, runner.Execute());
        }
Example #11
0
		public void SetupFixture()
		{
			_lic.Checkout();

			_testWs = TestWorkspaceUtils.CreateInMemoryWorkspace("QaValidUrlsTest");
		}
Example #12
0
        public void SetupFixture()
        {
            _lic.Checkout();

            _testWs = TestWorkspaceUtils.CreateTestFgdbWorkspace("TestMinSegmentLength");
        }
Example #13
0
        public void SetupFixture()
        {
            _lic.Checkout();

            _testWs = TestWorkspaceUtils.CreateTestFgdbWorkspace("TestUnreferencedRows");
        }
Example #14
0
        public void SetupFixture()
        {
            _lic.Checkout();

            _testWs = TestWorkspaceUtils.CreateTestFgdbWorkspace("TestZRange");
        }
Example #15
0
 public void SetupFixture()
 {
     _lic.Checkout();
     _testWs = TestWorkspaceUtils.CreateInMemoryWorkspace("TableViewTest");
 }
Example #16
0
        public void TestRelatedFactoryMinParameters()
        {
            IFeatureWorkspace testWs = RelTestWs;

            const string  fkTable = "fkTable";
            IFeatureClass fc1     = CreateLineClass(
                testWs, "Fc1_" + Environment.TickCount,
                new List <IField> {
                FieldUtils.CreateIntegerField(fkTable)
            });
            IFeatureClass fc2 = CreateLineClass(testWs, "Fc2_" + Environment.TickCount);

            var ds1 = (IDataset)fc1;
            var ds2 = (IDataset)fc2;

            IFieldsEdit fields = new FieldsClass();

            fields.AddField(FieldUtils.CreateOIDField());
            const string IdField = "IdRel";

            fields.AddField(FieldUtils.CreateIntegerField(IdField));

            string relTableName = "Rel_" + ds1.Name;
            ITable relTable     = TestWorkspaceUtils.CreateSimpleTable(testWs, relTableName,
                                                                       fields);

            var dsRel = (IDataset)relTable;

            string             relName = "relName" + Environment.TickCount;
            IRelationshipClass rel     = TestWorkspaceUtils.CreateSimple1NRelationship(
                testWs, relName, relTable, (ITable)fc1, relTable.OIDFieldName, fkTable);

            ((IWorkspaceEdit)testWs).StartEditing(false);

            IRow r1 = AddRow(relTable, new object[] { 12 });
            IRow r2 = AddRow(relTable, new object[] { 14 });

            IFeature f11 = AddFeature(
                fc1, CurveConstruction.StartLine(0, 0).LineTo(4, 0).Curve, new object[] { r1.OID });
            IFeature f12 = AddFeature(
                fc1, CurveConstruction.StartLine(0, 0).LineTo(4, 0).Curve, new object[] { r2.OID });
            IFeature f2 = AddFeature(fc2, CurveConstruction.StartLine(10, 1).LineTo(14, 1).Curve);

            ((IWorkspaceEdit)testWs).StopEditing(true);

            var     model  = new SimpleModel("model", fc1);
            Dataset mds1   = model.AddDataset(new ModelVectorDataset(ds1.Name));
            Dataset mdsRel = model.AddDataset(new ModelTableDataset(dsRel.Name));
            Dataset mds2   = model.AddDataset(new ModelVectorDataset(ds2.Name));

            var clsDesc   = new ClassDescriptor(typeof(QaRelMustBeNearOther));
            var tstDesc   = new TestDescriptor("testNear", clsDesc);
            var condition = new QualityCondition("cndNear", tstDesc);

            QualityConditionParameterUtils.AddParameterValue(condition, "relationTables", mds1);
            QualityConditionParameterUtils.AddParameterValue(condition, "relationTables", mdsRel,
                                                             $"{relTableName}.{IdField} = 12");             // --> only f11 get's checked
            QualityConditionParameterUtils.AddParameterValue(condition, "relation", relName);
            QualityConditionParameterUtils.AddParameterValue(condition, "join", JoinType.InnerJoin);
            QualityConditionParameterUtils.AddParameterValue(condition, "nearClasses", mds2);
            QualityConditionParameterUtils.AddParameterValue(condition, "maximumDistance", 5);
            QualityConditionParameterUtils.AddParameterValue(condition, "relevantRelationCondition",
                                                             string.Empty);

            var fact = new QaRelMustBeNearOther();

            fact.Condition = condition;

            IList <ITest> tests =
                fact.CreateTests(new SimpleDatasetOpener(model.MasterDatabaseWorkspaceContext));

            Assert.AreEqual(1, tests.Count);

            var runner = new QaContainerTestRunner(1000, tests[0]);

            runner.Execute();
            Assert.AreEqual(1, runner.Errors.Count);
        }
        public void TestClosedLines()
        {
            var           ws = TestWorkspaceUtils.CreateInMemoryWorkspace("ClosedLines");
            IFeatureClass polylineFeatureClass;
            IFeatureClass pointFeatureClass;

            CreateTestFeatureClasses("polygons5", "points5",
                                     out polylineFeatureClass,
                                     out pointFeatureClass, ws, polygonAsClosedLines: true);

            IFeature emptyFeature = polylineFeatureClass.CreateFeature();

            emptyFeature.Shape =
                CurveConstruction.StartLine(100, 300)
                .LineTo(200, 300)
                .LineTo(200, 400)
                .LineTo(100, 400)
                .LineTo(100, 300)
                .Curve;
            emptyFeature.Store();

            IFeature counterClockwiseFeature = polylineFeatureClass.CreateFeature();

            counterClockwiseFeature.Shape =
                CurveConstruction.StartLine(100, 100)
                .LineTo(200, 100)
                .LineTo(200, 200)
                .LineTo(100, 200)
                .LineTo(100, 100)
                .Curve;
            counterClockwiseFeature.Store();

            IFeature clockwiseFeature = polylineFeatureClass.CreateFeature();

            clockwiseFeature.Shape =
                CurveConstruction.StartLine(100, 100)
                .LineTo(100, 200)
                .LineTo(200, 200)
                .LineTo(200, 100)
                .LineTo(100, 100)
                .Curve;
            clockwiseFeature.Store();

            IFeature notClosedFeature = polylineFeatureClass.CreateFeature();

            notClosedFeature.Shape =
                CurveConstruction.StartLine(300, 100)
                .LineTo(400, 100)
                .LineTo(400, 200)
                .Curve;
            notClosedFeature.Store();

            IFeature pointFeature1 = pointFeatureClass.CreateFeature();

            pointFeature1.Shape = GeometryFactory.CreatePoint(150, 150);
            pointFeature1.Store();

            IFeature pointFeature2 = pointFeatureClass.CreateFeature();

            pointFeature2.Shape = GeometryFactory.CreatePoint(350, 100);
            pointFeature2.Store();

            var test = new QaContainedPointsCount(polylineFeatureClass, pointFeatureClass, 1,
                                                  string.Empty)
            {
                PolylineUsage = PolylineUsage.AsIs
            };
            var containerRunner = new QaContainerTestRunner(1000, test);

            containerRunner.Execute();
            Assert.AreEqual(3, containerRunner.Errors.Count);

            test = new QaContainedPointsCount(polylineFeatureClass, pointFeatureClass, 1,
                                              string.Empty)
            {
                PolylineUsage = PolylineUsage.AsPolygonIfClosedElseReportIssue
            };
            containerRunner = new QaContainerTestRunner(1000, test);
            containerRunner.Execute();
            Assert.AreEqual(2, containerRunner.Errors.Count);

            test = new QaContainedPointsCount(polylineFeatureClass, pointFeatureClass, 1,
                                              string.Empty)
            {
                PolylineUsage = PolylineUsage.AsPolygonIfClosedElseIgnore
            };
            containerRunner = new QaContainerTestRunner(1000, test);
            containerRunner.Execute();
            Assert.AreEqual(1, containerRunner.Errors.Count);

            test = new QaContainedPointsCount(polylineFeatureClass, pointFeatureClass, 1,
                                              string.Empty)
            {
                PolylineUsage = PolylineUsage.AsPolygonIfClosedElseAsPolyline
            };
            containerRunner = new QaContainerTestRunner(1000, test);
            containerRunner.Execute();
            Assert.AreEqual(1, containerRunner.Errors.Count);
        }
Example #18
0
        public void TestNonUniqueIntegers()
        {
            IFieldsEdit fields = new FieldsClass();

            fields.AddField(FieldUtils.CreateOIDField());
            fields.AddField(FieldUtils.CreateField("Unique",
                                                   esriFieldType.esriFieldTypeInteger));
            ITable table = TestWorkspaceUtils.CreateSimpleTable(_pgdbWorkspace, "NonUnique",
                                                                fields);

            for (var i = 0; i < 10; i++)
            {
                IRow row = table.CreateRow();
                row.set_Value(1, i);
                row.Store();
            }

            // create error values
            {
                IRow row = table.CreateRow();
                row.set_Value(1, 5);
                row.Store();
            }
            IRow errorRow = table.CreateRow();

            errorRow.set_Value(1, 5);
            errorRow.Store();
            {
                IRow row = table.CreateRow();
                row.set_Value(1, 7);
                row.Store();
            }
            IRow validRow = table.CreateRow();

            validRow.set_Value(1, 12);
            validRow.Store();

            foreach (bool forceInMemoryTableSort in new[] { true, false })
            {
                // init Test
                var test = new QaUnique(table, "Unique")
                {
                    ForceInMemoryTableSorting = forceInMemoryTableSort
                };

                // Run global test
                var runner = new QaTestRunner(test);
                runner.Execute();
                Assert.AreEqual(5, runner.Errors.Count);                 // each non unique row is reported

                // Run valid row
                runner = new QaTestRunner(test);
                runner.Execute(new[] { validRow });
                AssertUtils.NoError(runner);

                // Run error row
                runner = new QaTestRunner(test);
                runner.Execute(new[] { errorRow });
                Assert.AreEqual(3, runner.Errors.Count);                 // '5' exists in 3 rows

                // Run combined
                runner = new QaTestRunner(test);
                runner.Execute(new[] { validRow, errorRow });
                Assert.AreEqual(3, runner.Errors.Count);
            }
        }
        public void SetupFixture()
        {
            _lic.Checkout();

            _testWs = TestWorkspaceUtils.CreateTestFgdbWorkspace("QaContainedPointsCountTest");
        }
Example #20
0
        private static ITable CanDetect1toNNonUnique([NotNull] IFeatureWorkspace workspace)
        {
            ITable tableOrig;
            {
                IFieldsEdit fields = new FieldsClass();
                fields.AddField(FieldUtils.CreateOIDField());
                fields.AddField(FieldUtils.CreateField(
                                    "Unique", esriFieldType.esriFieldTypeInteger));
                ITable table = TestWorkspaceUtils.CreateSimpleTable(
                    workspace, "Relate1NNonUnique1", fields);

                for (var i = 0; i < 10; i++)
                {
                    IRow row = table.CreateRow();
                    row.set_Value(1, i);
                    row.Store();
                }

                tableOrig = table;
            }
            ITable tableRel;
            {
                IFieldsEdit fields = new FieldsClass();
                fields.AddField(FieldUtils.CreateOIDField());
                fields.AddField(FieldUtils.CreateField(
                                    "Ref", esriFieldType.esriFieldTypeInteger));
                ITable table = TestWorkspaceUtils.CreateSimpleTable(
                    workspace, "Relate1NNonUnique2", fields);
                for (var i = 0; i < 10; i++)
                {
                    IRow row = table.CreateRow();
                    row.set_Value(1, i);
                    row.Store();
                }

                {
                    IRow row = table.CreateRow();
                    row.set_Value(1, 5);
                    row.Store();
                }
                {
                    IRow row = table.CreateRow();
                    row.set_Value(1, 5);
                    row.Store();
                }
                {
                    IRow row = table.CreateRow();
                    row.set_Value(1, 7);
                    row.Store();
                }
                tableRel = table;
            }
            IRelationshipClass rel = TestWorkspaceUtils.CreateSimple1NRelationship(
                workspace, "rel1NNonUnique", tableOrig, tableRel, "Unique", "Ref");

            ITable relTab = TableJoinUtils.CreateQueryTable(rel, JoinType.InnerJoin);

            foreach (bool forceInMemoryTableSort in new[] { true, false })
            {
                var test = new QaUnique(relTab, "Relate1NNonUnique1.Unique")
                {
                    ForceInMemoryTableSorting = forceInMemoryTableSort
                };

                test.SetRelatedTables(new[] { tableOrig, tableRel });

                var runner = new QaTestRunner(test);
                runner.Execute();
                Assert.AreEqual(5, runner.Errors.Count);
            }

            return(relTab);
        }
        public void SetupFixture()
        {
            _lic.Checkout();

            TestWorkspaceUtils.CreateTestFgdbWorkspace("QaContainesOtherTest");
        }
        public void SetupFixture()
        {
            _lic.Checkout();

            _workspace = TestWorkspaceUtils.CreateTestFgdbWorkspace(GetType().Name);
        }
        public void TestRelatedFactory()
        {
            IFeatureWorkspace initTestWs = _testWs;

            try
            {
                _testWs = RelTestWs;

                IFeatureClass fc1 = CreateFeatureClass("TestRelatedFactory",
                                                       esriGeometryType.esriGeometryPolyline);

                var ds1 = (IDataset)fc1;

                IFieldsEdit fields = new FieldsClass();
                fields.AddField(FieldUtils.CreateOIDField());
                fields.AddField(FieldUtils.CreateIntegerField(_fkFieldName));
                fields.AddField(FieldUtils.CreateTextField(_textFieldName, 200));

                string tableName = ds1.Name + "_table";
                ITable table     = TestWorkspaceUtils.CreateSimpleTable(_testWs, tableName, fields);

                var tableDataset = (IDataset)table;

                string             relClassName = "relClass" + Math.Abs(Environment.TickCount);
                IRelationshipClass rel          = TestWorkspaceUtils.CreateSimpleMNRelationship(
                    _testWs, relClassName, table, (ITable)fc1, "fkGrp", "fkFc");

                ((IWorkspaceEdit)_testWs).StartEditing(false);

                IFeature f = AddFeature(fc1,
                                        CurveConstruction.StartLine(0, 0)
                                        .LineTo(4, 0)
                                        .Curve);
                IRow r = AddRow(table, textFieldValue: "A");
                rel.CreateRelationship((IObject)r, f);
                r = AddRow(table, textFieldValue: "B");
                rel.CreateRelationship((IObject)r, f);

                f = AddFeature(fc1,
                               CurveConstruction.StartLine(4, 0)
                               .LineTo(4, 8)
                               .Curve);
                r = AddRow(table, textFieldValue: "A");
                rel.CreateRelationship((IObject)r, f);

                ((IWorkspaceEdit)_testWs).StopEditing(true);

                var     model  = new SimpleModel("model", fc1);
                Dataset mds1   = model.AddDataset(new ModelVectorDataset(ds1.Name));
                Dataset mdsRel = model.AddDataset(new ModelTableDataset(tableDataset.Name));

                var clsDesc   = new ClassDescriptor(typeof(QaRelRegularExpression));
                var tstDesc   = new TestDescriptor("GroupEnds", clsDesc);
                var condition = new QualityCondition("cndGroupEnds", tstDesc);
                QualityConditionParameterUtils.AddParameterValue(condition, "relationTables", mds1);
                QualityConditionParameterUtils.AddParameterValue(condition, "relationTables", mdsRel);
                QualityConditionParameterUtils.AddParameterValue(condition, "relation", relClassName);
                QualityConditionParameterUtils.AddParameterValue(condition, "join", JoinType.InnerJoin);
                QualityConditionParameterUtils.AddParameterValue(condition, "pattern", "A");
                QualityConditionParameterUtils.AddParameterValue(condition, "fieldNames",
                                                                 $"{tableName}.{_textFieldName}");
                QualityConditionParameterUtils.AddParameterValue(condition, "MatchIsError", false);
                //condition.AddParameterValue("PatternDescription", "Hallo");

                var factory = new QaRelRegularExpression {
                    Condition = condition
                };

                IList <ITest> tests =
                    factory.CreateTests(new SimpleDatasetOpener(model.MasterDatabaseWorkspaceContext));
                Assert.AreEqual(1, tests.Count);

                IList <QaError> errors = Run(tests[0], 1000);
                AssertErrors(1, errors);

                IList <InvolvedRow> involvedRows = errors[0].InvolvedRows;
                Assert.AreEqual(2, involvedRows.Count);
                Assert.AreEqual($"{tableName}.{_textFieldName}", errors[0].AffectedComponent);
                Assert.AreEqual("RegularExpression.FieldValueDoesNotMatchRegularExpression",
                                errors[0].IssueCode?.ID);

                // TOP-4945: expected involved dataset name: base table name, not joined table name
                Assert.IsTrue(tableName == involvedRows[0].TableName ||
                              tableName == involvedRows[1].TableName);
            }
            finally
            {
                _testWs = initTestWs;
            }
        }
Example #24
0
        public void CanTestPointNotNearWithConstraint()
        {
            IFeatureWorkspace testWs =
                TestWorkspaceUtils.CreateInMemoryWorkspace("QaPointNotNearTest");

            IFieldsEdit fields = new FieldsClass();

            fields.AddField(FieldUtils.CreateOIDField());
            fields.AddField(FieldUtils.CreateShapeField(
                                "Shape", esriGeometryType.esriGeometryPolygon,
                                SpatialReferenceUtils.CreateSpatialReference
                                    ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95,
                                    true), 1000, true));

            IFeatureClass polyFc = DatasetUtils.CreateSimpleFeatureClass(
                testWs, "polygonFc",
                fields);

            IFeatureClass pointFc = CreatePointClass(testWs, "pointFc");

            IFeature polyFeature = polyFc.CreateFeature();

            polyFeature.Shape =
                CurveConstruction.StartPoly(0, 0, 0)
                .LineTo(100, 0, 10)
                .LineTo(50, 100, 10)
                .ClosePolygon();
            polyFeature.Store();

            IFeature p1 = pointFc.CreateFeature();

            p1.Shape = GeometryFactory.CreatePoint(20, 1.5, 0);
            p1.Store();

            var test1  = new QaPointNotNear(pointFc, polyFc, 1.0);
            var runner = new QaContainerTestRunner(1000, test1);

            runner.Execute();
            Assert.AreEqual(1, runner.Errors.Count);

            var test2 = new QaPointNotNear(pointFc, polyFc, 1.0);

            test2.ValidRelationConstraints = new[] { "G1.ObjectId = 1" };
            runner = new QaContainerTestRunner(1000, test2);
            runner.Execute();
            Assert.AreEqual(0, runner.Errors.Count);

            var test3 = new QaPointNotNear(pointFc, polyFc, 2.0);

            test3.ValidRelationConstraints = new[] { "G2.ObjectId = 1" };
            runner = new QaContainerTestRunner(1000, test3);
            runner.Execute();
            Assert.AreEqual(0, runner.Errors.Count);

            var test4 = new QaPointNotNear(pointFc, polyFc, 2.0);

            test4.ValidRelationConstraints = new[] { "G1.ObjectId = G2.ObjectId" };
            runner = new QaContainerTestRunner(1000, test4);
            runner.Execute();
            Assert.AreEqual(0, runner.Errors.Count);

            var test5 = new QaPointNotNear(pointFc, polyFc, 2.0);

            test5.ValidRelationConstraints = new[] { "G1.ObjectId > G2.ObjectId" };
            runner = new QaContainerTestRunner(1000, test5);
            runner.Execute();
            Assert.AreEqual(1, runner.Errors.Count);
        }
        public void DuplicatesInOtherWorkspace()
        {
            IDomain domain1 = DomainUtils.AddDomain(_workspace,
                                                    DomainUtils.CreateCodedValueDomain(
                                                        "DOM_FIELD1",
                                                        esriFieldType.esriFieldTypeInteger,
                                                        "Description of DOM_FIELD1",
                                                        new CodedValue(1, "Value 1"),
                                                        new CodedValue(2, "Value 2")));
            IDomain domain2 = DomainUtils.AddDomain(_workspace,
                                                    DomainUtils.CreateCodedValueDomain(
                                                        "DOM_FIELD2",
                                                        esriFieldType.esriFieldTypeInteger,
                                                        "Description of DOM_FIELD2",
                                                        new CodedValue(1, "Value 1"),
                                                        new CodedValue(2, "Value 2")));

            // domain (not used in table) with duplicate name - this should not be reported since duplicates are searched in target (?)
            DomainUtils.AddDomain(_workspace,
                                  DomainUtils.CreateCodedValueDomain("DOM_FIELD3",
                                                                     esriFieldType
                                                                     .esriFieldTypeInteger,
                                                                     "Description of DOM_FIELD2",
                                                                     new CodedValue(1,
                                                                                    "Value 1"),
                                                                     new CodedValue(2,
                                                                                    "Value 2")));

            IField field1 = FieldUtils.CreateField("FIELD1", esriFieldType.esriFieldTypeInteger);
            IField field2 = FieldUtils.CreateField("FIELD2", esriFieldType.esriFieldTypeInteger);
            IField field3 = FieldUtils.CreateTextField("FIELD3", 20);

            ((IFieldEdit)field1).Domain_2 = domain1;
            ((IFieldEdit)field2).Domain_2 = domain2;

            ITable table = DatasetUtils.CreateTable(_workspace,
                                                    MethodBase.GetCurrentMethod().Name,
                                                    FieldUtils.CreateOIDField(),
                                                    field1, field2, field3);

            // add domains/table to target workspace

            IFeatureWorkspace targetWorkspace =
                TestWorkspaceUtils.CreateTestFgdbWorkspace($"{GetType().Name}_target");

            // same name, same description --> should be considered equal, no duplicate
            DomainUtils.AddDomain(targetWorkspace,
                                  DomainUtils.CreateCodedValueDomain("DOM_FIELD1",
                                                                     esriFieldType
                                                                     .esriFieldTypeInteger,
                                                                     "Description of DOM_FIELD1",
                                                                     new CodedValue(1,
                                                                                    "Value 1"),
                                                                     new CodedValue(2,
                                                                                    "Value 2")));

            // different name, same description --> should be reported
            DomainUtils.AddDomain(targetWorkspace,
                                  DomainUtils.CreateCodedValueDomain("DOM_FIELD4",
                                                                     esriFieldType
                                                                     .esriFieldTypeInteger,
                                                                     "Description of DOM_FIELD2",
                                                                     new CodedValue(1,
                                                                                    "Value 1"),
                                                                     new CodedValue(2,
                                                                                    "Value 2")));

            // different name, same description --> should be reported
            DomainUtils.AddDomain(targetWorkspace,
                                  DomainUtils.CreateRangeDomain("DOM_FIELD5",
                                                                esriFieldType.esriFieldTypeInteger,
                                                                0, 100,
                                                                "Description of DOM_FIELD2"));

            ITable targetTable = DatasetUtils.CreateTable(targetWorkspace,
                                                          MethodBase.GetCurrentMethod().Name,
                                                          FieldUtils.CreateOIDField(),
                                                          FieldUtils.CreateTextField("FIELD1",
                                                                                     10));

            const int  maxLength    = 25;
            const bool noDuplicates = true;
            var        runner       =
                new QaTestRunner(new QaSchemaFieldDomainDescriptions(table, maxLength,
                                                                     noDuplicates,
                                                                     targetTable));

            runner.Execute();

            Assert.AreEqual(1, runner.Errors.Count);
        }