@@ -1393,6 +1393,234 @@ public void Remove_ListStorage_True_CaseInsensitive()
1393
1393
Assert . IsType < KeyValuePair < string , object > [ ] > ( dict . _arrayStorage ) ;
1394
1394
}
1395
1395
1396
+ [ Fact ]
1397
+ public void Remove_KeyAndOutValue_EmptyStorage ( )
1398
+ {
1399
+ // Arrange
1400
+ var dict = new RouteValueDictionary ( ) ;
1401
+
1402
+ // Act
1403
+ var result = dict . Remove ( "key" , out var removedValue ) ;
1404
+
1405
+ // Assert
1406
+ Assert . False ( result ) ;
1407
+ Assert . Null ( removedValue ) ;
1408
+ }
1409
+
1410
+ [ Fact ]
1411
+ public void Remove_KeyAndOutValue_EmptyStringIsAllowed ( )
1412
+ {
1413
+ // Arrange
1414
+ var dict = new RouteValueDictionary ( ) ;
1415
+
1416
+ // Act
1417
+ var result = dict . Remove ( "" , out var removedValue ) ;
1418
+
1419
+ // Assert
1420
+ Assert . False ( result ) ;
1421
+ Assert . Null ( removedValue ) ;
1422
+ }
1423
+
1424
+ [ Fact ]
1425
+ public void Remove_KeyAndOutValue_PropertyStorage_Empty ( )
1426
+ {
1427
+ // Arrange
1428
+ var dict = new RouteValueDictionary ( new { } ) ;
1429
+
1430
+ // Act
1431
+ var result = dict . Remove ( "other" , out var removedValue ) ;
1432
+
1433
+ // Assert
1434
+ Assert . False ( result ) ;
1435
+ Assert . Null ( removedValue ) ;
1436
+ Assert . Empty ( dict ) ;
1437
+ Assert . NotNull ( dict . _propertyStorage ) ;
1438
+ }
1439
+
1440
+ [ Fact ]
1441
+ public void Remove_KeyAndOutValue_PropertyStorage_False ( )
1442
+ {
1443
+ // Arrange
1444
+ var dict = new RouteValueDictionary ( new { key = "value" } ) ;
1445
+
1446
+ // Act
1447
+ var result = dict . Remove ( "other" , out var removedValue ) ;
1448
+
1449
+ // Assert
1450
+ Assert . False ( result ) ;
1451
+ Assert . Null ( removedValue ) ;
1452
+ Assert . Collection ( dict , kvp => { Assert . Equal ( "key" , kvp . Key ) ; Assert . Equal ( "value" , kvp . Value ) ; } ) ;
1453
+ Assert . IsType < KeyValuePair < string , object > [ ] > ( dict . _arrayStorage ) ;
1454
+ }
1455
+
1456
+ [ Fact ]
1457
+ public void Remove_KeyAndOutValue_PropertyStorage_True ( )
1458
+ {
1459
+ // Arrange
1460
+ object value = "value" ;
1461
+ var dict = new RouteValueDictionary ( new { key = value } ) ;
1462
+
1463
+ // Act
1464
+ var result = dict . Remove ( "key" , out var removedValue ) ;
1465
+
1466
+ // Assert
1467
+ Assert . True ( result ) ;
1468
+ Assert . Same ( value , removedValue ) ;
1469
+ Assert . Empty ( dict ) ;
1470
+ Assert . IsType < KeyValuePair < string , object > [ ] > ( dict . _arrayStorage ) ;
1471
+ }
1472
+
1473
+ [ Fact ]
1474
+ public void Remove_KeyAndOutValue_PropertyStorage_True_CaseInsensitive ( )
1475
+ {
1476
+ // Arrange
1477
+ object value = "value" ;
1478
+ var dict = new RouteValueDictionary ( new { key = value } ) ;
1479
+
1480
+ // Act
1481
+ var result = dict . Remove ( "kEy" , out var removedValue ) ;
1482
+
1483
+ // Assert
1484
+ Assert . True ( result ) ;
1485
+ Assert . Same ( value , removedValue ) ;
1486
+ Assert . Empty ( dict ) ;
1487
+ Assert . IsType < KeyValuePair < string , object > [ ] > ( dict . _arrayStorage ) ;
1488
+ }
1489
+
1490
+ [ Fact ]
1491
+ public void Remove_KeyAndOutValue_ListStorage_False ( )
1492
+ {
1493
+ // Arrange
1494
+ var dict = new RouteValueDictionary ( )
1495
+ {
1496
+ { "key" , "value" } ,
1497
+ } ;
1498
+
1499
+ // Act
1500
+ var result = dict . Remove ( "other" , out var removedValue ) ;
1501
+
1502
+ // Assert
1503
+ Assert . False ( result ) ;
1504
+ Assert . Null ( removedValue ) ;
1505
+ Assert . Collection ( dict , kvp => { Assert . Equal ( "key" , kvp . Key ) ; Assert . Equal ( "value" , kvp . Value ) ; } ) ;
1506
+ Assert . IsType < KeyValuePair < string , object > [ ] > ( dict . _arrayStorage ) ;
1507
+ }
1508
+
1509
+ [ Fact ]
1510
+ public void Remove_KeyAndOutValue_ListStorage_True ( )
1511
+ {
1512
+ // Arrange
1513
+ object value = "value" ;
1514
+ var dict = new RouteValueDictionary ( )
1515
+ {
1516
+ { "key" , value }
1517
+ } ;
1518
+
1519
+ // Act
1520
+ var result = dict . Remove ( "key" , out var removedValue ) ;
1521
+
1522
+ // Assert
1523
+ Assert . True ( result ) ;
1524
+ Assert . Same ( value , removedValue ) ;
1525
+ Assert . Empty ( dict ) ;
1526
+ Assert . IsType < KeyValuePair < string , object > [ ] > ( dict . _arrayStorage ) ;
1527
+ }
1528
+
1529
+ [ Fact ]
1530
+ public void Remove_KeyAndOutValue_ListStorage_True_CaseInsensitive ( )
1531
+ {
1532
+ // Arrange
1533
+ object value = "value" ;
1534
+ var dict = new RouteValueDictionary ( )
1535
+ {
1536
+ { "key" , value }
1537
+ } ;
1538
+
1539
+ // Act
1540
+ var result = dict . Remove ( "kEy" , out var removedValue ) ;
1541
+
1542
+ // Assert
1543
+ Assert . True ( result ) ;
1544
+ Assert . Same ( value , removedValue ) ;
1545
+ Assert . Empty ( dict ) ;
1546
+ Assert . IsType < KeyValuePair < string , object > [ ] > ( dict . _arrayStorage ) ;
1547
+ }
1548
+
1549
+ [ Fact ]
1550
+ public void Remove_KeyAndOutValue_ListStorage_KeyExists_First ( )
1551
+ {
1552
+ // Arrange
1553
+ object value = "value" ;
1554
+ var dict = new RouteValueDictionary ( )
1555
+ {
1556
+ { "key" , value } ,
1557
+ { "other" , 5 } ,
1558
+ { "dotnet" , "rocks" }
1559
+ } ;
1560
+
1561
+ // Act
1562
+ var result = dict . Remove ( "key" , out var removedValue ) ;
1563
+
1564
+ // Assert
1565
+ Assert . True ( result ) ;
1566
+ Assert . Same ( value , removedValue ) ;
1567
+ Assert . Equal ( 2 , dict . Count ) ;
1568
+ Assert . False ( dict . ContainsKey ( "key" ) ) ;
1569
+ Assert . True ( dict . ContainsKey ( "other" ) ) ;
1570
+ Assert . True ( dict . ContainsKey ( "dotnet" ) ) ;
1571
+ Assert . IsType < KeyValuePair < string , object > [ ] > ( dict . _arrayStorage ) ;
1572
+ }
1573
+
1574
+ [ Fact ]
1575
+ public void Remove_KeyAndOutValue_ListStorage_KeyExists_Middle ( )
1576
+ {
1577
+ // Arrange
1578
+ object value = "value" ;
1579
+ var dict = new RouteValueDictionary ( )
1580
+ {
1581
+ { "other" , 5 } ,
1582
+ { "key" , value } ,
1583
+ { "dotnet" , "rocks" }
1584
+ } ;
1585
+
1586
+ // Act
1587
+ var result = dict . Remove ( "key" , out var removedValue ) ;
1588
+
1589
+ // Assert
1590
+ Assert . True ( result ) ;
1591
+ Assert . Same ( value , removedValue ) ;
1592
+ Assert . Equal ( 2 , dict . Count ) ;
1593
+ Assert . False ( dict . ContainsKey ( "key" ) ) ;
1594
+ Assert . True ( dict . ContainsKey ( "other" ) ) ;
1595
+ Assert . True ( dict . ContainsKey ( "dotnet" ) ) ;
1596
+ Assert . IsType < KeyValuePair < string , object > [ ] > ( dict . _arrayStorage ) ;
1597
+ }
1598
+
1599
+ [ Fact ]
1600
+ public void Remove_KeyAndOutValue_ListStorage_KeyExists_Last ( )
1601
+ {
1602
+ // Arrange
1603
+ object value = "value" ;
1604
+ var dict = new RouteValueDictionary ( )
1605
+ {
1606
+ { "other" , 5 } ,
1607
+ { "dotnet" , "rocks" } ,
1608
+ { "key" , value }
1609
+ } ;
1610
+
1611
+ // Act
1612
+ var result = dict . Remove ( "key" , out var removedValue ) ;
1613
+
1614
+ // Assert
1615
+ Assert . True ( result ) ;
1616
+ Assert . Same ( value , removedValue ) ;
1617
+ Assert . Equal ( 2 , dict . Count ) ;
1618
+ Assert . False ( dict . ContainsKey ( "key" ) ) ;
1619
+ Assert . True ( dict . ContainsKey ( "other" ) ) ;
1620
+ Assert . True ( dict . ContainsKey ( "dotnet" ) ) ;
1621
+ Assert . IsType < KeyValuePair < string , object > [ ] > ( dict . _arrayStorage ) ;
1622
+ }
1623
+
1396
1624
[ Fact ]
1397
1625
public void TryAdd_EmptyStringIsAllowed ( )
1398
1626
{
0 commit comments