summaryrefslogtreecommitdiffstats
path: root/src/graph_test.cc
diff options
context:
space:
mode:
authorEvan Martin <martine@danga.com>2012-10-27 20:09:40 (GMT)
committerEvan Martin <martine@danga.com>2012-12-29 20:34:25 (GMT)
commit13dd08c1a03e5a8f4299816fbd3af1b6cb6d9642 (patch)
tree9564593d47936d2e47d88e344c2f6915ba8753a3 /src/graph_test.cc
parent3249938cdf574058a066436aea06b0541ded6958 (diff)
downloadNinja-13dd08c1a03e5a8f4299816fbd3af1b6cb6d9642.zip
Ninja-13dd08c1a03e5a8f4299816fbd3af1b6cb6d9642.tar.gz
Ninja-13dd08c1a03e5a8f4299816fbd3af1b6cb6d9642.tar.bz2
rearrange handling of builtin bindings to make rules simpler
Now, a 'build' block can override any special binding like 'command' or 'description' if it needs to.
Diffstat (limited to 'src/graph_test.cc')
-rw-r--r--src/graph_test.cc35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/graph_test.cc b/src/graph_test.cc
index 5b25c2f..396def4 100644
--- a/src/graph_test.cc
+++ b/src/graph_test.cc
@@ -187,3 +187,38 @@ TEST_F(GraphTest, DepfileRemoved) {
ASSERT_EQ("", err);
EXPECT_TRUE(GetNode("out.o")->dirty());
}
+
+// Check that rule-level variables are in scope for eval.
+TEST_F(GraphTest, RuleVariablesInScope) {
+ ASSERT_NO_FATAL_FAILURE(AssertParse(&state_,
+"rule r\n"
+" depfile = x\n"
+" command = depfile is $depfile\n"
+"build out: r in\n"));
+ Edge* edge = GetNode("out")->in_edge();
+ EXPECT_EQ("depfile is x", edge->EvaluateCommand());
+}
+
+// Check that build statements can override rule builtins like depfile.
+TEST_F(GraphTest, DepfileOverride) {
+ ASSERT_NO_FATAL_FAILURE(AssertParse(&state_,
+"rule r\n"
+" depfile = x\n"
+" command = unused\n"
+"build out: r in\n"
+" depfile = y\n"));
+ Edge* edge = GetNode("out")->in_edge();
+ EXPECT_EQ("y", edge->GetBinding("depfile"));
+}
+
+// Check that overridden values show up in expansion of rule-level bindings.
+TEST_F(GraphTest, DepfileOverrideParent) {
+ ASSERT_NO_FATAL_FAILURE(AssertParse(&state_,
+"rule r\n"
+" depfile = x\n"
+" command = depfile is $depfile\n"
+"build out: r in\n"
+" depfile = y\n"));
+ Edge* edge = GetNode("out")->in_edge();
+ EXPECT_EQ("depfile is y", edge->GetBinding("command"));
+}