Index: test/source_report_test.dart |
diff --git a/test/source_report_test.dart b/test/source_report_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b87520f79621442c73bf2db3bbd1f82bdcd832a0 |
--- /dev/null |
+++ b/test/source_report_test.dart |
@@ -0,0 +1,162 @@ |
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
nweiz
2016/04/29 00:52:45
2016
kevmoo
2016/04/29 23:36:55
Done.
|
+// 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 'package:test/test.dart'; |
+import 'package:vm_service_client/vm_service_client.dart'; |
+ |
+import 'utils.dart'; |
+ |
+VMServiceClient client; |
+VMIsolateRef isolate; |
nweiz
2016/04/29 00:52:44
There's no reason for this to be a top-level varia
kevmoo
2016/04/29 23:36:55
Done.
|
+ |
+void main() { |
+ tearDown(() { |
+ if (client != null) { |
+ client.close(); |
+ client = null; |
nweiz
2016/04/29 00:52:45
Don't bother nulling out the client. None of the o
kevmoo
2016/04/29 23:36:55
Done.
|
+ } |
+ isolate = null; |
+ }); |
+ |
+ group('simple script', () { |
nweiz
2016/04/29 00:52:44
The group name plus the test name should form a se
kevmoo
2016/04/29 23:36:55
Done.
|
+ setUp(() async { |
+ client = await runAndConnect(main: r""" |
+ print("one"); |
+ print("two"); |
+ """); |
nweiz
2016/04/29 00:52:44
Indent this correctly.
kevmoo
2016/04/29 23:36:55
this is copied from other tests that already exist
nweiz
2016/05/04 23:05:51
The same way it was indented in the tests you copi
kevmoo
2016/05/05 20:46:26
Please look at the latest code. This is changed qu
|
+ |
+ isolate = (await client.getVM()).isolates.single; |
+ |
+ await isolate.pause(); |
nweiz
2016/04/29 00:52:45
I'm not sure what you're going for here, but this
kevmoo
2016/04/29 23:36:55
I tried that and it never gets hit – I think becau
nweiz
2016/05/04 23:05:51
The simplest solution would be to just add Isolate
kevmoo
2016/05/05 20:46:26
Done.
|
+ }); |
+ |
+ test("no options", () async { |
+ var report = await isolate.getSourceReport(); |
+ |
+ expect(report.scripts, hasLength(greaterThan(1))); |
+ expect(report.ranges, hasLength(greaterThan(1))); |
+ |
+ var customScript = report.scripts.last; |
+ |
+ expect(customScript.uri.toString(), startsWith('data:application/dart')); |
+ |
+ var range = report.ranges.singleWhere( |
+ (range) => range.scriptIndex == report.scripts.length - 1); |
nweiz
2016/04/29 00:52:45
There shouldn't actually be multiple ranges in the
kevmoo
2016/04/29 23:36:55
Acknowledged.
|
+ |
+ expect(range.compiled, isTrue); |
+ expect(range.startPos, lessThan(range.endPos)); |
nweiz
2016/04/29 00:52:45
Assert that the source location is equal to the so
kevmoo
2016/04/29 23:36:55
Done.
|
+ expect(range.coverage, isNull); |
+ expect(range.possibleBreakpoints, isNull); |
+ }); |
+ |
+ test("coverage", () async { |
+ var report = await isolate.getSourceReport(includeCoverageReport: true); |
+ |
nweiz
2016/04/29 00:52:44
Nit: Having a newline between every statement isn'
kevmoo
2016/04/29 23:36:55
Acknowledged.
nweiz
2016/05/04 23:05:51
You deleted one newline :p.
kevmoo
2016/05/05 20:46:25
Acknowledged.
|
+ var customScript = report.scripts.last; |
+ |
+ expect(customScript.uri.toString(), startsWith('data:application/dart')); |
+ |
+ var range = report.ranges.singleWhere( |
+ (range) => range.scriptIndex == report.scripts.length - 1); |
+ |
+ expect(range.possibleBreakpoints, isNull); |
+ |
+ var coverage = range.coverage; |
+ |
+ expect(coverage.hits, isNotEmpty); |
+ expect(coverage.misses, isEmpty); |
nweiz
2016/04/29 00:52:44
These assertions are pretty loose—they don't asser
kevmoo
2016/04/29 23:36:55
Done.
|
+ }); |
+ |
+ test("possible break points", () async { |
+ var report = |
+ await isolate.getSourceReport(includePossibleBreakpoints: true); |
+ |
+ var customScript = report.scripts.last; |
+ |
+ expect(customScript.uri.toString(), startsWith('data:application/dart')); |
+ |
+ var range = report.ranges.singleWhere( |
+ (range) => range.scriptIndex == report.scripts.length - 1); |
+ |
+ expect(range.coverage, isNull); |
+ |
+ expect(range.possibleBreakpoints, isNotEmpty); |
nweiz
2016/04/29 00:52:45
Actually assert what the breakpoints are. You can
kevmoo
2016/04/29 23:36:55
Done.
|
+ }); |
+ |
+ test("both options", () async { |
nweiz
2016/04/29 00:52:45
I don't think this is necessary.
kevmoo
2016/04/29 23:36:55
Eh, I like to make sure someone in the future does
nweiz
2016/05/04 23:05:51
If you're going to test the cross-product of all o
kevmoo
2016/05/05 20:46:25
Acknowledged.
|
+ var report = await isolate.getSourceReport( |
+ includeCoverageReport: true, includePossibleBreakpoints: true); |
+ |
+ var customScript = report.scripts.last; |
+ |
+ expect(customScript.uri.toString(), startsWith('data:application/dart')); |
+ |
+ var range = report.ranges.singleWhere( |
+ (range) => range.scriptIndex == report.scripts.length - 1); |
+ |
+ expect(range.coverage, isNotNull); |
+ expect(range.possibleBreakpoints, isNotNull); |
+ }); |
+ }); |
nweiz
2016/04/29 00:52:45
Test forceCompile as well.
kevmoo
2016/04/29 23:36:56
Done.
|
+ |
+ test("script and ranges", () async { |
+ client = await runAndConnect( |
+ topLevel: r'''final foo = 5; |
+ int add(a, b) => a + b; |
+ ''', |
+ main: r""" |
+ print("one"); |
+ print("two"); |
+ """); |
+ |
+ isolate = (await client.getVM()).isolates.single; |
+ |
+ await isolate.pause(); |
+ |
+ var report = await isolate.getSourceReport(includeCoverageReport: true); |
+ |
+ var customScript = report.scripts.last; |
+ |
+ expect(customScript.uri.toString(), startsWith('data:application/dart')); |
+ |
+ report = await customScript.getSourceReport( |
+ includeCoverageReport: true, includePossibleBreakpoints: true); |
nweiz
2016/04/29 00:52:45
Rather than grabbing source locations from a previ
kevmoo
2016/04/29 23:36:55
Done.
|
+ |
+ expect(report.ranges, hasLength(2)); |
+ |
+ var firstRange = report.ranges.first; |
+ var secondRange = report.ranges.last; |
+ |
+ expect(firstRange.endPos, lessThan(secondRange.startPos), |
+ reason: 'The first range should come before the second range.'); |
+ |
+ // validate the start param |
+ |
+ report = await customScript.getSourceReport( |
+ includeCoverageReport: true, |
+ includePossibleBreakpoints: true, |
+ tokenPos: firstRange.endPos + 1); |
+ |
+ expect(report.ranges.single.startPos, secondRange.startPos); |
+ |
+ // validate the end param |
+ |
+ report = await customScript.getSourceReport( |
+ includeCoverageReport: true, |
+ includePossibleBreakpoints: true, |
+ endTokenPos: secondRange.startPos - 1); |
+ |
+ expect(report.ranges.single.endPos, firstRange.endPos); |
+ |
+ // validate both params |
+ |
+ report = await customScript.getSourceReport( |
+ includeCoverageReport: true, |
+ includePossibleBreakpoints: true, |
+ tokenPos: firstRange.endPos + 1, |
+ endTokenPos: secondRange.startPos - 1); |
+ |
+ expect(report.ranges, isEmpty); |
+ }); |
nweiz
2016/04/29 00:52:44
Split this up into multiple tests with a shared se
kevmoo
2016/04/29 23:36:55
Done.
|
+} |