Add test suite for bootstrapping
This only checks to make sure that for a given updated file, the bootstrap stage is properly run. It doesn't actually check to make sure that anything was rebuilt. Change-Id: I9cb6ff1d483264da30e43d5580361d93b148f42c
This commit is contained in:
parent
21b6f37cee
commit
f04c55172f
14 changed files with 111 additions and 2 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
out.test
|
|
@ -11,3 +11,4 @@ script:
|
|||
- ../bootstrap.bash
|
||||
- ninja
|
||||
- diff -us ../build.ninja.in ../build.ninja.in.orig
|
||||
- ../tests/test.sh
|
||||
|
|
|
@ -70,7 +70,7 @@ var (
|
|||
|
||||
bootstrap = pctx.StaticRule("bootstrap",
|
||||
blueprint.RuleParams{
|
||||
Command: "$bootstrapCmd -i $in",
|
||||
Command: "echo \"Choosing $$(basename $in) for next stage\" && $bootstrapCmd -i $in",
|
||||
Description: "bootstrap $in",
|
||||
Generator: true,
|
||||
})
|
||||
|
|
|
@ -32,7 +32,7 @@ g.bootstrap.srcDir = @@SrcDir@@
|
|||
builddir = .bootstrap
|
||||
|
||||
rule g.bootstrap.bootstrap
|
||||
command = ${g.bootstrap.bootstrapCmd} -i ${in}
|
||||
command = echo "Choosing $$(basename ${in}) for next stage" && ${g.bootstrap.bootstrapCmd} -i ${in}
|
||||
description = bootstrap ${in}
|
||||
generator = true
|
||||
|
||||
|
|
7
tests/bootstrap.bash
Executable file
7
tests/bootstrap.bash
Executable file
|
@ -0,0 +1,7 @@
|
|||
#!/bin/bash
|
||||
|
||||
export BOOTSTRAP="${BASH_SOURCE[0]}"
|
||||
export SRCDIR=".."
|
||||
export BOOTSTRAP_MANIFEST="src.build.ninja.in"
|
||||
|
||||
../bootstrap.bash "$@"
|
2
tests/expected_all
Normal file
2
tests/expected_all
Normal file
|
@ -0,0 +1,2 @@
|
|||
Choosing build.ninja.in for next stage
|
||||
Choosing main.ninja.in for next stage
|
2
tests/expected_manifest
Normal file
2
tests/expected_manifest
Normal file
|
@ -0,0 +1,2 @@
|
|||
Choosing build.ninja.in for next stage
|
||||
Choosing main.ninja.in for next stage
|
0
tests/expected_none
Normal file
0
tests/expected_none
Normal file
2
tests/expected_rebuild_test
Normal file
2
tests/expected_rebuild_test
Normal file
|
@ -0,0 +1,2 @@
|
|||
Choosing src.build.ninja.in for next stage
|
||||
Choosing main.ninja.in for next stage
|
2
tests/expected_regen
Normal file
2
tests/expected_regen
Normal file
|
@ -0,0 +1,2 @@
|
|||
Choosing src.build.ninja.in for next stage
|
||||
Choosing main.ninja.in for next stage
|
1
tests/expected_start
Normal file
1
tests/expected_start
Normal file
|
@ -0,0 +1 @@
|
|||
Choosing main.ninja.in for next stage
|
1
tests/expected_start2
Normal file
1
tests/expected_start2
Normal file
|
@ -0,0 +1 @@
|
|||
Choosing main.ninja.in for next stage
|
1
tests/expected_start_add_tests
Normal file
1
tests/expected_start_add_tests
Normal file
|
@ -0,0 +1 @@
|
|||
Choosing main.ninja.in for next stage
|
89
tests/test.sh
Executable file
89
tests/test.sh
Executable file
|
@ -0,0 +1,89 @@
|
|||
#!/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 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
|
Loading…
Reference in a new issue