예제 #1
0
        private static void TestNotReferenced(IFeatureWorkspace ws)
        {
            IFieldsEdit fields1 = new FieldsClass();

            fields1.AddField(FieldUtils.CreateOIDField());
            fields1.AddField(FieldUtils.CreateSmallIntegerField("Pk"));

            ITable tbl1 = DatasetUtils.CreateTable(ws, "TestNotReferenced1", null, fields1);

            IFieldsEdit fields2 = new FieldsClass();

            fields2.AddField(FieldUtils.CreateOIDField());
            fields2.AddField(FieldUtils.CreateIntegerField("Fk"));

            ITable tbl2 = DatasetUtils.CreateTable(ws, "TestNotReferenced2", null, fields2);

            IFieldsEdit fields3 = new FieldsClass();

            fields3.AddField(FieldUtils.CreateOIDField());
            fields3.AddField(FieldUtils.CreateIntegerField("Fk"));

            ITable tbl3 = DatasetUtils.CreateTable(ws, "TestNotReferenced3", null, fields3);

            // make sure the table is known by the workspace
            ((IWorkspaceEdit)ws).StartEditing(false);
            ((IWorkspaceEdit)ws).StopEditing(true);

            CreateRow(tbl1, 1);
            CreateRow(tbl1, 2);
            CreateRow(tbl1, 3);
            CreateRow(tbl1, 4);
            CreateRow(tbl1, 5);

            CreateRow(tbl2, 1);
            //CreateRow(tbl2, 3);
            CreateRow(tbl2, 5);

            CreateRow(tbl3, 2);
            CreateRow(tbl3, 4);

            var test = new QaUnreferencedRows(tbl1,
                                              new[] { tbl2, tbl3 },
                                              new[] { "pk,fk", "pk,fk" });

            using (var r = new QaTestRunner(test))
            {
                r.Execute();
                Assert.AreEqual(1, r.Errors.Count);
            }

            var container = new QaContainerTestRunner(10000, test);

            container.Execute();
            Assert.AreEqual(1, container.Errors.Count);
        }
        private static void TestConditionCoincidence(IFeatureWorkspace ws)
        {
            IFieldsEdit fields = new FieldsClass();

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

            IFeatureClass fc1 =
                DatasetUtils.CreateSimpleFeatureClass(ws, "TestConditionCoincidence1",
                                                      fields,
                                                      null);
            IFeatureClass fc2 =
                DatasetUtils.CreateSimpleFeatureClass(ws, "TestConditionCoincidence2",
                                                      fields,
                                                      null);

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

            {
                IFeature row = fc1.CreateFeature();
                row.set_Value(1, 1);
                row.Shape = CurveConstruction.StartLine(100, 100).LineTo(200, 200).Curve;
                row.Store();
            }
            {
                IFeature row = fc2.CreateFeature();
                row.set_Value(1, 1);
                row.Shape = CurveConstruction
                            .StartLine(100.5, 100).LineTo(200.5, 200).Curve;
                row.Store();
            }

            // test without ignore conditions --> line is near, but not coincident
            var test       = new QaPartCoincidenceOther(fc1, fc2, 1, 10);
            var testRunner = new QaTestRunner(test);

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

            // Same test with ignore conditions --> nothing near
            test = new QaPartCoincidenceOther(fc1, fc2, 1, 10);
            test.IgnoreNeighborCondition = "G1.LandID = G2.LandID";

            testRunner = new QaTestRunner(test);
            testRunner.Execute();
            Assert.AreEqual(0, testRunner.Errors.Count);
        }
