RegexBase64BackgroundImageInliner.java

1
package fr.sii.ogham.html.inliner.impl.regexp;
2
3
import static fr.sii.ogham.html.inliner.impl.regexp.CssImageInlinerConstants.InlineModes.BASE64;
4
import static java.text.MessageFormat.format;
5
6
import java.util.ArrayList;
7
import java.util.List;
8
9
import fr.sii.ogham.core.util.Base64Utils;
10
import fr.sii.ogham.html.inliner.ContentWithImages;
11
import fr.sii.ogham.html.inliner.ImageInliner;
12
import fr.sii.ogham.html.inliner.ImageResource;
13
import fr.sii.ogham.html.inliner.impl.regexp.CssImageInlinerConstants.InlineModes;
14
15
/**
16
 * Image inliner that reads the image and converts it into a base64 string. The
17
 * string is then included directly in the HTML content in place of the previous URL/path.
18
 * 
19
 * <p>
20
 * The inlining using base64 is only applied if the attribute
21
 * {@link CssImageInlinerConstants#INLINE_MODE_PROPERTY} is set to
22
 * {@link InlineModes#BASE64}.
23
 * </p>
24
 * 
25
 * @author Aurélien Baudet
26
 *
27
 */
28
public class RegexBase64BackgroundImageInliner implements ImageInliner {
29
	private static final String BASE64_URI = "data:{0};base64,{1}";
30
31
	@Override
32
	public ContentWithImages inline(String htmlContent, List<ImageResource> images) {
33
		List<Encoded> encoded = new ArrayList<>(images.size());
34 3 1. lambda$inline$0 : replaced return value with "" for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner::lambda$inline$0 → NO_COVERAGE
2. lambda$inline$0 : replaced return value with "" for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner::lambda$inline$0 → KILLED
3. lambda$inline$0 : replaced return value with "" for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner::lambda$inline$0 → KILLED
		String inlined = CssImageInlineUtils.inline(htmlContent, images, BASE64, decl -> encodeImage(decl.getUrl().getUrl(), decl.getImage(), encoded));
35 3 1. inline : replaced return value with null for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner::inline → NO_COVERAGE
2. inline : replaced return value with null for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner::inline → KILLED
3. inline : replaced return value with null for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner::inline → KILLED
		return new ContentWithImages(inlined, new ArrayList<>(0));
36
	}
37
38
	private String encodeImage(String imageUrl, ImageResource image, List<Encoded> encoded) {
39
		Encoded alreadyEncoded = getEncodedForUrl(imageUrl, encoded);
40 3 1. encodeImage : negated conditional → NO_COVERAGE
2. encodeImage : negated conditional → KILLED
3. encodeImage : negated conditional → KILLED
		if (alreadyEncoded != null) {
41 2 1. encodeImage : replaced return value with "" for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner::encodeImage → NO_COVERAGE
2. encodeImage : replaced return value with "" for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner::encodeImage → KILLED
			return alreadyEncoded.getEncodedUrl();
42
		}
43
		String encodedUrl = format(BASE64_URI, image.getMimetype(), Base64Utils.encodeToString(image.getContent()));
44
		encoded.add(new Encoded(imageUrl, encodedUrl));
45 3 1. encodeImage : replaced return value with "" for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner::encodeImage → NO_COVERAGE
2. encodeImage : replaced return value with "" for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner::encodeImage → KILLED
3. encodeImage : replaced return value with "" for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner::encodeImage → KILLED
		return encodedUrl;
46
	}
47
48
	private Encoded getEncodedForUrl(String imageUrl, List<Encoded> encoded) {
49
		// @formatter:off
50 2 1. getEncodedForUrl : replaced return value with null for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner::getEncodedForUrl → SURVIVED
2. getEncodedForUrl : replaced return value with null for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner::getEncodedForUrl → NO_COVERAGE
		return encoded.stream()
51 4 1. lambda$getEncodedForUrl$1 : replaced boolean return with false for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner::lambda$getEncodedForUrl$1 → SURVIVED
2. lambda$getEncodedForUrl$1 : replaced boolean return with false for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner::lambda$getEncodedForUrl$1 → NO_COVERAGE
3. lambda$getEncodedForUrl$1 : replaced boolean return with true for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner::lambda$getEncodedForUrl$1 → NO_COVERAGE
4. lambda$getEncodedForUrl$1 : replaced boolean return with true for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner::lambda$getEncodedForUrl$1 → KILLED
				.filter(e -> imageUrl.equals(e.getMatchedUrl()))
52
				.findFirst()
53
				.orElse(null);
54
		// @formatter:on
55
	}
56
57
	private static class Encoded {
58
		private final String matchedUrl;
59
		private final String encodedUrl;
60
61
		public Encoded(String matchedUrl, String encodedUrl) {
62
			super();
63
			this.matchedUrl = matchedUrl;
64
			this.encodedUrl = encodedUrl;
65
		}
66
67
		public String getMatchedUrl() {
68 2 1. getMatchedUrl : replaced return value with "" for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner$Encoded::getMatchedUrl → SURVIVED
2. getMatchedUrl : replaced return value with "" for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner$Encoded::getMatchedUrl → NO_COVERAGE
			return matchedUrl;
69
		}
70
71
		public String getEncodedUrl() {
72 2 1. getEncodedUrl : replaced return value with "" for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner$Encoded::getEncodedUrl → NO_COVERAGE
2. getEncodedUrl : replaced return value with "" for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner$Encoded::getEncodedUrl → KILLED
			return encodedUrl;
73
		}
74
	}
75
}

