blob: 68c500df1ef4f80f1437d13cfc14d37703abe7f6 [file] [log] [blame]
// Copyright (c) 2023, 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:developer';
import 'package:test/test.dart';
import 'package:vm_service/vm_service.dart';
import 'common/service_test_common.dart';
import 'common/test_helper.dart';
import 'get_source_report_with_mixin_lib2.dart';
import 'get_source_report_with_mixin_lib3.dart';
// AUTOGENERATED START
//
// Update these constants by running:
//
// dart pkg/vm_service/test/update_line_numbers.dart <test.dart>
//
const LINE_A = 32;
// AUTOGENERATED END
const lib1Filename = 'get_source_report_with_mixin_lib1';
const lib3Filename = 'get_source_report_with_mixin_lib3';
void testFunction() {
final Test1 test1 = Test1();
test1.foo();
final Test2 test2 = Test2();
test2.bar();
debugger(); // LINE_A
print('done');
}
final tests = <IsolateTest>[
hasStoppedAtBreakpoint,
stoppedAtLine(LINE_A),
(VmService service, IsolateRef isolateRef) async {
final isolateId = isolateRef.id!;
final scripts = await service.getScripts(isolateId);
ScriptRef? foundScript;
for (ScriptRef script in scripts.scripts!) {
if (script.uri!.contains(lib1Filename)) {
foundScript = script;
break;
}
}
if (foundScript == null) {
fail('Failed to find script');
}
Set<int> hits;
{
// Get report for everything; then collect for lib1.
final coverage = await service.getSourceReport(
isolateId,
[SourceReportKind.kCoverage],
);
hits = getHitsForLib1(coverage, lib1Filename);
expect(hits.length, greaterThanOrEqualTo(2));
print(hits);
}
{
// Now get report for the lib1 only.
final coverage = await service.getSourceReport(
isolateId,
[SourceReportKind.kCoverage],
scriptId: foundScript.id!,
);
final localHits = getHitsForLib1(coverage, lib1Filename);
expect(localHits.length, hits.length);
expect(hits.toList()..sort(), localHits.toList()..sort());
print(localHits);
}
},
];
Set<int> getHitsForLib1(SourceReport coverage, String uriContains) {
final scripts = coverage.scripts!;
final scriptIdsWanted = <int>{};
for (int i = 0; i < scripts.length; i++) {
final script = scripts[i];
final scriptUri = script.uri!;
if (scriptUri.contains(uriContains)) {
scriptIdsWanted.add(i);
}
}
final ranges = coverage.ranges!;
final hits = <int>{};
for (final range in ranges) {
if (scriptIdsWanted.contains(range.scriptIndex!)) {
if (range.coverage != null) {
for (final hit in range.coverage!.hits!) {
hits.add(hit);
}
}
}
}
return hits;
}
void main([args = const <String>[]]) => runIsolateTests(
args,
tests,
'get_source_report_with_mixin_test.dart',
testeeConcurrent: testFunction,
);