Unverified Commit 446673a6 authored by Jia Hao's avatar Jia Hao Committed by GitHub

[integration_test] Fix early reporting of results (#83685)

parent 0bccce62
...@@ -294,5 +294,8 @@ abstract class IntegrationTestResults { ...@@ -294,5 +294,8 @@ abstract class IntegrationTestResults {
Map<String, dynamic>? get reportData; Map<String, dynamic>? get reportData;
/// Whether all the test methods completed successfully. /// Whether all the test methods completed successfully.
///
/// Completes when the tests have finished. The boolean value will be true if
/// all tests have passed, and false otherwise.
Completer<bool> get allTestsPassed; Completer<bool> get allTestsPassed;
} }
...@@ -40,7 +40,7 @@ class IntegrationTestWidgetsFlutterBinding extends LiveTestWidgetsFlutterBinding ...@@ -40,7 +40,7 @@ class IntegrationTestWidgetsFlutterBinding extends LiveTestWidgetsFlutterBinding
IntegrationTestWidgetsFlutterBinding() { IntegrationTestWidgetsFlutterBinding() {
tearDownAll(() async { tearDownAll(() async {
if (!_allTestsPassed.isCompleted) { if (!_allTestsPassed.isCompleted) {
_allTestsPassed.complete(true); _allTestsPassed.complete(failureMethodsDetails.isEmpty);
} }
callbackManager.cleanup(); callbackManager.cleanup();
...@@ -83,9 +83,6 @@ https://flutter.dev/docs/testing/integration-tests#testing-on-firebase-test-lab ...@@ -83,9 +83,6 @@ https://flutter.dev/docs/testing/integration-tests#testing-on-firebase-test-lab
reportTestException = reportTestException =
(FlutterErrorDetails details, String testDescription) { (FlutterErrorDetails details, String testDescription) {
results[testDescription] = Failure(testDescription, details.toString()); results[testDescription] = Failure(testDescription, details.toString());
if (!_allTestsPassed.isCompleted) {
_allTestsPassed.complete(false);
}
oldTestExceptionReporter(details, testDescription); oldTestExceptionReporter(details, testDescription);
}; };
} }
...@@ -133,7 +130,7 @@ https://flutter.dev/docs/testing/integration-tests#testing-on-firebase-test-lab ...@@ -133,7 +130,7 @@ https://flutter.dev/docs/testing/integration-tests#testing-on-firebase-test-lab
final Completer<bool> _allTestsPassed = Completer<bool>(); final Completer<bool> _allTestsPassed = Completer<bool>();
@override @override
List<Failure> get failureMethodsDetails => _failures; List<Failure> get failureMethodsDetails => results.values.whereType<Failure>().toList();
/// Similar to [WidgetsFlutterBinding.ensureInitialized]. /// Similar to [WidgetsFlutterBinding.ensureInitialized].
/// ///
...@@ -157,8 +154,6 @@ https://flutter.dev/docs/testing/integration-tests#testing-on-firebase-test-lab ...@@ -157,8 +154,6 @@ https://flutter.dev/docs/testing/integration-tests#testing-on-firebase-test-lab
@visibleForTesting @visibleForTesting
Map<String, Object> results = <String, Object>{}; Map<String, Object> results = <String, Object>{};
List<Failure> get _failures => results.values.whereType<Failure>().toList();
/// The extra data for the reported result. /// The extra data for the reported result.
/// ///
/// The values in `reportData` must be json-serializable objects or `null`. /// The values in `reportData` must be json-serializable objects or `null`.
......
...@@ -42,6 +42,14 @@ Future<void> main() async { ...@@ -42,6 +42,14 @@ Future<void> main() async {
expect(results, containsPair('passing test', equals('success'))); expect(results, containsPair('passing test', equals('success')));
expect(results, containsPair('failing test', contains(_failureExcerpt))); expect(results, containsPair('failing test', contains(_failureExcerpt)));
}); });
test('when one test fails, then another passes', () async {
final Map<String, dynamic>? results = await _runTest(path.join('test', 'data', 'fail_then_pass_test_script.dart'));
expect(results, hasLength(2));
expect(results, containsPair('failing test', contains(_failureExcerpt)));
expect(results, containsPair('passing test', equals('success')));
});
}); });
} }
......
...@@ -9,6 +9,9 @@ import 'package:integration_test/integration_test.dart'; ...@@ -9,6 +9,9 @@ import 'package:integration_test/integration_test.dart';
Future<void> main() async { Future<void> main() async {
final IntegrationTestWidgetsFlutterBinding binding = IntegrationTestWidgetsFlutterBinding.ensureInitialized() as IntegrationTestWidgetsFlutterBinding; final IntegrationTestWidgetsFlutterBinding binding = IntegrationTestWidgetsFlutterBinding.ensureInitialized() as IntegrationTestWidgetsFlutterBinding;
binding.allTestsPassed.future.then((_) {
print('IntegrationTestWidgetsFlutterBinding test results: ${jsonEncode(binding.results)}');
});
testWidgets('failing test 1', (WidgetTester tester) async { testWidgets('failing test 1', (WidgetTester tester) async {
expect(true, false); expect(true, false);
...@@ -17,8 +20,4 @@ Future<void> main() async { ...@@ -17,8 +20,4 @@ Future<void> main() async {
testWidgets('failing test 2', (WidgetTester tester) async { testWidgets('failing test 2', (WidgetTester tester) async {
expect(true, false); expect(true, false);
}); });
tearDownAll(() {
print('IntegrationTestWidgetsFlutterBinding test results: ${jsonEncode(binding.results)}');
});
} }
// Copyright 2014 The Flutter Authors. 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:convert';
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
Future<void> main() async {
final IntegrationTestWidgetsFlutterBinding binding = IntegrationTestWidgetsFlutterBinding.ensureInitialized() as IntegrationTestWidgetsFlutterBinding;
binding.allTestsPassed.future.then((_) {
print('IntegrationTestWidgetsFlutterBinding test results: ${jsonEncode(binding.results)}');
});
testWidgets('failing test', (WidgetTester tester) async {
expect(true, false);
});
testWidgets('passing test', (WidgetTester tester) async {
expect(true, true);
});
}
...@@ -9,6 +9,9 @@ import 'package:integration_test/integration_test.dart'; ...@@ -9,6 +9,9 @@ import 'package:integration_test/integration_test.dart';
Future<void> main() async { Future<void> main() async {
final IntegrationTestWidgetsFlutterBinding binding = IntegrationTestWidgetsFlutterBinding.ensureInitialized() as IntegrationTestWidgetsFlutterBinding; final IntegrationTestWidgetsFlutterBinding binding = IntegrationTestWidgetsFlutterBinding.ensureInitialized() as IntegrationTestWidgetsFlutterBinding;
binding.allTestsPassed.future.then((_) {
print('IntegrationTestWidgetsFlutterBinding test results: ${jsonEncode(binding.results)}');
});
testWidgets('passing test 1', (WidgetTester tester) async { testWidgets('passing test 1', (WidgetTester tester) async {
expect(true, true); expect(true, true);
...@@ -17,9 +20,4 @@ Future<void> main() async { ...@@ -17,9 +20,4 @@ Future<void> main() async {
testWidgets('passing test 2', (WidgetTester tester) async { testWidgets('passing test 2', (WidgetTester tester) async {
expect(true, true); expect(true, true);
}); });
tearDownAll(() {
print(
'IntegrationTestWidgetsFlutterBinding test results: ${jsonEncode(binding.results)}');
});
} }
...@@ -9,6 +9,9 @@ import 'package:integration_test/integration_test.dart'; ...@@ -9,6 +9,9 @@ import 'package:integration_test/integration_test.dart';
Future<void> main() async { Future<void> main() async {
final IntegrationTestWidgetsFlutterBinding binding = IntegrationTestWidgetsFlutterBinding.ensureInitialized() as IntegrationTestWidgetsFlutterBinding; final IntegrationTestWidgetsFlutterBinding binding = IntegrationTestWidgetsFlutterBinding.ensureInitialized() as IntegrationTestWidgetsFlutterBinding;
binding.allTestsPassed.future.then((_) {
print('IntegrationTestWidgetsFlutterBinding test results: ${jsonEncode(binding.results)}');
});
testWidgets('passing test', (WidgetTester tester) async { testWidgets('passing test', (WidgetTester tester) async {
expect(true, true); expect(true, true);
...@@ -17,9 +20,4 @@ Future<void> main() async { ...@@ -17,9 +20,4 @@ Future<void> main() async {
testWidgets('failing test', (WidgetTester tester) async { testWidgets('failing test', (WidgetTester tester) async {
expect(true, false); expect(true, false);
}); });
tearDownAll(() {
print(
'IntegrationTestWidgetsFlutterBinding test results: ${jsonEncode(binding.results)}');
});
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment