diff options
author | Evan Martin <martine@danga.com> | 2012-10-27 20:09:40 (GMT) |
---|---|---|
committer | Evan Martin <martine@danga.com> | 2012-12-29 20:34:25 (GMT) |
commit | 13dd08c1a03e5a8f4299816fbd3af1b6cb6d9642 (patch) | |
tree | 9564593d47936d2e47d88e344c2f6915ba8753a3 /src/graph_test.cc | |
parent | 3249938cdf574058a066436aea06b0541ded6958 (diff) | |
download | Ninja-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.cc | 35 |
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")); +} |