Skip to content

Commit 575869e

Browse files
committed
Preformatted ordered values to simplify comparison
1 parent 6737d0e commit 575869e

3 files changed

Lines changed: 69 additions & 12 deletions

File tree

src/main/java/digital/pragmatech/testing/ContextCacheEntry.java

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515

1616
import org.springframework.test.context.MergedContextConfiguration;
1717

18+
import static digital.pragmatech.testing.util.CollectionFormatUtils.prettyPrintCollection;
19+
import static digital.pragmatech.testing.util.CollectionFormatUtils.toStringSortedSet;
20+
1821
/** Entry representing a cached context configuration. */
1922
public class ContextCacheEntry {
2023
private final MergedContextConfiguration configuration;
@@ -200,26 +203,35 @@ public Map<String, Object> getConfigurationSummary() {
200203
Map<String, Object> summary = new LinkedHashMap<>();
201204

202205
if (configuration != null) {
203-
206+
// configurationClasses equality is based on ordered Class<?>[]
204207
summary.put(
205208
"configurationClasses",
206-
Arrays.stream(configuration.getClasses())
207-
.map(Class::getSimpleName)
208-
.collect(Collectors.toList()));
209+
prettyPrintCollection(
210+
Arrays.stream(configuration.getClasses()).map(Class::getName).toList()));
209211

210-
summary.put("activeProfiles", Arrays.asList(configuration.getActiveProfiles()));
212+
// activeProfiles equality is based on ordered String[]
213+
summary.put(
214+
"activeProfiles",
215+
prettyPrintCollection(Arrays.asList(configuration.getActiveProfiles())));
211216
summary.put("contextLoader", configuration.getContextLoader().getClass().getSimpleName());
212-
213217
summary.put("properties", configuration.getPropertySourceProperties().length + " properties");
214218
summary.put("parentContext", configuration.getParent());
215-
summary.put("contextCustomizers", configuration.getContextCustomizers());
216-
summary.put("locations", String.join(",", configuration.getLocations()));
219+
// contextCustomizers equality is based on Set. Convert to ordered String representation to
220+
// simplify comparison
221+
summary.put(
222+
"contextCustomizers",
223+
prettyPrintCollection(toStringSortedSet(configuration.getContextCustomizers())));
224+
// locations equality is based on ordered String[]
225+
summary.put("locations", prettyPrintCollection(Arrays.asList(configuration.getLocations())));
217226

227+
// contextInitializers equality is based on Set. Convert to ordered String representation to
228+
// simplify comparison
218229
summary.put(
219230
"contextInitializers",
220-
configuration.getContextInitializerClasses().stream()
221-
.map(Class::getSimpleName)
222-
.collect(Collectors.toList()));
231+
prettyPrintCollection(
232+
configuration.getContextInitializerClasses().stream()
233+
.map(Class::getName)
234+
.collect(Collectors.toList())));
223235

224236
summary.put("beanDefinitionCount", beanDefinitionCount);
225237
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package digital.pragmatech.testing.util;
2+
3+
import java.util.Collection;
4+
import java.util.Objects;
5+
import java.util.SortedSet;
6+
import java.util.TreeSet;
7+
8+
public final class CollectionFormatUtils {
9+
10+
/**
11+
* Convert collection of objects to SortedSet of String. This can be helpful for visually
12+
* comparable representations.
13+
*
14+
* @param elements
15+
* @return
16+
*/
17+
public static SortedSet<String> toStringSortedSet(Collection<?> elements) {
18+
var set = new TreeSet<String>();
19+
elements.forEach(e -> set.add(Objects.toString(e)));
20+
return set;
21+
}
22+
23+
/**
24+
* Pretty format collection elements (new line for each element).
25+
*
26+
* @param elements
27+
* @return
28+
*/
29+
public static String prettyPrintCollection(Collection<String> elements) {
30+
if (elements == null) {
31+
return "";
32+
}
33+
if (elements.isEmpty()) {
34+
return "[]";
35+
}
36+
if (elements.size() == 1) {
37+
return "[" + elements.iterator().next() + "]";
38+
}
39+
return "[\n" + String.join(",\n", elements) + "\n]";
40+
}
41+
42+
private CollectionFormatUtils() {}
43+
}

src/main/resources/templates/fragments/configurations.html

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@ <h2>Spring Context Configurations</h2>
3030
<div class="config-details">
3131
<div th:each="entry : ${configInfo.configuration.entrySet()}" class="config-detail-item">
3232
<div class="config-detail-key" th:text="${entry.key + ':'}">Key:</div>
33-
<div class="config-detail-value" th:text="${entry.value}">Value</div>
33+
<div class="config-detail-value">
34+
<pre th:text="${entry.value}"></pre>
35+
</div>
3436
</div>
3537
</div>
3638

0 commit comments

Comments
 (0)