| #!/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 |