Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
D
Dapper
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
tsai
Dapper
Commits
76c2e186
Commit
76c2e186
authored
Aug 20, 2017
by
Nick Craver
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
More test fixes
parent
4637c100
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
97 additions
and
116 deletions
+97
-116
DataReaderTests.cs
Dapper.Tests/DataReaderTests.cs
+28
-43
NullTests.cs
Dapper.Tests/NullTests.cs
+1
-1
TypeHandlerTests.cs
Dapper.Tests/TypeHandlerTests.cs
+68
-72
No files found.
Dapper.Tests/DataReaderTests.cs
View file @
76c2e186
...
...
@@ -4,42 +4,38 @@
namespace
Dapper.Tests
{
public
partial
class
DataReaderTests
:
TestBase
public
class
DataReaderTests
:
TestBase
{
[
Collection
(
"QueryCacheTests"
)
]
public
class
DataReaderQueryCacheTests
:
TestBase
[
Fact
]
public
void
GetSameReaderForSameShape
()
{
[
Fact
]
public
void
GetSameReaderForSameShape
()
{
var
origReader
=
connection
.
ExecuteReader
(
"select 'abc' as Name, 123 as Id"
);
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
();
list
.
Count
.
IsEqualTo
(
1
);
list
[
0
].
Name
.
IsEqualTo
(
"abc"
);
list
[
0
].
Id
.
IsEqualTo
(
123
);
origReader
.
Dispose
();
var
list
=
origReader
.
Parse
<
HazNameId
>().
ToList
();
list
.
Count
.
IsEqualTo
(
1
);
list
[
0
].
Name
.
IsEqualTo
(
"abc"
);
list
[
0
].
Id
.
IsEqualTo
(
123
);
origReader
.
Dispose
();
var
secondReader
=
connection
.
ExecuteReader
(
"select 'abc' as Name, 123 as Id"
);
var
secondParser
=
secondReader
.
GetRowParser
(
typeof
(
HazNameId
));
var
thirdParser
=
secondReader
.
GetRowParser
(
typeof
(
HazNameId
),
1
);
var
secondReader
=
connection
.
ExecuteReader
(
"select 'abc' as Name, 123 as Id"
);
var
secondParser
=
secondReader
.
GetRowParser
(
typeof
(
HazNameId
));
var
thirdParser
=
secondReader
.
GetRowParser
(
typeof
(
HazNameId
),
1
);
list
=
secondReader
.
Parse
<
HazNameId
>().
ToList
();
list
.
Count
.
IsEqualTo
(
1
);
list
[
0
].
Name
.
IsEqualTo
(
"abc"
);
list
[
0
].
Id
.
IsEqualTo
(
123
);
secondReader
.
Dispose
();
list
=
secondReader
.
Parse
<
HazNameId
>().
ToList
();
list
.
Count
.
IsEqualTo
(
1
);
list
[
0
].
Name
.
IsEqualTo
(
"abc"
);
list
[
0
].
Id
.
IsEqualTo
(
123
);
secondReader
.
Dispose
();
// now: should be different readers, but same parser
ReferenceEquals
(
origReader
,
secondReader
).
IsEqualTo
(
false
);
ReferenceEquals
(
origParser
,
secondParser
).
IsEqualTo
(
true
);
ReferenceEquals
(
secondParser
,
thirdParser
).
IsEqualTo
(
false
);
}
// now: should be different readers, but same parser
ReferenceEquals
(
origReader
,
secondReader
).
IsEqualTo
(
false
);
ReferenceEquals
(
origParser
,
secondParser
).
IsEqualTo
(
true
);
ReferenceEquals
(
secondParser
,
thirdParser
).
IsEqualTo
(
false
);
}
[
Fact
]
...
...
@@ -141,18 +137,13 @@ private abstract class Discriminated_BaseType
private
class
Discriminated_Foo
:
Discriminated_BaseType
{
public
string
Name
{
get
;
set
;
}
public
override
int
Type
{
get
{
return
1
;
}
}
public
override
int
Type
=>
1
;
}
private
class
Discriminated_Bar
:
Discriminated_BaseType
{
public
float
Value
{
get
;
set
;
}
public
override
int
Type
{
get
{
return
2
;
}
}
public
override
int
Type
=>
2
;
}
private
abstract
class
DiscriminatedWithMultiMapping_BaseType
:
Discriminated_BaseType
...
...
@@ -164,20 +155,14 @@ private class DiscriminatedWithMultiMapping_Foo : DiscriminatedWithMultiMapping_
{
public
override
HazNameId
HazNameIdObject
{
get
;
set
;
}
public
string
Name
{
get
;
set
;
}
public
override
int
Type
{
get
{
return
1
;
}
}
public
override
int
Type
=>
1
;
}
private
class
DiscriminatedWithMultiMapping_Bar
:
DiscriminatedWithMultiMapping_BaseType
{
public
override
HazNameId
HazNameIdObject
{
get
;
set
;
}
public
float
Value
{
get
;
set
;
}
public
override
int
Type
{
get
{
return
2
;
}
}
public
override
int
Type
=>
2
;
}
}
}
\ No newline at end of file
Dapper.Tests/NullTests.cs
View file @
76c2e186
...
...
@@ -2,7 +2,7 @@
using
System.Linq
;
namespace
Dapper.Tests
{
[
Collection
(
"QueryCacheTests"
)]
[
Collection
(
NonParallelDefinition
.
Name
)]
public
class
NullTests
:
TestBase
{
[
Fact
]
...
...
Dapper.Tests/TypeHandlerTests.cs
View file @
76c2e186
...
...
@@ -8,96 +8,92 @@
namespace
Dapper.Tests
{
[
Collection
(
"TypeHandlerTests"
)]
[
Collection
(
NonParallelDefinition
.
Name
)]
public
class
TypeHandlerTests
:
TestBase
{
[
Collection
(
"QueryCacheTests"
)
]
public
class
TypeHandlerQueryCacheTests
:
TestBase
[
Fact
]
public
void
TestChangingDefaultStringTypeMappingToAnsiString
()
{
[
Fact
]
public
void
TestChangingDefaultStringTypeMappingToAnsiString
()
{
const
string
sql
=
"SELECT SQL_VARIANT_PROPERTY(CONVERT(sql_variant, @testParam),'BaseType') AS BaseType"
;
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
();
result01
.
IsEqualTo
(
"nvarchar"
);
var
result01
=
connection
.
Query
<
string
>(
sql
,
param
).
FirstOrDefault
();
result01
.
IsEqualTo
(
"nvarchar"
);
SqlMapper
.
PurgeQueryCache
();
SqlMapper
.
PurgeQueryCache
();
SqlMapper
.
AddTypeMap
(
typeof
(
string
),
DbType
.
AnsiString
);
// Change Default String Handling to AnsiString
var
result02
=
connection
.
Query
<
string
>(
sql
,
param
).
FirstOrDefault
();
result02
.
IsEqualTo
(
"varchar"
);
SqlMapper
.
AddTypeMap
(
typeof
(
string
),
DbType
.
AnsiString
);
// Change Default String Handling to AnsiString
var
result02
=
connection
.
Query
<
string
>(
sql
,
param
).
FirstOrDefault
();
result02
.
IsEqualTo
(
"varchar"
);
SqlMapper
.
PurgeQueryCache
();
SqlMapper
.
AddTypeMap
(
typeof
(
string
),
DbType
.
String
);
// Restore Default to Unicode String
}
SqlMapper
.
PurgeQueryCache
();
SqlMapper
.
AddTypeMap
(
typeof
(
string
),
DbType
.
String
);
// Restore Default to Unicode String
}
[
Fact
]
public
void
TestChangingDefaultStringTypeMappingToAnsiStringFirstOrDefault
()
{
const
string
sql
=
"SELECT SQL_VARIANT_PROPERTY(CONVERT(sql_variant, @testParam),'BaseType') AS BaseType"
;
var
param
=
new
{
testParam
=
"TestString"
};
[
Fact
]
public
void
TestChangingDefaultStringTypeMappingToAnsiStringFirstOrDefault
()
{
const
string
sql
=
"SELECT SQL_VARIANT_PROPERTY(CONVERT(sql_variant, @testParam),'BaseType') AS BaseType"
;
var
param
=
new
{
testParam
=
"TestString"
};
var
result01
=
connection
.
QueryFirstOrDefault
<
string
>(
sql
,
param
);
result01
.
IsEqualTo
(
"nvarchar"
);
var
result01
=
connection
.
QueryFirstOrDefault
<
string
>(
sql
,
param
);
result01
.
IsEqualTo
(
"nvarchar"
);
SqlMapper
.
PurgeQueryCache
();
SqlMapper
.
PurgeQueryCache
();
SqlMapper
.
AddTypeMap
(
typeof
(
string
),
DbType
.
AnsiString
);
// Change Default String Handling to AnsiString
var
result02
=
connection
.
QueryFirstOrDefault
<
string
>(
sql
,
param
);
result02
.
IsEqualTo
(
"varchar"
);
SqlMapper
.
AddTypeMap
(
typeof
(
string
),
DbType
.
AnsiString
);
// Change Default String Handling to AnsiString
var
result02
=
connection
.
QueryFirstOrDefault
<
string
>(
sql
,
param
);
result02
.
IsEqualTo
(
"varchar"
);
SqlMapper
.
PurgeQueryCache
();
SqlMapper
.
AddTypeMap
(
typeof
(
string
),
DbType
.
String
);
// Restore Default to Unicode String
}
SqlMapper
.
PurgeQueryCache
();
SqlMapper
.
AddTypeMap
(
typeof
(
string
),
DbType
.
String
);
// Restore Default to Unicode String
}
[
Fact
]
public
void
TestCustomTypeMap
()
{
// default mapping
var
item
=
connection
.
Query
<
TypeWithMapping
>(
"Select 'AVal' as A, 'BVal' as B"
).
Single
();
item
.
A
.
IsEqualTo
(
"AVal"
);
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"
);
}
[
Fact
]
public
void
TestCustomTypeMap
()
{
// default mapping
var
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
;
// 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
)
{
if
(
member
==
null
)
return
null
;
#if NETCOREAPP1_0
var
data
=
member
.
CustomAttributes
.
FirstOrDefault
(
x
=>
x
.
AttributeType
==
typeof
(
DescriptionAttribute
));
return
(
string
)
data
?.
ConstructorArguments
.
Single
().
Value
;
var
data
=
member
.
CustomAttributes
.
FirstOrDefault
(
x
=>
x
.
AttributeType
==
typeof
(
DescriptionAttribute
));
return
(
string
)
data
?.
ConstructorArguments
.
Single
().
Value
;
#else
var
attrib
=
(
DescriptionAttribute
)
Attribute
.
GetCustomAttribute
(
member
,
typeof
(
DescriptionAttribute
),
false
);
return
attrib
?.
Description
;
var
attrib
=
(
DescriptionAttribute
)
Attribute
.
GetCustomAttribute
(
member
,
typeof
(
DescriptionAttribute
),
false
);
return
attrib
?.
Description
;
#endif
}
}
public
class
TypeWithMapping
{
[
Description
(
"B"
)]
public
string
A
{
get
;
set
;
}
public
class
TypeWithMapping
{
[
Description
(
"B"
)]
public
string
A
{
get
;
set
;
}
[
Description
(
"A"
)]
public
string
B
{
get
;
set
;
}
}
[
Description
(
"A"
)]
public
string
B
{
get
;
set
;
}
}
[
Fact
]
public
void
Issue136_ValueTypeHandlers
()
{
...
...
@@ -512,7 +508,7 @@ public void Test_RemoveTypeMap()
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"
);
dateTimeHandler
.
ParseWasCalled
.
IsTrue
();
...
...
@@ -639,7 +635,7 @@ public void Issue149_TypeMismatch_SequentialAccess()
Guid
guid
=
Guid
.
Parse
(
"cf0ef7ac-b6fe-4e24-aeda-a2b45bb5654e"
);
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
;
}
catch
(
Exception
ex
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment