JsoupCssInliner.java

1
package fr.sii.ogham.html.inliner.impl.jsoup;
2
3
import static fr.sii.ogham.core.util.HtmlUtils.getCssUrlFunctions;
4
import static fr.sii.ogham.core.util.HtmlUtils.relativize;
5
import static fr.sii.ogham.html.inliner.impl.jsoup.CssInlineUtils.isInlineModeAllowed;
6
7
import java.util.List;
8
import java.util.StringTokenizer;
9
import java.util.regex.Pattern;
10
11
import org.jsoup.Jsoup;
12
import org.jsoup.nodes.DataNode;
13
import org.jsoup.nodes.Document;
14
import org.jsoup.nodes.Element;
15
import org.jsoup.parser.Tag;
16
import org.jsoup.select.Elements;
17
import org.slf4j.Logger;
18
import org.slf4j.LoggerFactory;
19
20
import fr.sii.ogham.core.util.CssUrlFunction;
21
import fr.sii.ogham.html.inliner.CssInliner;
22
import fr.sii.ogham.html.inliner.CssInlinerConstants.InlineModes;
23
import fr.sii.ogham.html.inliner.ExternalCss;
24
25
public class JsoupCssInliner implements CssInliner {
26
	private static final Logger LOG = LoggerFactory.getLogger(JsoupCssInliner.class);
27
	
28
	private static final String HREF_ATTR = "href";
29
	private static final String TEMP_STYLE_ATTR = "data-cssstyle";
30
	private static final String STYLE_ATTR = "style";
31
	private static final String STYLE_TAG = "style";
32
	private static final String CSS_LINKS_SELECTOR = "link[rel*=\"stylesheet\"], link[type=\"text/css\"], link[href$=\".css\"]";
33
	private static final Pattern NEW_LINES = Pattern.compile("\n");
34
	private static final Pattern COMMENTS = Pattern.compile("/\\*.*?\\*/");
35
	private static final Pattern SPACES = Pattern.compile(" +");
36
	private static final String QUOTE_ENTITY = """;
37
38
	@Override
39
	public String inline(String htmlContent, List<ExternalCss> cssContents) {
40
		Document doc = Jsoup.parse(htmlContent);
41
42 3 1. inline : removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::internStyles → NO_COVERAGE
2. inline : removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::internStyles → KILLED
3. inline : removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::internStyles → KILLED
		internStyles(doc, cssContents);
43
		String stylesheet = fetchStyles(doc);
44 3 1. inline : removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::extractStyles → NO_COVERAGE
2. inline : removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::extractStyles → KILLED
3. inline : removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::extractStyles → KILLED
		extractStyles(doc, stylesheet);
45 3 1. inline : removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::applyStyles → NO_COVERAGE
2. inline : removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::applyStyles → KILLED
3. inline : removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::applyStyles → KILLED
		applyStyles(doc);
46
47 3 1. inline : replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::inline → NO_COVERAGE
2. inline : replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::inline → KILLED
3. inline : replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::inline → KILLED
		return doc.outerHtml();
48
	}
49
50
	/**
51
	 * Applies the styles to a <code>data-cssstyle</code> attribute. This is
52
	 * because the styles need to be applied sequentially, but before the
53
	 * <code>style</code> defined for the element inline.
54
	 *
55
	 * @param doc
56
	 *            the html document
57
	 */
58
	private static void extractStyles(Document doc, String stylesheet) {
59
		String cleanedStylesheet = ignoreAtRules(stylesheet);
60
		cleanedStylesheet = NEW_LINES.matcher(cleanedStylesheet).replaceAll("");
61
		cleanedStylesheet = COMMENTS.matcher(cleanedStylesheet).replaceAll("");
62
		cleanedStylesheet = SPACES.matcher(cleanedStylesheet).replaceAll(" ");
63
		String styleRules = cleanedStylesheet.trim();
64
		String delims = "{}";
65
		StringTokenizer st = new StringTokenizer(styleRules, delims);
66 5 1. extractStyles : changed conditional boundary → SURVIVED
2. extractStyles : changed conditional boundary → NO_COVERAGE
3. extractStyles : negated conditional → NO_COVERAGE
4. extractStyles : negated conditional → KILLED
5. extractStyles : negated conditional → KILLED
		while (st.countTokens() > 1) {
67
			String selector = st.nextToken();
68
			String properties = st.nextToken();
69
			Elements selectedElements = doc.select(selector.trim());
70
			for (Element selElem : selectedElements) {
71
				String oldProperties = selElem.attr(TEMP_STYLE_ATTR);
72 6 1. extractStyles : changed conditional boundary → NO_COVERAGE
2. extractStyles : negated conditional → NO_COVERAGE
3. extractStyles : changed conditional boundary → KILLED
4. extractStyles : changed conditional boundary → KILLED
5. extractStyles : negated conditional → KILLED
6. extractStyles : negated conditional → KILLED
				selElem.attr(TEMP_STYLE_ATTR, oldProperties.length() > 0 ? concatenateProperties(oldProperties, properties) : properties);
73
			}
74
		}
75
	}
76
	
77
	/**
78
	 * Replace link tags with style tags in order to keep the same inclusion
79
	 * order
80
	 *
81
	 * @param doc
82
	 *            the html document
83
	 * @param cssContents
84
	 *            the list of external css files with their content
85
	 */
86
	private static void internStyles(Document doc, List<ExternalCss> cssContents) {
87
		Elements els = doc.select(CSS_LINKS_SELECTOR);
88
		for (Element e : els) {
89 3 1. internStyles : negated conditional → NO_COVERAGE
2. internStyles : negated conditional → KILLED
3. internStyles : negated conditional → KILLED
			if (isInlineModeAllowed(e, InlineModes.STYLE_ATTR)) {
90
				String path = e.attr(HREF_ATTR);
91
				ExternalCss css = getCss(cssContents, path);
92 3 1. internStyles : negated conditional → NO_COVERAGE
2. internStyles : negated conditional → KILLED
3. internStyles : negated conditional → KILLED
				if (css != null) {
93
					Element style = new Element(Tag.valueOf(STYLE_TAG), "");
94
					style.appendChild(new DataNode(getCssContent(css)));
95 3 1. internStyles : removed call to org/jsoup/nodes/Element::replaceWith → NO_COVERAGE
2. internStyles : removed call to org/jsoup/nodes/Element::replaceWith → KILLED
3. internStyles : removed call to org/jsoup/nodes/Element::replaceWith → KILLED
					e.replaceWith(style);
96
				}
97
			}
98
		}
99
	}
100
101
	private static ExternalCss getCss(List<ExternalCss> cssContents, String path) {
102
		for (ExternalCss css : cssContents) {
103 3 1. getCss : negated conditional → NO_COVERAGE
2. getCss : negated conditional → KILLED
3. getCss : negated conditional → KILLED
			if (css.getPath().getOriginalPath().contains(path)) {
104 3 1. getCss : replaced return value with null for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::getCss → NO_COVERAGE
2. getCss : replaced return value with null for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::getCss → KILLED
3. getCss : replaced return value with null for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::getCss → KILLED
				return css;
105
			}
106
		}
107
		return null;
108
	}
109
110
	/**
111
	 * Generates a stylesheet from an html document
112
	 *
113
	 * @param doc
114
	 *            the html document
115
	 * @return a string representing the stylesheet.
116
	 */
117
	private static String fetchStyles(Document doc) {
118
		Elements els = doc.select(STYLE_TAG);
119
		StringBuilder styles = new StringBuilder();
120
		for (Element e : els) {
121 3 1. fetchStyles : negated conditional → NO_COVERAGE
2. fetchStyles : negated conditional → KILLED
3. fetchStyles : negated conditional → KILLED
			if (isInlineModeAllowed(e, InlineModes.STYLE_ATTR)) {
122
				styles.append(e.data());
123 3 1. fetchStyles : removed call to org/jsoup/nodes/Element::remove → NO_COVERAGE
2. fetchStyles : removed call to org/jsoup/nodes/Element::remove → KILLED
3. fetchStyles : removed call to org/jsoup/nodes/Element::remove → KILLED
				e.remove();
124
			}
125
		}
126 3 1. fetchStyles : replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::fetchStyles → NO_COVERAGE
2. fetchStyles : replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::fetchStyles → KILLED
3. fetchStyles : replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::fetchStyles → KILLED
		return styles.toString();
127
	}
128
129
	/**
130
	 * Transfers styles from the <code>data-cssstyle</code> attribute to the
131
	 * <code>style</code> attribute.
132
	 *
133
	 * @param doc
134
	 *            the html document
135
	 */
136
	private static void applyStyles(Document doc) {
137
		Elements allStyledElements = doc.getElementsByAttribute(TEMP_STYLE_ATTR);
138
139
		for (Element e : allStyledElements) {
140 3 1. applyStyles : negated conditional → NO_COVERAGE
2. applyStyles : negated conditional → KILLED
3. applyStyles : negated conditional → KILLED
			if (isInlineModeAllowed(e, InlineModes.STYLE_ATTR)) {
141
				String newStyle = e.attr(TEMP_STYLE_ATTR);
142
				String oldStyle = e.attr(STYLE_ATTR);
143
				e.attr(STYLE_ATTR, (trimAll(newStyle) + ";" + trimAll(oldStyle)).replaceAll(";+", ";").trim());
144
			}
145
			e.removeAttr(TEMP_STYLE_ATTR);
146
		}
147
	}
148
149
	private static String concatenateProperties(String oldProp, String newProp) {
150
		String prop = oldProp;
151 2 1. concatenateProperties : negated conditional → SURVIVED
2. concatenateProperties : negated conditional → NO_COVERAGE
		if (!prop.endsWith(";")) {
152
			prop += ";";
153
		}
154 3 1. concatenateProperties : replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::concatenateProperties → NO_COVERAGE
2. concatenateProperties : replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::concatenateProperties → KILLED
3. concatenateProperties : replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::concatenateProperties → KILLED
		return trimAll(prop) + " " + trimAll(newProp) + ";";
155
	}
156
	
157
	private static String trimAll(String str) {
158 3 1. trimAll : replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::trimAll → NO_COVERAGE
2. trimAll : replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::trimAll → KILLED
3. trimAll : replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::trimAll → KILLED
		return str.replaceAll("\\s+", " ").trim();
159
	}
160
	
161
162
	private static String ignoreAtRules(String stylesheet) {
163
		StringBuilder sb = new StringBuilder();
164
		AtRuleParserContext ctx = new AtRuleParserContext();
165 9 1. ignoreAtRules : changed conditional boundary → NO_COVERAGE
2. ignoreAtRules : Changed increment from 1 to -1 → NO_COVERAGE
3. ignoreAtRules : negated conditional → NO_COVERAGE
4. ignoreAtRules : changed conditional boundary → KILLED
5. ignoreAtRules : changed conditional boundary → KILLED
6. ignoreAtRules : Changed increment from 1 to -1 → KILLED
7. ignoreAtRules : Changed increment from 1 to -1 → KILLED
8. ignoreAtRules : negated conditional → KILLED
9. ignoreAtRules : negated conditional → KILLED
		for (int i=0 ; i<stylesheet.length() ; i++) {
166
			char c = stylesheet.charAt(i);
167 2 1. ignoreAtRules : removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::updateLineNumberIfNewLine → NO_COVERAGE
2. ignoreAtRules : removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::updateLineNumberIfNewLine → SURVIVED
			updateLineNumberIfNewLine(ctx, c);
168 3 1. ignoreAtRules : removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::markAsStartOfAtRuleIfAtChar → NO_COVERAGE
2. ignoreAtRules : removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::markAsStartOfAtRuleIfAtChar → SURVIVED
3. ignoreAtRules : removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::markAsStartOfAtRuleIfAtChar → KILLED
			markAsStartOfAtRuleIfAtChar(ctx, c);
169 3 1. ignoreAtRules : removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::markAsStartOfNestedAtRuleIfAlreadyInAtRuleAndIsOpeningBracket → NO_COVERAGE
2. ignoreAtRules : removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::markAsStartOfNestedAtRuleIfAlreadyInAtRuleAndIsOpeningBracket → SURVIVED
3. ignoreAtRules : removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::markAsStartOfNestedAtRuleIfAlreadyInAtRuleAndIsOpeningBracket → KILLED
			markAsStartOfNestedAtRuleIfAlreadyInAtRuleAndIsOpeningBracket(ctx, c);
170 3 1. ignoreAtRules : removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::markAsEndOfNestedAtRuleIfAlreadyInAtRuleAndIsClosingBracket → SURVIVED
2. ignoreAtRules : removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::markAsEndOfNestedAtRuleIfAlreadyInAtRuleAndIsClosingBracket → NO_COVERAGE
3. ignoreAtRules : removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::markAsEndOfNestedAtRuleIfAlreadyInAtRuleAndIsClosingBracket → KILLED
			markAsEndOfNestedAtRuleIfAlreadyInAtRuleAndIsClosingBracket(ctx, c);
171 3 1. ignoreAtRules : negated conditional → NO_COVERAGE
2. ignoreAtRules : negated conditional → KILLED
3. ignoreAtRules : negated conditional → KILLED
			if (ignoreAtRuleIfAtEndOfAtRule(ctx, c)) {
172
				continue;
173
			}
174 3 1. ignoreAtRules : removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::updateStylesAndAtRuleContent → NO_COVERAGE
2. ignoreAtRules : removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::updateStylesAndAtRuleContent → KILLED
3. ignoreAtRules : removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::updateStylesAndAtRuleContent → KILLED
			updateStylesAndAtRuleContent(ctx, sb, c);
175
		}
176 3 1. ignoreAtRules : replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::ignoreAtRules → NO_COVERAGE
2. ignoreAtRules : replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::ignoreAtRules → KILLED
3. ignoreAtRules : replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::ignoreAtRules → KILLED
		return sb.toString();
177
	}
178
179
	private static boolean ignoreAtRuleIfAtEndOfAtRule(AtRuleParserContext ctx, char c) {
180 7 1. ignoreAtRuleIfAtEndOfAtRule : negated conditional → NO_COVERAGE
2. ignoreAtRuleIfAtEndOfAtRule : negated conditional → NO_COVERAGE
3. ignoreAtRuleIfAtEndOfAtRule : negated conditional → NO_COVERAGE
4. ignoreAtRuleIfAtEndOfAtRule : negated conditional → KILLED
5. ignoreAtRuleIfAtEndOfAtRule : negated conditional → KILLED
6. ignoreAtRuleIfAtEndOfAtRule : negated conditional → KILLED
7. ignoreAtRuleIfAtEndOfAtRule : negated conditional → KILLED
		if (ctx.inAtRule && !ctx.inNestedAtRule && c == ';') {
181
			ctx.inAtRule = false;
182
			LOG.warn("{} rule is not handled by JsoupCssInliner implementation. Line {}:'{}' is skipped", rulename(ctx.rule), ctx.startLineOfCurrentAtRule, ctx.rule);
183 2 1. ignoreAtRuleIfAtEndOfAtRule : replaced boolean return with false for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::ignoreAtRuleIfAtEndOfAtRule → NO_COVERAGE
2. ignoreAtRuleIfAtEndOfAtRule : replaced boolean return with false for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::ignoreAtRuleIfAtEndOfAtRule → KILLED
			return true;
184
		}
185 7 1. ignoreAtRuleIfAtEndOfAtRule : negated conditional → NO_COVERAGE
2. ignoreAtRuleIfAtEndOfAtRule : negated conditional → SURVIVED
3. ignoreAtRuleIfAtEndOfAtRule : negated conditional → NO_COVERAGE
4. ignoreAtRuleIfAtEndOfAtRule : negated conditional → NO_COVERAGE
5. ignoreAtRuleIfAtEndOfAtRule : negated conditional → KILLED
6. ignoreAtRuleIfAtEndOfAtRule : negated conditional → KILLED
7. ignoreAtRuleIfAtEndOfAtRule : negated conditional → KILLED
		if (ctx.inAtRule && ctx.inNestedAtRule && ctx.numberOfOpenedAtRules == 0) {
186
			ctx.inAtRule = false;
187
			ctx.inNestedAtRule = false;
188
			LOG.warn("{} rule is not handled by JsoupCssInliner implementation. Lines {}-{} are skipped", rulename(ctx.rule), ctx.startLineOfCurrentAtRule, ctx.line);
189 2 1. ignoreAtRuleIfAtEndOfAtRule : replaced boolean return with false for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::ignoreAtRuleIfAtEndOfAtRule → SURVIVED
2. ignoreAtRuleIfAtEndOfAtRule : replaced boolean return with false for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::ignoreAtRuleIfAtEndOfAtRule → NO_COVERAGE
			return true;
190
		}
191 3 1. ignoreAtRuleIfAtEndOfAtRule : replaced boolean return with true for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::ignoreAtRuleIfAtEndOfAtRule → NO_COVERAGE
2. ignoreAtRuleIfAtEndOfAtRule : replaced boolean return with true for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::ignoreAtRuleIfAtEndOfAtRule → KILLED
3. ignoreAtRuleIfAtEndOfAtRule : replaced boolean return with true for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::ignoreAtRuleIfAtEndOfAtRule → KILLED
		return false;
192
	}
193
194
	private static void updateStylesAndAtRuleContent(AtRuleParserContext ctx, StringBuilder sb, char c) {
195 3 1. updateStylesAndAtRuleContent : negated conditional → NO_COVERAGE
2. updateStylesAndAtRuleContent : negated conditional → KILLED
3. updateStylesAndAtRuleContent : negated conditional → KILLED
		if (!ctx.inAtRule) {
196
			sb.append(c);
197
			ctx.rule = new StringBuilder();
198
		} else {
199
			ctx.rule.append(c);
200
		}
201
	}
202
203
	private static void markAsEndOfNestedAtRuleIfAlreadyInAtRuleAndIsClosingBracket(AtRuleParserContext ctx, char c) {
204 7 1. markAsEndOfNestedAtRuleIfAlreadyInAtRuleAndIsClosingBracket : negated conditional → SURVIVED
2. markAsEndOfNestedAtRuleIfAlreadyInAtRuleAndIsClosingBracket : negated conditional → NO_COVERAGE
3. markAsEndOfNestedAtRuleIfAlreadyInAtRuleAndIsClosingBracket : negated conditional → NO_COVERAGE
4. markAsEndOfNestedAtRuleIfAlreadyInAtRuleAndIsClosingBracket : negated conditional → NO_COVERAGE
5. markAsEndOfNestedAtRuleIfAlreadyInAtRuleAndIsClosingBracket : negated conditional → KILLED
6. markAsEndOfNestedAtRuleIfAlreadyInAtRuleAndIsClosingBracket : negated conditional → KILLED
7. markAsEndOfNestedAtRuleIfAlreadyInAtRuleAndIsClosingBracket : negated conditional → KILLED
		if (ctx.inAtRule && ctx.inNestedAtRule && c == '}') {
205 2 1. markAsEndOfNestedAtRuleIfAlreadyInAtRuleAndIsClosingBracket : Replaced integer subtraction with addition → NO_COVERAGE
2. markAsEndOfNestedAtRuleIfAlreadyInAtRuleAndIsClosingBracket : Replaced integer subtraction with addition → KILLED
			ctx.numberOfOpenedAtRules--;
206
		}
207
	}
208
209
	private static void markAsStartOfNestedAtRuleIfAlreadyInAtRuleAndIsOpeningBracket(AtRuleParserContext ctx, char c) {
210 5 1. markAsStartOfNestedAtRuleIfAlreadyInAtRuleAndIsOpeningBracket : negated conditional → NO_COVERAGE
2. markAsStartOfNestedAtRuleIfAlreadyInAtRuleAndIsOpeningBracket : negated conditional → SURVIVED
3. markAsStartOfNestedAtRuleIfAlreadyInAtRuleAndIsOpeningBracket : negated conditional → NO_COVERAGE
4. markAsStartOfNestedAtRuleIfAlreadyInAtRuleAndIsOpeningBracket : negated conditional → KILLED
5. markAsStartOfNestedAtRuleIfAlreadyInAtRuleAndIsOpeningBracket : negated conditional → KILLED
		if (ctx.inAtRule && c == '{') {
211
			ctx.inNestedAtRule = true;
212 2 1. markAsStartOfNestedAtRuleIfAlreadyInAtRuleAndIsOpeningBracket : Replaced integer addition with subtraction → NO_COVERAGE
2. markAsStartOfNestedAtRuleIfAlreadyInAtRuleAndIsOpeningBracket : Replaced integer addition with subtraction → KILLED
			ctx.numberOfOpenedAtRules++;
213
		}
214
	}
215
216
	private static void markAsStartOfAtRuleIfAtChar(AtRuleParserContext ctx, char c) {
217 5 1. markAsStartOfAtRuleIfAtChar : negated conditional → NO_COVERAGE
2. markAsStartOfAtRuleIfAtChar : negated conditional → NO_COVERAGE
3. markAsStartOfAtRuleIfAtChar : negated conditional → KILLED
4. markAsStartOfAtRuleIfAtChar : negated conditional → KILLED
5. markAsStartOfAtRuleIfAtChar : negated conditional → KILLED
		if (c == '@' && !ctx.inAtRule) {
218
			ctx.inAtRule = true;
219
			ctx.startLineOfCurrentAtRule = ctx.line;
220
		}
221
	}
222
223
	private static void updateLineNumberIfNewLine(AtRuleParserContext ctx, char c) {
224 2 1. updateLineNumberIfNewLine : negated conditional → NO_COVERAGE
2. updateLineNumberIfNewLine : negated conditional → SURVIVED
		if (c == '\n') {
225 2 1. updateLineNumberIfNewLine : Replaced integer addition with subtraction → NO_COVERAGE
2. updateLineNumberIfNewLine : Replaced integer addition with subtraction → SURVIVED
			ctx.line++;
226
		}
227
	}
228
	
229
	private static String rulename(StringBuilder rule) {
230
		StringBuilder name = new StringBuilder();
231 6 1. rulename : changed conditional boundary → SURVIVED
2. rulename : changed conditional boundary → NO_COVERAGE
3. rulename : Changed increment from 1 to -1 → NO_COVERAGE
4. rulename : negated conditional → NO_COVERAGE
5. rulename : negated conditional → SURVIVED
6. rulename : Changed increment from 1 to -1 → KILLED
		for (int i=0 ; i<rule.length() ; i++) {
232
			char c = rule.charAt(i);
233 8 1. rulename : negated conditional → SURVIVED
2. rulename : negated conditional → NO_COVERAGE
3. rulename : negated conditional → SURVIVED
4. rulename : negated conditional → NO_COVERAGE
5. rulename : negated conditional → SURVIVED
6. rulename : negated conditional → NO_COVERAGE
7. rulename : negated conditional → NO_COVERAGE
8. rulename : negated conditional → SURVIVED
			if (c != '@' && c != '-' && !Character.isAlphabetic(c) && !Character.isDigit(c)) {
234
				break;
235
			}
236
			name.append(c);
237
		}
238 2 1. rulename : replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::rulename → NO_COVERAGE
2. rulename : replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::rulename → SURVIVED
		return name.toString();
239
	}
240
241
242
	private static String getCssContent(ExternalCss css) {
243
		String content = css.getContent();
244 3 1. getCssContent : replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::getCssContent → NO_COVERAGE
2. getCssContent : replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::getCssContent → KILLED
3. getCssContent : replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::getCssContent → KILLED
		return updateRelativeUrls(content, css);
245
	}
246
247
	private static String updateRelativeUrls(String content, ExternalCss css) {
248
		String newContent = content;
249
		for (CssUrlFunction match : getCssUrlFunctions(content, QUOTE_ENTITY)) {
250
			newContent = match.rewriteUrl(newContent, relativize(css.getPath().getOriginalPath(), match.getUrl()));
251
		}
252 3 1. updateRelativeUrls : replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::updateRelativeUrls → NO_COVERAGE
2. updateRelativeUrls : replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::updateRelativeUrls → KILLED
3. updateRelativeUrls : replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::updateRelativeUrls → KILLED
		return newContent;
253
	}
254
255
	private static class AtRuleParserContext {
256
		protected int line;
257
		protected int startLineOfCurrentAtRule;
258
		protected boolean inAtRule;
259
		protected boolean inNestedAtRule;
260
		protected int numberOfOpenedAtRules;
261
		protected StringBuilder rule;
262
		
263
		public AtRuleParserContext() {
264
			super();
265
			this.line = 1;
266
			this.startLineOfCurrentAtRule = 0;
267
			this.inAtRule = false;
268
			this.inNestedAtRule = false;
269
			this.numberOfOpenedAtRules = 0;
270
			this.rule = new StringBuilder();
271
		}
272
		
273
		
274
	}
275
}

Mutations

42

1.1
Location : inline
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.mixedStyles(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::internStyles → KILLED

2.2
Location : inline
Killed by : none
removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::internStyles → NO_COVERAGE

3.3
Location : inline
Killed by : oghamall.it.html.translator.JsoupInlineCssTranslatorTest.externalStyles(oghamall.it.html.translator.JsoupInlineCssTranslatorTest)
removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::internStyles → KILLED

44

1.1
Location : inline
Killed by : oghamall.it.html.translator.JsoupInlineCssTranslatorTest.externalStyles(oghamall.it.html.translator.JsoupInlineCssTranslatorTest)
removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::extractStyles → KILLED

2.2
Location : inline
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.internalStyles(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::extractStyles → KILLED

3.3
Location : inline
Killed by : none
removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::extractStyles → NO_COVERAGE

45

1.1
Location : inline
Killed by : none
removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::applyStyles → NO_COVERAGE

2.2
Location : inline
Killed by : oghamall.it.html.translator.JsoupInlineCssTranslatorTest.externalStyles(oghamall.it.html.translator.JsoupInlineCssTranslatorTest)
removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::applyStyles → KILLED

3.3
Location : inline
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.internalStyles(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::applyStyles → KILLED

47

1.1
Location : inline
Killed by : oghamall.it.html.translator.JsoupInlineCssTranslatorTest.externalStyles(oghamall.it.html.translator.JsoupInlineCssTranslatorTest)
replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::inline → KILLED

2.2
Location : inline
Killed by : none
replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::inline → NO_COVERAGE

3.3
Location : inline
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.noStyles(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::inline → KILLED

66

1.1
Location : extractStyles
Killed by : none
changed conditional boundary → SURVIVED

2.2
Location : extractStyles
Killed by : none
changed conditional boundary → NO_COVERAGE

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

4.4
Location : extractStyles
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.noStyles(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
negated conditional → KILLED

5.5
Location : extractStyles
Killed by : oghamall.it.html.translator.JsoupInlineCssTranslatorTest.externalStyles(oghamall.it.html.translator.JsoupInlineCssTranslatorTest)
negated conditional → KILLED

72

1.1
Location : extractStyles
Killed by : none
changed conditional boundary → NO_COVERAGE

2.2
Location : extractStyles
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.internalStyles(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
changed conditional boundary → KILLED

3.3
Location : extractStyles
Killed by : oghamall.it.html.translator.JsoupInlineCssTranslatorTest.externalStyles(oghamall.it.html.translator.JsoupInlineCssTranslatorTest)
changed conditional boundary → KILLED

4.4
Location : extractStyles
Killed by : oghamall.it.html.translator.JsoupInlineCssTranslatorTest.externalStyles(oghamall.it.html.translator.JsoupInlineCssTranslatorTest)
negated conditional → KILLED

5.5
Location : extractStyles
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.internalStyles(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
negated conditional → KILLED

6.6
Location : extractStyles
Killed by : none
negated conditional → NO_COVERAGE

89

1.1
Location : internStyles
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.mixedStyles(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
negated conditional → KILLED

2.2
Location : internStyles
Killed by : none
negated conditional → NO_COVERAGE

3.3
Location : internStyles
Killed by : oghamall.it.html.translator.JsoupInlineCssTranslatorTest.externalStyles(oghamall.it.html.translator.JsoupInlineCssTranslatorTest)
negated conditional → KILLED

92

1.1
Location : internStyles
Killed by : none
negated conditional → NO_COVERAGE

2.2
Location : internStyles
Killed by : oghamall.it.html.translator.JsoupInlineCssTranslatorTest.externalStyles(oghamall.it.html.translator.JsoupInlineCssTranslatorTest)
negated conditional → KILLED

3.3
Location : internStyles
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.mixedStyles(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
negated conditional → KILLED

95

1.1
Location : internStyles
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.mixedStyles(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
removed call to org/jsoup/nodes/Element::replaceWith → KILLED

2.2
Location : internStyles
Killed by : oghamall.it.html.translator.JsoupInlineCssTranslatorTest.externalStyles(oghamall.it.html.translator.JsoupInlineCssTranslatorTest)
removed call to org/jsoup/nodes/Element::replaceWith → KILLED

3.3
Location : internStyles
Killed by : none
removed call to org/jsoup/nodes/Element::replaceWith → NO_COVERAGE

103

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

2.2
Location : getCss
Killed by : none
negated conditional → NO_COVERAGE

3.3
Location : getCss
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.mixedStyles(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
negated conditional → KILLED

104

1.1
Location : getCss
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.mixedStyles(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
replaced return value with null for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::getCss → KILLED

2.2
Location : getCss
Killed by : none
replaced return value with null for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::getCss → NO_COVERAGE

3.3
Location : getCss
Killed by : oghamall.it.html.translator.JsoupInlineCssTranslatorTest.externalStyles(oghamall.it.html.translator.JsoupInlineCssTranslatorTest)
replaced return value with null for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::getCss → KILLED

121

1.1
Location : fetchStyles
Killed by : oghamall.it.html.translator.JsoupInlineCssTranslatorTest.externalStyles(oghamall.it.html.translator.JsoupInlineCssTranslatorTest)
negated conditional → KILLED

2.2
Location : fetchStyles
Killed by : none
negated conditional → NO_COVERAGE

3.3
Location : fetchStyles
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.internalStyles(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
negated conditional → KILLED

123

1.1
Location : fetchStyles
Killed by : none
removed call to org/jsoup/nodes/Element::remove → NO_COVERAGE

2.2
Location : fetchStyles
Killed by : oghamall.it.html.translator.JsoupInlineCssTranslatorTest.externalStyles(oghamall.it.html.translator.JsoupInlineCssTranslatorTest)
removed call to org/jsoup/nodes/Element::remove → KILLED

3.3
Location : fetchStyles
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.internalStyles(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
removed call to org/jsoup/nodes/Element::remove → KILLED

126

1.1
Location : fetchStyles
Killed by : oghamall.it.html.translator.JsoupInlineCssTranslatorTest.externalStyles(oghamall.it.html.translator.JsoupInlineCssTranslatorTest)
replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::fetchStyles → KILLED

2.2
Location : fetchStyles
Killed by : none
replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::fetchStyles → NO_COVERAGE

3.3
Location : fetchStyles
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.internalStyles(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::fetchStyles → KILLED

140

1.1
Location : applyStyles
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.internalStyles(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
negated conditional → KILLED

2.2
Location : applyStyles
Killed by : none
negated conditional → NO_COVERAGE

3.3
Location : applyStyles
Killed by : oghamall.it.html.translator.JsoupInlineCssTranslatorTest.externalStyles(oghamall.it.html.translator.JsoupInlineCssTranslatorTest)
negated conditional → KILLED

151

1.1
Location : concatenateProperties
Killed by : none
negated conditional → SURVIVED

2.2
Location : concatenateProperties
Killed by : none
negated conditional → NO_COVERAGE

154

1.1
Location : concatenateProperties
Killed by : oghamall.it.html.translator.JsoupInlineCssTranslatorTest.externalStyles(oghamall.it.html.translator.JsoupInlineCssTranslatorTest)
replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::concatenateProperties → KILLED

2.2
Location : concatenateProperties
Killed by : none
replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::concatenateProperties → NO_COVERAGE

3.3
Location : concatenateProperties
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.internalStyles(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::concatenateProperties → KILLED

158

1.1
Location : trimAll
Killed by : none
replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::trimAll → NO_COVERAGE

2.2
Location : trimAll
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.internalStyles(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::trimAll → KILLED

3.3
Location : trimAll
Killed by : oghamall.it.html.translator.JsoupInlineCssTranslatorTest.externalStyles(oghamall.it.html.translator.JsoupInlineCssTranslatorTest)
replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::trimAll → KILLED

165

1.1
Location : ignoreAtRules
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.noStyles(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
changed conditional boundary → KILLED

2.2
Location : ignoreAtRules
Killed by : none
changed conditional boundary → NO_COVERAGE

3.3
Location : ignoreAtRules
Killed by : oghamall.it.html.translator.JsoupInlineCssTranslatorTest.externalStyles(oghamall.it.html.translator.JsoupInlineCssTranslatorTest)
changed conditional boundary → KILLED

4.4
Location : ignoreAtRules
Killed by : none
Changed increment from 1 to -1 → NO_COVERAGE

5.5
Location : ignoreAtRules
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.internalStyles(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
Changed increment from 1 to -1 → KILLED

6.6
Location : ignoreAtRules
Killed by : oghamall.it.html.translator.JsoupInlineCssTranslatorTest.externalStyles(oghamall.it.html.translator.JsoupInlineCssTranslatorTest)
Changed increment from 1 to -1 → KILLED

7.7
Location : ignoreAtRules
Killed by : oghamall.it.html.translator.JsoupInlineCssTranslatorTest.externalStyles(oghamall.it.html.translator.JsoupInlineCssTranslatorTest)
negated conditional → KILLED

8.8
Location : ignoreAtRules
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.noStyles(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
negated conditional → KILLED

9.9
Location : ignoreAtRules
Killed by : none
negated conditional → NO_COVERAGE

167

1.1
Location : ignoreAtRules
Killed by : none
removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::updateLineNumberIfNewLine → NO_COVERAGE

2.2
Location : ignoreAtRules
Killed by : none
removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::updateLineNumberIfNewLine → SURVIVED

168

1.1
Location : ignoreAtRules
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.ignoreAtRules(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::markAsStartOfAtRuleIfAtChar → KILLED

2.2
Location : ignoreAtRules
Killed by : none
removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::markAsStartOfAtRuleIfAtChar → NO_COVERAGE

3.3
Location : ignoreAtRules
Killed by : none
removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::markAsStartOfAtRuleIfAtChar → SURVIVED

169

1.1
Location : ignoreAtRules
Killed by : none
removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::markAsStartOfNestedAtRuleIfAlreadyInAtRuleAndIsOpeningBracket → NO_COVERAGE

2.2
Location : ignoreAtRules
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.ignoreAtRules(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::markAsStartOfNestedAtRuleIfAlreadyInAtRuleAndIsOpeningBracket → KILLED

3.3
Location : ignoreAtRules
Killed by : none
removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::markAsStartOfNestedAtRuleIfAlreadyInAtRuleAndIsOpeningBracket → SURVIVED

170

1.1
Location : ignoreAtRules
Killed by : none
removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::markAsEndOfNestedAtRuleIfAlreadyInAtRuleAndIsClosingBracket → SURVIVED

2.2
Location : ignoreAtRules
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.ignoreAtRules(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::markAsEndOfNestedAtRuleIfAlreadyInAtRuleAndIsClosingBracket → KILLED

3.3
Location : ignoreAtRules
Killed by : none
removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::markAsEndOfNestedAtRuleIfAlreadyInAtRuleAndIsClosingBracket → NO_COVERAGE

171

1.1
Location : ignoreAtRules
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.internalStyles(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
negated conditional → KILLED

2.2
Location : ignoreAtRules
Killed by : oghamall.it.html.translator.JsoupInlineCssTranslatorTest.externalStyles(oghamall.it.html.translator.JsoupInlineCssTranslatorTest)
negated conditional → KILLED

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

174

1.1
Location : ignoreAtRules
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.internalStyles(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::updateStylesAndAtRuleContent → KILLED

2.2
Location : ignoreAtRules
Killed by : none
removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::updateStylesAndAtRuleContent → NO_COVERAGE

3.3
Location : ignoreAtRules
Killed by : oghamall.it.html.translator.JsoupInlineCssTranslatorTest.externalStyles(oghamall.it.html.translator.JsoupInlineCssTranslatorTest)
removed call to fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::updateStylesAndAtRuleContent → KILLED

176

1.1
Location : ignoreAtRules
Killed by : oghamall.it.html.translator.JsoupInlineCssTranslatorTest.externalStyles(oghamall.it.html.translator.JsoupInlineCssTranslatorTest)
replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::ignoreAtRules → KILLED

2.2
Location : ignoreAtRules
Killed by : none
replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::ignoreAtRules → NO_COVERAGE

3.3
Location : ignoreAtRules
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.internalStyles(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::ignoreAtRules → KILLED

180

1.1
Location : ignoreAtRuleIfAtEndOfAtRule
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.internalStyles(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
negated conditional → KILLED

2.2
Location : ignoreAtRuleIfAtEndOfAtRule
Killed by : none
negated conditional → NO_COVERAGE

3.3
Location : ignoreAtRuleIfAtEndOfAtRule
Killed by : oghamall.it.html.translator.JsoupInlineCssTranslatorTest.externalStyles(oghamall.it.html.translator.JsoupInlineCssTranslatorTest)
negated conditional → KILLED

4.4
Location : ignoreAtRuleIfAtEndOfAtRule
Killed by : none
negated conditional → NO_COVERAGE

5.5
Location : ignoreAtRuleIfAtEndOfAtRule
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.ignoreAtRules(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
negated conditional → KILLED

6.6
Location : ignoreAtRuleIfAtEndOfAtRule
Killed by : none
negated conditional → NO_COVERAGE

7.7
Location : ignoreAtRuleIfAtEndOfAtRule
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.ignoreAtRules(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
negated conditional → KILLED

183

1.1
Location : ignoreAtRuleIfAtEndOfAtRule
Killed by : none
replaced boolean return with false for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::ignoreAtRuleIfAtEndOfAtRule → NO_COVERAGE

2.2
Location : ignoreAtRuleIfAtEndOfAtRule
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.ignoreAtRules(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
replaced boolean return with false for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::ignoreAtRuleIfAtEndOfAtRule → KILLED

185

1.1
Location : ignoreAtRuleIfAtEndOfAtRule
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.ignoreAtRules(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
negated conditional → KILLED

2.2
Location : ignoreAtRuleIfAtEndOfAtRule
Killed by : none
negated conditional → NO_COVERAGE

3.3
Location : ignoreAtRuleIfAtEndOfAtRule
Killed by : none
negated conditional → SURVIVED

4.4
Location : ignoreAtRuleIfAtEndOfAtRule
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.ignoreAtRules(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
negated conditional → KILLED

5.5
Location : ignoreAtRuleIfAtEndOfAtRule
Killed by : none
negated conditional → NO_COVERAGE

6.6
Location : ignoreAtRuleIfAtEndOfAtRule
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.ignoreAtRules(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
negated conditional → KILLED

7.7
Location : ignoreAtRuleIfAtEndOfAtRule
Killed by : none
negated conditional → NO_COVERAGE

189

1.1
Location : ignoreAtRuleIfAtEndOfAtRule
Killed by : none
replaced boolean return with false for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::ignoreAtRuleIfAtEndOfAtRule → SURVIVED

2.2
Location : ignoreAtRuleIfAtEndOfAtRule
Killed by : none
replaced boolean return with false for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::ignoreAtRuleIfAtEndOfAtRule → NO_COVERAGE

191

1.1
Location : ignoreAtRuleIfAtEndOfAtRule
Killed by : none
replaced boolean return with true for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::ignoreAtRuleIfAtEndOfAtRule → NO_COVERAGE

2.2
Location : ignoreAtRuleIfAtEndOfAtRule
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.internalStyles(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
replaced boolean return with true for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::ignoreAtRuleIfAtEndOfAtRule → KILLED

3.3
Location : ignoreAtRuleIfAtEndOfAtRule
Killed by : oghamall.it.html.translator.JsoupInlineCssTranslatorTest.externalStyles(oghamall.it.html.translator.JsoupInlineCssTranslatorTest)
replaced boolean return with true for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::ignoreAtRuleIfAtEndOfAtRule → KILLED

195

1.1
Location : updateStylesAndAtRuleContent
Killed by : none
negated conditional → NO_COVERAGE

2.2
Location : updateStylesAndAtRuleContent
Killed by : oghamall.it.html.translator.JsoupInlineCssTranslatorTest.externalStyles(oghamall.it.html.translator.JsoupInlineCssTranslatorTest)
negated conditional → KILLED

3.3
Location : updateStylesAndAtRuleContent
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.internalStyles(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
negated conditional → KILLED

204

1.1
Location : markAsEndOfNestedAtRuleIfAlreadyInAtRuleAndIsClosingBracket
Killed by : none
negated conditional → SURVIVED

2.2
Location : markAsEndOfNestedAtRuleIfAlreadyInAtRuleAndIsClosingBracket
Killed by : none
negated conditional → NO_COVERAGE

3.3
Location : markAsEndOfNestedAtRuleIfAlreadyInAtRuleAndIsClosingBracket
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.ignoreAtRules(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
negated conditional → KILLED

4.4
Location : markAsEndOfNestedAtRuleIfAlreadyInAtRuleAndIsClosingBracket
Killed by : none
negated conditional → NO_COVERAGE

5.5
Location : markAsEndOfNestedAtRuleIfAlreadyInAtRuleAndIsClosingBracket
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.ignoreAtRules(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
negated conditional → KILLED

6.6
Location : markAsEndOfNestedAtRuleIfAlreadyInAtRuleAndIsClosingBracket
Killed by : none
negated conditional → NO_COVERAGE

7.7
Location : markAsEndOfNestedAtRuleIfAlreadyInAtRuleAndIsClosingBracket
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.ignoreAtRules(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
negated conditional → KILLED

205

1.1
Location : markAsEndOfNestedAtRuleIfAlreadyInAtRuleAndIsClosingBracket
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.ignoreAtRules(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
Replaced integer subtraction with addition → KILLED

2.2
Location : markAsEndOfNestedAtRuleIfAlreadyInAtRuleAndIsClosingBracket
Killed by : none
Replaced integer subtraction with addition → NO_COVERAGE

210

1.1
Location : markAsStartOfNestedAtRuleIfAlreadyInAtRuleAndIsOpeningBracket
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.ignoreAtRules(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
negated conditional → KILLED

2.2
Location : markAsStartOfNestedAtRuleIfAlreadyInAtRuleAndIsOpeningBracket
Killed by : none
negated conditional → NO_COVERAGE

3.3
Location : markAsStartOfNestedAtRuleIfAlreadyInAtRuleAndIsOpeningBracket
Killed by : none
negated conditional → SURVIVED

4.4
Location : markAsStartOfNestedAtRuleIfAlreadyInAtRuleAndIsOpeningBracket
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.ignoreAtRules(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
negated conditional → KILLED

5.5
Location : markAsStartOfNestedAtRuleIfAlreadyInAtRuleAndIsOpeningBracket
Killed by : none
negated conditional → NO_COVERAGE

212

1.1
Location : markAsStartOfNestedAtRuleIfAlreadyInAtRuleAndIsOpeningBracket
Killed by : none
Replaced integer addition with subtraction → NO_COVERAGE

2.2
Location : markAsStartOfNestedAtRuleIfAlreadyInAtRuleAndIsOpeningBracket
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.ignoreAtRules(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
Replaced integer addition with subtraction → KILLED

217

1.1
Location : markAsStartOfAtRuleIfAtChar
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.internalStyles(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
negated conditional → KILLED

2.2
Location : markAsStartOfAtRuleIfAtChar
Killed by : oghamall.it.html.translator.JsoupInlineCssTranslatorTest.externalStyles(oghamall.it.html.translator.JsoupInlineCssTranslatorTest)
negated conditional → KILLED

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

4.4
Location : markAsStartOfAtRuleIfAtChar
Killed by : none
negated conditional → NO_COVERAGE

5.5
Location : markAsStartOfAtRuleIfAtChar
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.ignoreAtRules(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
negated conditional → KILLED

224

1.1
Location : updateLineNumberIfNewLine
Killed by : none
negated conditional → NO_COVERAGE

2.2
Location : updateLineNumberIfNewLine
Killed by : none
negated conditional → SURVIVED

225

1.1
Location : updateLineNumberIfNewLine
Killed by : none
Replaced integer addition with subtraction → NO_COVERAGE

2.2
Location : updateLineNumberIfNewLine
Killed by : none
Replaced integer addition with subtraction → SURVIVED

231

1.1
Location : rulename
Killed by : none
changed conditional boundary → SURVIVED

2.2
Location : rulename
Killed by : none
changed conditional boundary → NO_COVERAGE

3.3
Location : rulename
Killed by : none
Changed increment from 1 to -1 → NO_COVERAGE

4.4
Location : rulename
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.ignoreAtRules(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
Changed increment from 1 to -1 → KILLED

5.5
Location : rulename
Killed by : none
negated conditional → NO_COVERAGE

6.6
Location : rulename
Killed by : none
negated conditional → SURVIVED

233

1.1
Location : rulename
Killed by : none
negated conditional → SURVIVED

2.2
Location : rulename
Killed by : none
negated conditional → NO_COVERAGE

3.3
Location : rulename
Killed by : none
negated conditional → SURVIVED

4.4
Location : rulename
Killed by : none
negated conditional → NO_COVERAGE

5.5
Location : rulename
Killed by : none
negated conditional → SURVIVED

6.6
Location : rulename
Killed by : none
negated conditional → NO_COVERAGE

7.7
Location : rulename
Killed by : none
negated conditional → NO_COVERAGE

8.8
Location : rulename
Killed by : none
negated conditional → SURVIVED

238

1.1
Location : rulename
Killed by : none
replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::rulename → NO_COVERAGE

2.2
Location : rulename
Killed by : none
replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::rulename → SURVIVED

244

1.1
Location : getCssContent
Killed by : oghamall.it.html.translator.JsoupInlineCssTranslatorTest.externalStyles(oghamall.it.html.translator.JsoupInlineCssTranslatorTest)
replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::getCssContent → KILLED

2.2
Location : getCssContent
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.mixedStyles(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::getCssContent → KILLED

3.3
Location : getCssContent
Killed by : none
replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::getCssContent → NO_COVERAGE

252

1.1
Location : updateRelativeUrls
Killed by : oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest.mixedStyles(oghamcore.ut.html.inliner.impl.JsoupCssInlinerTest)
replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::updateRelativeUrls → KILLED

2.2
Location : updateRelativeUrls
Killed by : oghamall.it.html.translator.JsoupInlineCssTranslatorTest.externalStyles(oghamall.it.html.translator.JsoupInlineCssTranslatorTest)
replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::updateRelativeUrls → KILLED

3.3
Location : updateRelativeUrls
Killed by : none
replaced return value with "" for fr/sii/ogham/html/inliner/impl/jsoup/JsoupCssInliner::updateRelativeUrls → NO_COVERAGE

Active mutators

Tests examined


Report generated by PIT OGHAM