1 | package fr.sii.ogham.testing.assertion.internal; | |
2 | ||
3 | import java.util.HashSet; | |
4 | import java.util.List; | |
5 | import java.util.Set; | |
6 | ||
7 | import org.apache.commons.lang3.reflect.FieldUtils; | |
8 | ||
9 | import fr.sii.ogham.core.resource.resolver.ClassPathResolver; | |
10 | import fr.sii.ogham.core.resource.resolver.FileResolver; | |
11 | import fr.sii.ogham.core.resource.resolver.FirstSupportingResourceResolver; | |
12 | import fr.sii.ogham.core.resource.resolver.RelativeResolver; | |
13 | import fr.sii.ogham.core.resource.resolver.ResourceResolver; | |
14 | import fr.sii.ogham.testing.util.HasParent; | |
15 | ||
16 | /** | |
17 | * Make assertions on resource resolution. | |
18 | * | |
19 | * | |
20 | * <pre> | |
21 | * {@code | |
22 | * classpath() | |
23 | * .pathPrefix(is("prefix/") | |
24 | * } | |
25 | * </pre> | |
26 | * | |
27 | * @param <P> | |
28 | * the parent type | |
29 | */ | |
30 | public class ResourceResolverAssertions<P> extends HasParent<P> { | |
31 | private final Set<ResourceResolver> resolvers; | |
32 | ||
33 | public ResourceResolverAssertions(P parent, Set<ResourceResolver> resourceResolvers) { | |
34 | super(parent); | |
35 | this.resolvers = resourceResolvers; | |
36 | } | |
37 | ||
38 | /** | |
39 | * Make assertions on classpath resolution. | |
40 | * | |
41 | * <pre> | |
42 | * {@code | |
43 | * .pathPrefix(is("/custom/")) | |
44 | * .pathSuffix(is(".html")) | |
45 | * } | |
46 | * </pre> | |
47 | * | |
48 | * @return the builder for fluent chaining | |
49 | */ | |
50 | public RelativeResolutionAssertions<ResourceResolverAssertions<P>> classpath() { | |
51 |
2
1. classpath : replaced return value with null for fr/sii/ogham/testing/assertion/internal/ResourceResolverAssertions::classpath → NO_COVERAGE 2. classpath : replaced return value with null for fr/sii/ogham/testing/assertion/internal/ResourceResolverAssertions::classpath → KILLED |
return new RelativeResolutionAssertions<>(this, "classpath", getRelativeResolversFor(ClassPathResolver.class)); |
52 | } | |
53 | ||
54 | /** | |
55 | * Make assertions on file resolution. | |
56 | * | |
57 | * <pre> | |
58 | * {@code | |
59 | * .pathPrefix(is("/custom/")) | |
60 | * .pathSuffix(is(".html")) | |
61 | * } | |
62 | * </pre> | |
63 | * | |
64 | * @return the builder for fluent chaining | |
65 | */ | |
66 | public RelativeResolutionAssertions<ResourceResolverAssertions<P>> file() { | |
67 |
2
1. file : replaced return value with null for fr/sii/ogham/testing/assertion/internal/ResourceResolverAssertions::file → NO_COVERAGE 2. file : replaced return value with null for fr/sii/ogham/testing/assertion/internal/ResourceResolverAssertions::file → KILLED |
return new RelativeResolutionAssertions<>(this, "file", getRelativeResolversFor(FileResolver.class)); |
68 | } | |
69 | ||
70 | private <T> Set<RelativeResolver> getRelativeResolversFor(Class<T> resolverClass) { | |
71 | Set<RelativeResolver> found = new HashSet<>(); | |
72 | for (ResourceResolver resolver : resolvers) { | |
73 | Set<RelativeResolver> relativeResolvers = findResolvers(resolver, RelativeResolver.class); | |
74 | for (RelativeResolver relative : relativeResolvers) { | |
75 |
2
1. getRelativeResolversFor : negated conditional → NO_COVERAGE 2. getRelativeResolversFor : negated conditional → KILLED |
if (resolverClass.isAssignableFrom(relative.getActualResourceResolver().getClass())) { |
76 | found.add(relative); | |
77 | } | |
78 | } | |
79 | } | |
80 |
2
1. getRelativeResolversFor : replaced return value with Collections.emptyList for fr/sii/ogham/testing/assertion/internal/ResourceResolverAssertions::getRelativeResolversFor → NO_COVERAGE 2. getRelativeResolversFor : replaced return value with Collections.emptyList for fr/sii/ogham/testing/assertion/internal/ResourceResolverAssertions::getRelativeResolversFor → SURVIVED |
return found; |
81 | } | |
82 | ||
83 | @SuppressWarnings("unchecked") | |
84 | private static <T> Set<T> findResolvers(ResourceResolver resolver, Class<T> resolverClass) { | |
85 | Set<T> found = new HashSet<>(); | |
86 |
2
1. findResolvers : negated conditional → NO_COVERAGE 2. findResolvers : negated conditional → KILLED |
if (resolverClass.isAssignableFrom(resolver.getClass())) { |
87 | found.add((T) resolver); | |
88 | } | |
89 |
2
1. findResolvers : negated conditional → SURVIVED 2. findResolvers : negated conditional → NO_COVERAGE |
if (resolver instanceof FirstSupportingResourceResolver) { |
90 | found.addAll(findResolvers((FirstSupportingResourceResolver) resolver, resolverClass)); | |
91 | } | |
92 |
2
1. findResolvers : negated conditional → NO_COVERAGE 2. findResolvers : negated conditional → KILLED |
if (resolver instanceof RelativeResolver) { |
93 | found.addAll(findResolvers((RelativeResolver) resolver, resolverClass)); | |
94 | } | |
95 |
2
1. findResolvers : replaced return value with Collections.emptyList for fr/sii/ogham/testing/assertion/internal/ResourceResolverAssertions::findResolvers → SURVIVED 2. findResolvers : replaced return value with Collections.emptyList for fr/sii/ogham/testing/assertion/internal/ResourceResolverAssertions::findResolvers → NO_COVERAGE |
return found; |
96 | } | |
97 | ||
98 | @SuppressWarnings("unchecked") | |
99 | private static <T> Set<T> findResolvers(FirstSupportingResourceResolver resolver, Class<T> resolverClass) { | |
100 | try { | |
101 | Set<T> found = new HashSet<>(); | |
102 | List<ResourceResolver> subresolvers = (List<ResourceResolver>) FieldUtils.readField(resolver, "resolvers", true); | |
103 | for (ResourceResolver r : subresolvers) { | |
104 | found.addAll(findResolvers(r, resolverClass)); | |
105 | } | |
106 |
2
1. findResolvers : replaced return value with Collections.emptyList for fr/sii/ogham/testing/assertion/internal/ResourceResolverAssertions::findResolvers → SURVIVED 2. findResolvers : replaced return value with Collections.emptyList for fr/sii/ogham/testing/assertion/internal/ResourceResolverAssertions::findResolvers → NO_COVERAGE |
return found; |
107 | } catch (IllegalAccessException e) { | |
108 | throw new IllegalStateException("Failed to get 'resolvers' field of FirstSupportingResourceResolver", e); | |
109 | } | |
110 | } | |
111 | ||
112 | @SuppressWarnings("unchecked") | |
113 | private static <T> Set<T> findResolvers(RelativeResolver resolver, Class<T> resolverClass) { | |
114 | try { | |
115 | Set<T> found = new HashSet<>(); | |
116 |
2
1. findResolvers : negated conditional → NO_COVERAGE 2. findResolvers : negated conditional → SURVIVED |
if (resolverClass.isAssignableFrom(resolver.getClass())) { |
117 | found.add((T) resolver); | |
118 | } | |
119 | ResourceResolver delegate = (ResourceResolver) FieldUtils.readField(resolver, "delegate", true); | |
120 |
2
1. findResolvers : negated conditional → NO_COVERAGE 2. findResolvers : negated conditional → KILLED |
if (resolverClass.isAssignableFrom(resolver.getActualResourceResolver().getClass())) { |
121 | found.add((T) delegate); | |
122 | } | |
123 |
2
1. findResolvers : replaced return value with Collections.emptyList for fr/sii/ogham/testing/assertion/internal/ResourceResolverAssertions::findResolvers → NO_COVERAGE 2. findResolvers : replaced return value with Collections.emptyList for fr/sii/ogham/testing/assertion/internal/ResourceResolverAssertions::findResolvers → SURVIVED |
return found; |
124 | } catch (IllegalAccessException e) { | |
125 | throw new IllegalStateException("Failed to get 'delegate' field of RelativeResolver", e); | |
126 | } | |
127 | } | |
128 | ||
129 | } | |
Mutations | ||
51 |
1.1 2.2 |
|
67 |
1.1 2.2 |
|
75 |
1.1 2.2 |
|
80 |
1.1 2.2 |
|
86 |
1.1 2.2 |
|
89 |
1.1 2.2 |
|
92 |
1.1 2.2 |
|
95 |
1.1 2.2 |
|
106 |
1.1 2.2 |
|
116 |
1.1 2.2 |
|
120 |
1.1 2.2 |
|
123 |
1.1 2.2 |