#!/usr/bin/env bash # Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file # for details. All rights reserved. Use of this source code is governed by a # BSD-style license that can be found in the LICENSE file. # Compile flutter tests with a locally built SDK. set -ex prepareOnly=false leakTest=false weeklyTest=false REMAINING_ARGS=() while [[ $# -gt 0 ]]; do case $1 in --prepareOnly|--prepare-only|--prepare_only) prepareOnly=true shift ;; --leakTest|--leak-test|--leak_test) leakTest=true shift ;; --weeklyTest|--weekly-test|--weekly_test) weeklyTest=true shift ;; *) REMAINING_ARGS+=("$1") shift ;; esac done # Restore remaining arguments. set -- "${REMAINING_ARGS[@]}" if $prepareOnly; then echo "Will prepare only!" elif $leakTest; then echo "Will run leak test" fi checkout=$(pwd) dart=$checkout/out/ReleaseX64/dart-sdk/bin/dart sdk=$checkout/out/ReleaseX64/dart-sdk tmpdir=$(mktemp -d) cleanup() { if ! $prepareOnly; then rm -rf "$tmpdir" fi } trap cleanup EXIT HUP INT QUIT TERM PIPE pushd "$tmpdir" git clone --single-branch -vv \ https://dart.googlesource.com/external/github.com/flutter/flutter pushd flutter bin/flutter config --no-analytics pinned_dart_sdk=$(cat bin/cache/dart-sdk/revision) patch=$checkout/tools/patches/flutter-engine/${pinned_dart_sdk}.flutter.patch if [ -e "$patch" ]; then git apply $patch fi bin/flutter update-packages popd # flutter # Directly in temp directory again. git clone --single-branch --depth=1 -vv \ https://dart.googlesource.com/external/github.com/flutter/buildroot src pushd src git clone --single-branch --depth=1 -vv \ https://dart.googlesource.com/external/github.com/flutter/engine flutter pushd third_party ln -s $checkout dart popd # third_party popd # src ./src/third_party/dart/tools/patches/flutter-engine/apply.sh || true mkdir flutter_patched_sdk $checkout/tools/sdks/dart-sdk/bin/dart \ --packages=$checkout/.packages \ $checkout/pkg/front_end/tool/_fasta/compile_platform.dart \ dart:core \ -Ddart.vm.product=false \ -Ddart.isVM=true \ --nnbd-agnostic \ --single-root-scheme=org-dartlang-sdk \ --single-root-base=$checkout/ \ org-dartlang-sdk:///sdk/lib/libraries.json \ vm_outline_strong.dill \ vm_platform_strong.dill \ vm_outline_strong.dill $checkout/tools/sdks/dart-sdk/bin/dart \ --packages=$checkout/.packages \ $checkout/pkg/front_end/tool/_fasta/compile_platform.dart \ --nnbd-agnostic \ --target=flutter \ dart:core \ --single-root-scheme=org-dartlang-sdk \ --single-root-base=src \ org-dartlang-sdk:///flutter/lib/snapshot/libraries.json \ vm_outline_strong.dill \ flutter_patched_sdk/platform_strong.dill \ flutter_patched_sdk/outline_strong.dill popd # tmpdir if $prepareOnly; then echo "Preparations complete!" echo "Flutter is now in $tmpdir/flutter and the patched sdk in $tmpdir/flutter_patched_sdk" echo "You can run the test with $dart --enable-asserts pkg/frontend_server/test/frontend_server_flutter.dart --flutterDir=$tmpdir/flutter --flutterPlatformDir=$tmpdir/flutter_patched_sdk" elif $leakTest; then $dart \ --enable-asserts \ pkg/front_end/test/flutter_gallery_leak_tester.dart \ --path=$tmpdir elif $weeklyTest; then $dart \ --enable-asserts \ pkg/front_end/test/weekly_tester.dart \ --path=$tmpdir \ $@ else $dart \ --enable-asserts \ pkg/frontend_server/test/frontend_server_flutter_suite.dart \ -v \ --flutterDir=$tmpdir/flutter \ --flutterPlatformDir=$tmpdir/flutter_patched_sdk \ $@ fi