Skip to content

Commit bd28bb1

Browse files
committed
Add additional tests for HttpHeaders.keySet() operations
See gh-22821
1 parent aa69703 commit bd28bb1

File tree

1 file changed

+75
-0
lines changed

1 file changed

+75
-0
lines changed

spring-web/src/test/java/org/springframework/http/HttpHeadersTests.java

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import org.hamcrest.Matchers;
3939
import org.junit.Test;
4040

41+
import static java.util.stream.Collectors.toList;
4142
import static org.hamcrest.Matchers.*;
4243
import static org.junit.Assert.*;
4344

@@ -559,6 +560,80 @@ public void bearerAuth() {
559560
assertEquals("Bearer foo", authorization);
560561
}
561562

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+
562637
@Test
563638
public void removalFromKeySetRemovesEntryFromUnderlyingMap() {
564639
String headerName = "MyHeader";

0 commit comments

Comments
 (0)