diff options
author | Evan Martin <martine@danga.com> | 2011-05-09 04:47:03 (GMT) |
---|---|---|
committer | Evan Martin <martine@danga.com> | 2011-05-09 15:50:32 (GMT) |
commit | 4e9f273d9c4a2d19ad15169ff1f244c4b1e7bbd1 (patch) | |
tree | dbe8c79573c6b7b458c4f6427bb4f01c93d7aafe /src/build_test.cc | |
parent | 3a48d1027e594e39ee5dc526e9254387715a945e (diff) | |
download | Ninja-4e9f273d9c4a2d19ad15169ff1f244c4b1e7bbd1.zip Ninja-4e9f273d9c4a2d19ad15169ff1f244c4b1e7bbd1.tar.gz Ninja-4e9f273d9c4a2d19ad15169ff1f244c4b1e7bbd1.tar.bz2 |
add support for ignoring failures of some subtasks
Diffstat (limited to 'src/build_test.cc')
-rw-r--r-- | src/build_test.cc | 50 |
1 files changed, 45 insertions, 5 deletions
diff --git a/src/build_test.cc b/src/build_test.cc index d55cae3..c067001 100644 --- a/src/build_test.cc +++ b/src/build_test.cc @@ -253,13 +253,15 @@ bool BuildTest::StartCommand(Edge* edge) { (*out)->file_->mtime_ = now_; (*out)->dirty_ = false; } - last_command_ = edge; - return true; + } else if (edge->rule_->name_ == "fail") { + // Don't do anything. } else { - printf("unkown command\n"); + printf("unknown command\n"); + return false; } - return false; + last_command_ = edge; + return true; } bool BuildTest::WaitForCommands() { @@ -269,7 +271,10 @@ bool BuildTest::WaitForCommands() { Edge* BuildTest::NextFinishedCommand(bool* success) { if (Edge* edge = last_command_) { - *success = true; + if (edge->rule_->name_ == "fail") + *success = false; + else + *success = true; last_command_ = NULL; return edge; } @@ -517,3 +522,38 @@ TEST_F(BuildTest, Phony) { ASSERT_NE("", err); } +TEST_F(BuildTest, Fail) { + ASSERT_NO_FATAL_FAILURE(AssertParse(&state_, +"rule fail\n" +" command = fail\n" +"build out1: fail\n")); + + string err; + EXPECT_TRUE(builder_.AddTarget("out1", &err)); + ASSERT_EQ("", err); + + EXPECT_FALSE(builder_.Build(&err)); + ASSERT_EQ(1u, commands_ran_.size()); + ASSERT_EQ("subcommand failed", err); +} + +TEST_F(BuildTest, SwallowFailures) { + ASSERT_NO_FATAL_FAILURE(AssertParse(&state_, +"rule fail\n" +" command = fail\n" +"build out1: fail\n" +"build out2: fail\n" +"build out3: fail\n" +"build all: phony out1 out2 out3\n")); + + // Swallow two failures, die on the third. + config_.swallow_failures = 2; + + string err; + EXPECT_TRUE(builder_.AddTarget("all", &err)); + ASSERT_EQ("", err); + + EXPECT_FALSE(builder_.Build(&err)); + ASSERT_EQ(3u, commands_ran_.size()); + ASSERT_EQ("subcommand failed", err); +} |