예제 #3
0
        private static void TestNMRelation(IFeatureWorkspace ws)
        {
            IFieldsEdit fields1 = new FieldsClass();

            fields1.AddField(FieldUtils.CreateOIDField());
            fields1.AddField(FieldUtils.CreateIntegerField("Pk"));

            ITable tbl1 = DatasetUtils.CreateTable(ws, "TestNMRelation1", null, fields1);

            IFieldsEdit fields2 = new FieldsClass();

            fields2.AddField(FieldUtils.CreateOIDField());
            fields2.AddField(FieldUtils.CreateIntegerField("Fk"));

            ITable tbl2 = DatasetUtils.CreateTable(ws, "TestNMRelation2", null, fields2);

            IRelationshipClass rel = CreateSimpleMNRelationship(ws, "TestNMRelationRel", tbl1,
                                                                tbl2, "Pk", "Fk");

            ((IWorkspaceEdit)ws).StartEditing(false);
            IRow r11 = CreateRow(tbl1, 8);
            IRow r12 = CreateRow(tbl1, 12);
            IRow r13 = CreateRow(tbl1, 7);

            IRow r21 = CreateRow(tbl2, 9);
            IRow r22 = CreateRow(tbl2, 5);
            IRow r23 = CreateRow(tbl2, 4);

            Assert.NotNull(r12);             // not used otherwise

            rel.CreateRelationship((IObject)r11, (IObject)r21);
            rel.CreateRelationship((IObject)r11, (IObject)r23);
            rel.CreateRelationship((IObject)r13, (IObject)r22);

            r22.set_Value(1, 6);
            r22.Store();

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

            var test = new QaUnreferencedRows(tbl1,
                                              new[] { tbl2 },
                                              new[] { "pk,pk,TestNMRelationRel,fk,fk" });

            using (var r = new QaTestRunner(test))
            {
                r.Execute();
                Assert.AreEqual(2, r.Errors.Count);
            }

            var container = new QaContainerTestRunner(10000, test);

            container.Execute();
            Assert.AreEqual(2, container.Errors.Count);
        }
예제 #4
0
        public void CanUseMMinMaxAliasInMultiTableView()
        {
            IFeatureClass featureClass = CreateFeatureClass(
                "CanUseMMinMaxAliasInMultiTableView",
                esriGeometryType.esriGeometryPolyline,
                zAware: true, mAware: true);

            ITable table = CreateTable("CanUseMMinMaxAliasInMultiTableView_table",
                                       FieldUtils.CreateOIDField(),
                                       FieldUtils.CreateIntegerField("NUMBER"));

            IFeature f1 = featureClass.CreateFeature();

            f1.Shape = GeometryFactory.CreatePolyline(
                GeometryFactory.CreatePoint(0, 0, 1000, 100),
                GeometryFactory.CreatePoint(5, 5, 1000, 200));
            f1.Store();

            IFeature f2 = featureClass.CreateFeature();

            f2.Shape = GeometryFactory.CreatePolyline(
                GeometryFactory.CreatePoint(0, 0, 1000, 300),
                GeometryFactory.CreatePoint(5, 5, 1000, 400));
            f2.Store();

            int fieldIndexNumber = table.FindField("NUMBER");

            IRow r1 = table.CreateRow();

            r1.Value[fieldIndexNumber] = 100;
            r1.Store();

            IRow r2 = table.CreateRow();

            r2.Value[fieldIndexNumber] = 200;
            r2.Store();

            AssertFilteredMultiViewRowCount(1,
                                            "F.$ShapeMMin = 100 AND F.$ShapeMMax = 200 AND T.NUMBER = 100",
                                            featureClass, f1, table, r1);
            AssertFilteredMultiViewRowCount(0,
                                            "F.$ShapeMMin = 100 AND F.$ShapeMMax = 200 AND T.NUMBER = 10000",
                                            featureClass, f1, table, r1);

            AssertFilteredMultiViewRowCount(1,
                                            "F.$ShapeMMin = 300 AND F.$ShapeMMax = 400 AND T.NUMBER = 200",
                                            featureClass, f2, table, r2);
            AssertFilteredMultiViewRowCount(0,
                                            "F.$ShapeMMin = 300 AND F.$ShapeMMax = 400 AND T.NUMBER = 10000",
                                            featureClass, f2, table, r2);
        }
예제 #5
0
        public void TestMultipart()
        {
            IFeatureWorkspace ws = TestWorkspaceUtils.CreateInMemoryWorkspace("Testmultipart");

            IFieldsEdit fields = new FieldsClass();

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

            IFeatureClass fc =
                DatasetUtils.CreateSimpleFeatureClass(ws, "TestConnections", fields,
                                                      null);
            IList <ITable> tbls = new[] { (ITable)fc };

            {
                IFeature row = fc.CreateFeature();
                row.set_Value(1, 1);
                row.Shape =
                    CurveConstruction.StartLine(1, 1).LineTo(2, 2).MoveTo(3, 2).LineTo(4, 2).Curve;
                row.Store();
            }
            {
                IFeature row = fc.CreateFeature();
                row.set_Value(1, 2);
                row.Shape =
                    CurveConstruction.StartLine(1, 5).LineTo(2, 2).Curve;
                row.Store();
            }

            IList <QaConnectionRule> rules = new List <QaConnectionRule>
            {
                new QaConnectionRule(tbls, new[] { "LineTyp = 1" }),
                new QaConnectionRule(tbls, new[] { "LineTyp = 2" })
            };
            var test = new QaConnections(new[] { fc }, rules, 0);

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

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

            test.UseMultiParts = true;
            runner             = new QaContainerTestRunner(1000, test);
            Assert.AreEqual(1, runner.Execute());
        }
예제 #6
0
        public void CanFindDanglingSimpleKey()
        {
            const string key  = "KEY1";
            const string fkey = "FKEY1";

            ITable referencedTable = DatasetUtils.CreateTable(
                _workspace,
                string.Format("{0}_key", MethodBase.GetCurrentMethod().Name),
                FieldUtils.CreateOIDField(),
                FieldUtils.CreateIntegerField(key));

            ITable referencingTable = DatasetUtils.CreateTable(
                _workspace,
                string.Format("{0}_fkey", MethodBase.GetCurrentMethod().Name),
                FieldUtils.CreateOIDField(),
                FieldUtils.CreateTextField(fkey, 10));

            GdbObjectUtils.CreateRow(referencedTable,
                                     new Dictionary <string, object> {
                { key, 1000 }
            }).Store();
            GdbObjectUtils.CreateRow(referencedTable,
                                     new Dictionary <string, object> {
                { key, 2000 }
            }).Store();

            GdbObjectUtils.CreateRow(referencingTable,
                                     new Dictionary <string, object> {
                { fkey, "1000" }
            }).Store();
            GdbObjectUtils.CreateRow(referencingTable,
                                     new Dictionary <string, object> {
                { fkey, "2000" }
            }).Store();
            // dangling reference:
            GdbObjectUtils.CreateRow(referencingTable,
                                     new Dictionary <string, object> {
                { fkey, "3000" }
            }).Store();

            var runner = new QaTestRunner(
                new QaForeignKey(referencingTable, fkey, referencedTable, key));

            runner.Execute();

            Assert.AreEqual(1, runner.Errors.Count);
        }
예제 #7
0
        public void CanUseObjectIdAliasInMultiTableView()
        {
            IFeatureClass featureClass = CreateFeatureClass(
                "CanUseObjectIdAliasInMultiTableView",
                esriGeometryType.esriGeometryPoint);

            ITable table = CreateTable("CanUseObjectIdAliasInMultiTableView_table",
                                       FieldUtils.CreateOIDField(),
                                       FieldUtils.CreateIntegerField("NUMBER"));

            IFeature f1 = featureClass.CreateFeature();

            f1.Shape = GeometryFactory.CreatePoint(0, 0);
            f1.Store();

            IFeature f2 = featureClass.CreateFeature();

            f2.Shape = GeometryFactory.CreatePoint(5, 5);
            f2.Store();

            int fieldIndexNumber = table.FindField("NUMBER");

            IRow r1 = table.CreateRow();

            r1.Value[fieldIndexNumber] = 100;
            r1.Store();

            IRow r2 = table.CreateRow();

            r2.Value[fieldIndexNumber] = 200;
            r2.Store();

            AssertFilteredMultiViewRowCount(1,
                                            "F.$ObjectId = 1 AND T.$ObjectId = 1 AND T.NUMBER = 100",
                                            featureClass, f1, table, r1);
            AssertFilteredMultiViewRowCount(0,
                                            "F.$ObjectId = 1 AND T.$ObjectId = 1 AND T.NUMBER = 10000",
                                            featureClass, f1, table, r1);

            AssertFilteredMultiViewRowCount(1,
                                            "F.$ObjectId = 2 AND T.$ObjectId = 2 AND T.NUMBER = 200",
                                            featureClass, f2, table, r2);
            AssertFilteredMultiViewRowCount(0,
                                            "F.$ObjectId = 2 AND T.$ObjectId = 2 AND T.NUMBER = 10000",
                                            featureClass, f2, table, r2);
        }
        public void TestExcludedFields()
        {
            IFeatureWorkspace initTestWs = _testWs;

            try
            {
                _testWs = TestWorkspaceUtils.CreateInMemoryWorkspace("QaRegularExpression");

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

                const string tableName = "RegEx_table_excluded";
                ITable       table     =
                    TestWorkspaceUtils.CreateSimpleTable(_testWs, tableName, fields);

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

                AddRow(table, textFieldValue: "A", textFieldValue2: "X");
                AddRow(table, textFieldValue: "B", textFieldValue2: "X");
                AddRow(table, textFieldValue: "A", textFieldValue2: "X");

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

                var test =
                    new QaRegularExpression(table, "A", _textFieldName2)
                {
                    FieldListType = FieldListType.IgnoredFields
                };

                IList <QaError> errors = Run(test, 1000);
                AssertErrors(1, errors);

                IList <InvolvedRow> involvedRows = errors[0].InvolvedRows;
                Assert.AreEqual(1, involvedRows.Count);
                Assert.AreEqual($"{_textFieldName}", errors[0].AffectedComponent);
                Assert.AreEqual("RegularExpression.FieldValueDoesNotMatchRegularExpression",
                                errors[0].IssueCode?.ID);
            }
            finally
            {
                _testWs = initTestWs;
            }
        }
