summaryrefslogtreecommitdiffstats
path: root/src/build_test.cc
diff options
context:
space:
mode:
authorQingning Huo <qingninghuo@gmail.com>2011-06-14 21:54:30 (GMT)
committerQingning Huo <qingninghuo@gmail.com>2011-06-14 21:54:30 (GMT)
commitc5051522f39a3d58c85e0e110ea2a14dc2b17927 (patch)
treed32341c8c668d3cc0176d3b8765282c9aa4ff197 /src/build_test.cc
parentedc4062f6b6f3984b737a5e2ae1ed6b9d50b4905 (diff)
downloadNinja-c5051522f39a3d58c85e0e110ea2a14dc2b17927.zip
Ninja-c5051522f39a3d58c85e0e110ea2a14dc2b17927.tar.gz
Ninja-c5051522f39a3d58c85e0e110ea2a14dc2b17927.tar.bz2
Add a test for the multiple outputs fix
Diffstat (limited to 'src/build_test.cc')
-rw-r--r--src/build_test.cc20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/build_test.cc b/src/build_test.cc
index 813521c..282e4b7 100644
--- a/src/build_test.cc
+++ b/src/build_test.cc
@@ -246,7 +246,8 @@ bool BuildTest::CanRunMore() {
bool BuildTest::StartCommand(Edge* edge) {
assert(!last_command_);
commands_ran_.push_back(edge->EvaluateCommand());
- if (edge->rule_->name_ == "cat" || edge->rule_->name_ == "cc") {
+ if (edge->rule_->name_ == "cat" || edge->rule_->name_ == "cc" ||
+ edge->rule_->name_ == "touch") {
for (vector<Node*>::iterator out = edge->outputs_.begin();
out != edge->outputs_.end(); ++out) {
(*out)->file_->mtime_ = now_;
@@ -339,6 +340,23 @@ TEST_F(BuildTest, TwoStep) {
EXPECT_EQ("cat cat1 cat2 > cat12", commands_ran_[4]);
}
+TEST_F(BuildTest, TwoOutputs) {
+ ASSERT_NO_FATAL_FAILURE(AssertParse(&state_,
+"rule touch\n"
+" command = touch $out\n"
+"build out1 out2: touch in.txt\n"));
+
+ fs_.Create("in.txt", now_, "");
+
+ string err;
+ EXPECT_TRUE(builder_.AddTarget("out1", &err));
+ ASSERT_EQ("", err);
+ EXPECT_TRUE(builder_.Build(&err));
+ EXPECT_EQ("", err);
+ ASSERT_EQ(1u, commands_ran_.size());
+ EXPECT_EQ("touch out1 out2", commands_ran_[0]);
+}
+
TEST_F(BuildTest, Chain) {
ASSERT_NO_FATAL_FAILURE(AssertParse(&state_,
"build c2: cat c1\n"