88using System . Data ;
99using System . Data . SqlTypes ;
1010using Microsoft . Data . SqlClient . Server ;
11+ using Microsoft . SqlServer . Types ;
1112using Xunit ;
1213
1314namespace Microsoft . Data . SqlClient . Tests
@@ -318,6 +319,19 @@ public void GetChar_ThrowsNotSupported()
318319 Assert . Throws < NotSupportedException > ( ( ) => record . GetChar ( 0 ) ) ;
319320 }
320321
322+ [ Theory ]
323+ [ ClassData ( typeof ( GetUdtTypeTestData ) ) ]
324+ public void GetUdt_ReturnsValue ( Type udtType , object value , string serverTypeName )
325+ {
326+ SqlMetaData [ ] metadata = new SqlMetaData [ ] { new SqlMetaData ( nameof ( udtType . Name ) , SqlDbType . Udt , udtType , serverTypeName ) } ;
327+
328+ SqlDataRecord record = new SqlDataRecord ( metadata ) ;
329+
330+ record . SetValue ( 0 , value ) ;
331+
332+ Assert . Equal ( value . ToString ( ) , record . GetValue ( 0 ) . ToString ( ) ) ;
333+ }
334+
321335 [ Theory ]
322336 [ ClassData ( typeof ( GetXXXBadTypeTestData ) ) ]
323337 public void GetXXX_ThrowsIfBadType ( Func < SqlDataRecord , object > getXXX )
@@ -342,8 +356,8 @@ public void GetXXX_ReturnValue(SqlDbType dbType, object value, Func<SqlDataRecor
342356 } ;
343357 SqlDataRecord record = new SqlDataRecord ( metaData ) ;
344358 record . SetValue ( 0 , value ) ;
359+ Assert . Equal ( value , record . GetValue ( 0 ) ) ;
345360 Assert . Equal ( value , getXXX ( record ) ) ;
346-
347361 }
348362 }
349363
@@ -369,6 +383,21 @@ IEnumerator IEnumerable.GetEnumerator()
369383 }
370384 }
371385
386+ public class GetUdtTypeTestData : IEnumerable < object [ ] >
387+ {
388+ public IEnumerator < object [ ] > GetEnumerator ( )
389+ {
390+ yield return new object [ ] { typeof ( SqlGeography ) , SqlGeography . Point ( 43 , - 81 , 4326 ) , "Geography" } ;
391+ yield return new object [ ] { typeof ( SqlGeometry ) , SqlGeometry . Point ( 43 , - 81 , 4326 ) , "Geometry" } ;
392+ yield return new object [ ] { typeof ( SqlHierarchyId ) , SqlHierarchyId . Parse ( "/" ) , "HierarchyId" } ;
393+ }
394+
395+ IEnumerator IEnumerable . GetEnumerator ( )
396+ {
397+ return GetEnumerator ( ) ;
398+ }
399+ }
400+
372401 public class GetXXXCheckValueTestData : IEnumerable < object [ ] >
373402 {
374403 public IEnumerator < object [ ] > GetEnumerator ( )
@@ -383,6 +412,10 @@ public IEnumerator<object[]> GetEnumerator()
383412 yield return new object [ ] { SqlDbType . DateTime , DateTime . Now , new Func < SqlDataRecord , object > ( r => r . GetDateTime ( 0 ) ) } ;
384413 yield return new object [ ] { SqlDbType . DateTimeOffset , new DateTimeOffset ( DateTime . Now ) , new Func < SqlDataRecord , object > ( r => r . GetDateTimeOffset ( 0 ) ) } ;
385414 yield return new object [ ] { SqlDbType . Time , TimeSpan . FromHours ( 1 ) , new Func < SqlDataRecord , object > ( r => r . GetTimeSpan ( 0 ) ) } ;
415+ yield return new object [ ] { SqlDbType . Date , DateTime . Now . Date , new Func < SqlDataRecord , object > ( r => r . GetDateTime ( 0 ) ) } ;
416+ yield return new object [ ] { SqlDbType . Bit , bool . Parse ( bool . TrueString ) , new Func < SqlDataRecord , object > ( r => r . GetBoolean ( 0 ) ) } ;
417+ yield return new object [ ] { SqlDbType . SmallDateTime , DateTime . Now , new Func < SqlDataRecord , object > ( r => r . GetDateTime ( 0 ) ) } ;
418+ yield return new object [ ] { SqlDbType . TinyInt , ( byte ) 1 , new Func < SqlDataRecord , object > ( r => r . GetByte ( 0 ) ) } ;
386419 }
387420
388421 IEnumerator IEnumerable . GetEnumerator ( )
0 commit comments