Resolvers.java

1
package pro.verron.officestamper.preset;
2
3
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
4
import org.docx4j.wml.R;
5
import org.springframework.lang.Nullable;
6
import pro.verron.officestamper.api.*;
7
import pro.verron.officestamper.core.RunUtil;
8
9
import java.text.SimpleDateFormat;
10
import java.time.LocalDate;
11
import java.time.LocalDateTime;
12
import java.time.LocalTime;
13
import java.time.ZoneId;
14
import java.time.format.DateTimeFormatter;
15
import java.util.Date;
16
17
import static org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage.createImagePart;
18
19
/**
20
 * This class provides static methods to create different types of
21
 * {@link ObjectResolver}.
22
 *
23
 * @author Joseph Verron
24
 * @version ${version}
25
 * @since 1.6.7
26
 */
27
public class Resolvers {
28
29
    private Resolvers() {
30
        throw new OfficeStamperException("Resolvers cannot be instantiated");
31
    }
32
33
    /**
34
     * Returns an instance of {@link ObjectResolver} that can act as a fallback
35
     * resolver. Will call the {@link Object#toString()} method on every type
36
     * of objects.
37
     *
38
     * @return An instance of {@link ObjectResolver}
39
     */
40
    public static ObjectResolver fallback() {
41 1 1. fallback : replaced return value with null for pro/verron/officestamper/preset/Resolvers::fallback → KILLED
        return new ToStringResolver();
42
    }
43
44
    /**
45
     * Returns an instance of {@link ObjectResolver} that replaces null values with an empty string.
46
     *
47
     * @return An instance of {@link ObjectResolver}
48
     */
49
    public static ObjectResolver nullToEmpty() {
50 1 1. nullToEmpty : replaced return value with null for pro/verron/officestamper/preset/Resolvers::nullToEmpty → KILLED
        return nullToDefault("");
51
    }
52
53
    /**
54
     * Returns an instance of {@link ObjectResolver} that resolves null objects
55
     * by creating a run with a default text value.
56
     *
57
     * @param value The default value for null objects.
58
     *
59
     * @return An instance of {@link ObjectResolver}
60
     */
61
    public static ObjectResolver nullToDefault(String value) {
62 1 1. nullToDefault : replaced return value with null for pro/verron/officestamper/preset/Resolvers::nullToDefault → KILLED
        return new Null2DefaultResolver(value);
63
    }
64
65
    /**
66
     * Returns an instance of {@link ObjectResolver} that resolves null objects
67
     * by not replacing their expression.
68
     *
69
     * @return An instance of {@link ObjectResolver}
70
     */
71
    public static ObjectResolver nullToPlaceholder() {
72 1 1. nullToPlaceholder : replaced return value with null for pro/verron/officestamper/preset/Resolvers::nullToPlaceholder → SURVIVED
        return new Null2PlaceholderResolver();
73
    }
74
75
    /**
76
     * Returns an instance of {@link ObjectResolver} that resolves
77
     * {@link LocalDateTime} values to a formatted string using the
78
     * {@link DateTimeFormatter#ISO_LOCAL_DATE_TIME} pattern.
79
     *
80
     * @return An instance of {@link ObjectResolver}
81
     */
82
    public static ObjectResolver isoDateTime() {
83 1 1. isoDateTime : replaced return value with null for pro/verron/officestamper/preset/Resolvers::isoDateTime → KILLED
        return new LocalDateTimeResolver();
84
    }
85
86
    /**
87
     * Returns an instance of {@link ObjectResolver} that resolves
88
     * {@link LocalTime} values to a formatted string using the
89
     * {@link DateTimeFormatter#ISO_LOCAL_TIME} pattern.
90
     *
91
     * @return An instance of {@link ObjectResolver}
92
     */
93
    public static ObjectResolver isoTime() {
94 1 1. isoTime : replaced return value with null for pro/verron/officestamper/preset/Resolvers::isoTime → KILLED
        return new LocalTimeResolver();
95
    }
96
97
    /**
98
     * Returns an instance of {@link ObjectResolver} that resolves
99
     * {@link LocalDate} values to a formatted string using the
100
     * {@link DateTimeFormatter#ISO_LOCAL_DATE} pattern.
101
     *
102
     * @return An instance of {@link ObjectResolver}
103
     */
104
    public static ObjectResolver isoDate() {
105 1 1. isoDate : replaced return value with null for pro/verron/officestamper/preset/Resolvers::isoDate → KILLED
        return new LocalDateResolver();
106
    }
107
108
    /**
109
     * Returns an instance of {@link ObjectResolver} that resolves
110
     * {@link LocalTime} values to a formatted string using the given
111
     * {@link DateTimeFormatter} pattern.
112
     *
113
     * @param formatter the {@link DateTimeFormatter} pattern to use
114
     *
115
     * @return An instance of {@link ObjectResolver}
116
     */
117
    public static ObjectResolver isoTime(DateTimeFormatter formatter) {
118 1 1. isoTime : replaced return value with null for pro/verron/officestamper/preset/Resolvers::isoTime → NO_COVERAGE
        return new LocalTimeResolver(formatter);
119
    }
120
121
    /**
122
     * Returns an instance of {@link ObjectResolver} that resolves
123
     * {@link LocalDate} values to a formatted string using the given
124
     * {@link DateTimeFormatter} pattern.
125
     *
126
     * @param formatter the {@link DateTimeFormatter} pattern to use
127
     *
128
     * @return An instance of {@link ObjectResolver}
129
     */
130
    public static ObjectResolver isoDate(DateTimeFormatter formatter) {
131 1 1. isoDate : replaced return value with null for pro/verron/officestamper/preset/Resolvers::isoDate → NO_COVERAGE
        return new LocalDateResolver(formatter);
132
    }
133
134
    /**
135
     * Returns an instance of {@link ObjectResolver} that resolves
136
     * {@link LocalDateTime} values to a formatted string using the given
137
     * {@link DateTimeFormatter} pattern.
138
     *
139
     * @param formatter the {@link DateTimeFormatter} pattern to use
140
     *
141
     * @return An instance of {@link ObjectResolver}
142
     */
143
    public static ObjectResolver isoDateTime(DateTimeFormatter formatter) {
144 1 1. isoDateTime : replaced return value with null for pro/verron/officestamper/preset/Resolvers::isoDateTime → NO_COVERAGE
        return new LocalDateTimeResolver(formatter);
145
    }
146
147
    /**
148
     * Returns an instance of {@link ObjectResolver} that resolves
149
     * {@link Date} values to a formatted string using the
150
     * "dd.MM.yyyy" pattern.
151
     *
152
     * @return An instance of {@link ObjectResolver}
153
     */
154
    public static ObjectResolver legacyDate() {
155 1 1. legacyDate : replaced return value with null for pro/verron/officestamper/preset/Resolvers::legacyDate → KILLED
        return new DateResolver();
156
    }
157
158
    /**
159
     * Returns an instance of {@link ObjectResolver} that resolves
160
     * {@link Date} values to a formatted string using the given
161
     * {@link DateTimeFormatter} pattern.
162
     *
163
     * @param formatter the {@link DateTimeFormatter} pattern to use
164
     *
165
     * @return An instance of {@link ObjectResolver}
166
     */
167
    public static ObjectResolver legacyDate(DateTimeFormatter formatter) {
168 1 1. legacyDate : replaced return value with null for pro/verron/officestamper/preset/Resolvers::legacyDate → NO_COVERAGE
        return new DateResolver(formatter);
169
    }
170
171
    /**
172
     * Returns an instance of {@link ObjectResolver} that resolves
173
     * {@link Image} to an actual image in the resulting .docx document.
174
     * The image will be put as an inline into the surrounding paragraph of text.
175
     *
176
     * @return An instance of {@link ObjectResolver}
177
     */
178
    public static ObjectResolver image() {
179 1 1. image : replaced return value with null for pro/verron/officestamper/preset/Resolvers::image → KILLED
        return new ImageResolver();
180
    }
181
182
    /**
183
     * This {@link ObjectResolver} creates a formatted date {@link String} for
184
     * expressions that return a {@link Date} object.
185
     *
186
     * @author Joseph Verron
187
     * @version ${version}
188
     * @since 1.6.7
189
     */
190
    private static final class DateResolver
191
            extends StringResolver<Date> {
192
193
        private final DateTimeFormatter formatter;
194
195
        /**
196
         * Creates a new DateResolver that uses the format "dd.MM.yyyy".
197
         */
198
        public DateResolver() {
199
            this(DateTimeFormatter.ofPattern("dd.MM.yyyy"));
200
        }
201
202
        /**
203
         * Creates a new DateResolver.
204
         *
205
         * @param formatter the format to use for date formatting. See
206
         *                  {@link SimpleDateFormat}.
207
         */
208
        public DateResolver(DateTimeFormatter formatter) {
209
            super(Date.class);
210
            this.formatter = formatter;
211
        }
212
213
        /**
214
         * Resolves a formatted date string for the given {@link Date} object.
215
         *
216
         * @param date the {@link Date} object to be resolved.
217
         *
218
         * @return the formatted date string.
219
         */
220
        @Override
221
        protected String resolve(Date date) {
222
            var zone = ZoneId.systemDefault();
223
            var localDate = date.toInstant()
224
                                .atZone(zone)
225
                                .toLocalDate();
226 1 1. resolve : replaced return value with "" for pro/verron/officestamper/preset/Resolvers$DateResolver::resolve → KILLED
            return formatter.format(localDate);
227
        }
228
    }
229
230
    /**
231
     * This {@link ObjectResolver} allows context objects to return objects of
232
     * type {@link Image}. An expression that resolves to an {@link Image}
233
     * object will be replaced by an actual image in the resulting .docx document.
234
     * The image will be put as an inline into the surrounding paragraph of text.
235
     *
236
     * @author Joseph Verron
237
     * @version ${version}
238
     * @since 1.6.7
239
     */
240
    private static class ImageResolver
241
            implements ObjectResolver {
242
243
        @Override
244
        public boolean canResolve(@Nullable Object object) {
245 2 1. canResolve : replaced boolean return with true for pro/verron/officestamper/preset/Resolvers$ImageResolver::canResolve → KILLED
2. canResolve : replaced boolean return with false for pro/verron/officestamper/preset/Resolvers$ImageResolver::canResolve → KILLED
            return object instanceof Image;
246
        }
247
248
        @Override
249
        public R resolve(
250
                DocxPart document,
251
                String expression,
252
                Object object
253
        ) {
254 1 1. resolve : negated conditional → KILLED
            if (object instanceof Image image)
255 1 1. resolve : replaced return value with null for pro/verron/officestamper/preset/Resolvers$ImageResolver::resolve → KILLED
                return resolve(document, image);
256
            String message = "Expected %s to be an Image".formatted(object);
257
            throw new OfficeStamperException(message);
258
        }
259
260
        /**
261
         * Resolves an image and adds it to a {@link WordprocessingMLPackage}
262
         * document.
263
         *
264
         * @param image The image to be resolved and added
265
         *
266
         * @return The run containing the added image
267
         *
268
         * @throws OfficeStamperException If an error occurs while adding the image to the document
269
         */
270
        private R resolve(DocxPart document, Image image) {
271
            try {
272
                // TODO_LATER: adding the same image twice will put the image twice into the docx-zip file. make the
273
                // second addition of the same image a reference instead.
274
                var imageWidth = image.getMaxWidth();
275
                var imagePart = createImagePart(document.document(), document.part(), image.getImageBytes());
276 1 1. resolve : replaced return value with null for pro/verron/officestamper/preset/Resolvers$ImageResolver::resolve → KILLED
                return RunUtil.createRunWithImage(imageWidth, imagePart);
277
            } catch (Exception e) {
278
                throw new OfficeStamperException("Error while adding image to document!", e);
279
            }
280
        }
281
    }
282
283
    /**
284
     * Resolves {@link LocalDate} objects by formatting them with a {@link DateTimeFormatter}.
285
     *
286
     * @author Joseph Verron
287
     * @version ${version}
288
     * @since 1.6.4
289
     */
290
    private static final class LocalDateResolver
291
            extends StringResolver<LocalDate> {
292
        private final DateTimeFormatter formatter;
293
294
        /**
295
         * Uses {@link DateTimeFormatter#ISO_LOCAL_DATE} for formatting.
296
         */
297
        public LocalDateResolver() {
298
            this(DateTimeFormatter.ISO_LOCAL_DATE);
299
        }
300
301
        /**
302
         * Uses the given formatter for formatting.
303
         *
304
         * @param formatter the formatter to use.
305
         */
306
        public LocalDateResolver(DateTimeFormatter formatter) {
307
            super(LocalDate.class);
308
            this.formatter = formatter;
309
        }
310
311
        /** {@inheritDoc} */
312
        @Override
313
        protected String resolve(LocalDate localDateTime) {
314 1 1. resolve : replaced return value with "" for pro/verron/officestamper/preset/Resolvers$LocalDateResolver::resolve → KILLED
            return localDateTime.format(formatter);
315
        }
316
    }
317
318
    /**
319
     * Resolves {@link LocalDateTime} values to a formatted string.
320
     *
321
     * @author Joseph Verron
322
     * @version ${version}
323
     * @since 1.6.4
324
     */
325
    private static final class LocalDateTimeResolver
326
            extends StringResolver<LocalDateTime> {
327
        private final DateTimeFormatter formatter;
328
329
        /**
330
         * Creates a new resolver that uses {@link DateTimeFormatter#ISO_LOCAL_DATE_TIME} to format
331
         * {@link LocalDateTime}
332
         * values.
333
         */
334
        public LocalDateTimeResolver() {
335
            this(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
336
        }
337
338
        /**
339
         * Creates a new resolver that uses the given formatter to format {@link LocalDateTime} values.
340
         *
341
         * @param formatter the formatter to use.
342
         */
343
        public LocalDateTimeResolver(DateTimeFormatter formatter) {
344
            super(LocalDateTime.class);
345
            this.formatter = formatter;
346
        }
347
348
        /** {@inheritDoc} */
349
        @Override
350
        protected String resolve(LocalDateTime localDateTime) {
351 1 1. resolve : replaced return value with "" for pro/verron/officestamper/preset/Resolvers$LocalDateTimeResolver::resolve → KILLED
            return localDateTime.format(formatter);
352
        }
353
    }
354
355
    /**
356
     * Resolves {@link LocalTime} values to the format specified by the {@link DateTimeFormatter} passed to the
357
     * constructor.
358
     *
359
     * @author Joseph Verron
360
     * @version ${version}
361
     * @since 1.6.4
362
     */
363
    private static final class LocalTimeResolver
364
            extends StringResolver<LocalTime> {
365
        private final DateTimeFormatter formatter;
366
367
        /**
368
         * Uses {@link DateTimeFormatter#ISO_LOCAL_TIME} for formatting.
369
         */
370
        public LocalTimeResolver() {
371
            this(DateTimeFormatter.ISO_LOCAL_TIME);
372
        }
373
374
        /**
375
         * <p>Constructor for LocalTimeResolver.</p>
376
         *
377
         * @param formatter a date time pattern as specified by {@link DateTimeFormatter#ofPattern(String)}
378
         */
379
        public LocalTimeResolver(DateTimeFormatter formatter) {
380
            super(LocalTime.class);
381
            this.formatter = formatter;
382
        }
383
384
        /** {@inheritDoc} */
385
        @Override
386
        protected String resolve(LocalTime localTime) {
387 1 1. resolve : replaced return value with "" for pro/verron/officestamper/preset/Resolvers$LocalTimeResolver::resolve → KILLED
            return localTime.format(formatter);
388
        }
389
    }
390
391
    /**
392
     * The Null2DefaultResolver class is an implementation of the
393
     * {@link ObjectResolver} interface
394
     * that resolves null objects by creating a run with a default text value.
395
     *
396
     * @author Joseph Verron
397
     * @version ${version}
398
     * @since 1.6.7
399
     */
400
    private static class Null2DefaultResolver
401
            implements ObjectResolver {
402
403
        private final String text;
404
405
        /**
406
         * The Null2DefaultResolver class is an implementation of the ObjectResolver interface
407
         * that resolves null objects by creating a run with a default text value.
408
         *
409
         * @param text The default text value to be used when the resolved object is null
410
         */
411
        /* package */
412
        public Null2DefaultResolver(String text) {
413
            this.text = text;
414
        }
415
416
        @Override
417
        public boolean canResolve(@Nullable Object object) {
418 2 1. canResolve : replaced boolean return with true for pro/verron/officestamper/preset/Resolvers$Null2DefaultResolver::canResolve → KILLED
2. canResolve : negated conditional → KILLED
            return object == null;
419
        }
420
421
        @Override
422
        public R resolve(
423
                DocxPart document,
424
                String expression,
425
                Object object
426
        ) {
427 1 1. resolve : replaced return value with null for pro/verron/officestamper/preset/Resolvers$Null2DefaultResolver::resolve → KILLED
            return RunUtil.create(text);
428
        }
429
430
        /**
431
         * Retrieves the default value of the {@link Null2DefaultResolver} object.
432
         *
433
         * @return the default value of the {@link Null2DefaultResolver} object as a String
434
         */
435
        public String defaultValue() {
436 1 1. defaultValue : replaced return value with "" for pro/verron/officestamper/preset/Resolvers$Null2DefaultResolver::defaultValue → NO_COVERAGE
            return text;
437
        }
438
    }
439
440
    /**
441
     * The {@link Null2PlaceholderResolver} class is an implementation of the ObjectResolver interface.
442
     * It provides a way to resolve null objects by not replacing their expression.
443
     *
444
     * @author Joseph Verron
445
     * @version ${version}
446
     * @since 1.6.7
447
     */
448
    private static class Null2PlaceholderResolver
449
            implements ObjectResolver {
450
451
        /* package */
452
        public Null2PlaceholderResolver() {
453
            //DO NOTHING
454
        }
455
456
        @Override
457
        public R resolve(
458
                DocxPart document,
459
                Placeholder placeholder,
460
                Object object
461
        ) {
462 1 1. resolve : replaced return value with null for pro/verron/officestamper/preset/Resolvers$Null2PlaceholderResolver::resolve → KILLED
            return RunUtil.create(placeholder.expression());
463
        }
464
465
        @Override
466
        public boolean canResolve(@Nullable Object object) {
467 2 1. canResolve : replaced boolean return with true for pro/verron/officestamper/preset/Resolvers$Null2PlaceholderResolver::canResolve → SURVIVED
2. canResolve : negated conditional → KILLED
            return object == null;
468
        }
469
470
        @Override
471
        public R resolve(
472
                DocxPart document,
473
                String expression,
474
                Object object
475
        ) {
476
            throw new OfficeStamperException("Should not be called");
477
        }
478
    }
479
480
481
    /**
482
     * This class is an implementation of the {@link ObjectResolver} interface
483
     * that resolves objects by converting them to a string representation using the
484
     * {@link Object#toString()} method and creating a new run with the resolved content.
485
     * <p>
486
     * * @author Joseph Verron
487
     * * @version ${version}
488
     * * @since 1.6.7
489
     */
490
    private static class ToStringResolver
491
            implements ObjectResolver {
492
        @Override
493
        public boolean canResolve(@Nullable Object object) {
494 2 1. canResolve : replaced boolean return with true for pro/verron/officestamper/preset/Resolvers$ToStringResolver::canResolve → SURVIVED
2. canResolve : negated conditional → KILLED
            return object != null;
495
        }
496
497
        @Override
498
        public R resolve(
499
                DocxPart document,
500
                String expression,
501
                Object object
502
        ) {
503 1 1. resolve : replaced return value with null for pro/verron/officestamper/preset/Resolvers$ToStringResolver::resolve → KILLED
            return RunUtil.create(String.valueOf(object));
504
        }
505
    }
506
}

Mutations

41

1.1
Location : fallback
Killed by : pro.verron.officestamper.test.ResolutionTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.ResolutionTest]/[test-template:testCustomResolution(java.lang.String, boolean, boolean, boolean, boolean, boolean, java.lang.String, boolean, java.lang.String)]/[test-template-invocation:#22]
replaced return value with null for pro/verron/officestamper/preset/Resolvers::fallback → KILLED

50

1.1
Location : nullToEmpty
Killed by : pro.verron.officestamper.test.ResolutionTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.ResolutionTest]/[test-template:testCustomResolution(java.lang.String, boolean, boolean, boolean, boolean, boolean, java.lang.String, boolean, java.lang.String)]/[test-template-invocation:#22]
replaced return value with null for pro/verron/officestamper/preset/Resolvers::nullToEmpty → KILLED

62

1.1
Location : nullToDefault
Killed by : pro.verron.officestamper.test.ResolutionTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.ResolutionTest]/[test-template:testCustomResolution(java.lang.String, boolean, boolean, boolean, boolean, boolean, java.lang.String, boolean, java.lang.String)]/[test-template-invocation:#22]
replaced return value with null for pro/verron/officestamper/preset/Resolvers::nullToDefault → KILLED

72

1.1
Location : nullToPlaceholder
Killed by : none
replaced return value with null for pro/verron/officestamper/preset/Resolvers::nullToPlaceholder → SURVIVED
Covering tests

83

1.1
Location : isoDateTime
Killed by : pro.verron.officestamper.test.ResolutionTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.ResolutionTest]/[test-template:testCustomResolution(java.lang.String, boolean, boolean, boolean, boolean, boolean, java.lang.String, boolean, java.lang.String)]/[test-template-invocation:#22]
replaced return value with null for pro/verron/officestamper/preset/Resolvers::isoDateTime → KILLED

94

1.1
Location : isoTime
Killed by : pro.verron.officestamper.test.ResolutionTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.ResolutionTest]/[test-template:testCustomResolution(java.lang.String, boolean, boolean, boolean, boolean, boolean, java.lang.String, boolean, java.lang.String)]/[test-template-invocation:#22]
replaced return value with null for pro/verron/officestamper/preset/Resolvers::isoTime → KILLED

105

1.1
Location : isoDate
Killed by : pro.verron.officestamper.test.ResolutionTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.ResolutionTest]/[test-template:testCustomResolution(java.lang.String, boolean, boolean, boolean, boolean, boolean, java.lang.String, boolean, java.lang.String)]/[test-template-invocation:#22]
replaced return value with null for pro/verron/officestamper/preset/Resolvers::isoDate → KILLED

118

1.1
Location : isoTime
Killed by : none
replaced return value with null for pro/verron/officestamper/preset/Resolvers::isoTime → NO_COVERAGE

131

1.1
Location : isoDate
Killed by : none
replaced return value with null for pro/verron/officestamper/preset/Resolvers::isoDate → NO_COVERAGE

144

1.1
Location : isoDateTime
Killed by : none
replaced return value with null for pro/verron/officestamper/preset/Resolvers::isoDateTime → NO_COVERAGE

155

1.1
Location : legacyDate
Killed by : pro.verron.officestamper.test.ResolutionTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.ResolutionTest]/[test-template:testCustomResolution(java.lang.String, boolean, boolean, boolean, boolean, boolean, java.lang.String, boolean, java.lang.String)]/[test-template-invocation:#22]
replaced return value with null for pro/verron/officestamper/preset/Resolvers::legacyDate → KILLED

168

1.1
Location : legacyDate
Killed by : none
replaced return value with null for pro/verron/officestamper/preset/Resolvers::legacyDate → NO_COVERAGE

179

1.1
Location : image
Killed by : pro.verron.officestamper.test.ResolutionTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.ResolutionTest]/[test-template:testCustomResolution(java.lang.String, boolean, boolean, boolean, boolean, boolean, java.lang.String, boolean, java.lang.String)]/[test-template-invocation:#22]
replaced return value with null for pro/verron/officestamper/preset/Resolvers::image → KILLED

226

1.1
Location : resolve
Killed by : pro.verron.officestamper.test.SpelInstantiationTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.SpelInstantiationTest]/[method:testDateInstantiationAndResolution()]
replaced return value with "" for pro/verron/officestamper/preset/Resolvers$DateResolver::resolve → KILLED

