summaryrefslogtreecommitdiffstats
path: root/src/build_test.cc
diff options
context:
space:
mode:
authorFrances Buontempo <frances.buontempo@gmail.com>2012-01-16 14:17:37 (GMT)
committerFrances Buontempo <frances.buontempo@gmail.com>2012-01-16 14:17:37 (GMT)
commit63ccd6065504862963574dd93340a0e9c7ad35f6 (patch)
treef05edbc76e32b273bfd079df4cd097050e941cac /src/build_test.cc
parent337d059edc8c9ed6db83d04c7eeb5d38f2595f6c (diff)
downloadNinja-63ccd6065504862963574dd93340a0e9c7ad35f6.zip
Ninja-63ccd6065504862963574dd93340a0e9c7ad35f6.tar.gz
Ninja-63ccd6065504862963574dd93340a0e9c7ad35f6.tar.bz2
Add a test that dry run shows all commands that could be run (none
cleaned) and a fix for this
Diffstat (limited to 'src/build_test.cc')
-rw-r--r--src/build_test.cc36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/build_test.cc b/src/build_test.cc
index 7f977a6..497faa4 100644
--- a/src/build_test.cc
+++ b/src/build_test.cc
@@ -772,3 +772,39 @@ TEST_F(BuildWithLogTest, RestatMissingFile) {
EXPECT_TRUE(builder_.Build(&err));
ASSERT_EQ(1u, commands_ran_.size());
}
+
+struct BuildDryRun : public BuildWithLogTest {
+ BuildDryRun() {
+ config_.dry_run = true;
+ }
+};
+
+TEST_F(BuildDryRun, AllCommandsShown) {
+ ASSERT_NO_FATAL_FAILURE(AssertParse(&state_,
+"rule true\n"
+" command = true\n"
+" restat = 1\n"
+"rule cc\n"
+" command = cc\n"
+" restat = 1\n"
+"build out1: cc in\n"
+"build out2: true out1\n"
+"build out3: cat out2\n"));
+
+ fs_.Create("out1", now_, "");
+ fs_.Create("out2", now_, "");
+ fs_.Create("out3", now_, "");
+
+ now_++;
+
+ fs_.Create("in", now_, "");
+
+ // "cc" touches out1, so we should build out2. But because "true" does not
+ // touch out2, we should cancel the build of out3.
+ string err;
+ EXPECT_TRUE(builder_.AddTarget("out3", &err));
+ ASSERT_EQ("", err);
+ EXPECT_TRUE(builder_.Build(&err));
+ ASSERT_EQ(3u, commands_ran_.size());
+}
+