|
38 | 38 | import org.hamcrest.Matchers;
|
39 | 39 | import org.junit.Test;
|
40 | 40 |
|
| 41 | +import static java.util.stream.Collectors.toList; |
41 | 42 | import static org.hamcrest.Matchers.*;
|
42 | 43 | import static org.junit.Assert.*;
|
43 | 44 |
|
@@ -559,6 +560,80 @@ public void bearerAuth() {
|
559 | 560 | assertEquals("Bearer foo", authorization);
|
560 | 561 | }
|
561 | 562 |
|
| 563 | + @Test // https://github.com/spring-projects/spring-framework/issues/23633 |
| 564 | + public void keySetRemove() { |
| 565 | + // Given |
| 566 | + headers.add("Alpha", "apple"); |
| 567 | + headers.add("Bravo", "banana"); |
| 568 | + assertEquals(2, headers.size()); |
| 569 | + assertTrue("Alpha should be present", headers.containsKey("Alpha")); |
| 570 | + assertTrue("Bravo should be present", headers.containsKey("Bravo")); |
| 571 | + assertArrayEquals(new String[] {"Alpha", "Bravo"}, headers.keySet().toArray()); |
| 572 | + |
| 573 | + // When |
| 574 | + boolean removed = headers.keySet().remove("Alpha"); |
| 575 | + |
| 576 | + // Then |
| 577 | + assertTrue(removed); |
| 578 | + assertFalse(headers.keySet().remove("Alpha")); |
| 579 | + assertEquals(1, headers.size()); |
| 580 | + assertFalse("Alpha should have been removed", headers.containsKey("Alpha")); |
| 581 | + assertTrue("Bravo should be present", headers.containsKey("Bravo")); |
| 582 | + assertArrayEquals(new String[] {"Bravo"}, headers.keySet().toArray()); |
| 583 | + assertEquals(Collections.singletonMap("Bravo", Arrays.asList("banana")).entrySet(), headers.entrySet()); |
| 584 | + } |
| 585 | + |
| 586 | + @Test |
| 587 | + public void keySetOperations() { |
| 588 | + headers.add("Alpha", "apple"); |
| 589 | + headers.add("Bravo", "banana"); |
| 590 | + assertEquals(2, headers.size()); |
| 591 | + |
| 592 | + // size() |
| 593 | + assertEquals(2, headers.keySet().size()); |
| 594 | + |
| 595 | + // contains() |
| 596 | + assertTrue("Alpha should be present", headers.keySet().contains("Alpha")); |
| 597 | + assertTrue("alpha should be present", headers.keySet().contains("alpha")); |
| 598 | + assertTrue("Bravo should be present", headers.keySet().contains("Bravo")); |
| 599 | + assertTrue("BRAVO should be present", headers.keySet().contains("BRAVO")); |
| 600 | + assertFalse("Charlie should not be present", headers.keySet().contains("Charlie")); |
| 601 | + |
| 602 | + // toArray() |
| 603 | + assertArrayEquals(new String[] {"Alpha", "Bravo"}, headers.keySet().toArray()); |
| 604 | + |
| 605 | + // spliterator() via stream() |
| 606 | + assertEquals(Arrays.asList("Alpha", "Bravo"), headers.keySet().stream().collect(toList())); |
| 607 | + |
| 608 | + // iterator() |
| 609 | + List<String> results = new ArrayList<>(); |
| 610 | + headers.keySet().iterator().forEachRemaining(results::add); |
| 611 | + assertEquals(Arrays.asList("Alpha", "Bravo"), results); |
| 612 | + |
| 613 | + // remove() |
| 614 | + assertTrue(headers.keySet().remove("Alpha")); |
| 615 | + assertEquals(1, headers.size()); |
| 616 | + assertFalse(headers.keySet().remove("Alpha")); |
| 617 | + |
| 618 | + // clear() |
| 619 | + headers.keySet().clear(); |
| 620 | + assertEquals(0, headers.size()); |
| 621 | + |
| 622 | + // Unsupported operations |
| 623 | + unsupported(() -> headers.keySet().add("x")); |
| 624 | + unsupported(() -> headers.keySet().addAll(Collections.singleton("enigma"))); |
| 625 | + } |
| 626 | + |
| 627 | + private static void unsupported(Runnable runnable) { |
| 628 | + try { |
| 629 | + runnable.run(); |
| 630 | + fail("should have thrown an UnsupportedOperationException"); |
| 631 | + } |
| 632 | + catch (UnsupportedOperationException e) { |
| 633 | + // expected |
| 634 | + } |
| 635 | + } |
| 636 | + |
562 | 637 | @Test
|
563 | 638 | public void removalFromKeySetRemovesEntryFromUnderlyingMap() {
|
564 | 639 | String headerName = "MyHeader";
|
|
0 commit comments