1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
|
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
namespace System.Data.Entity.SqlServer
{
using System.Data.Entity.Spatial;
using System.Data.Entity.SqlServer.Utilities;
using System.Data.SqlTypes;
using System.IO;
using System.Reflection;
using System.Threading;
using System.Threading.Tasks;
using Moq;
using Xunit;
public class SqlSpatialDataReaderTests
{
[Fact]
public void GetGeography_roundtrips_DbGeography()
{
var dbGeography = DbGeography.FromText("POINT (90 50)");
var mockSqlDataReader = CreateSqlDataReaderWrapper(dbGeography.ProviderValue, "sys.geography");
var sqlSpatialDataReader = new SqlSpatialDataReader(SqlSpatialServices.Instance, mockSqlDataReader);
var convertedDbGeography = sqlSpatialDataReader.GetGeography(0);
Assert.Equal(dbGeography.WellKnownValue.WellKnownText, convertedDbGeography.WellKnownValue.WellKnownText);
}
#if !NET40
[Fact]
public void GetGeographyAsync_roundtrips_DbGeography()
{
var dbGeography = DbGeography.FromText("POINT (90 50)");
var mockSqlDataReader = CreateSqlDataReaderWrapper(dbGeography.ProviderValue, "sys.geography");
var sqlSpatialDataReader = new SqlSpatialDataReader(SqlSpatialServices.Instance, mockSqlDataReader);
var convertedDbGeography = sqlSpatialDataReader.GetGeographyAsync(0).Result;
Assert.Equal(dbGeography.WellKnownValue.WellKnownText, convertedDbGeography.WellKnownValue.WellKnownText);
}
#endif
[Fact]
public void GetGeometry_roundtrips_DbGeometry()
{
var dbGeometry = DbGeometry.FromText("POINT (90 50)");
var mockSqlDataReader = CreateSqlDataReaderWrapper(dbGeometry.ProviderValue, "sys.geometry");
var sqlSpatialDataReader = new SqlSpatialDataReader(SqlSpatialServices.Instance, mockSqlDataReader);
var convertedDbGeometry = sqlSpatialDataReader.GetGeometry(0);
Assert.Equal(dbGeometry.WellKnownValue.WellKnownText, convertedDbGeometry.WellKnownValue.WellKnownText);
}
#if !NET40
[Fact]
public void GetGeometryAsync_roundtrips_DbGeometry()
{
var dbGeometry = DbGeometry.FromText("POINT (90 50)");
var sqlDataReaderWrapper = CreateSqlDataReaderWrapper(dbGeometry.ProviderValue, "sys.geometry");
var sqlSpatialDataReader = new SqlSpatialDataReader(SqlSpatialServices.Instance, sqlDataReaderWrapper);
var convertedDbGeometry = sqlSpatialDataReader.GetGeometryAsync(0).Result;
Assert.Equal(dbGeometry.WellKnownValue.WellKnownText, convertedDbGeometry.WellKnownValue.WellKnownText);
}
#endif
[Fact]
public void IsGeographyColumn_returns_true_for_geography_column()
{
var dbGeography = DbGeography.FromText("POINT (90 50)");
var mockSqlDataReader = CreateSqlDataReaderWrapper(dbGeography.ProviderValue, "sys.geography");
var sqlSpatialDataReader = new SqlSpatialDataReader(SqlSpatialServices.Instance, mockSqlDataReader);
Assert.True(sqlSpatialDataReader.IsGeographyColumn(0));
}
[Fact]
public void IsGeographyColumn_returns_false_for_geometry_column()
{
var dbGeometry = DbGeometry.FromText("POINT (90 50)");
var mockSqlDataReader = CreateSqlDataReaderWrapper(dbGeometry.ProviderValue, "sys.geometry");
var sqlSpatialDataReader = new SqlSpatialDataReader(SqlSpatialServices.Instance, mockSqlDataReader);
Assert.False(sqlSpatialDataReader.IsGeographyColumn(0));
}
[Fact]
public void IsGeometryColumn_returns_true_for_geometry_column()
{
var dbGeometry = DbGeometry.FromText("POINT (90 50)");
var mockSqlDataReader = CreateSqlDataReaderWrapper(dbGeometry.ProviderValue, "sys.geometry");
var sqlSpatialDataReader = new SqlSpatialDataReader(SqlSpatialServices.Instance, mockSqlDataReader);
Assert.True(sqlSpatialDataReader.IsGeometryColumn(0));
}
[Fact]
public void IsGeometryColumn_returns_false_for_geography_column()
{
var dbGeography = DbGeography.FromText("POINT (90 50)");
var mockSqlDataReader = CreateSqlDataReaderWrapper(dbGeography.ProviderValue, "sys.geography");
var sqlSpatialDataReader = new SqlSpatialDataReader(SqlSpatialServices.Instance, mockSqlDataReader);
Assert.False(sqlSpatialDataReader.IsGeometryColumn(0));
}
private SqlDataReaderWrapper CreateSqlDataReaderWrapper(object spatialProviderValueToReturn, string providerDataType)
{
var mockSqlDataReader = new Mock<SqlDataReaderWrapper>();
using (var memoryStream = new MemoryStream())
{
var writer = new BinaryWriter(memoryStream);
var writeMethod = spatialProviderValueToReturn.GetType().GetMethod(
"Write", BindingFlags.Public | BindingFlags.Instance,
binder: null, types: new[] { typeof(BinaryWriter) }, modifiers: null);
writeMethod.Invoke(spatialProviderValueToReturn, new[] { writer });
var sqlBytes = new SqlBytes(memoryStream.ToArray());
mockSqlDataReader.Setup(m => m.GetSqlBytes(0)).Returns(sqlBytes);
#if !NET40
mockSqlDataReader.Setup(m => m.GetFieldValueAsync<SqlBytes>(0, CancellationToken.None)).Returns(Task.FromResult(sqlBytes));
#endif
mockSqlDataReader.Setup(m => m.GetDataTypeName(0)).Returns(providerDataType);
mockSqlDataReader.Setup(m => m.FieldCount).Returns(1);
}
return mockSqlDataReader.Object;
}
}
}
|