Mutations

34

1.1
Location : lambda$inline$0
Killed by : oghamcore.it.html.translator.InlineImageTranslatorTest.backgroudImagesShouldBeInlined(oghamcore.it.html.translator.InlineImageTranslatorTest)
replaced return value with "" for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner::lambda$inline$0 → KILLED

2.2
Location : lambda$inline$0
Killed by : none
replaced return value with "" for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner::lambda$inline$0 → NO_COVERAGE

3.3
Location : lambda$inline$0
Killed by : oghamall.it.email.EmailResourceInliningTest.inlineResources(oghamall.it.email.EmailResourceInliningTest)
replaced return value with "" for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner::lambda$inline$0 → KILLED

35

1.1
Location : inline
Killed by : oghamall.it.resolver.FreemarkerRelativeResourcesTests.relativeToPrefixSuffixAndPath(oghamall.it.resolver.FreemarkerRelativeResourcesTests)
replaced return value with null for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner::inline → KILLED

2.2
Location : inline
Killed by : oghamcore.it.html.translator.InlineImageTranslatorTest.oghamAttributesShoulBeRemoved(oghamcore.it.html.translator.InlineImageTranslatorTest)
replaced return value with null for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner::inline → KILLED

3.3
Location : inline
Killed by : none
replaced return value with null for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner::inline → NO_COVERAGE

40

1.1
Location : encodeImage
Killed by : oghamall.it.email.EmailResourceInliningTest.inlineResources(oghamall.it.email.EmailResourceInliningTest)
negated conditional → KILLED

2.2
Location : encodeImage
Killed by : oghamcore.it.html.translator.InlineImageTranslatorTest.backgroudImagesShouldBeInlined(oghamcore.it.html.translator.InlineImageTranslatorTest)
negated conditional → KILLED

3.3
Location : encodeImage
Killed by : none
negated conditional → NO_COVERAGE

41

1.1
Location : encodeImage
Killed by : none
replaced return value with "" for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner::encodeImage → NO_COVERAGE

2.2
Location : encodeImage
Killed by : oghamcore.it.html.translator.InlineImageTranslatorTest.backgroudImagesShouldBeInlined(oghamcore.it.html.translator.InlineImageTranslatorTest)
replaced return value with "" for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner::encodeImage → KILLED

45

1.1
Location : encodeImage
Killed by : oghamall.it.email.EmailResourceInliningTest.inlineResources(oghamall.it.email.EmailResourceInliningTest)
replaced return value with "" for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner::encodeImage → KILLED

2.2
Location : encodeImage
Killed by : none
replaced return value with "" for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner::encodeImage → NO_COVERAGE

3.3
Location : encodeImage
Killed by : oghamcore.it.html.translator.InlineImageTranslatorTest.backgroudImagesShouldBeInlined(oghamcore.it.html.translator.InlineImageTranslatorTest)
replaced return value with "" for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner::encodeImage → KILLED

50

1.1
Location : getEncodedForUrl
Killed by : none
replaced return value with null for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner::getEncodedForUrl → SURVIVED

2.2
Location : getEncodedForUrl
Killed by : none
replaced return value with null for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner::getEncodedForUrl → NO_COVERAGE

51

1.1
Location : lambda$getEncodedForUrl$1
Killed by : none
replaced boolean return with false for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner::lambda$getEncodedForUrl$1 → SURVIVED

2.2
Location : lambda$getEncodedForUrl$1
Killed by : none
replaced boolean return with false for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner::lambda$getEncodedForUrl$1 → NO_COVERAGE

3.3
Location : lambda$getEncodedForUrl$1
Killed by : oghamcore.it.html.translator.InlineImageTranslatorTest.backgroudImagesShouldBeInlined(oghamcore.it.html.translator.InlineImageTranslatorTest)
replaced boolean return with true for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner::lambda$getEncodedForUrl$1 → KILLED

4.4
Location : lambda$getEncodedForUrl$1
Killed by : none
replaced boolean return with true for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner::lambda$getEncodedForUrl$1 → NO_COVERAGE

68

1.1
Location : getMatchedUrl
Killed by : none
replaced return value with "" for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner$Encoded::getMatchedUrl → SURVIVED

2.2
Location : getMatchedUrl
Killed by : none
replaced return value with "" for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner$Encoded::getMatchedUrl → NO_COVERAGE

72

1.1
Location : getEncodedUrl
Killed by : none
replaced return value with "" for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner$Encoded::getEncodedUrl → NO_COVERAGE

2.2
Location : getEncodedUrl
Killed by : oghamcore.it.html.translator.InlineImageTranslatorTest.backgroudImagesShouldBeInlined(oghamcore.it.html.translator.InlineImageTranslatorTest)
replaced return value with "" for fr/sii/ogham/html/inliner/impl/regexp/RegexBase64BackgroundImageInliner$Encoded::getEncodedUrl → KILLED

Active mutators

Tests examined


Report generated by PIT OGHAM