System.Data.Tests.DataTableReaderTest.TestSchemaTable C# (CSharp) Метод

TestSchemaTable() приватный Метод

private TestSchemaTable ( ) : void
Результат void
        public void TestSchemaTable()
        {
            var ds = new DataSet();
            DataTable testTable = new DataTable("TestTable1");
            DataTable testTable1 = new DataTable();

            testTable.Namespace = "TableNamespace";

            testTable1.Columns.Add("col1", typeof(int));
            testTable1.Columns.Add("col2", typeof(int));
            ds.Tables.Add(testTable);
            ds.Tables.Add(testTable1);

            //create a col for standard datatype

            testTable.Columns.Add("col_string");
            testTable.Columns.Add("col_string_fixed");
            testTable.Columns["col_string_fixed"].MaxLength = 10;
            testTable.Columns.Add("col_int", typeof(int));
            testTable.Columns.Add("col_decimal", typeof(decimal));
            testTable.Columns.Add("col_datetime", typeof(DateTime));
            testTable.Columns.Add("col_float", typeof(float));

            // Check for col constraints/properties
            testTable.Columns.Add("col_readonly").ReadOnly = true;

            testTable.Columns.Add("col_autoincrement", typeof(long)).AutoIncrement = true;
            testTable.Columns["col_autoincrement"].AutoIncrementStep = 5;
            testTable.Columns["col_autoincrement"].AutoIncrementSeed = 10;

            testTable.Columns.Add("col_pk");
            testTable.PrimaryKey = new DataColumn[] { testTable.Columns["col_pk"] };

            testTable.Columns.Add("col_unique");
            testTable.Columns["col_unique"].Unique = true;

            testTable.Columns.Add("col_defaultvalue");
            testTable.Columns["col_defaultvalue"].DefaultValue = "DefaultValue";

            testTable.Columns.Add("col_expression_local", typeof(int));
            testTable.Columns["col_expression_local"].Expression = "col_int*5";

            ds.Relations.Add("rel", new DataColumn[] { testTable1.Columns["col1"] },
                    new DataColumn[] { testTable.Columns["col_int"] }, false);
            testTable.Columns.Add("col_expression_ext");
            testTable.Columns["col_expression_ext"].Expression = "parent.col2";

            testTable.Columns.Add("col_namespace");
            testTable.Columns["col_namespace"].Namespace = "ColumnNamespace";

            testTable.Columns.Add("col_mapping");
            testTable.Columns["col_mapping"].ColumnMapping = MappingType.Attribute;

            DataTable schemaTable = testTable.CreateDataReader().GetSchemaTable();

            Assert.Equal(25, schemaTable.Columns.Count);
            Assert.Equal(testTable.Columns.Count, schemaTable.Rows.Count);

            //True for all rows
            for (int i = 0; i < schemaTable.Rows.Count; ++i)
            {
                Assert.Equal(testTable.TableName, schemaTable.Rows[i]["BaseTableName"]);
                Assert.Equal(ds.DataSetName, schemaTable.Rows[i]["BaseCatalogName"]);
                Assert.Equal(DBNull.Value, schemaTable.Rows[i]["BaseSchemaName"]);
                Assert.Equal(schemaTable.Rows[i]["BaseColumnName"], schemaTable.Rows[i]["ColumnName"]);
                Assert.False((bool)schemaTable.Rows[i]["IsRowVersion"]);
            }

            Assert.Equal("col_string", schemaTable.Rows[0]["ColumnName"]);
            Assert.Equal(typeof(string), schemaTable.Rows[0]["DataType"]);
            Assert.Equal(-1, schemaTable.Rows[0]["ColumnSize"]);
            Assert.Equal(0, schemaTable.Rows[0]["ColumnOrdinal"]);
            // ms.net contradicts documented behavior
            Assert.False((bool)schemaTable.Rows[0]["IsLong"]);

            Assert.Equal("col_string_fixed", schemaTable.Rows[1]["ColumnName"]);
            Assert.Equal(typeof(string), schemaTable.Rows[1]["DataType"]);
            Assert.Equal(10, schemaTable.Rows[1]["ColumnSize"]);
            Assert.Equal(1, schemaTable.Rows[1]["ColumnOrdinal"]);
            Assert.False((bool)schemaTable.Rows[1]["IsLong"]);

            Assert.Equal("col_int", schemaTable.Rows[2]["ColumnName"]);
            Assert.Equal(typeof(int), schemaTable.Rows[2]["DataType"]);
            Assert.Equal(DBNull.Value, schemaTable.Rows[2]["NumericPrecision"]);
            Assert.Equal(DBNull.Value, schemaTable.Rows[2]["NumericScale"]);
            Assert.Equal(-1, schemaTable.Rows[2]["ColumnSize"]);
            Assert.Equal(2, schemaTable.Rows[2]["ColumnOrdinal"]);

            Assert.Equal("col_decimal", schemaTable.Rows[3]["ColumnName"]);
            Assert.Equal(typeof(decimal), schemaTable.Rows[3]["DataType"]);
            // When are the Precision and Scale Values set ? 
            Assert.Equal(DBNull.Value, schemaTable.Rows[3]["NumericPrecision"]);
            Assert.Equal(DBNull.Value, schemaTable.Rows[3]["NumericScale"]);
            Assert.Equal(-1, schemaTable.Rows[3]["ColumnSize"]);
            Assert.Equal(3, schemaTable.Rows[3]["ColumnOrdinal"]);

            Assert.Equal("col_datetime", schemaTable.Rows[4]["ColumnName"]);
            Assert.Equal(typeof(DateTime), schemaTable.Rows[4]["DataType"]);
            Assert.Equal(4, schemaTable.Rows[4]["ColumnOrdinal"]);

            Assert.Equal("col_float", schemaTable.Rows[5]["ColumnName"]);
            Assert.Equal(typeof(float), schemaTable.Rows[5]["DataType"]);
            Assert.Equal(5, schemaTable.Rows[5]["ColumnOrdinal"]);
            Assert.Equal(DBNull.Value, schemaTable.Rows[5]["NumericPrecision"]);
            Assert.Equal(DBNull.Value, schemaTable.Rows[5]["NumericScale"]);
            Assert.Equal(-1, schemaTable.Rows[5]["ColumnSize"]);

            Assert.Equal("col_readonly", schemaTable.Rows[6]["ColumnName"]);
            Assert.True((bool)schemaTable.Rows[6]["IsReadOnly"]);

            Assert.Equal("col_autoincrement", schemaTable.Rows[7]["ColumnName"]);
            Assert.True((bool)schemaTable.Rows[7]["IsAutoIncrement"]);
            Assert.Equal(10L, schemaTable.Rows[7]["AutoIncrementSeed"]);
            Assert.Equal(5L, schemaTable.Rows[7]["AutoIncrementStep"]);
            Assert.False((bool)schemaTable.Rows[7]["IsReadOnly"]);

            Assert.Equal("col_pk", schemaTable.Rows[8]["ColumnName"]);
            Assert.True((bool)schemaTable.Rows[8]["IsKey"]);
            Assert.True((bool)schemaTable.Rows[8]["IsUnique"]);

            Assert.Equal("col_unique", schemaTable.Rows[9]["ColumnName"]);
            Assert.True((bool)schemaTable.Rows[9]["IsUnique"]);

            Assert.Equal("col_defaultvalue", schemaTable.Rows[10]["ColumnName"]);
            Assert.Equal("DefaultValue", schemaTable.Rows[10]["DefaultValue"]);

            Assert.Equal("col_expression_local", schemaTable.Rows[11]["ColumnName"]);
            Assert.Equal("col_int*5", schemaTable.Rows[11]["Expression"]);
            Assert.True((bool)schemaTable.Rows[11]["IsReadOnly"]);

            // if expression depends on a external col, then set Expression as null..
            Assert.Equal("col_expression_ext", schemaTable.Rows[12]["ColumnName"]);
            Assert.Equal(DBNull.Value, schemaTable.Rows[12]["Expression"]);
            Assert.True((bool)schemaTable.Rows[12]["IsReadOnly"]);

            Assert.Equal("col_namespace", schemaTable.Rows[13]["ColumnName"]);
            Assert.Equal("TableNamespace", schemaTable.Rows[13]["BaseTableNamespace"]);
            Assert.Equal("TableNamespace", schemaTable.Rows[12]["BaseColumnNamespace"]);
            Assert.Equal("ColumnNamespace", schemaTable.Rows[13]["BaseColumnNamespace"]);

            Assert.Equal("col_mapping", schemaTable.Rows[14]["ColumnName"]);
            Assert.Equal(MappingType.Element, (MappingType)schemaTable.Rows[13]["ColumnMapping"]);
            Assert.Equal(MappingType.Attribute, (MappingType)schemaTable.Rows[14]["ColumnMapping"]);
        }