| // Copyright 2022 The Flutter Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file or at https://developers.google.com/open-source/licenses/bsd. | |
| import 'package:devtools_shared/devtools_test_utils.dart'; | |
| import 'test_infra/run/_in_file_args.dart'; | |
| import 'test_infra/run/_test_app_driver.dart'; | |
| import 'test_infra/run/_utils.dart'; | |
| import 'test_infra/run/run_test.dart'; | |
| // To run integration tests, run the following from `devtools_app/`: | |
| // `dart run integration_test/run_tests.dart` | |
| // | |
| // To see a list of arguments that you can pass to this test script, please run | |
| // the above command with the '-h' flag. | |
| const _testDirectory = 'integration_test/test'; | |
| const _offlineIndicator = 'integration_test/test/offline'; | |
| /// The key in [_disabledTestsForDevice] that will hold a set of tests that should | |
| /// be skipped for all test devices. | |
| const _testDeviceAll = 'all'; | |
| /// The set of tests that are temporarily disabled for each type of test device. | |
| /// | |
| /// This list should be empty most of the time, but may contain a broken test | |
| /// while a fix being worked on. | |
| /// | |
| /// Format: `'my_example_test.dart'`. | |
| final _disabledTestsForDevice = <String, Set<String>>{ | |
| _testDeviceAll: { | |
| // https://github.com/flutter/devtools/issues/6592 | |
| 'eval_and_browse_test.dart', | |
| // https://github.com/flutter/devtools/issues/7425 | |
| 'export_snapshot_test.dart', | |
| // https://github.com/flutter/devtools/issues/9641 | |
| 'perfetto_test.dart', | |
| }, | |
| TestAppDevice.flutterChrome.name: { | |
| // TODO(https://github.com/flutter/devtools/issues/7145): Figure out why | |
| // this fails on bots but passes locally and enable. | |
| 'eval_and_inspect_test.dart', | |
| // TODO(https://github.com/flutter/devtools/issues/7732): fix and unskip. | |
| 'debugger_panel_test.dart', | |
| }, | |
| }; | |
| void main(List<String> args) async { | |
| final testRunnerArgs = DevToolsAppTestRunnerArgs( | |
| args, | |
| verifyValidTarget: false, | |
| ); | |
| await runOneOrManyTests<DevToolsAppTestRunnerArgs>( | |
| testDirectoryPath: _testDirectory, | |
| testRunnerArgs: testRunnerArgs, | |
| runTest: _runTest, | |
| newArgsGenerator: (args) => DevToolsAppTestRunnerArgs(args), | |
| testIsSupported: (testFile) => | |
| testRunnerArgs.testAppDevice.supportsTest(testFile.path), | |
| debugLogging: debugTestScript, | |
| ); | |
| } | |
| Future<void> _runTest(DevToolsAppTestRunnerArgs testRunnerArgs) async { | |
| final testTarget = testRunnerArgs.testTarget!; | |
| final testDevice = testRunnerArgs.testAppDevice.name; | |
| final disabledForAllDevices = _disabledTestsForDevice[_testDeviceAll]!; | |
| final disabledForDevice = _disabledTestsForDevice[testDevice] ?? {}; | |
| final disabled = { | |
| ...disabledForAllDevices, | |
| ...disabledForDevice, | |
| }.any((t) => testTarget.endsWith(t)); | |
| if (disabled) { | |
| debugLog('Disabled test - skipping $testTarget for $testDevice.'); | |
| return; | |
| } | |
| if (!testRunnerArgs.testAppDevice.supportsTest(testTarget)) { | |
| debugLog('Unsupported test - skipping $testTarget for $testDevice.'); | |
| return; | |
| } | |
| await runFlutterIntegrationTest( | |
| testRunnerArgs, | |
| TestFileArgs(testTarget, testAppDevice: testRunnerArgs.testAppDevice), | |
| offline: testTarget.startsWith(_offlineIndicator), | |
| ); | |
| } |