1
1
using System ;
2
2
using System . Data . Common ;
3
3
using System . Globalization ;
4
+ using System . IO ;
4
5
using System . Linq ;
5
6
using System . Reflection ;
6
7
using System . Threading . Tasks ;
@@ -343,6 +344,13 @@ public void QueryDecimal(string column, object[] expected)
343
344
public void QueryString ( string column , string [ ] expected )
344
345
{
345
346
DoQuery ( "strings" , column , "VARCHAR" , expected , reader => reader . GetString ( 0 ) ) ;
347
+ #if ! BASELINE
348
+ DoQuery ( "strings" , column , "VARCHAR" , expected , reader => reader . GetTextReader ( 0 ) , matchesDefaultType : false , assertEqual : ( e , a ) =>
349
+ {
350
+ using ( var actualReader = ( TextReader ) a )
351
+ Assert . Equal ( e , actualReader . ReadToEnd ( ) ) ;
352
+ } , getFieldValueType : typeof ( TextReader ) ) ;
353
+ #endif
346
354
}
347
355
const string c_251ByteString = "This string has exactly 251 characters in it. The encoded length is stored as 0xFC 0xFB 0x00. 0xFB (i.e., 251) is the sentinel byte indicating \" this field is null\" . Incorrectly interpreting the (decoded) length as the sentinel byte would corrupt data." ;
348
356
@@ -1345,9 +1353,11 @@ private void DoQuery(
1345
1353
object baselineCoercedNullValue = null ,
1346
1354
bool omitWhereTest = false ,
1347
1355
bool matchesDefaultType = true ,
1348
- MySqlConnection connection = null )
1356
+ MySqlConnection connection = null ,
1357
+ Action < object , object > assertEqual = null ,
1358
+ Type getFieldValueType = null )
1349
1359
{
1350
- DoQuery < GetValueWhenNullException > ( table , column , dataTypeName , expected , getValue , baselineCoercedNullValue , omitWhereTest , matchesDefaultType , connection ) ;
1360
+ DoQuery < GetValueWhenNullException > ( table , column , dataTypeName , expected , getValue , baselineCoercedNullValue , omitWhereTest , matchesDefaultType , connection , assertEqual , getFieldValueType ) ;
1351
1361
}
1352
1362
1353
1363
// NOTE: baselineCoercedNullValue is to work around inconsistencies in mysql-connector-net; DBNull.Value will
@@ -1361,10 +1371,13 @@ private void DoQuery<TException>(
1361
1371
object baselineCoercedNullValue = null ,
1362
1372
bool omitWhereTest = false ,
1363
1373
bool matchesDefaultType = true ,
1364
- MySqlConnection connection = null )
1374
+ MySqlConnection connection = null ,
1375
+ Action < object , object > assertEqual = null ,
1376
+ Type getFieldValueType = null )
1365
1377
where TException : Exception
1366
1378
{
1367
1379
connection = connection ?? Connection ;
1380
+ assertEqual = assertEqual ?? Assert . Equal ;
1368
1381
using ( var cmd = connection . CreateCommand ( ) )
1369
1382
{
1370
1383
cmd . CommandText = $ "select { column } from datatypes_{ table } order by rowid";
@@ -1389,34 +1402,34 @@ private void DoQuery<TException>(
1389
1402
}
1390
1403
else
1391
1404
{
1392
- Assert . Equal ( value , getValue ( reader ) ) ;
1405
+ assertEqual ( value , getValue ( reader ) ) ;
1393
1406
1394
1407
// test `reader.GetValue` and `reader.GetFieldType` if value matches default type
1395
1408
if ( matchesDefaultType )
1396
1409
{
1397
- Assert . Equal ( value , reader . GetValue ( 0 ) ) ;
1410
+ assertEqual ( value , reader . GetValue ( 0 ) ) ;
1398
1411
Assert . Equal ( value . GetType ( ) , reader . GetFieldType ( 0 ) ) ;
1399
1412
Assert . Equal ( value . GetType ( ) , reader . GetFieldType ( column . Replace ( "`" , "" ) ) ) ;
1400
1413
}
1401
1414
1402
1415
// test `reader.GetFieldValue<value.GetType()>`
1403
1416
var syncMethod = typeof ( MySqlDataReader )
1404
1417
. GetMethod ( "GetFieldValue" )
1405
- . MakeGenericMethod ( value . GetType ( ) ) ;
1406
- Assert . Equal ( value , syncMethod . Invoke ( reader , new object [ ] { 0 } ) ) ;
1418
+ . MakeGenericMethod ( getFieldValueType ?? value . GetType ( ) ) ;
1419
+ assertEqual ( value , syncMethod . Invoke ( reader , new object [ ] { 0 } ) ) ;
1407
1420
1408
1421
// test `reader.GetFieldValueAsync<value.GetType()>`
1409
1422
var asyncMethod = typeof ( MySqlDataReader )
1410
1423
. GetMethod ( "GetFieldValueAsync" , new [ ] { typeof ( int ) } )
1411
- . MakeGenericMethod ( value . GetType ( ) ) ;
1424
+ . MakeGenericMethod ( getFieldValueType ?? value . GetType ( ) ) ;
1412
1425
var asyncMethodValue = asyncMethod . Invoke ( reader , new object [ ] { 0 } ) ;
1413
1426
var asyncMethodGetAwaiter = asyncMethodValue . GetType ( )
1414
1427
. GetMethod ( "GetAwaiter" ) ;
1415
1428
var asyncMethodGetAwaiterValue = asyncMethodGetAwaiter . Invoke ( asyncMethodValue , new object [ ] { } ) ;
1416
1429
var asyncMethodGetResult = asyncMethodGetAwaiterValue . GetType ( )
1417
1430
. GetMethod ( "GetResult" ) ;
1418
1431
var asyncMethodGetResultValue = asyncMethodGetResult . Invoke ( asyncMethodGetAwaiterValue , new object [ ] { } ) ;
1419
- Assert . Equal ( value , asyncMethodGetResultValue ) ;
1432
+ assertEqual ( value , asyncMethodGetResultValue ) ;
1420
1433
}
1421
1434
}
1422
1435
Assert . False ( reader . Read ( ) ) ;
0 commit comments