예제 #9
0
        private ITable CreateTestTable([NotNull] string tableName, out int cvFieldIndex,
                                       out int rangeFieldIndex)
        {
            IRangeDomain rangeDomain = DomainUtils.CreateRangeDomain(
                tableName + "_range",
                esriFieldType.esriFieldTypeInteger, 0, 100);

            DomainUtils.AddDomain(_testWs, rangeDomain);

            ICodedValueDomain cvDomain = DomainUtils.CreateCodedValueDomain(
                tableName + "_cv",
                esriFieldType.esriFieldTypeInteger, null,
                esriSplitPolicyType.esriSPTDuplicate,
                esriMergePolicyType.esriMPTDefaultValue,
                new CodedValue(1, "Value 1"),
                new CodedValue(2, "Value 2"),
                new CodedValue(3, "Value 3"));

            DomainUtils.AddDomain(_testWs, cvDomain);

            IField cvField = FieldUtils.CreateIntegerField("CvField");

            ((IFieldEdit)cvField).Domain_2 = (IDomain)cvDomain;

            IField rangeField = FieldUtils.CreateIntegerField("RangeField");

            ((IFieldEdit)rangeField).Domain_2 = (IDomain)rangeDomain;

            ITable table = DatasetUtils.CreateTable(_testWs,
                                                    tableName,
                                                    FieldUtils.CreateOIDField(),
                                                    cvField,
                                                    rangeField);

            cvFieldIndex    = table.FindField(cvField.Name);
            rangeFieldIndex = table.FindField(rangeField.Name);

            return(table);
        }
예제 #10
0
        public void CanCreateIntegerCodedValueDomainConstraint()
        {
            ICodedValueDomain integerCvDomain = DomainUtils.CreateCodedValueDomain(
                "CanCreateIntegerCodedValueDomainConstraint",
                esriFieldType.esriFieldTypeInteger, null,
                esriSplitPolicyType.esriSPTDuplicate,
                esriMergePolicyType.esriMPTDefaultValue,
                new CodedValue(1, "Value 1"),
                new CodedValue(2, "Value 2"),
                new CodedValue(3, "Value 3"));

            DomainUtils.AddDomain(_testWs, integerCvDomain);

            IField integerField = FieldUtils.CreateIntegerField("IntegerField");

            ((IFieldEdit)integerField).Domain_2 = (IDomain)integerCvDomain;

            ITable table = DatasetUtils.CreateTable(_testWs,
                                                    "CanCreateIntegerCodedValueDomainConstraint",
                                                    FieldUtils.CreateOIDField(),
                                                    integerField);

            List <ConstraintNode> constraints =
                GdbConstraintUtils.GetGdbConstraints(table);

            Assert.NotNull(constraints);

            foreach (ConstraintNode constraint in constraints)
            {
                Console.WriteLine(constraint);
            }

            Assert.AreEqual(2, constraints.Count);

            Assert.AreEqual("IntegerField IS NULL OR (IntegerField IN (1, 2, 3))",
                            constraints[0].Condition);
            Assert.AreEqual("OBJECTID >= 0", constraints[1].Condition);
        }
