summaryrefslogtreecommitdiffstats
path: root/src/parsers_test.cc
diff options
context:
space:
mode:
authorPeter Collingbourne <peter@pcc.me.uk>2011-08-31 03:55:35 (GMT)
committerPeter Collingbourne <peter@pcc.me.uk>2011-08-31 16:51:05 (GMT)
commit7a6c9d480d4ca7020f74e5f4dfbaf28c9ff2a6a4 (patch)
tree20aff5ee6b1061c0f53c51805419225a1367b2bd /src/parsers_test.cc
parent679305757e68861885f1e5c819625d2f0bca6c0b (diff)
downloadNinja-7a6c9d480d4ca7020f74e5f4dfbaf28c9ff2a6a4.zip
Ninja-7a6c9d480d4ca7020f74e5f4dfbaf28c9ff2a6a4.tar.gz
Ninja-7a6c9d480d4ca7020f74e5f4dfbaf28c9ff2a6a4.tar.bz2
Implement default target statements
This introduces a new directive, the default target statement, which may be used to control the list of targets built by default (i.e. if no target is named on the command line).
Diffstat (limited to 'src/parsers_test.cc')
-rw-r--r--src/parsers_test.cc65
1 files changed, 64 insertions, 1 deletions
diff --git a/src/parsers_test.cc b/src/parsers_test.cc
index 2c2bdf2..b5d253f 100644
--- a/src/parsers_test.cc
+++ b/src/parsers_test.cc
@@ -190,7 +190,8 @@ TEST_F(ParserTest, ReservedWords) {
ASSERT_NO_FATAL_FAILURE(AssertParse(
"rule build\n"
" command = rule run $out\n"
-"build subninja: build include foo.cc\n"));
+"build subninja: build include default foo.cc\n"
+"default subninja\n"));
}
TEST_F(ParserTest, Errors) {
@@ -340,6 +341,35 @@ TEST_F(ParserTest, Errors) {
&err));
EXPECT_EQ("line 4, col 1: expected variable after $", err);
}
+
+ {
+ State state;
+ ManifestParser parser(&state, NULL);
+ string err;
+ EXPECT_FALSE(parser.Parse("default\n",
+ &err));
+ EXPECT_EQ("line 1, col 8: expected target name, got newline", err);
+ }
+
+ {
+ State state;
+ ManifestParser parser(&state, NULL);
+ string err;
+ EXPECT_FALSE(parser.Parse("default nonexistent\n",
+ &err));
+ EXPECT_EQ("line 1, col 9: unknown target 'nonexistent'", err);
+ }
+
+ {
+ State state;
+ ManifestParser parser(&state, NULL);
+ string err;
+ EXPECT_FALSE(parser.Parse("rule r\n command = r\n"
+ "build b: r\n"
+ "default b:\n",
+ &err));
+ EXPECT_EQ("line 4, col 10: expected newline, got ':'", err);
+ }
}
TEST_F(ParserTest, SubNinja) {
@@ -404,6 +434,39 @@ TEST_F(ParserTest, OrderOnly) {
ASSERT_TRUE(edge->is_order_only(1));
}
+TEST_F(ParserTest, DefaultDefault) {
+ ASSERT_NO_FATAL_FAILURE(AssertParse(
+"rule cat\n command = cat $in > $out\n"
+"build a: cat foo\n"
+"build b: cat foo\n"
+"build c: cat foo\n"
+"build d: cat foo\n"));
+
+ string err;
+ EXPECT_EQ(4u, state.DefaultNodes(&err).size());
+ EXPECT_EQ("", err);
+}
+
+TEST_F(ParserTest, DefaultStatements) {
+ ASSERT_NO_FATAL_FAILURE(AssertParse(
+"rule cat\n command = cat $in > $out\n"
+"build a: cat foo\n"
+"build b: cat foo\n"
+"build c: cat foo\n"
+"build d: cat foo\n"
+"third = c\n"
+"default a b\n"
+"default $third\n"));
+
+ string err;
+ std::vector<Node*> nodes = state.DefaultNodes(&err);
+ EXPECT_EQ("", err);
+ ASSERT_EQ(3u, nodes.size());
+ EXPECT_EQ("a", nodes[0]->file_->path_);
+ EXPECT_EQ("b", nodes[1]->file_->path_);
+ EXPECT_EQ("c", nodes[2]->file_->path_);
+}
+
TEST(MakefileParser, Basic) {
MakefileParser parser;
string err;