diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index e62b58fab90..a36d902cb8d 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -208,7 +208,7 @@ jobs: # TODO(https://github.com/flutter/devtools/issues/9357): Re-enable tests on windows-latest. os: [macos-latest] # Consider running integration tests in ddc mode, too. - bot: [integration_dart2js] + bot: [integration_dart2js, integration_dart2wasm] device: [flutter, flutter-web, dart-cli] # Option 1/1 will run all tests for a device in a single shard. # Option 1/2 and 2/2 should be enabled to run tests for a device in 2 shards. @@ -273,7 +273,7 @@ jobs: fail-fast: false matrix: # Consider running integration tests in ddc mode, too. - bot: [integration_dart2js] + bot: [integration_dart2js, integration_wasm] os: [ubuntu-latest, windows-latest] steps: - name: git clone diff --git a/packages/devtools_app/integration_test/test_infra/run/run_test.dart b/packages/devtools_app/integration_test/test_infra/run/run_test.dart index 3daeee093f2..e815316a7e6 100644 --- a/packages/devtools_app/integration_test/test_infra/run/run_test.dart +++ b/packages/devtools_app/integration_test/test_infra/run/run_test.dart @@ -82,6 +82,7 @@ Future runFlutterIntegrationTest( testTarget, testDriver: 'test_driver/integration_test.dart', headless: testRunnerArgs.headless, + useWasm: testRunnerArgs.useWasm, dartDefineArgs: [ 'test_args=${jsonEncode(testArgs)}', if (testFileArgs.experimentsOn) 'enable_experiments=true', diff --git a/packages/devtools_extensions/integration_test/run_tests.dart b/packages/devtools_extensions/integration_test/run_tests.dart index 1eb213d81c4..64d38b32f22 100644 --- a/packages/devtools_extensions/integration_test/run_tests.dart +++ b/packages/devtools_extensions/integration_test/run_tests.dart @@ -38,6 +38,7 @@ Future _runIntegrationTest( testRunnerArgs.testTarget!, testDriver: 'test_driver/integration_test.dart', headless: testRunnerArgs.headless, + useWasm: testRunnerArgs.useWasm, dartDefineArgs: ['use_simulated_environment=true'], debugLogging: debugTestScript, ); diff --git a/packages/devtools_shared/lib/src/test/integration_test_runner.dart b/packages/devtools_shared/lib/src/test/integration_test_runner.dart index de88474efc3..54e0f8b840e 100644 --- a/packages/devtools_shared/lib/src/test/integration_test_runner.dart +++ b/packages/devtools_shared/lib/src/test/integration_test_runner.dart @@ -27,6 +27,7 @@ class IntegrationTestRunner with IOMixin { String testTarget, { required String testDriver, bool headless = false, + bool useWasm = false, List dartDefineArgs = const [], bool debugLogging = false, }) async { @@ -51,7 +52,10 @@ class IntegrationTestRunner with IOMixin { headless ? 'web-server' : 'chrome', // --disable-gpu speeds up tests that use ChromeDriver when run on // GitHub Actions. See https://github.com/flutter/devtools/issues/8301. - '--web-browser-flag=--disable-gpu', + // However, it also breaks the tests when running with the wasm flag, + // because it prevents capturing browser logs. See: + // https://github.com/flutter/devtools/issues/9727 + useWasm ? '--wasm' : '--web-browser-flag=--disable-gpu', if (headless) ...[ // Flags to avoid breakage with chromedriver 138. See // https://github.com/flutter/devtools/issues/9357. @@ -223,6 +227,9 @@ class IntegrationTestRunnerArgs { /// instead of 'chrome'. bool get headless => argResults.flag(_headlessArg); + /// Whether this integration test should be run against dart2wasm-compiled DevTools. + bool get useWasm => argResults.flag(_wasmArg); + /// Sharding information for this test run. ({int shardNumber, int totalShards})? get shard { final shardValue = argResults.option(_shardArg); @@ -250,6 +257,7 @@ class IntegrationTestRunnerArgs { static const _helpArg = 'help'; static const testTargetArg = 'target'; static const _headlessArg = 'headless'; + static const _wasmArg = 'wasm'; static const _shardArg = 'shard'; /// Builds an arg parser for DevTools integration tests. @@ -277,6 +285,11 @@ class IntegrationTestRunnerArgs { 'the \'chrome\' device. For headless test runs, you will not be ' 'able to see the integration test run visually in a Chrome browser.', ) + ..addFlag( + _wasmArg, + negatable: false, + help: 'Runs the integration test against dart2wasm-compiled DevTools.', + ) ..addOption( _shardArg, valueHelp: '1/3', diff --git a/tool/ci/bots.sh b/tool/ci/bots.sh index 60ed7763025..bd4a4b671b6 100755 --- a/tool/ci/bots.sh +++ b/tool/ci/bots.sh @@ -72,7 +72,13 @@ elif [ "$BOT" = "test_webdriver" ]; then # elif [ "$BOT" = "integration_ddc" ]; then # TODO(https://github.com/flutter/devtools/issues/1987): rewrite legacy integration tests. -elif [ "$BOT" = "integration_dart2js" ]; then +elif [[ "$BOT" == "integration_dart2js" || "$BOT" == "integration_dart2wasm" ]]; then + if [ "$BOT" == "integration_dart2wasm" ]; then + WASM_FLAG="--wasm" + else + WASM_FLAG="" + fi + if [ "$DEVTOOLS_PACKAGE" = "devtools_app" ]; then flutter pub get @@ -85,15 +91,15 @@ run to see if golden image failures have been uploaded (this only happens once a completed). Download these goldens and update them in the codebase to apply the updates." if [ "$DEVICE" = "flutter" ]; then - dart run integration_test/run_tests.dart --headless --shard="$SHARD" + dart run integration_test/run_tests.dart $WASM_FLAG --headless --shard="$SHARD" elif [ "$DEVICE" = "flutter-web" ]; then - dart run integration_test/run_tests.dart --test-app-device=chrome --headless --shard="$SHARD" + dart run integration_test/run_tests.dart --test-app-device=chrome $WASM_FLAG --headless --shard="$SHARD" elif [ "$DEVICE" = "dart-cli" ]; then - dart run integration_test/run_tests.dart --test-app-device=cli --headless --shard="$SHARD" + dart run integration_test/run_tests.dart --test-app-device=cli $WASM_FLAG --headless --shard="$SHARD" fi elif [ "$DEVTOOLS_PACKAGE" = "devtools_extensions" ]; then pushd $DEVTOOLS_DIR/packages/devtools_extensions - dart run integration_test/run_tests.dart --headless + dart run integration_test/run_tests.dart $WASM_FLAG --headless popd fi fi