예제 #11
0
        private static IFeatureClass CreateLineClass([NotNull] IFeatureWorkspace ws)
        {
            IFieldsEdit fields = new FieldsClass();

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

            Thread.Sleep(10);
            IFeatureClass featureClass =
                DatasetUtils.CreateSimpleFeatureClass(
                    ws, "line_" + Environment.TickCount, fields, null);

            // make sure the table is known by the workspace
            ((IWorkspaceEdit)ws).StartEditing(false);
            ((IWorkspaceEdit)ws).StopEditing(true);

            return(featureClass);
        }
예제 #12
0
        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;
            }
        }
예제 #13
0
        private void TestWithTolerance(IFeatureWorkspace ws)
        {
            IFieldsEdit fields = new FieldsClass();

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

            IFeatureClass fc =
                DatasetUtils.CreateSimpleFeatureClass(ws, "TestWithTolerance", fields,
                                                      null);
            IList <ITable> tbls = new[] { (ITable)fc };

            // make sure the table is known by the workspace
            ((IWorkspaceEdit)ws).StartEditing(false);
            ((IWorkspaceEdit)ws).StopEditing(true);

            {
                IFeature row = fc.CreateFeature();
                row.set_Value(1, 1);
                row.Shape =
                    CurveConstruction.StartLine(100, 99.93).LineTo(200, 200).Curve;
                row.Store();
            }
            {
                IFeature row = fc.CreateFeature();
                row.set_Value(1, 2);
                row.Shape =
                    CurveConstruction.StartLine(100, 99.95).LineTo(100, 200).Curve;
                row.Store();
            }

            IList <QaConnectionRule> rules = new[]
            {
                new QaConnectionRule(tbls, new[] { "LineTyp = 1" }),
                new QaConnectionRule(tbls, new[] { "LineTyp = 2" })
            };
            var test = new QaConnections(new[] { fc }, rules, 0.2);

            test.QaError += Test_QaError;
            _errorCount   = 0;
            test.Execute();
            Assert.AreEqual(1, _errorCount);
            test.QaError -= Test_QaError;

            var container = new TestContainer();

            container.AddTest(test);
            container.TileSize = 100;
            IEnvelope box = new EnvelopeClass();

            container.QaError += Test_QaError;

            _errorCount = 0;
            container.Execute();
            Assert.AreEqual(1, _errorCount);

            _errorCount = 0;
            box.PutCoords(0, 0, 300, 300);
            container.Execute(box);
            Assert.AreEqual(1, _errorCount);

            _errorCount = 0;
            box.PutCoords(1, 0, 300, 300);
            container.Execute(box);
            Assert.AreEqual(1, _errorCount);
        }
예제 #14
0
        public void CanCheckTupleKeysContainingNull()
        {
            const string key1  = "KEY1";
            const string key2  = "KEY2";
            const string fkey1 = "FKEY1";
            const string fkey2 = "FKEY2";

            ITable referencedTable = DatasetUtils.CreateTable(
                _workspace,
                string.Format("{0}_keys", MethodBase.GetCurrentMethod().Name),
                FieldUtils.CreateOIDField(),
                FieldUtils.CreateIntegerField(key1),
                FieldUtils.CreateTextField(key2, 10));

            ITable referencingTable = DatasetUtils.CreateTable(
                _workspace,
                string.Format("{0}_fkeys", MethodBase.GetCurrentMethod().Name),
                FieldUtils.CreateOIDField(),
                FieldUtils.CreateTextField(fkey1, 10),
                FieldUtils.CreateTextField(fkey2, 10));

            GdbObjectUtils.CreateRow(referencedTable,
                                     new Dictionary <string, object>
            {
                { key1, 1000 },
                { key2, "AAA" }
            }).Store();
            GdbObjectUtils.CreateRow(referencedTable,
                                     new Dictionary <string, object>
            {
                { key1, 2000 },
                { key2, null }
            }).Store();

            GdbObjectUtils.CreateRow(referencingTable,
                                     new Dictionary <string, object>
            {
                { fkey1, "1000" },
                { fkey2, "AAA" }
            }).Store();
            // valid reference with null key
            GdbObjectUtils.CreateRow(referencingTable,
                                     new Dictionary <string, object>
            {
                { fkey1, "2000" },
                { fkey2, null }
            }).Store();
            // dangling reference:
            GdbObjectUtils.CreateRow(referencingTable,
                                     new Dictionary <string, object>
            {
                { fkey1, "3000" },
                { fkey2, null }
            }).Store();

            var runner = new QaTestRunner(
                new QaForeignKey(referencingTable, new[] { fkey1, fkey2 },
                                 referencedTable, new[] { key1, key2 }));

            runner.Execute();

            Assert.AreEqual(1, runner.Errors.Count);
        }
