Commit 76c2e186 authored by Nick Craver's avatar Nick Craver

More test fixes

parent 4637c100
...@@ -4,42 +4,38 @@ ...@@ -4,42 +4,38 @@
namespace Dapper.Tests namespace Dapper.Tests
{ {
public partial class DataReaderTests : TestBase public class DataReaderTests : TestBase
{ {
[Collection("QueryCacheTests")] [Fact]
public class DataReaderQueryCacheTests : TestBase public void GetSameReaderForSameShape()
{ {
[Fact] var origReader = connection.ExecuteReader("select 'abc' as Name, 123 as Id");
public void GetSameReaderForSameShape() var origParser = origReader.GetRowParser(typeof(HazNameId));
{
var origReader = connection.ExecuteReader("select 'abc' as Name, 123 as Id");
var origParser = origReader.GetRowParser(typeof(HazNameId));
var typedParser = origReader.GetRowParser<HazNameId>(); var typedParser = origReader.GetRowParser<HazNameId>();
ReferenceEquals(origParser, typedParser).IsEqualTo(true); ReferenceEquals(origParser, typedParser).IsEqualTo(true);
var list = origReader.Parse<HazNameId>().ToList(); var list = origReader.Parse<HazNameId>().ToList();
list.Count.IsEqualTo(1); list.Count.IsEqualTo(1);
list[0].Name.IsEqualTo("abc"); list[0].Name.IsEqualTo("abc");
list[0].Id.IsEqualTo(123); list[0].Id.IsEqualTo(123);
origReader.Dispose(); origReader.Dispose();
var secondReader = connection.ExecuteReader("select 'abc' as Name, 123 as Id"); var secondReader = connection.ExecuteReader("select 'abc' as Name, 123 as Id");
var secondParser = secondReader.GetRowParser(typeof(HazNameId)); var secondParser = secondReader.GetRowParser(typeof(HazNameId));
var thirdParser = secondReader.GetRowParser(typeof(HazNameId), 1); var thirdParser = secondReader.GetRowParser(typeof(HazNameId), 1);
list = secondReader.Parse<HazNameId>().ToList(); list = secondReader.Parse<HazNameId>().ToList();
list.Count.IsEqualTo(1); list.Count.IsEqualTo(1);
list[0].Name.IsEqualTo("abc"); list[0].Name.IsEqualTo("abc");
list[0].Id.IsEqualTo(123); list[0].Id.IsEqualTo(123);
secondReader.Dispose(); secondReader.Dispose();
// now: should be different readers, but same parser // now: should be different readers, but same parser
ReferenceEquals(origReader, secondReader).IsEqualTo(false); ReferenceEquals(origReader, secondReader).IsEqualTo(false);
ReferenceEquals(origParser, secondParser).IsEqualTo(true); ReferenceEquals(origParser, secondParser).IsEqualTo(true);
ReferenceEquals(secondParser, thirdParser).IsEqualTo(false); ReferenceEquals(secondParser, thirdParser).IsEqualTo(false);
}
} }
[Fact] [Fact]
...@@ -141,18 +137,13 @@ private abstract class Discriminated_BaseType ...@@ -141,18 +137,13 @@ private abstract class Discriminated_BaseType
private class Discriminated_Foo : Discriminated_BaseType private class Discriminated_Foo : Discriminated_BaseType
{ {
public string Name { get; set; } public string Name { get; set; }
public override int Type { public override int Type => 1;
get { return 1; }
}
} }
private class Discriminated_Bar : Discriminated_BaseType private class Discriminated_Bar : Discriminated_BaseType
{ {
public float Value { get; set; } public float Value { get; set; }
public override int Type public override int Type => 2;
{
get { return 2; }
}
} }
private abstract class DiscriminatedWithMultiMapping_BaseType : Discriminated_BaseType private abstract class DiscriminatedWithMultiMapping_BaseType : Discriminated_BaseType
...@@ -164,20 +155,14 @@ private class DiscriminatedWithMultiMapping_Foo : DiscriminatedWithMultiMapping_ ...@@ -164,20 +155,14 @@ private class DiscriminatedWithMultiMapping_Foo : DiscriminatedWithMultiMapping_
{ {
public override HazNameId HazNameIdObject { get; set; } public override HazNameId HazNameIdObject { get; set; }
public string Name { get; set; } public string Name { get; set; }
public override int Type public override int Type => 1;
{
get { return 1; }
}
} }
private class DiscriminatedWithMultiMapping_Bar : DiscriminatedWithMultiMapping_BaseType private class DiscriminatedWithMultiMapping_Bar : DiscriminatedWithMultiMapping_BaseType
{ {
public override HazNameId HazNameIdObject { get; set; } public override HazNameId HazNameIdObject { get; set; }
public float Value { get; set; } public float Value { get; set; }
public override int Type public override int Type => 2;
{
get { return 2; }
}
} }
} }
} }
\ No newline at end of file
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
using System.Linq; using System.Linq;
namespace Dapper.Tests namespace Dapper.Tests
{ {
[Collection("QueryCacheTests")] [Collection(NonParallelDefinition.Name)]
public class NullTests : TestBase public class NullTests : TestBase
{ {
[Fact] [Fact]
......
...@@ -8,96 +8,92 @@ ...@@ -8,96 +8,92 @@
namespace Dapper.Tests namespace Dapper.Tests
{ {
[Collection("TypeHandlerTests")] [Collection(NonParallelDefinition.Name)]
public class TypeHandlerTests : TestBase public class TypeHandlerTests : TestBase
{ {
[Collection("QueryCacheTests")] [Fact]
public class TypeHandlerQueryCacheTests : TestBase public void TestChangingDefaultStringTypeMappingToAnsiString()
{ {
[Fact] const string sql = "SELECT SQL_VARIANT_PROPERTY(CONVERT(sql_variant, @testParam),'BaseType') AS BaseType";
public void TestChangingDefaultStringTypeMappingToAnsiString() var param = new { testParam = "TestString" };
{
const string sql = "SELECT SQL_VARIANT_PROPERTY(CONVERT(sql_variant, @testParam),'BaseType') AS BaseType";
var param = new { testParam = "TestString" };
var result01 = connection.Query<string>(sql, param).FirstOrDefault(); var result01 = connection.Query<string>(sql, param).FirstOrDefault();
result01.IsEqualTo("nvarchar"); result01.IsEqualTo("nvarchar");
SqlMapper.PurgeQueryCache(); SqlMapper.PurgeQueryCache();
SqlMapper.AddTypeMap(typeof(string), DbType.AnsiString); // Change Default String Handling to AnsiString SqlMapper.AddTypeMap(typeof(string), DbType.AnsiString); // Change Default String Handling to AnsiString
var result02 = connection.Query<string>(sql, param).FirstOrDefault(); var result02 = connection.Query<string>(sql, param).FirstOrDefault();
result02.IsEqualTo("varchar"); result02.IsEqualTo("varchar");
SqlMapper.PurgeQueryCache(); SqlMapper.PurgeQueryCache();
SqlMapper.AddTypeMap(typeof(string), DbType.String); // Restore Default to Unicode String SqlMapper.AddTypeMap(typeof(string), DbType.String); // Restore Default to Unicode String
} }
[Fact] [Fact]
public void TestChangingDefaultStringTypeMappingToAnsiStringFirstOrDefault() public void TestChangingDefaultStringTypeMappingToAnsiStringFirstOrDefault()
{ {
const string sql = "SELECT SQL_VARIANT_PROPERTY(CONVERT(sql_variant, @testParam),'BaseType') AS BaseType"; const string sql = "SELECT SQL_VARIANT_PROPERTY(CONVERT(sql_variant, @testParam),'BaseType') AS BaseType";
var param = new { testParam = "TestString" }; var param = new { testParam = "TestString" };
var result01 = connection.QueryFirstOrDefault<string>(sql, param); var result01 = connection.QueryFirstOrDefault<string>(sql, param);
result01.IsEqualTo("nvarchar"); result01.IsEqualTo("nvarchar");
SqlMapper.PurgeQueryCache(); SqlMapper.PurgeQueryCache();
SqlMapper.AddTypeMap(typeof(string), DbType.AnsiString); // Change Default String Handling to AnsiString SqlMapper.AddTypeMap(typeof(string), DbType.AnsiString); // Change Default String Handling to AnsiString
var result02 = connection.QueryFirstOrDefault<string>(sql, param); var result02 = connection.QueryFirstOrDefault<string>(sql, param);
result02.IsEqualTo("varchar"); result02.IsEqualTo("varchar");
SqlMapper.PurgeQueryCache(); SqlMapper.PurgeQueryCache();
SqlMapper.AddTypeMap(typeof(string), DbType.String); // Restore Default to Unicode String SqlMapper.AddTypeMap(typeof(string), DbType.String); // Restore Default to Unicode String
} }
[Fact] [Fact]
public void TestCustomTypeMap() public void TestCustomTypeMap()
{ {
// default mapping // default mapping
var item = connection.Query<TypeWithMapping>("Select 'AVal' as A, 'BVal' as B").Single(); var item = connection.Query<TypeWithMapping>("Select 'AVal' as A, 'BVal' as B").Single();
item.A.IsEqualTo("AVal"); item.A.IsEqualTo("AVal");
item.B.IsEqualTo("BVal"); item.B.IsEqualTo("BVal");
// custom mapping
var map = new CustomPropertyTypeMap(typeof(TypeWithMapping),
(type, columnName) => type.GetProperties().FirstOrDefault(prop => GetDescriptionFromAttribute(prop) == columnName));
SqlMapper.SetTypeMap(typeof(TypeWithMapping), map);
item = connection.Query<TypeWithMapping>("Select 'AVal' as A, 'BVal' as B").Single();
item.A.IsEqualTo("BVal");
item.B.IsEqualTo("AVal");
// reset to default
SqlMapper.SetTypeMap(typeof(TypeWithMapping), null);
item = connection.Query<TypeWithMapping>("Select 'AVal' as A, 'BVal' as B").Single();
item.A.IsEqualTo("AVal");
item.B.IsEqualTo("BVal");
}
private static string GetDescriptionFromAttribute(MemberInfo member) // custom mapping
{ var map = new CustomPropertyTypeMap(typeof(TypeWithMapping),
if (member == null) return null; (type, columnName) => type.GetProperties().FirstOrDefault(prop => GetDescriptionFromAttribute(prop) == columnName));
SqlMapper.SetTypeMap(typeof(TypeWithMapping), map);
item = connection.Query<TypeWithMapping>("Select 'AVal' as A, 'BVal' as B").Single();
item.A.IsEqualTo("BVal");
item.B.IsEqualTo("AVal");
// reset to default
SqlMapper.SetTypeMap(typeof(TypeWithMapping), null);
item = connection.Query<TypeWithMapping>("Select 'AVal' as A, 'BVal' as B").Single();
item.A.IsEqualTo("AVal");
item.B.IsEqualTo("BVal");
}
private static string GetDescriptionFromAttribute(MemberInfo member)
{
if (member == null) return null;
#if NETCOREAPP1_0 #if NETCOREAPP1_0
var data = member.CustomAttributes.FirstOrDefault(x => x.AttributeType == typeof(DescriptionAttribute)); var data = member.CustomAttributes.FirstOrDefault(x => x.AttributeType == typeof(DescriptionAttribute));
return (string)data?.ConstructorArguments.Single().Value; return (string)data?.ConstructorArguments.Single().Value;
#else #else
var attrib = (DescriptionAttribute)Attribute.GetCustomAttribute(member, typeof(DescriptionAttribute), false); var attrib = (DescriptionAttribute)Attribute.GetCustomAttribute(member, typeof(DescriptionAttribute), false);
return attrib?.Description; return attrib?.Description;
#endif #endif
} }
public class TypeWithMapping public class TypeWithMapping
{ {
[Description("B")] [Description("B")]
public string A { get; set; } public string A { get; set; }
[Description("A")] [Description("A")]
public string B { get; set; } public string B { get; set; }
}
} }
[Fact] [Fact]
public void Issue136_ValueTypeHandlers() public void Issue136_ValueTypeHandlers()
{ {
...@@ -512,7 +508,7 @@ public void Test_RemoveTypeMap() ...@@ -512,7 +508,7 @@ public void Test_RemoveTypeMap()
try try
{ {
connection.Execute(@"INSERT INTO #Test_RemoveTypeMap VALUES (@Now)", new { DateTime.Now }); connection.Execute("INSERT INTO #Test_RemoveTypeMap VALUES (@Now)", new { DateTime.Now });
connection.Query<DateTime>("SELECT * FROM #Test_RemoveTypeMap"); connection.Query<DateTime>("SELECT * FROM #Test_RemoveTypeMap");
dateTimeHandler.ParseWasCalled.IsTrue(); dateTimeHandler.ParseWasCalled.IsTrue();
...@@ -639,7 +635,7 @@ public void Issue149_TypeMismatch_SequentialAccess() ...@@ -639,7 +635,7 @@ public void Issue149_TypeMismatch_SequentialAccess()
Guid guid = Guid.Parse("cf0ef7ac-b6fe-4e24-aeda-a2b45bb5654e"); Guid guid = Guid.Parse("cf0ef7ac-b6fe-4e24-aeda-a2b45bb5654e");
try try
{ {
var result = connection.Query<Issue149_Person>(@"select @guid as Id", new { guid }).First(); var result = connection.Query<Issue149_Person>("select @guid as Id", new { guid }).First();
error = null; error = null;
} }
catch (Exception ex) catch (Exception ex)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment