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

Side by Side Diff: lib/src/runner/load_suite.dart

Issue 1637193003: Add suite information to the JSON reporter. (Closed) Base URL: git@github.com:dart-lang/test@master
Patch Set: fix changelog Created 4 years, 10 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
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 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. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 import 'dart:async'; 5 import 'dart:async';
6 6
7 import 'package:stack_trace/stack_trace.dart'; 7 import 'package:stack_trace/stack_trace.dart';
8 8
9 import '../../test.dart'; 9 import '../../test.dart';
10 import '../backend/group.dart'; 10 import '../backend/group.dart';
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 Test get test => this.group.entries.single as Test; 57 Test get test => this.group.entries.single as Test;
58 58
59 /// Creates a load suite named [name] on [platform]. 59 /// Creates a load suite named [name] on [platform].
60 /// 60 ///
61 /// [body] may return either a [RunnerSuite] or a [Future] that completes to a 61 /// [body] may return either a [RunnerSuite] or a [Future] that completes to a
62 /// [RunnerSuite]. Its return value is forwarded through [suite], although if 62 /// [RunnerSuite]. Its return value is forwarded through [suite], although if
63 /// it throws an error that will be forwarded through the suite's test. 63 /// it throws an error that will be forwarded through the suite's test.
64 /// 64 ///
65 /// If the the load test is closed before [body] is complete, it will close 65 /// If the the load test is closed before [body] is complete, it will close
66 /// the suite returned by [body] once it completes. 66 /// the suite returned by [body] once it completes.
67 factory LoadSuite(String name, body(), {TestPlatform platform}) { 67 factory LoadSuite(String name, body(), {String path, TestPlatform platform}) {
68 var completer = new Completer.sync(); 68 var completer = new Completer.sync();
69 return new LoadSuite._(name, () { 69 return new LoadSuite._(name, () {
70 var invoker = Invoker.current; 70 var invoker = Invoker.current;
71 invoker.addOutstandingCallback(); 71 invoker.addOutstandingCallback();
72 72
73 invoke(() async { 73 invoke(() async {
74 try { 74 try {
75 var suite = await body(); 75 var suite = await body();
76 if (completer.isCompleted) { 76 if (completer.isCompleted) {
77 // If the load test has already been closed, close the suite it 77 // If the load test has already been closed, close the suite it
(...skipping 11 matching lines...) Expand all
89 } 89 }
90 }); 90 });
91 91
92 // If the test is forcibly closed, exit immediately. It doesn't have any 92 // If the test is forcibly closed, exit immediately. It doesn't have any
93 // cleanup to do that won't be handled by Loader.close. 93 // cleanup to do that won't be handled by Loader.close.
94 invoker.onClose.then((_) { 94 invoker.onClose.then((_) {
95 if (completer.isCompleted) return; 95 if (completer.isCompleted) return;
96 completer.complete(); 96 completer.complete();
97 invoker.removeOutstandingCallback(); 97 invoker.removeOutstandingCallback();
98 }); 98 });
99 }, completer.future, platform: platform); 99 }, completer.future, path: path, platform: platform);
100 } 100 }
101 101
102 /// A utility constructor for a load suite that just throws [exception]. 102 /// A utility constructor for a load suite that just throws [exception].
103 /// 103 ///
104 /// The suite's name will be based on [exception]'s path. 104 /// The suite's name will be based on [exception]'s path.
105 factory LoadSuite.forLoadException(LoadException exception, 105 factory LoadSuite.forLoadException(LoadException exception,
106 {StackTrace stackTrace, TestPlatform platform}) { 106 {StackTrace stackTrace, TestPlatform platform}) {
107 if (stackTrace == null) stackTrace = new Trace.current(); 107 if (stackTrace == null) stackTrace = new Trace.current();
108 108
109 return new LoadSuite("loading ${exception.path}", () { 109 return new LoadSuite("loading ${exception.path}", () {
110 return new Future.error(exception, stackTrace); 110 return new Future.error(exception, stackTrace);
111 }, platform: platform); 111 }, path: exception.path, platform: platform);
112 } 112 }
113 113
114 /// A utility constructor for a load suite that just emits [suite]. 114 /// A utility constructor for a load suite that just emits [suite].
115 factory LoadSuite.forSuite(RunnerSuite suite) { 115 factory LoadSuite.forSuite(RunnerSuite suite) {
116 return new LoadSuite("loading ${suite.path}", () => suite, 116 return new LoadSuite("loading ${suite.path}", () => suite,
117 platform: suite.platform); 117 path: suite.path, platform: suite.platform);
118 } 118 }
119 119
120 LoadSuite._(String name, void body(), this._suiteAndZone, 120 LoadSuite._(String name, void body(), this._suiteAndZone,
121 {TestPlatform platform}) 121 {String path, TestPlatform platform})
122 : super(new Group.root([ 122 : super(new Group.root([
123 new LocalTest(name, 123 new LocalTest(name,
124 new Metadata(timeout: new Timeout(new Duration(minutes: 5))), 124 new Metadata(timeout: new Timeout(new Duration(minutes: 5))),
125 body) 125 body)
126 ]), platform: platform); 126 ]), path: path, platform: platform);
127 127
128 /// A constructor used by [changeSuite]. 128 /// A constructor used by [changeSuite].
129 LoadSuite._changeSuite(LoadSuite old, this._suiteAndZone) 129 LoadSuite._changeSuite(LoadSuite old, this._suiteAndZone)
130 : super(old.group, platform: old.platform); 130 : super(old.group, path: old.path, platform: old.platform);
131 131
132 /// Creates a new [LoadSuite] that's identical to this one, but that 132 /// Creates a new [LoadSuite] that's identical to this one, but that
133 /// transforms [suite] once it's loaded. 133 /// transforms [suite] once it's loaded.
134 /// 134 ///
135 /// If [suite] completes to `null`, [change] won't be run. [change] is run 135 /// If [suite] completes to `null`, [change] won't be run. [change] is run
136 /// within the load test's zone, so any errors or prints it emits will be 136 /// within the load test's zone, so any errors or prints it emits will be
137 /// associated with that test. 137 /// associated with that test.
138 LoadSuite changeSuite(RunnerSuite change(RunnerSuite suite)) { 138 LoadSuite changeSuite(RunnerSuite change(RunnerSuite suite)) {
139 return new LoadSuite._changeSuite(this, _suiteAndZone.then((pair) { 139 return new LoadSuite._changeSuite(this, _suiteAndZone.then((pair) {
140 if (pair == null) return null; 140 if (pair == null) return null;
(...skipping 15 matching lines...) Expand all
156 156
157 if (liveTest.errors.isEmpty) return await suite; 157 if (liveTest.errors.isEmpty) return await suite;
158 158
159 var error = liveTest.errors.first; 159 var error = liveTest.errors.first;
160 await new Future.error(error.error, error.stackTrace); 160 await new Future.error(error.error, error.stackTrace);
161 throw 'unreachable'; 161 throw 'unreachable';
162 } 162 }
163 163
164 Future close() async {} 164 Future close() async {}
165 } 165 }
OLDNEW
« json_reporter.md ('K') | « lib/src/runner.dart ('k') | lib/src/runner/loader.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698