diff --git a/packages/flutter_driver/lib/src/driver/driver.dart b/packages/flutter_driver/lib/src/driver/driver.dart index 5311da5b4c..fd3af7950d 100644 --- a/packages/flutter_driver/lib/src/driver/driver.dart +++ b/packages/flutter_driver/lib/src/driver/driver.dart @@ -504,7 +504,7 @@ abstract class FlutterDriver { /// It's expected that the application has registered a [DataHandler] /// callback in [enableFlutterDriverExtension] that can successfully handle /// these requests. - Future requestData(String? message, { Duration? timeout }) async { + Future requestData(String message, { Duration? timeout }) async { return RequestDataResult.fromJson(await sendCommand(RequestData(message, timeout: timeout))).message; } diff --git a/packages/integration_test/example/integration_test/_example_test_io.dart b/packages/integration_test/example/integration_test/_example_test_io.dart index 8daf8c8f68..07f604e0be 100644 --- a/packages/integration_test/example/integration_test/_example_test_io.dart +++ b/packages/integration_test/example/integration_test/_example_test_io.dart @@ -36,7 +36,7 @@ void main() { find.byWidgetPredicate( (Widget widget) => widget is Text && - widget.data!.startsWith('Platform: ${Platform.operatingSystem}'), + widget.data.startsWith('Platform: ${Platform.operatingSystem}'), ), findsOneWidget, ); diff --git a/packages/integration_test/example/integration_test/_example_test_web.dart b/packages/integration_test/example/integration_test/_example_test_web.dart index 4e9cbd4de7..cd5e986ded 100644 --- a/packages/integration_test/example/integration_test/_example_test_web.dart +++ b/packages/integration_test/example/integration_test/_example_test_web.dart @@ -30,7 +30,7 @@ void main() { find.byWidgetPredicate( (Widget widget) => widget is Text && - widget.data! + widget.data .startsWith('Platform: ${html.window.navigator.platform}\n'), ), findsOneWidget, diff --git a/packages/integration_test/example/integration_test/_extended_test_io.dart b/packages/integration_test/example/integration_test/_extended_test_io.dart index 34b1ec574f..f67c94ab4e 100644 --- a/packages/integration_test/example/integration_test/_extended_test_io.dart +++ b/packages/integration_test/example/integration_test/_extended_test_io.dart @@ -34,7 +34,7 @@ void main() { find.byWidgetPredicate( (Widget widget) => widget is Text && - widget.data!.startsWith('Platform: ${Platform.operatingSystem}'), + widget.data.startsWith('Platform: ${Platform.operatingSystem}'), ), findsOneWidget, ); diff --git a/packages/integration_test/example/integration_test/_extended_test_web.dart b/packages/integration_test/example/integration_test/_extended_test_web.dart index 1b5d03e546..8dd6a3d24c 100644 --- a/packages/integration_test/example/integration_test/_extended_test_web.dart +++ b/packages/integration_test/example/integration_test/_extended_test_web.dart @@ -34,7 +34,7 @@ void main() { find.byWidgetPredicate( (Widget widget) => widget is Text && - widget.data! + widget.data .startsWith('Platform: ${html.window.navigator.platform}\n'), ), findsOneWidget, diff --git a/packages/integration_test/example/pubspec.yaml b/packages/integration_test/example/pubspec.yaml index 12bdb0adc8..793e9b847d 100644 --- a/packages/integration_test/example/pubspec.yaml +++ b/packages/integration_test/example/pubspec.yaml @@ -3,7 +3,7 @@ description: Demonstrates how to use the integration_test plugin. publish_to: 'none' environment: - sdk: '>=2.12.0-0 <3.0.0' + sdk: ">=2.1.0 <3.0.0" flutter: ">=1.6.7 <2.0.0" dependencies: diff --git a/packages/integration_test/example/test_driver/failure.dart b/packages/integration_test/example/test_driver/failure.dart index b07c4ea718..d297ded7a3 100644 --- a/packages/integration_test/example/test_driver/failure.dart +++ b/packages/integration_test/example/test_driver/failure.dart @@ -33,7 +33,7 @@ void main() { await expectLater( find.byWidgetPredicate( (Widget widget) => - widget is Text && widget.data!.startsWith('This should fail'), + widget is Text && widget.data.startsWith('This should fail'), ), findsOneWidget, ); diff --git a/packages/integration_test/lib/_callback_io.dart b/packages/integration_test/lib/_callback_io.dart index 286487d3fd..c5c9645442 100644 --- a/packages/integration_test/lib/_callback_io.dart +++ b/packages/integration_test/lib/_callback_io.dart @@ -21,7 +21,7 @@ class IOCallbackManager implements CallbackManager { @override Future> callback( Map params, IntegrationTestResults testRunner) async { - final String command = params['command']!; + final String command = params['command']; Map response; switch (command) { case 'request_data': diff --git a/packages/integration_test/lib/_callback_web.dart b/packages/integration_test/lib/_callback_web.dart index a67074b588..b13181b4be 100644 --- a/packages/integration_test/lib/_callback_web.dart +++ b/packages/integration_test/lib/_callback_web.dart @@ -75,13 +75,14 @@ class WebCallbackManager implements CallbackManager { @override Future> callback( Map params, IntegrationTestResults testRunner) async { - final String command = params['command']!; + final String command = params['command']; Map response; switch (command) { case 'request_data': return params['message'] == null ? _requestData(testRunner) - : _requestDataWithMessage(params['message']!, testRunner); + : _requestDataWithMessage(params['message'], testRunner); + break; case 'get_health': response = {'status': 'ok'}; break; diff --git a/packages/integration_test/lib/common.dart b/packages/integration_test/lib/common.dart index 4335eed39c..23a9081e0e 100644 --- a/packages/integration_test/lib/common.dart +++ b/packages/integration_test/lib/common.dart @@ -21,7 +21,7 @@ class Response { : _allTestsPassed = false; /// Constructor for failure response. - Response.toolException({String? ex}) + Response.toolException({String ex}) : _allTestsPassed = false, _failureDetails = [Failure('ToolException', ex)]; @@ -30,22 +30,22 @@ class Response { : _allTestsPassed = false, _failureDetails = null; - final List? _failureDetails; + final List _failureDetails; final bool _allTestsPassed; /// The extra information to be added along side the test result. - Map? data; + Map data; /// Whether the test ran successfully or not. bool get allTestsPassed => _allTestsPassed; /// If the result are failures get the formatted details. String get formattedFailureDetails => - _allTestsPassed ? '' : formatFailures(_failureDetails!); + _allTestsPassed ? '' : formatFailures(_failureDetails); /// Failure details as a list. - List? get failureDetails => _failureDetails; + List get failureDetails => _failureDetails; /// Serializes this message to a JSON map. String toJson() => json.encode({ @@ -57,7 +57,7 @@ class Response { /// Deserializes the result from JSON. static Response fromJson(String source) { final Map responseJson = json.decode(source) as Map; - if ((responseJson['result'] as String?) == 'true') { + if (responseJson['result'] as String == 'true') { return Response.allTestsPassed(data: responseJson['data'] as Map); } else { return Response.someTestsFailed( @@ -87,11 +87,11 @@ class Response { /// Create a list of Strings from [_failureDetails]. List _failureDetailsAsString() { final List list = []; - if (_failureDetails == null || _failureDetails!.isEmpty) { + if (_failureDetails == null || _failureDetails.isEmpty) { return list; } - for (final Failure failure in _failureDetails!) { + for (final Failure failure in _failureDetails) { list.add(failure.toJson()); } @@ -115,11 +115,11 @@ class Failure { final String methodName; /// The details of the failure such as stack trace. - final String? details; + final String details; /// Serializes the object to JSON. String toJson() { - return json.encode({ + return json.encode({ 'methodName': methodName, 'details': details, }); @@ -131,7 +131,7 @@ class Failure { /// Decode a JSON string to create a Failure object. static Failure fromJsonString(String jsonString) { final Map failure = json.decode(jsonString) as Map; - return Failure(failure['methodName'] as String, failure['details'] as String?); + return Failure(failure['methodName'] as String, failure['details'] as String); } } @@ -291,7 +291,7 @@ abstract class IntegrationTestResults { List get failureMethodsDetails; /// The extra data for the reported result. - Map? get reportData; + Map get reportData; /// Whether all the test methods completed succesfully. Completer get allTestsPassed; diff --git a/packages/integration_test/lib/integration_test.dart b/packages/integration_test/lib/integration_test.dart index 3a74de947e..50d11719f4 100644 --- a/packages/integration_test/lib/integration_test.dart +++ b/packages/integration_test/lib/integration_test.dart @@ -41,7 +41,7 @@ class IntegrationTestWidgetsFlutterBinding extends LiveTestWidgetsFlutterBinding await _channel.invokeMethod( 'allTestsFinished', { - 'results': results.map((String name, Object result) { + 'results': results.map((String name, Object result) { if (result is Failure) { return MapEntry(name, result.details); } @@ -76,7 +76,7 @@ class IntegrationTestWidgetsFlutterBinding extends LiveTestWidgetsFlutterBinding @override bool get registerTestTextInput => false; - Size? _surfaceSize; + Size _surfaceSize; // This flag is used to print warning messages when tracking performance // under debug mode. @@ -87,7 +87,7 @@ class IntegrationTestWidgetsFlutterBinding extends LiveTestWidgetsFlutterBinding /// /// Set to null to use the default surface size. @override - Future setSurfaceSize(Size? size) { + Future setSurfaceSize(Size size) { return TestAsyncUtils.guard(() async { assert(inTest); if (_surfaceSize == size) { @@ -124,7 +124,7 @@ class IntegrationTestWidgetsFlutterBinding extends LiveTestWidgetsFlutterBinding IntegrationTestWidgetsFlutterBinding(); } assert(WidgetsBinding.instance is IntegrationTestWidgetsFlutterBinding); - return WidgetsBinding.instance!; + return WidgetsBinding.instance; } static const MethodChannel _channel = @@ -146,7 +146,7 @@ class IntegrationTestWidgetsFlutterBinding extends LiveTestWidgetsFlutterBinding /// /// The default value is `null`. @override - Map? reportData; + Map reportData; /// Manages callbacks received from driver side and commands send to driver /// side. @@ -183,7 +183,7 @@ class IntegrationTestWidgetsFlutterBinding extends LiveTestWidgetsFlutterBinding Future testBody(), VoidCallback invariantTester, { String description = '', - Duration? timeout, + Duration timeout, }) async { await super.runTest( testBody, @@ -194,15 +194,15 @@ class IntegrationTestWidgetsFlutterBinding extends LiveTestWidgetsFlutterBinding results[description] ??= _success; } - vm.VmService? _vmService; + vm.VmService _vmService; /// Initialize the [vm.VmService] settings for the timeline. @visibleForTesting Future enableTimeline({ List streams = const ['all'], - @visibleForTesting vm.VmService? vmService, + @visibleForTesting vm.VmService vmService, }) async { - assert(streams != null); // ignore: unnecessary_null_comparison + assert(streams != null); assert(streams.isNotEmpty); if (vmService != null) { _vmService = vmService; @@ -212,10 +212,10 @@ class IntegrationTestWidgetsFlutterBinding extends LiveTestWidgetsFlutterBinding await developer.Service.getInfo(); assert(info.serverUri != null); _vmService = await vm_io.vmServiceConnectUri( - 'ws://localhost:${info.serverUri!.port}${info.serverUri!.path}ws', + 'ws://localhost:${info.serverUri.port}${info.serverUri.path}ws', ); } - await _vmService!.setVMTimelineFlags(streams); + await _vmService.setVMTimelineFlags(streams); } /// Runs [action] and returns a [vm.Timeline] trace for it. @@ -239,14 +239,14 @@ class IntegrationTestWidgetsFlutterBinding extends LiveTestWidgetsFlutterBinding await enableTimeline(streams: streams); if (retainPriorEvents) { await action(); - return await _vmService!.getVMTimeline(); + return await _vmService.getVMTimeline(); } - await _vmService!.clearVMTimeline(); - final vm.Timestamp startTime = await _vmService!.getVMTimelineMicros(); + await _vmService.clearVMTimeline(); + final vm.Timestamp startTime = await _vmService.getVMTimelineMicros(); await action(); - final vm.Timestamp endTime = await _vmService!.getVMTimelineMicros(); - return await _vmService!.getVMTimeline( + final vm.Timestamp endTime = await _vmService.getVMTimelineMicros(); + return await _vmService.getVMTimeline( timeOriginMicros: startTime.timestamp, timeExtentMicros: endTime.timestamp, ); @@ -279,7 +279,7 @@ class IntegrationTestWidgetsFlutterBinding extends LiveTestWidgetsFlutterBinding retainPriorEvents: retainPriorEvents, ); reportData ??= {}; - reportData![reportKey] = timeline.toJson(); + reportData[reportKey] = timeline.toJson(); } /// Watches the [FrameTiming] during `action` and report it to the binding @@ -317,7 +317,7 @@ class IntegrationTestWidgetsFlutterBinding extends LiveTestWidgetsFlutterBinding final FrameTimingSummarizer frameTimes = FrameTimingSummarizer(frameTimings); reportData ??= {}; - reportData![reportKey] = frameTimes.summary; + reportData[reportKey] = frameTimes.summary; } @override @@ -327,7 +327,7 @@ class IntegrationTestWidgetsFlutterBinding extends LiveTestWidgetsFlutterBinding /// /// See [TestWidgetsFlutterBinding.defaultTestTimeout] for more details. set defaultTestTimeout(Timeout timeout) => _defaultTestTimeout = timeout; - Timeout? _defaultTestTimeout; + Timeout _defaultTestTimeout; @override void attachRootWidget(Widget rootWidget) { diff --git a/packages/integration_test/lib/integration_test_driver.dart b/packages/integration_test/lib/integration_test_driver.dart index e51d115039..783e1af6c1 100644 --- a/packages/integration_test/lib/integration_test_driver.dart +++ b/packages/integration_test/lib/integration_test_driver.dart @@ -21,18 +21,18 @@ String testOutputsDirectory = /// The callback type to handle [Response.data] after the test /// succeeds. -typedef ResponseDataCallback = FutureOr Function(Map?); +typedef ResponseDataCallback = FutureOr Function(Map); /// Writes a json-serializable json data to to /// [testOutputsDirectory]/`testOutputFilename.json`. /// /// This is the default `responseDataCallback` in [integrationDriver]. Future writeResponseData( - Map? data, { + Map data, { String testOutputFilename = 'integration_response_data', - String? destinationDirectory, + String destinationDirectory, }) async { - assert(testOutputFilename != null); // ignore: unnecessary_null_comparison + assert(testOutputFilename != null); destinationDirectory ??= testOutputsDirectory; await fs.directory(destinationDirectory).create(recursive: true); final File file = fs.file(path.join( @@ -65,7 +65,7 @@ Future writeResponseData( /// ``` Future integrationDriver({ Duration timeout = const Duration(minutes: 1), - ResponseDataCallback? responseDataCallback = writeResponseData, + ResponseDataCallback responseDataCallback = writeResponseData, }) async { final FlutterDriver driver = await FlutterDriver.connect(); final String jsonResult = await driver.requestData(null, timeout: timeout); @@ -86,6 +86,6 @@ Future integrationDriver({ const JsonEncoder _prettyEncoder = JsonEncoder.withIndent(' '); -String _encodeJson(Map? jsonObject, bool pretty) { +String _encodeJson(Map jsonObject, bool pretty) { return pretty ? _prettyEncoder.convert(jsonObject) : json.encode(jsonObject); } diff --git a/packages/integration_test/lib/integration_test_driver_extended.dart b/packages/integration_test/lib/integration_test_driver_extended.dart index b1e5945ba2..1622aca9f5 100644 --- a/packages/integration_test/lib/integration_test_driver_extended.dart +++ b/packages/integration_test/lib/integration_test_driver_extended.dart @@ -12,7 +12,7 @@ import 'common.dart'; /// Example Integration Test which can also run WebDriver command depending on /// the requests coming from the test methods. Future integrationDriver( - {FlutterDriver? driver, Function? onScreenshot}) async { + {FlutterDriver driver, Function onScreenshot}) async { driver ??= await FlutterDriver.connect(); // Test states that it's waiting on web driver commands. // [DriverTestMessage] is converted to string since json format causes an @@ -24,15 +24,15 @@ Future integrationDriver( // Until `integration_test` returns a [WebDriverCommandType.noop], keep // executing WebDriver commands. while (response.data != null && - response.data!['web_driver_command'] != null && - response.data!['web_driver_command'] != '${WebDriverCommandType.noop}') { - final String? webDriverCommand = response.data!['web_driver_command'] as String?; + response.data['web_driver_command'] != null && + response.data['web_driver_command'] != '${WebDriverCommandType.noop}') { + final String webDriverCommand = response.data['web_driver_command'] as String; if (webDriverCommand == '${WebDriverCommandType.screenshot}') { // Use `driver.screenshot()` method to get a screenshot of the web page. final List screenshotImage = await driver.screenshot(); - final String? screenshotName = response.data!['screenshot_name'] as String?; + final String screenshotName = response.data['screenshot_name'] as String; - final bool screenshotSuccess = await onScreenshot!(screenshotName, screenshotImage) as bool; + final bool screenshotSuccess = await onScreenshot(screenshotName, screenshotImage) as bool; if (screenshotSuccess) { jsonResponse = await driver.requestData(DriverTestMessage.complete().toString()); } else { @@ -54,9 +54,9 @@ Future integrationDriver( // If No-op command is sent, ask for the result of all tests. if (response.data != null && - response.data!['web_driver_command'] != null && - response.data!['web_driver_command'] == '${WebDriverCommandType.noop}') { - jsonResponse = await driver.requestData(''); + response.data['web_driver_command'] != null && + response.data['web_driver_command'] == '${WebDriverCommandType.noop}') { + jsonResponse = await driver.requestData(null); response = Response.fromJson(jsonResponse); print('result $jsonResponse'); diff --git a/packages/integration_test/pubspec.yaml b/packages/integration_test/pubspec.yaml index bcc224bcda..b0c238170e 100644 --- a/packages/integration_test/pubspec.yaml +++ b/packages/integration_test/pubspec.yaml @@ -1,9 +1,11 @@ name: integration_test description: Runs tests that use the flutter_test API as integration tests. +version: 0.9.2+2 publish_to: none +homepage: https://github.com/flutter/plugins/tree/master/packages/integration_test environment: - sdk: '>=2.12.0-0 <3.0.0' + sdk: ">=2.10.0-0.0.dev <3.0.0" dependencies: flutter: diff --git a/packages/integration_test/test/binding_fail_test.dart b/packages/integration_test/test/binding_fail_test.dart index 11d6484fe2..e5bbd52c6c 100644 --- a/packages/integration_test/test/binding_fail_test.dart +++ b/packages/integration_test/test/binding_fail_test.dart @@ -18,7 +18,7 @@ const String _failureExcerpt = r'Expected: \n Actual: '; Future main() async { group('Integration binding result', () { test('when multiple tests pass', () async { - final Map? results = await _runTest(path.join('test', 'data', 'pass_test_script.dart')); + final Map results = await _runTest(path.join('test', 'data', 'pass_test_script.dart')); expect( results, @@ -29,7 +29,7 @@ Future main() async { }); test('when multiple tests fail', () async { - final Map? results = await _runTest(path.join('test', 'data', 'fail_test_script.dart')); + final Map results = await _runTest(path.join('test', 'data', 'fail_test_script.dart')); expect(results, hasLength(2)); expect(results, containsPair('failing test 1', contains(_failureExcerpt))); @@ -37,7 +37,7 @@ Future main() async { }); test('when one test passes, then another fails', () async { - final Map? results = await _runTest(path.join('test', 'data', 'pass_then_fail_test_script.dart')); + final Map results = await _runTest(path.join('test', 'data', 'pass_then_fail_test_script.dart')); expect(results, hasLength(2)); expect(results, containsPair('passing test', equals('success'))); @@ -49,7 +49,7 @@ Future main() async { /// Runs a test script and returns the [IntegrationTestWidgetsFlutterBinding.result]. /// /// [scriptPath] is relative to the package root. -Future?> _runTest(String scriptPath) async { +Future> _runTest(String scriptPath) async { final Process process = await Process.start(_flutterBin, ['test', '--machine', scriptPath]); @@ -63,7 +63,7 @@ Future?> _runTest(String scriptPath) async { .expand((String text) => text.split('\n')) .map((String line) { try { - return jsonDecode(line) as Map?; + return jsonDecode(line); } on FormatException { // Only interested in test events which are JSON. } @@ -73,12 +73,12 @@ Future?> _runTest(String scriptPath) async { ? json.cast() : >[json as Map]; }) - .where((Map? testEvent) => + .where((Map testEvent) => testEvent != null && testEvent['type'] == 'print') - .map((Map? printEvent) => printEvent!['message'] as String?) - .firstWhere((String? message) => - message!.startsWith(_integrationResultsPrefix)))! + .map((Map printEvent) => printEvent['message'] as String) + .firstWhere((String message) => + message.startsWith(_integrationResultsPrefix))) .replaceAll(_integrationResultsPrefix, ''); - return jsonDecode(testResults) as Map?; + return jsonDecode(testResults) as Map; } diff --git a/packages/integration_test/test/binding_test.dart b/packages/integration_test/test/binding_test.dart index 19d0962e1d..bfaf4239c1 100644 --- a/packages/integration_test/test/binding_test.dart +++ b/packages/integration_test/test/binding_test.dart @@ -18,14 +18,14 @@ vm.Timeline _kTimelines = vm.Timeline( ); Future main() async { - Future>? request; + Future> request; group('Test Integration binding', () { final WidgetsBinding binding = IntegrationTestWidgetsFlutterBinding.ensureInitialized(); assert(binding is IntegrationTestWidgetsFlutterBinding); final IntegrationTestWidgetsFlutterBinding integrationBinding = binding as IntegrationTestWidgetsFlutterBinding; - FakeVM? fakeVM; + FakeVM fakeVM; setUp(() { request = integrationBinding.callback({ @@ -74,9 +74,9 @@ Future main() async { await integrationBinding.enableTimeline(vmService: fakeVM); await integrationBinding.traceAction(() async {}); expect(integrationBinding.reportData, isNotNull); - expect(integrationBinding.reportData!.containsKey('timeline'), true); + expect(integrationBinding.reportData.containsKey('timeline'), true); expect( - json.encode(integrationBinding.reportData!['timeline']), + json.encode(integrationBinding.reportData['timeline']), json.encode(_kTimelines), ); }); @@ -107,20 +107,20 @@ Future main() async { // part of the `tearDownAll` registerred in the group during // `IntegrationTestWidgetsFlutterBinding` initialization. final Map response = - (await request)!['response'] as Map; + (await request)['response'] as Map; final String message = response['message'] as String; final Response result = Response.fromJson(message); - assert(result.data!['answer'] == 42); + assert(result.data['answer'] == 42); }); } class FakeVM extends Fake implements vm.VmService { - FakeVM({required this.timeline}); + FakeVM({@required this.timeline}); vm.Timeline timeline; @override - Future getVMTimeline({int? timeOriginMicros, int? timeExtentMicros}) async { + Future getVMTimeline({int timeOriginMicros, int timeExtentMicros}) async { return timeline; } diff --git a/packages/integration_test/test/response_serialization_test.dart b/packages/integration_test/test/response_serialization_test.dart index 5e38c79ba8..dfcd5e88b9 100644 --- a/packages/integration_test/test/response_serialization_test.dart +++ b/packages/integration_test/test/response_serialization_test.dart @@ -39,13 +39,13 @@ void main() { response = Response.allTestsPassed(data: data); jsonString = response.toJson(); restored = Response.fromJson(jsonString); - expect(restored.data!.keys, ['aaa']); - expect(restored.data!.values, ['bbb']); + expect(restored.data.keys, ['aaa']); + expect(restored.data.values, ['bbb']); response = Response.someTestsFailed([fail, fail2], data: data); jsonString = response.toJson(); restored = Response.fromJson(jsonString); - expect(restored.data!.keys, ['aaa']); - expect(restored.data!.values, ['bbb']); + expect(restored.data.keys, ['aaa']); + expect(restored.data.values, ['bbb']); }); }