245

1.1
Location : canResolve
Killed by : pro.verron.officestamper.test.DefaultTests.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.DefaultTests]/[test-template:features(java.lang.String, pro.verron.officestamper.api.OfficeStamperConfiguration, java.lang.Object, java.io.InputStream, java.lang.String)]/[test-template-invocation:#25]
replaced boolean return with true for pro/verron/officestamper/preset/Resolvers$ImageResolver::canResolve → KILLED

2.2
Location : canResolve
Killed by : pro.verron.officestamper.test.DefaultTests.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.DefaultTests]/[test-template:features(java.lang.String, pro.verron.officestamper.api.OfficeStamperConfiguration, java.lang.Object, java.io.InputStream, java.lang.String)]/[test-template-invocation:#32]
replaced boolean return with false for pro/verron/officestamper/preset/Resolvers$ImageResolver::canResolve → KILLED

254

1.1
Location : resolve
Killed by : pro.verron.officestamper.test.DefaultTests.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.DefaultTests]/[test-template:features(java.lang.String, pro.verron.officestamper.api.OfficeStamperConfiguration, java.lang.Object, java.io.InputStream, java.lang.String)]/[test-template-invocation:#32]
negated conditional → KILLED

255

1.1
Location : resolve
Killed by : pro.verron.officestamper.test.DefaultTests.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.DefaultTests]/[test-template:features(java.lang.String, pro.verron.officestamper.api.OfficeStamperConfiguration, java.lang.Object, java.io.InputStream, java.lang.String)]/[test-template-invocation:#32]
replaced return value with null for pro/verron/officestamper/preset/Resolvers$ImageResolver::resolve → KILLED

276

1.1
Location : resolve
Killed by : pro.verron.officestamper.test.DefaultTests.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.DefaultTests]/[test-template:features(java.lang.String, pro.verron.officestamper.api.OfficeStamperConfiguration, java.lang.Object, java.io.InputStream, java.lang.String)]/[test-template-invocation:#32]
replaced return value with null for pro/verron/officestamper/preset/Resolvers$ImageResolver::resolve → KILLED

314

1.1
Location : resolve
Killed by : pro.verron.officestamper.test.SpelInstantiationTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.SpelInstantiationTest]/[method:testDateInstantiationAndResolution()]
replaced return value with "" for pro/verron/officestamper/preset/Resolvers$LocalDateResolver::resolve → KILLED

351

1.1
Location : resolve
Killed by : pro.verron.officestamper.test.SpelInstantiationTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.SpelInstantiationTest]/[method:testDateInstantiationAndResolution()]
replaced return value with "" for pro/verron/officestamper/preset/Resolvers$LocalDateTimeResolver::resolve → KILLED

387

1.1
Location : resolve
Killed by : pro.verron.officestamper.test.SpelInstantiationTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.SpelInstantiationTest]/[method:testDateInstantiationAndResolution()]
replaced return value with "" for pro/verron/officestamper/preset/Resolvers$LocalTimeResolver::resolve → KILLED

418

1.1
Location : canResolve
Killed by : pro.verron.officestamper.test.DefaultTests.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.DefaultTests]/[test-template:features(java.lang.String, pro.verron.officestamper.api.OfficeStamperConfiguration, java.lang.Object, java.io.InputStream, java.lang.String)]/[test-template-invocation:#25]
replaced boolean return with true for pro/verron/officestamper/preset/Resolvers$Null2DefaultResolver::canResolve → KILLED

2.2
Location : canResolve
Killed by : pro.verron.officestamper.test.DefaultTests.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.DefaultTests]/[test-template:features(java.lang.String, pro.verron.officestamper.api.OfficeStamperConfiguration, java.lang.Object, java.io.InputStream, java.lang.String)]/[test-template-invocation:#25]
negated conditional → KILLED

427

1.1
Location : resolve
Killed by : pro.verron.officestamper.test.DefaultTests.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.DefaultTests]/[test-template:features(java.lang.String, pro.verron.officestamper.api.OfficeStamperConfiguration, java.lang.Object, java.io.InputStream, java.lang.String)]/[test-template-invocation:#16]
replaced return value with null for pro/verron/officestamper/preset/Resolvers$Null2DefaultResolver::resolve → KILLED

436

1.1
Location : defaultValue
Killed by : none
replaced return value with "" for pro/verron/officestamper/preset/Resolvers$Null2DefaultResolver::defaultValue → NO_COVERAGE

462

1.1
Location : resolve
Killed by : pro.verron.officestamper.test.DefaultTests.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.DefaultTests]/[test-template:features(java.lang.String, pro.verron.officestamper.api.OfficeStamperConfiguration, java.lang.Object, java.io.InputStream, java.lang.String)]/[test-template-invocation:#5]
replaced return value with null for pro/verron/officestamper/preset/Resolvers$Null2PlaceholderResolver::resolve → KILLED

467

1.1
Location : canResolve
Killed by : none
replaced boolean return with true for pro/verron/officestamper/preset/Resolvers$Null2PlaceholderResolver::canResolve → SURVIVED
Covering tests

2.2
Location : canResolve
Killed by : pro.verron.officestamper.test.DefaultTests.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.DefaultTests]/[test-template:features(java.lang.String, pro.verron.officestamper.api.OfficeStamperConfiguration, java.lang.Object, java.io.InputStream, java.lang.String)]/[test-template-invocation:#5]
negated conditional → KILLED

494

1.1
Location : canResolve
Killed by : pro.verron.officestamper.test.DefaultTests.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.DefaultTests]/[test-template:features(java.lang.String, pro.verron.officestamper.api.OfficeStamperConfiguration, java.lang.Object, java.io.InputStream, java.lang.String)]/[test-template-invocation:#25]
negated conditional → KILLED

2.2
Location : canResolve
Killed by : none
replaced boolean return with true for pro/verron/officestamper/preset/Resolvers$ToStringResolver::canResolve → SURVIVED
Covering tests

503

1.1
Location : resolve
Killed by : pro.verron.officestamper.test.DefaultTests.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.DefaultTests]/[test-template:features(java.lang.String, pro.verron.officestamper.api.OfficeStamperConfiguration, java.lang.Object, java.io.InputStream, java.lang.String)]/[test-template-invocation:#25]
replaced return value with null for pro/verron/officestamper/preset/Resolvers$ToStringResolver::resolve → KILLED

Active mutators

Tests examined


Report generated by PIT 1.17.0