| Index: test/runner/json_reporter_test.dart
|
| diff --git a/test/runner/json_reporter_test.dart b/test/runner/json_reporter_test.dart
|
| index 920c20ca3c0c7a5cac60e7eac8c6424bd1d24644..10a51db833c7da9d81a860a24dbfbac282ae5123 100644
|
| --- a/test/runner/json_reporter_test.dart
|
| +++ b/test/runner/json_reporter_test.dart
|
| @@ -31,14 +31,15 @@ void main() {
|
| test('success 3', () {});
|
| """, [
|
| _start,
|
| - _testStart(0, "loading test.dart"),
|
| + _testStart(0, "loading test.dart", groupIDs: []),
|
| _testDone(0, hidden: true),
|
| - _testStart(1, "success 1"),
|
| - _testDone(1),
|
| - _testStart(2, "success 2"),
|
| + _group(1),
|
| + _testStart(2, "success 1"),
|
| _testDone(2),
|
| - _testStart(3, "success 3"),
|
| + _testStart(3, "success 2"),
|
| _testDone(3),
|
| + _testStart(4, "success 3"),
|
| + _testDone(4),
|
| _done()
|
| ]);
|
| });
|
| @@ -50,17 +51,18 @@ void main() {
|
| test('failure 3', () => throw new TestFailure('oh no'));
|
| """, [
|
| _start,
|
| - _testStart(0, "loading test.dart"),
|
| + _testStart(0, "loading test.dart", groupIDs: []),
|
| _testDone(0, hidden: true),
|
| - _testStart(1, "failure 1"),
|
| - _error(1, "oh no", isFailure: true),
|
| - _testDone(1, result: "failure"),
|
| - _testStart(2, "failure 2"),
|
| + _group(1),
|
| + _testStart(2, "failure 1"),
|
| _error(2, "oh no", isFailure: true),
|
| _testDone(2, result: "failure"),
|
| - _testStart(3, "failure 3"),
|
| + _testStart(3, "failure 2"),
|
| _error(3, "oh no", isFailure: true),
|
| _testDone(3, result: "failure"),
|
| + _testStart(4, "failure 3"),
|
| + _error(4, "oh no", isFailure: true),
|
| + _testDone(4, result: "failure"),
|
| _done(success: false)
|
| ]);
|
| });
|
| @@ -89,18 +91,19 @@ void main() {
|
| test('success 2', () {});
|
| """, [
|
| _start,
|
| - _testStart(0, "loading test.dart"),
|
| + _testStart(0, "loading test.dart", groupIDs: []),
|
| _testDone(0, hidden: true),
|
| - _testStart(1, "failure 1"),
|
| - _error(1, "oh no", isFailure: true),
|
| - _testDone(1, result: "failure"),
|
| - _testStart(2, "success 1"),
|
| - _testDone(2),
|
| - _testStart(3, "failure 2"),
|
| - _error(3, "oh no", isFailure: true),
|
| - _testDone(3, result: "failure"),
|
| - _testStart(4, "success 2"),
|
| - _testDone(4),
|
| + _group(1),
|
| + _testStart(2, "failure 1"),
|
| + _error(2, "oh no", isFailure: true),
|
| + _testDone(2, result: "failure"),
|
| + _testStart(3, "success 1"),
|
| + _testDone(3),
|
| + _testStart(4, "failure 2"),
|
| + _error(4, "oh no", isFailure: true),
|
| + _testDone(4, result: "failure"),
|
| + _testStart(5, "success 2"),
|
| + _testDone(5),
|
| _done(success: false)
|
| ]);
|
| });
|
| @@ -119,15 +122,16 @@ void main() {
|
| test('wait', () => completer.future);
|
| """, [
|
| _start,
|
| - _testStart(0, "loading test.dart"),
|
| + _testStart(0, "loading test.dart", groupIDs: []),
|
| _testDone(0, hidden: true),
|
| - _testStart(1, "failures"),
|
| - _error(1, "first error"),
|
| - _error(1, "second error"),
|
| - _error(1, "third error"),
|
| - _testDone(1, result: "error"),
|
| - _testStart(2, "wait"),
|
| - _testDone(2),
|
| + _group(1),
|
| + _testStart(2, "failures"),
|
| + _error(2, "first error"),
|
| + _error(2, "second error"),
|
| + _error(2, "third error"),
|
| + _testDone(2, result: "error"),
|
| + _testStart(3, "wait"),
|
| + _testDone(3),
|
| _done(success: false)
|
| ]);
|
| });
|
| @@ -151,21 +155,52 @@ void main() {
|
| });
|
| """, [
|
| _start,
|
| - _testStart(0, "loading test.dart"),
|
| + _testStart(0, "loading test.dart", groupIDs: []),
|
| _testDone(0, hidden: true),
|
| - _testStart(1, "failure"),
|
| - _testDone(1),
|
| - _testStart(2, "wait"),
|
| - _error(1, "oh no"),
|
| - _error(1,
|
| + _group(1),
|
| + _testStart(2, "failure"),
|
| + _testDone(2),
|
| + _testStart(3, "wait"),
|
| + _error(2, "oh no"),
|
| + _error(2,
|
| "This test failed after it had already completed. Make sure to "
|
| "use [expectAsync]\n"
|
| "or the [completes] matcher when testing async code."),
|
| - _testDone(2),
|
| + _testDone(3),
|
| _done(success: false)
|
| ]);
|
| });
|
|
|
| + test("reports each test in its proper groups", () {
|
| + _expectReport("""
|
| + group('group 1', () {
|
| + group('.2', () {
|
| + group('.3', () {
|
| + test('success', () {});
|
| + });
|
| + });
|
| +
|
| + test('success', () {});
|
| + test('success', () {});
|
| + });
|
| + """, [
|
| + _start,
|
| + _testStart(0, "loading test.dart", groupIDs: []),
|
| + _testDone(0, hidden: true),
|
| + _group(1),
|
| + _group(2, name: "group 1", parentID: 1),
|
| + _group(3, name: "group 1 .2", parentID: 2),
|
| + _group(4, name: "group 1 .2 .3", parentID: 3),
|
| + _testStart(5, 'group 1 .2 .3 success', groupIDs: [1, 2, 3, 4]),
|
| + _testDone(5),
|
| + _testStart(6, 'group 1 success', groupIDs: [1, 2]),
|
| + _testDone(6),
|
| + _testStart(7, 'group 1 success', groupIDs: [1, 2]),
|
| + _testDone(7),
|
| + _done()
|
| + ]);
|
| + });
|
| +
|
| group("print:", () {
|
| test("handles multiple prints", () {
|
| _expectReport("""
|
| @@ -177,14 +212,15 @@ void main() {
|
| });
|
| """, [
|
| _start,
|
| - _testStart(0, "loading test.dart"),
|
| + _testStart(0, "loading test.dart", groupIDs: []),
|
| _testDone(0, hidden: true),
|
| - _testStart(1, 'test'),
|
| - _print(1, "one"),
|
| - _print(1, "two"),
|
| - _print(1, "three"),
|
| - _print(1, "four"),
|
| - _testDone(1),
|
| + _group(1),
|
| + _testStart(2, 'test'),
|
| + _print(2, "one"),
|
| + _print(2, "two"),
|
| + _print(2, "three"),
|
| + _print(2, "four"),
|
| + _testDone(2),
|
| _done()
|
| ]);
|
| });
|
| @@ -211,16 +247,17 @@ void main() {
|
| });
|
| """, [
|
| _start,
|
| - _testStart(0, "loading test.dart"),
|
| + _testStart(0, "loading test.dart", groupIDs: []),
|
| _testDone(0, hidden: true),
|
| - _testStart(1, 'test'),
|
| - _testDone(1),
|
| - _testStart(2, 'wait'),
|
| - _print(1, "one"),
|
| - _print(1, "two"),
|
| - _print(1, "three"),
|
| - _print(1, "four"),
|
| + _group(1),
|
| + _testStart(2, 'test'),
|
| _testDone(2),
|
| + _testStart(3, 'wait'),
|
| + _print(2, "one"),
|
| + _print(2, "two"),
|
| + _print(2, "three"),
|
| + _print(2, "four"),
|
| + _testDone(3),
|
| _done()
|
| ]);
|
| });
|
| @@ -251,20 +288,21 @@ void main() {
|
| test('wait', () => completer.future);
|
| """, [
|
| _start,
|
| - _testStart(0, "loading test.dart"),
|
| + _testStart(0, "loading test.dart", groupIDs: []),
|
| _testDone(0, hidden: true),
|
| - _testStart(1, 'test'),
|
| - _print(1, "one"),
|
| - _print(1, "two"),
|
| - _error(1, "first error"),
|
| - _print(1, "three"),
|
| - _print(1, "four"),
|
| - _error(1, "second error"),
|
| - _print(1, "five"),
|
| - _print(1, "six"),
|
| - _testDone(1, result: "error"),
|
| - _testStart(2, 'wait'),
|
| - _testDone(2),
|
| + _group(1),
|
| + _testStart(2, 'test'),
|
| + _print(2, "one"),
|
| + _print(2, "two"),
|
| + _error(2, "first error"),
|
| + _print(2, "three"),
|
| + _print(2, "four"),
|
| + _error(2, "second error"),
|
| + _print(2, "five"),
|
| + _print(2, "six"),
|
| + _testDone(2, result: "error"),
|
| + _testStart(3, 'wait'),
|
| + _testDone(3),
|
| _done(success: false)
|
| ]);
|
| });
|
| @@ -278,13 +316,33 @@ void main() {
|
| test('skip 3', () {}, skip: true);
|
| """, [
|
| _start,
|
| - _testStart(0, "loading test.dart"),
|
| + _testStart(0, "loading test.dart", groupIDs: []),
|
| _testDone(0, hidden: true),
|
| - _testStart(1, "skip 1", skip: true),
|
| - _testDone(1),
|
| - _testStart(2, "skip 2", skip: true),
|
| + _group(1),
|
| + _testStart(2, "skip 1", skip: true),
|
| _testDone(2),
|
| - _testStart(3, "skip 3", skip: true),
|
| + _testStart(3, "skip 2", skip: true),
|
| + _testDone(3),
|
| + _testStart(4, "skip 3", skip: true),
|
| + _testDone(4),
|
| + _done()
|
| + ]);
|
| + });
|
| +
|
| + test("reports skipped groups", () {
|
| + _expectReport("""
|
| + group('skip', () {
|
| + test('success 1', () {});
|
| + test('success 2', () {});
|
| + test('success 3', () {});
|
| + }, skip: true);
|
| + """, [
|
| + _start,
|
| + _testStart(0, "loading test.dart", groupIDs: []),
|
| + _testDone(0, hidden: true),
|
| + _group(1),
|
| + _group(2, name: "skip", parentID: 1, skip: true),
|
| + _testStart(3, "skip", groupIDs: [1, 2], skip: true),
|
| _testDone(3),
|
| _done()
|
| ]);
|
| @@ -296,12 +354,13 @@ void main() {
|
| test('skip 2', () {}, skip: 'or another');
|
| """, [
|
| _start,
|
| - _testStart(0, "loading test.dart"),
|
| + _testStart(0, "loading test.dart", groupIDs: []),
|
| _testDone(0, hidden: true),
|
| - _testStart(1, "skip 1", skip: "some reason"),
|
| - _testDone(1),
|
| - _testStart(2, "skip 2", skip: "or another"),
|
| + _group(1),
|
| + _testStart(2, "skip 1", skip: "some reason"),
|
| _testDone(2),
|
| + _testStart(3, "skip 2", skip: "or another"),
|
| + _testDone(3),
|
| _done()
|
| ]);
|
| });
|
| @@ -345,25 +404,40 @@ void _expectReport(String tests, List<Map> expected) {
|
| });
|
| }
|
|
|
| +/// Returns the event emitted by the JSON reporter indicating that a group has
|
| +/// begun running.
|
| +///
|
| +/// If [skip] is `true`, the group is expected to be marked as skipped without a
|
| +/// reason. If it's a [String], the group is expected to be marked as skipped
|
| +/// with that reason.
|
| +Map _group(int id, {String name, int parentID, skip}) {
|
| + return {
|
| + "type": "group",
|
| + "group": {
|
| + "id": id,
|
| + "name": name,
|
| + "parentID": parentID,
|
| + "metadata": _metadata(skip: skip)
|
| + }
|
| + };
|
| +}
|
| +
|
| /// Returns the event emitted by the JSON reporter indicating that a test has
|
| /// begun running.
|
| ///
|
| -/// If [skip] is `true`, the test is expected to be marked as skipped without a
|
| +/// If [parentIDs] is passed, it's the IDs of groups containing this test. If
|
| +/// [skip] is `true`, the test is expected to be marked as skipped without a
|
| /// reason. If it's a [String], the test is expected to be marked as skipped
|
| /// with that reason.
|
| -Map _testStart(int id, String name, {skip}) {
|
| - var metadata;
|
| - if (skip == true) {
|
| - metadata = {"skip": true, "skipReason": null};
|
| - } else if (skip is String) {
|
| - metadata = {"skip": true, "skipReason": skip};
|
| - } else {
|
| - metadata = {"skip": false, "skipReason": null};
|
| - }
|
| -
|
| +Map _testStart(int id, String name, {Iterable<int> groupIDs, skip}) {
|
| return {
|
| "type": "testStart",
|
| - "test": {"id": id, "name": name, "metadata": metadata}
|
| + "test": {
|
| + "id": id,
|
| + "name": name,
|
| + "groupIDs": groupIDs ?? [1],
|
| + "metadata": _metadata(skip: skip)
|
| + }
|
| };
|
| }
|
|
|
| @@ -404,4 +478,17 @@ Map _testDone(int id, {String result, bool hidden: false}) {
|
| return {"type": "testDone", "testID": id, "result": result, "hidden": hidden};
|
| }
|
|
|
| +/// Returns the event emitted by the JSON reporter indicating that the entire
|
| +/// run finished.
|
| Map _done({bool success: true}) => {"type": "done", "success": success};
|
| +
|
| +/// Returns the serialized metadata corresponding to [skip].
|
| +Map _metadata({skip}) {
|
| + if (skip == true) {
|
| + return {"skip": true, "skipReason": null};
|
| + } else if (skip is String) {
|
| + return {"skip": true, "skipReason": skip};
|
| + } else {
|
| + return {"skip": false, "skipReason": null};
|
| + }
|
| +}
|
|
|