blob: b9c6a0e2445612f7b1cebf8d98a78e5201b4e2b9 [file] [log] [blame]
// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:convert';
import 'dart:io';
import 'package:coverage/coverage.dart';
import 'package:test/test.dart';
// The scriptId for the main_test.js in the sample report.
const String mainScriptId = '31';
Future<String> sourceMapProvider(String scriptId) async {
if (scriptId != mainScriptId) {
return 'something invalid!';
}
return File('test/test_files/main_test.js.map').readAsString();
}
Future<String> sourceProvider(String scriptId) async {
if (scriptId != mainScriptId) return null;
return File('test/test_files/main_test.js').readAsString();
}
Future<Uri> sourceUriProvider(String sourceUrl, String scriptId) async =>
Uri.parse(sourceUrl);
void main() {
test('reports correctly', () async {
final preciseCoverage = json.decode(
await File('test/test_files/chrome_precise_report.txt')
.readAsString()) as List;
final report = await parseChromeCoverage(
preciseCoverage.cast(),
sourceProvider,
sourceMapProvider,
sourceUriProvider,
);
final sourceReport = report['coverage'].firstWhere(
(Map<String, dynamic> report) =>
report['source'].toString().contains('main_test.dart'));
final expectedHits = {
7: 1,
11: 1,
13: 1,
14: 1,
17: 0,
19: 0,
20: 0,
22: 1,
23: 1,
24: 1,
25: 1,
28: 1,
30: 0,
32: 1,
34: 1,
35: 1,
36: 1,
};
final hitMap = sourceReport['hits'] as List<int>;
expect(hitMap.length, equals(expectedHits.keys.length * 2));
for (var i = 0; i < hitMap.length; i += 2) {
expect(expectedHits[hitMap[i]], equals(hitMap[i + 1]));
}
});
}