예제 #15
0
        public void CanTestPointNotNearPolylineRightSide()
        {
            IFeatureWorkspace testWs =
                TestWorkspaceUtils.CreateInMemoryWorkspace(
                    "CanTestPointNotNearPolylineRightSide");

            IFieldsEdit fields = new FieldsClass();

            fields.AddField(FieldUtils.CreateOIDField());
            fields.AddField(FieldUtils.CreateDoubleField("minDistance"));
            fields.AddField(FieldUtils.CreateDoubleField("rightSideDistance"));
            fields.AddField(FieldUtils.CreateIntegerField("flip"));
            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.set_Value(1, 5);
            polyFeature.set_Value(2, 10);
            polyFeature.set_Value(3, 1);
            polyFeature.Shape = CurveConstruction.StartLine(0, 0, 0)
                                .LineTo(100, 0, 10)
                                .LineTo(100, 100, 10)
                                .Curve;
            polyFeature.Store();

            IFeature p1 = pointFc.CreateFeature();

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

            IFeature p2 = pointFc.CreateFeature();

            p2.Shape = GeometryFactory.CreatePoint(-0.1, 7, 0);
            p2.Store();

            IFeature p3 = pointFc.CreateFeature();

            p3.Shape = GeometryFactory.CreatePoint(93, 100.1, 10);
            p3.Store();

            //QaPointNotNear.UseQueryPointAndDistance = true;

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

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

            var test2 = new QaPointNotNear(pointFc, new[] { polyFc }, 10.0, null,
                                           new[] { "minDistance" });

            runner = new QaContainerTestRunner(1000, test2);
            runner.Execute();
            Assert.AreEqual(0, runner.Errors.Count);

            var test3 = new QaPointNotNear(pointFc, new[] { polyFc }, 10, null, new[] { "5" },
                                           new[] { "rightSideDistance" },
                                           null);

            runner = new QaContainerTestRunner(1000, test3);
            runner.Execute();
            Assert.AreEqual(0, runner.Errors.Count);

            var test4 = new QaPointNotNear(pointFc, new[] { polyFc }, 10, null,
                                           new[] { "5" },
                                           new[] { "rightSideDistance" },
                                           new[] { "true" });

            runner = new QaContainerTestRunner(1000, test4);
            runner.Execute();
            Assert.AreEqual(3, runner.Errors.Count);

            var test5 = new QaPointNotNear(pointFc, new[] { polyFc }, 10, null,
                                           new[] { "5" },
                                           new[] { "rightSideDistance" },
                                           new[] { "flip > 0" });

            runner = new QaContainerTestRunner(1000, test5);
            runner.Execute();
            Assert.AreEqual(3, runner.Errors.Count);
        }
예제 #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);
        }
