Skip to content

Commit 016b69a

Browse files
committed
Polish "Allow to exclude an empty set of ErrorAttributes"
See gh-24230
1 parent 6518f8f commit 016b69a

File tree

2 files changed

+31
-20
lines changed

2 files changed

+31
-20
lines changed

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/error/ErrorAttributeOptions.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
*
2828
* @author Scott Frederick
2929
* @author Phillip Webb
30-
* @author Wanderlei Souza
3130
* @since 2.3.0
3231
*/
3332
public final class ErrorAttributeOptions {
@@ -64,8 +63,7 @@ public Set<Include> getIncludes() {
6463
* @return an {@code ErrorAttributeOptions}
6564
*/
6665
public ErrorAttributeOptions including(Include... includes) {
67-
EnumSet<Include> updated = (this.includes.isEmpty()) ? EnumSet.noneOf(Include.class)
68-
: EnumSet.copyOf(this.includes);
66+
EnumSet<Include> updated = copyIncludes();
6967
updated.addAll(Arrays.asList(includes));
7068
return new ErrorAttributeOptions(Collections.unmodifiableSet(updated));
7169
}
@@ -77,12 +75,15 @@ public ErrorAttributeOptions including(Include... includes) {
7775
* @return an {@code ErrorAttributeOptions}
7876
*/
7977
public ErrorAttributeOptions excluding(Include... excludes) {
80-
EnumSet<Include> updated = (this.includes.isEmpty()) ? EnumSet.noneOf(Include.class)
81-
: EnumSet.copyOf(this.includes);
78+
EnumSet<Include> updated = copyIncludes();
8279
updated.removeAll(Arrays.asList(excludes));
8380
return new ErrorAttributeOptions(Collections.unmodifiableSet(updated));
8481
}
8582

83+
private EnumSet<Include> copyIncludes() {
84+
return (this.includes.isEmpty()) ? EnumSet.noneOf(Include.class) : EnumSet.copyOf(this.includes);
85+
}
86+
8687
/**
8788
* Create an {@code ErrorAttributeOptions} with defaults.
8889
* @return an {@code ErrorAttributeOptions}

spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/error/ErrorAttributesOptionsTests.java

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,36 +16,46 @@
1616

1717
package org.springframework.boot.web.servlet.error;
1818

19-
import static org.assertj.core.api.Assertions.assertThat;
20-
2119
import java.util.EnumSet;
22-
import java.util.Set;
2320

2421
import org.junit.jupiter.api.Test;
22+
2523
import org.springframework.boot.web.error.ErrorAttributeOptions;
2624
import org.springframework.boot.web.error.ErrorAttributeOptions.Include;
2725

26+
import static org.assertj.core.api.Assertions.assertThat;
27+
2828
/**
29-
* Tests for {@link ErrorAttributesOptions}.
29+
* Tests for {@link ErrorAttributeOptions}.
3030
*
3131
* @author Wanderlei Souza
32+
* @author Stephane Nicoll
3233
*/
3334
class ErrorAttributesOptionsTests {
3435

3536
@Test
36-
void excludingFromEmptySetWithoutErrors() {
37-
Set<Include> includes = EnumSet.noneOf(Include.class);
38-
ErrorAttributeOptions errorAttributeOptions = ErrorAttributeOptions.of(includes);
39-
errorAttributeOptions = errorAttributeOptions.excluding(Include.EXCEPTION);
40-
assertThat(errorAttributeOptions.getIncludes().isEmpty());
37+
void includingFromEmptyAttributesReturnAddedEntry() {
38+
ErrorAttributeOptions options = ErrorAttributeOptions.of(EnumSet.noneOf(Include.class));
39+
assertThat(options.including(Include.EXCEPTION).getIncludes()).containsOnly(Include.EXCEPTION);
40+
}
41+
42+
@Test
43+
void includingFromMatchingAttributesDoesNotModifyOptions() {
44+
ErrorAttributeOptions options = ErrorAttributeOptions.of(EnumSet.of(Include.EXCEPTION, Include.STACK_TRACE));
45+
assertThat(options.including(Include.EXCEPTION).getIncludes()).containsOnly(Include.EXCEPTION,
46+
Include.STACK_TRACE);
47+
}
48+
49+
@Test
50+
void excludingFromEmptyAttributesReturnEmptyList() {
51+
ErrorAttributeOptions options = ErrorAttributeOptions.of(EnumSet.noneOf(Include.class));
52+
assertThat(options.excluding(Include.EXCEPTION).getIncludes()).isEmpty();
4153
}
42-
54+
4355
@Test
44-
void includingInEmptySetWithoutErrors() {
45-
Set<Include> includes = EnumSet.noneOf(Include.class);
46-
ErrorAttributeOptions errorAttributeOptions = ErrorAttributeOptions.of(includes);
47-
errorAttributeOptions = errorAttributeOptions.including(Include.EXCEPTION);
48-
assertThat(errorAttributeOptions.getIncludes().isEmpty());
56+
void excludingFromMatchingAttributesRemoveMatch() {
57+
ErrorAttributeOptions options = ErrorAttributeOptions.of(EnumSet.of(Include.EXCEPTION, Include.STACK_TRACE));
58+
assertThat(options.excluding(Include.EXCEPTION).getIncludes()).containsOnly(Include.STACK_TRACE);
4959
}
5060

5161
}

0 commit comments

Comments
 (0)