blob: e27ae970d7dfc15d1672c8f2abe3e184dd1ae138 [file] [log] [blame]
#!/bin/bash
# Go to srcdir
cd $(dirname ${BASH_SOURCE[0]})/..
rm -rf out.test
mkdir out.test
cd out.test
../bootstrap.bash
# Run ninja, filter the output, and compare against expectations
# $1: Name of test
function testcase()
{
echo -n "Running $1..."
if ! ninja -v -d explain >log_$1 2>&1; then
echo " Failed."
echo "Test $1 Failed:" >>failed
tail log_$1 >>failed
return
fi
grep -E "^(Choosing|Newer|Stage)" log_$1 >test_$1
if ! cmp -s test_$1 ../tests/expected_$1; then
echo " Failed."
echo "Test $1 Failed:" >>failed
diff -u ../tests/expected_$1 test_$1 >>failed
else
echo " Passed."
fi
}
testcase start
# The 2 second sleeps are needed until ninja understands sub-second timestamps
# https://github.com/martine/ninja/issues/371
# This test affects all bootstrap stages
sleep 2
touch ../Blueprints
testcase all
# This test affects only the primary bootstrap stage
sleep 2
touch ../bpmodify/bpmodify.go
testcase primary
# This test affects nothing, nothing should be done
sleep 2
testcase none
# This test will cause the source build.ninja.in to be copied into the first
# stage.
sleep 2
touch ../build.ninja.in
testcase manifest
# From now on, we're going to be modifying the build.ninja.in, so let's make our
# own copy
sleep 2
../tests/bootstrap.bash -r
sleep 2
testcase start2
# This is similar to the last test, but incorporates a change into the source
# build.ninja.in, so that we'll restart into the new version created by the
# build.
sleep 2
echo "# test" >>src.build.ninja.in
testcase regen
# Add tests to our build by using '-t'
sleep 2
../tests/bootstrap.bash -r -t
sleep 2
testcase start_add_tests
# Make sure that updating a test file causes us to go back to the bootstrap
# stage
sleep 2
touch ../parser/parser_test.go
testcase rebuild_test
if [ -f failed ]; then
cat failed
exit 1
fi