예제 #17
0
        private static void TestInvalidArguments(IFeatureWorkspace ws)
        {
            ISpatialReference sr = SpatialReferenceUtils.CreateSpatialReference
                                       ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95, true);

            ISpatialReference srM = SpatialReferenceUtils.CreateSpatialReference
                                        ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95, true);

            SpatialReferenceUtils.SetMDomain(srM, 0, 1000000, 0.001, 0.002);

            IFieldsEdit fieldsPoint = new FieldsClass();

            fieldsPoint.AddField(FieldUtils.CreateOIDField());
            fieldsPoint.AddField(FieldUtils.CreateDoubleField("DoubleField"));
            fieldsPoint.AddField(FieldUtils.CreateIntegerField("IntField"));
            fieldsPoint.AddField(FieldUtils.CreateTextField("StringField", 50));
            fieldsPoint.AddField(FieldUtils.CreateShapeField(
                                     "Shape", esriGeometryType.esriGeometryPoint, sr, 1000));

            IFeatureClass fcPoints =
                DatasetUtils.CreateSimpleFeatureClass(ws, "InvalidArgumentsPoints", fieldsPoint);

            IFieldsEdit fieldsLine = new FieldsClass();

            fieldsLine.AddField(FieldUtils.CreateOIDField());
            fieldsLine.AddField(FieldUtils.CreateShapeField(
                                    "Shape", esriGeometryType.esriGeometryPolyline, sr, 1000));

            IFeatureClass fcLines =
                DatasetUtils.CreateSimpleFeatureClass(ws, "InvalidArgumentsLines", fieldsLine);

            IFieldsEdit fieldsLineM = new FieldsClass();

            fieldsLineM.AddField(FieldUtils.CreateOIDField());
            fieldsLineM.AddField(FieldUtils.CreateShapeField(
                                     "Shape", esriGeometryType.esriGeometryPolyline, srM, 1000,
                                     false, true));

            IFeatureClass fcLinesM =
                DatasetUtils.CreateSimpleFeatureClass(ws, "InvalidArgumentsLinesM", fieldsLineM);

            // make sure the table is known by the workspace
            ((IWorkspaceEdit)ws).StartEditing(false);
            ((IWorkspaceEdit)ws).StopEditing(true);

            var success = true;

            try
            {
                var test = new QaMeasuresAtPoints(fcPoints, null, new[] { fcLines }, 0.01, 0.01,
                                                  LineMSource.Nearest, false);
                Assert.IsNotNull(test);
            }
            catch (ArgumentException)
            {
                success = false;
            }

            Assert.IsFalse(success);

            success = true;
            try
            {
                var test = new QaMeasuresAtPoints(fcPoints, null, new[] { fcLinesM }, 0.01, 0.01,
                                                  LineMSource.Nearest, false);
                Assert.IsNotNull(test);
            }
            catch (ArgumentException)
            {
                success = false;
            }

            Assert.IsFalse(success);

            success = true;
            try
            {
                var test = new QaMeasuresAtPoints(fcPoints, "UnknownField", new[] { fcLinesM },
                                                  0.01, 0.01, LineMSource.Nearest, false);
                Assert.IsNotNull(test);
            }
            catch (EvaluateException)
            {
                success = false;
            }

            Assert.IsFalse(success);
        }
