|
1 | 1 | #!/bin/bash
|
2 |
| -$(dirname "${BASH_SOURCE[0]}")/../tool/build_and_test.sh |
| 2 | +set -e # bail on error |
| 3 | + |
| 4 | +function fail { |
| 5 | + echo -e "[31mSome tests failed[0m" |
| 6 | + return 1 |
| 7 | +} |
| 8 | + |
| 9 | +# Arguments passed to the diff tool. We exclude: |
| 10 | +# - *.map files so they aren't compared, as the diff is not human readable. |
| 11 | +# - runtime JS files that are just copied over from the sources and are not |
| 12 | +# duplicated in the expected folder. |
| 13 | +DIFF_ARGS="-u -r -N --exclude=\*.map expect actual" |
| 14 | + |
| 15 | +function show_diff { |
| 16 | + echo "Fail: actual output did not match expected" |
| 17 | + echo |
| 18 | + diff $DIFF_ARGS |\ |
| 19 | + sed -e "s/^\(+.*\)/[32m\1[0m/" |\ |
| 20 | + sed -e "s/^\(-.*\)/[31m\1[0m/" |
| 21 | + echo |
| 22 | + echo "You can update these expectations with:" |
| 23 | + echo "$ pushd `pwd` && cp -a actual/* expect && popd" |
| 24 | + fail |
| 25 | +} |
| 26 | + |
| 27 | +# the directory of this script |
| 28 | +TEST_DIR=$( cd $( dirname "${BASH_SOURCE[0]}" ) && pwd ) |
| 29 | + |
| 30 | +# Some tests require being run from the package root |
| 31 | +cd $TEST_DIR/.. |
| 32 | + |
| 33 | +# Check minimum SDK version |
| 34 | +./tool/sdk_version_check.dart 1.9.0-dev.4.0 || fail |
| 35 | + |
| 36 | +./tool/build_sdk.sh |
| 37 | + |
| 38 | +dart -c test/all_tests.dart || fail |
| 39 | + |
| 40 | +# validate codegen_test output |
| 41 | +pushd test/codegen/ &> /dev/null |
| 42 | +rm -r actual/dev_compiler/ actual/server_mode/dev_compiler/ \ |
| 43 | + actual/sunflower/dev_compiler |
| 44 | +diff $DIFF_ARGS > /dev/null || show_diff |
| 45 | +popd &> /dev/null |
| 46 | + |
| 47 | +# validate dart_codegen_test output |
| 48 | +pushd test/dart_codegen/ &> /dev/null |
| 49 | +diff $DIFF_ARGS > /dev/null || show_diff |
| 50 | +popd &> /dev/null |
| 51 | + |
| 52 | +# run self host and analyzer after other tests, because they're ~seconds to run. |
| 53 | +dart -c test/checker/self_host_test.dart || fail |
| 54 | + |
| 55 | +# Run analyzer on bin/devc.dart, as it includes most of the code we care about |
| 56 | +# via transitive dependencies. This seems to be the only fast way to avoid |
| 57 | +# repeated analysis of the same code. |
| 58 | +# TODO(jmesserly): ideally we could do test/all_tests.dart, but |
| 59 | +# dart_runtime_test.dart creates invalid generic type instantiation AA. |
| 60 | +echo "Running dartanalyzer to check for errors/warnings/hints..." |
| 61 | +dartanalyzer --fatal-warnings --package-warnings bin/devc.dart | (! grep $PWD) \ |
| 62 | + || fail |
| 63 | + |
| 64 | +{ |
| 65 | + fc=`find test -name "*.dart" |\ |
| 66 | + xargs grep "/\*\S* should be \S*\*/" | wc -l` |
| 67 | + echo "There are" $fc "tests marked as known failures." |
| 68 | +} |
| 69 | + |
| 70 | +# Run formatter in rewrite mode on all files that are part of the project. |
| 71 | +# This checks that all files are commited first to git, so no state is lost. |
| 72 | +# The formatter ignores: |
| 73 | +# * local files that have never been added to git, |
| 74 | +# * subdirectories of test/ and tool/, unless explicitly added. Those dirs |
| 75 | +# contain a lot of generated or external source we should not reformat. |
| 76 | +(files=`git ls-files 'bin/*.dart' 'lib/*.dart' test/*.dart test/checker/*.dart \ |
| 77 | + tool/*.dart | grep -v lib/src/js/`; git status -s $files | grep -q . \ |
| 78 | + && echo "Did not run the formatter, please commit edited files first." \ |
| 79 | + || (echo "Running dart formatter" ; pub run dart_style:format -w $files)) |
| 80 | +popd &> /dev/null |
| 81 | + |
| 82 | +echo -e "[32mAll tests pass[0m" |
0 commit comments