monocart-coverage-reports 2.0.0 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/converter/ast.js
CHANGED
|
@@ -154,14 +154,6 @@ const generateCountState = (coverageList) => {
|
|
|
154
154
|
|
|
155
155
|
const getJsAstInfo = (item, coverageList) => {
|
|
156
156
|
|
|
157
|
-
// not for css
|
|
158
|
-
if (!item.js) {
|
|
159
|
-
return {
|
|
160
|
-
functions: [],
|
|
161
|
-
branches: []
|
|
162
|
-
};
|
|
163
|
-
}
|
|
164
|
-
|
|
165
157
|
const { source } = item;
|
|
166
158
|
|
|
167
159
|
const options = {
|
|
@@ -193,76 +185,118 @@ const getJsAstInfo = (item, coverageList) => {
|
|
|
193
185
|
|
|
194
186
|
// =========================================================================================================
|
|
195
187
|
|
|
196
|
-
const
|
|
197
|
-
let hasCovered = false;
|
|
198
|
-
// line and line is 1-base
|
|
199
|
-
rules.forEach((rule) => {
|
|
188
|
+
const addRule = (item, coverageList, coveredRanges, count = 0) => {
|
|
200
189
|
|
|
201
|
-
|
|
190
|
+
const { source } = item;
|
|
191
|
+
const { start, end } = source;
|
|
192
|
+
const startOffset = start.offset;
|
|
193
|
+
const endOffset = end.offset;
|
|
202
194
|
|
|
203
|
-
|
|
204
|
-
|
|
195
|
+
if (!count) {
|
|
196
|
+
const coveredRange = findInRanges(startOffset, endOffset, coveredRanges);
|
|
197
|
+
if (coveredRange) {
|
|
198
|
+
count = 1;
|
|
205
199
|
}
|
|
200
|
+
}
|
|
206
201
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
});
|
|
231
|
-
return;
|
|
232
|
-
}
|
|
202
|
+
coverageList.push({
|
|
203
|
+
start: startOffset,
|
|
204
|
+
end: endOffset,
|
|
205
|
+
count
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
return count;
|
|
209
|
+
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
const addAtRule = (item, coverageList, coveredRanges) => {
|
|
213
|
+
const { name, nodes } = item;
|
|
214
|
+
|
|
215
|
+
if (['charset', 'import', 'namespace'].includes(name)) {
|
|
216
|
+
addRule(item, coverageList, coveredRanges, 1);
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
if (['media', 'supports', 'container', 'layer'].includes(name)) {
|
|
221
|
+
|
|
222
|
+
const childCoverageList = [];
|
|
223
|
+
const count = addCssRules(nodes, childCoverageList, coveredRanges);
|
|
224
|
+
if (count) {
|
|
233
225
|
|
|
234
|
-
// add whole media as uncovered
|
|
235
226
|
coverageList.push({
|
|
236
|
-
start:
|
|
237
|
-
end:
|
|
238
|
-
count:
|
|
227
|
+
start: item.source.start.offset,
|
|
228
|
+
end: childCoverageList[0].start,
|
|
229
|
+
count: 1
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
let end;
|
|
233
|
+
childCoverageList.forEach((it) => {
|
|
234
|
+
coverageList.push(it);
|
|
235
|
+
end = it.end;
|
|
239
236
|
});
|
|
237
|
+
|
|
238
|
+
coverageList.push({
|
|
239
|
+
start: end,
|
|
240
|
+
end: item.source.end.offset,
|
|
241
|
+
count: 1
|
|
242
|
+
});
|
|
243
|
+
|
|
240
244
|
return;
|
|
241
245
|
}
|
|
242
246
|
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
addRule(item, coverageList, coveredRanges);
|
|
250
|
+
|
|
251
|
+
};
|
|
252
|
+
|
|
253
|
+
const addCssRules = (list, coverageList, coveredRanges) => {
|
|
254
|
+
|
|
255
|
+
let count = 0;
|
|
256
|
+
|
|
257
|
+
// line and line is 1-base
|
|
258
|
+
list.forEach((item) => {
|
|
259
|
+
|
|
260
|
+
const { type } = item;
|
|
261
|
+
|
|
262
|
+
if (type === 'comment') {
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
if (type === 'rule') {
|
|
267
|
+
count += addRule(item, coverageList, coveredRanges);
|
|
268
|
+
return;
|
|
252
269
|
}
|
|
253
270
|
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
}
|
|
271
|
+
// console.log('=============================================================================');
|
|
272
|
+
// Object.keys(item).forEach((k) => {
|
|
273
|
+
// if (k === 'parent') {
|
|
274
|
+
// return;
|
|
275
|
+
// }
|
|
276
|
+
// if (k === 'raws') {
|
|
277
|
+
// return;
|
|
278
|
+
// }
|
|
279
|
+
// if (k === 'nodes') {
|
|
280
|
+
// console.log(k, item[k].length);
|
|
281
|
+
// return;
|
|
282
|
+
// }
|
|
283
|
+
// if (k === 'source') {
|
|
284
|
+
// console.log(k, item[k].start, item[k].end);
|
|
285
|
+
// return;
|
|
286
|
+
// }
|
|
287
|
+
// console.log(k, item[k]);
|
|
288
|
+
// });
|
|
289
|
+
|
|
290
|
+
if (type === 'atrule') {
|
|
291
|
+
addAtRule(item, coverageList, coveredRanges);
|
|
292
|
+
}
|
|
259
293
|
|
|
260
294
|
});
|
|
261
295
|
|
|
262
|
-
return
|
|
296
|
+
return count;
|
|
263
297
|
};
|
|
264
298
|
|
|
265
|
-
const getCssAstInfo = (item,
|
|
299
|
+
const getCssAstInfo = (item, coverageList) => {
|
|
266
300
|
|
|
267
301
|
const {
|
|
268
302
|
source, sourcePath, ranges
|
|
@@ -270,6 +304,7 @@ const getCssAstInfo = (item, locator) => {
|
|
|
270
304
|
|
|
271
305
|
// sort covered ranges
|
|
272
306
|
ranges.sort((a, b) => a.start - b.start);
|
|
307
|
+
|
|
273
308
|
// to offset covered ranges
|
|
274
309
|
const coveredRanges = ranges.map((it) => {
|
|
275
310
|
return {
|
|
@@ -282,11 +317,13 @@ const getCssAstInfo = (item, locator) => {
|
|
|
282
317
|
const ast = parseCss(source);
|
|
283
318
|
Util.logTime(`parse css: ${sourcePath}`, time_start_parse);
|
|
284
319
|
|
|
285
|
-
|
|
286
|
-
addCssRules(ast.
|
|
320
|
+
// if (sourcePath.endsWith('style.css')) {
|
|
321
|
+
addCssRules(ast.nodes, coverageList, coveredRanges);
|
|
322
|
+
// }
|
|
287
323
|
|
|
288
324
|
return {
|
|
289
|
-
|
|
325
|
+
functions: [],
|
|
326
|
+
branches: []
|
|
290
327
|
};
|
|
291
328
|
};
|
|
292
329
|
|
|
@@ -26,6 +26,9 @@ const quickFindRange = (position, ranges) => {
|
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
const findInRanges = (start, end, ranges) => {
|
|
29
|
+
if (!Util.isList(ranges)) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
29
32
|
const range = quickFindRange(start, ranges);
|
|
30
33
|
if (start >= range.startOffset && end <= range.endOffset) {
|
|
31
34
|
return range;
|
|
@@ -978,7 +978,7 @@ const convertV8List = async (v8list, options) => {
|
|
|
978
978
|
|
|
979
979
|
// ============================
|
|
980
980
|
// move functions and ranges to coverageList
|
|
981
|
-
let coverageList;
|
|
981
|
+
let coverageList = [];
|
|
982
982
|
let astInfo;
|
|
983
983
|
if (js) {
|
|
984
984
|
coverageList = item.functions;
|
|
@@ -988,11 +988,8 @@ const convertV8List = async (v8list, options) => {
|
|
|
988
988
|
}
|
|
989
989
|
astInfo = getJsAstInfo(item, coverageList);
|
|
990
990
|
} else {
|
|
991
|
-
astInfo = getCssAstInfo(item, locator);
|
|
992
991
|
// convent css covered ranges to rules ranges and include uncovered ranges
|
|
993
|
-
|
|
994
|
-
// console.log(coverageList);
|
|
995
|
-
|
|
992
|
+
astInfo = getCssAstInfo(item, coverageList);
|
|
996
993
|
// remove original ranges
|
|
997
994
|
if (Util.loggingType !== 'debug') {
|
|
998
995
|
delete item.ranges;
|