예제 #18
0
        private static void TestWithErrors(IFeatureWorkspace ws)
        {
            ISpatialReference srM = SpatialReferenceUtils.CreateSpatialReference
                                        ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95, true);

            SpatialReferenceUtils.SetMDomain(srM, 0, 1000000, 0.001, 0.002);

            IFieldsEdit fieldsPoint = new FieldsClass();

            fieldsPoint.AddField(FieldUtils.CreateOIDField());
            fieldsPoint.AddField(FieldUtils.CreateDoubleField("DoubleField"));
            fieldsPoint.AddField(FieldUtils.CreateIntegerField("IntField"));
            fieldsPoint.AddField(FieldUtils.CreateTextField("StringField", 50));
            fieldsPoint.AddField(FieldUtils.CreateDoubleField("EmptyField"));
            fieldsPoint.AddField(FieldUtils.CreateShapeField(
                                     "Shape", esriGeometryType.esriGeometryPoint, srM, 1000, false,
                                     true));

            IFeatureClass fcPoints =
                DatasetUtils.CreateSimpleFeatureClass(ws, "WithErrorsPoints", fieldsPoint);

            IFieldsEdit fieldsLine = new FieldsClass();

            fieldsLine.AddField(FieldUtils.CreateOIDField());
            fieldsLine.AddField(FieldUtils.CreateShapeField(
                                    "Shape", esriGeometryType.esriGeometryPolyline, srM, 1000,
                                    false, true));

            IFeatureClass fcLines =
                DatasetUtils.CreateSimpleFeatureClass(ws, "WithErrorsLines", fieldsLine);

            // make sure the table is known by the workspace
            ((IWorkspaceEdit)ws).StartEditing(false);
            ((IWorkspaceEdit)ws).StopEditing(true);

            IFeature point1 = fcPoints.CreateFeature();

            point1.set_Value(1, 2);             // DoubleField
            point1.set_Value(2, 2);             // IntField
            point1.set_Value(3, "A");           // StringField
            point1.Shape = CreatePoint(100, 100, 2);
            point1.Store();

            IFeature   fLine1 = fcLines.CreateFeature();
            IPolycurve l1     =
                CurveConstruction.StartLine(CreatePoint(100, 100, 1))
                .LineTo(CreatePoint(200, 200, 1))
                .Curve;

            ((IMAware)l1).MAware = true;
            fLine1.Shape         = l1;
            fLine1.Store();

            var test = new QaMeasuresAtPoints(fcPoints, null, new[] { fcLines }, 0.01, 0.01,
                                              LineMSource.Nearest, false);
            var container = new QaContainerTestRunner(10000, test);

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

            test = new QaMeasuresAtPoints(fcPoints, "DoubleField", new[] { fcLines }, 0.01,
                                          0.01, LineMSource.Nearest, false);
            container = new QaContainerTestRunner(10000, test);
            container.Execute();
            Assert.AreEqual(1, container.Errors.Count);

            test = new QaMeasuresAtPoints(fcPoints, "IntField", new[] { fcLines }, 0.01, 0.01,
                                          LineMSource.Nearest, false);
            container = new QaContainerTestRunner(10000, test);
            container.Execute();
            Assert.AreEqual(1, container.Errors.Count);

            test = new QaMeasuresAtPoints(fcPoints, "EmptyField", new[] { fcLines }, 0.01, 0.01,
                                          LineMSource.Nearest, false);
            container = new QaContainerTestRunner(10000, test);
            container.Execute();
            Assert.AreEqual(1, container.Errors.Count);

            test = new QaMeasuresAtPoints(fcPoints, "0.5 * EmptyField", new[] { fcLines }, 0.01,
                                          0.01, LineMSource.Nearest, false);
            container = new QaContainerTestRunner(10000, test);
            container.Execute();
            Assert.AreEqual(1, container.Errors.Count);
        }
예제 #19
0
        public void TestExpression()
        {
            const string intField    = "Int";
            const string doubleField = "Dbl";
            IFieldsEdit  fields      = new FieldsClass();

            fields.AddField(FieldUtils.CreateOIDField());
            fields.AddField(FieldUtils.CreateIntegerField(intField));
            fields.AddField(FieldUtils.CreateDoubleField(doubleField, doubleField));

            ITable tbl = DatasetUtils.CreateTable(_testWs, "TestExpression", null, fields);

            const int n = 10;

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

            const double x               = 2;
            string       expression      = string.Format("{0}, {1}, {2}", x, intField, doubleField);
            const bool   useAsConstraint = false;
            TableView    view            = TableViewFactory.Create(tbl, expression, useAsConstraint);

            DataColumn constColumn = view.AddColumn("constValue", typeof(double));

            constColumn.Expression = x.ToString(CultureInfo.InvariantCulture);

            DataColumn intColumn = view.AddColumn("intValue", typeof(double));

            intColumn.Expression = intField;

            DataColumn exprColumn = view.AddColumn("exprValue", typeof(double));

            exprColumn.Expression = string.Format("2.3 * {0} + 1.2 * {1}", doubleField,
                                                  intField);

            DataColumn doubleColumn = view.AddColumn("doubleValue", typeof(double));

            doubleColumn.Expression = doubleField;

            foreach (IRow row in new EnumCursor(tbl, null, false))
            {
                view.ClearRows();
                var i = (int)row.Value[1];
                var d = (double)row.Value[2];

                DataRow expressionRow = Assert.NotNull(view.Add(row));

                var constVal = (double)expressionRow[constColumn.ColumnName];
                NUnit.Framework.Assert.AreEqual(x, constVal);

                var intVal = (double)expressionRow[intColumn.ColumnName];
                NUnit.Framework.Assert.AreEqual(i, intVal);

                var doubleVal = (double)expressionRow[doubleColumn.ColumnName];
                NUnit.Framework.Assert.AreEqual(d, doubleVal);

                var exprVal = (double)expressionRow[exprColumn.ColumnName];
                NUnit.Framework.Assert.AreEqual(2.3 * d + 1.2 * i, exprVal);
            }
        }