Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(453)

Side by Side Diff: test/source_report_test.dart

Issue 1929063002: pkg/vm_service_client: add getSourceReport to VMServiceReference (Closed) Base URL: https://github.com/dart-lang/vm_service_client.git@master
Patch Set: code review Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« lib/src/isolate.dart ('K') | « test/client_test.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 import 'package:test/test.dart';
6 import 'package:vm_service_client/vm_service_client.dart';
7
8 import 'utils.dart';
9
10 const _mainContent = r"""
11 print("one");
12 print("two");
13
14 if (false) {
15 print("three");
16 print("four");
17 }""";
18
19 void main() {
20 VMServiceClient client;
21 VMIsolateRef isolate;
22
23 tearDown(() {
24 if (client != null) client.close();
25 });
26
27 group('a script with one range', () {
28 setUp(() async {
29 client = await runAndConnect(main: _mainContent);
30
31 isolate = (await client.getVM()).isolates.single;
32
33 await isolate.pause();
34 });
35
36 test("and no options", () async {
37 var report = await isolate.getSourceReport();
38
39 expect(report.ranges, hasLength(greaterThan(1)));
40
41 var range = report.ranges.singleWhere((range) =>
42 range.script.uri.toString().startsWith('data:application/dart'));
43
44 expect(range.compiled, isTrue);
45
46 var script = await range.script.load();
47
48 var startLocation = script.sourceLocation(range.location.token);
49 expect(startLocation.line, 5);
50 expect(startLocation.column, 1);
51
52 var endLocation = script.sourceLocation(range.location.end);
53 expect(endLocation.line, 15);
54 expect(endLocation.column, 1);
55
56 expect(range.hits, isNull);
57 expect(range.misses, isNull);
58 expect(range.possibleBreakpoints, isNull);
59 });
60
61 test("including coverage", () async {
62 var report = await isolate.getSourceReport(includeCoverageReport: true);
63
64 var range = report.ranges.singleWhere((range) =>
65 range.script.uri.toString().startsWith('data:application/dart'));
66 expect(range.possibleBreakpoints, isNull);
67
68 var script = await range.script.load();
69
70 var hitLocations =
71 range.hits.map((token) => script.sourceLocation(token).line);
72
73 expect(hitLocations, [7, 8, 9, 15]);
74
75 var missLocations =
76 range.misses.map((token) => script.sourceLocation(token).line);
77
78 expect(missLocations, [12, 13]);
79 });
80
81 test("including possible breakpoints", () async {
82 var report =
83 await isolate.getSourceReport(includePossibleBreakpoints: true);
84
85 var range = report.ranges.singleWhere((range) =>
86 range.script.uri.toString().startsWith('data:application/dart'));
87
88 expect(range.hits, isNull);
89 expect(range.misses, isNull);
90
91 var script = await range.script.load();
92
93 expect(range.possibleBreakpoints, isNotEmpty);
94
95 var breakPointLines = range.possibleBreakpoints
96 .map((token) => script.sourceLocation(token).line);
97
98 expect(breakPointLines, [5, 7, 8, 9, 12, 13, 15]);
99 });
100
101 test("including coverage and possible breakpoints", () async {
102 var report = await isolate.getSourceReport(
103 includeCoverageReport: true, includePossibleBreakpoints: true);
104
105 var range = report.ranges.singleWhere((range) =>
106 range.script.uri.toString().startsWith('data:application/dart'));
107
108 expect(range.hits, isNotEmpty);
109 expect(range.misses, isNotEmpty);
110 expect(range.possibleBreakpoints, isNotEmpty);
111 });
112 });
113
114 group('a script with multiple ranges', () {
115 VMScript script;
116 int mainFunctionTokenOffset;
117 VMLibrary rootLib;
118
119 setUp(() async {
120 client = await runAndConnect(
121 topLevel: r'''final unusedField = 5;
122
123 int unusedFunction(a, b) {
124 return a + b;
125 }''',
126 main: _mainContent);
127
128 isolate = (await client.getVM()).isolates.single;
129
130 await isolate.pause();
131
132 var runnableIsolate = await isolate.loadRunnable();
133 rootLib = await runnableIsolate.rootLibrary.load();
134
135 var mainFunc = await rootLib.functions['main'].load();
136
137 mainFunctionTokenOffset = mainFunc.location.token.offset;
138
139 script = await rootLib.scripts.single.load();
140 });
141
142 test("not foce compiled", () async {
143 var report = await script.getSourceReport(
144 includeCoverageReport: true, includePossibleBreakpoints: true);
145
146 expect(report.ranges, hasLength(2));
147
148 var firstRange = report.ranges.first;
149 expect(firstRange.compiled, isFalse);
150 expect(firstRange.location.end.offset, lessThan(mainFunctionTokenOffset));
151
152 var secondRange = report.ranges.last;
153 expect(secondRange.compiled, isTrue);
154 expect(secondRange.location.token.offset, mainFunctionTokenOffset);
155 });
156
157 test("foce compiled", () async {
158 var report = await script.getSourceReport(
159 includeCoverageReport: true,
160 includePossibleBreakpoints: true,
161 forceCompile: true);
162
163 expect(report.ranges, hasLength(2));
164
165 var firstRange = report.ranges.first;
166 expect(firstRange.compiled, isTrue);
167
168 var secondRange = report.ranges.last;
169 expect(secondRange.compiled, isTrue);
170 });
171
172 test("with tokenPos set", () async {
173 var report = await script.getSourceReport(
174 includeCoverageReport: true,
175 includePossibleBreakpoints: true,
176 tokenPos: mainFunctionTokenOffset);
177
178 expect(
179 report.ranges.single.location.token.offset, mainFunctionTokenOffset);
180 });
181
182 test("with endTokenPos set", () async {
183 var report = await script.getSourceReport(
184 includeCoverageReport: true,
185 includePossibleBreakpoints: true,
186 endTokenPos: mainFunctionTokenOffset - 1);
187
188 expect(report.ranges.single.location.end.offset,
189 lessThan(mainFunctionTokenOffset));
190 });
191
192 test("with an empty token range", () async {
193 var unusedFunction = await rootLib.functions['unusedFunction'].load();
194
195 var report = await script.getSourceReport(
196 includeCoverageReport: true,
197 includePossibleBreakpoints: true,
198 tokenPos: unusedFunction.location.end.offset + 1,
199 endTokenPos: mainFunctionTokenOffset - 1);
200
201 expect(report.ranges, isEmpty);
202 });
203 });
204 }
OLDNEW
« lib/src/isolate.dart ('K') | « test/client_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698