238" command = something\n"
239"build foo$ bar: spaces $$one two$$$ three\n"
241 EXPECT_TRUE(state.LookupNode(
"foo bar"));
242 EXPECT_EQ(state.edges_[0]->outputs_[0]->path(),
"foo bar");
243 EXPECT_EQ(state.edges_[0]->inputs_[0]->path(),
"$one");
244 EXPECT_EQ(state.edges_[0]->inputs_[1]->path(),
"two$ three");
245 EXPECT_EQ(state.edges_[0]->EvaluateCommand(),
"something");
400 EXPECT_FALSE(parser.
ParseTest(
string(
"subn", 4), &err));
401 EXPECT_EQ(
"input:1: expected '=', got eof\n"
411 EXPECT_FALSE(parser.
ParseTest(
"foobar", &err));
412 EXPECT_EQ(
"input:1: expected '=', got eof\n"
422 EXPECT_FALSE(parser.
ParseTest(
"x 3", &err));
423 EXPECT_EQ(
"input:1: expected '=', got identifier\n"
433 EXPECT_FALSE(parser.
ParseTest(
"x = 3", &err));
434 EXPECT_EQ(
"input:1: unexpected EOF\n"
444 EXPECT_FALSE(parser.
ParseTest(
"x = 3\ny 2", &err));
445 EXPECT_EQ(
"input:2: expected '=', got identifier\n"
455 EXPECT_FALSE(parser.
ParseTest(
"x = $", &err));
456 EXPECT_EQ(
"input:1: bad $-escape (literal $ must be written as $$)\n"
466 EXPECT_FALSE(parser.
ParseTest(
"x = $\n $[\n", &err));
467 EXPECT_EQ(
"input:2: bad $-escape (literal $ must be written as $$)\n"
477 EXPECT_FALSE(parser.
ParseTest(
"x = a$\n b$\n $\n", &err));
478 EXPECT_EQ(
"input:4: unexpected EOF\n"
486 EXPECT_FALSE(parser.
ParseTest(
"build\n", &err));
487 EXPECT_EQ(
"input:1: expected path\n"
497 EXPECT_FALSE(parser.
ParseTest(
"build x: y z\n", &err));
498 EXPECT_EQ(
"input:1: unknown build rule 'y'\n"
508 EXPECT_FALSE(parser.
ParseTest(
"build x:: y z\n", &err));
509 EXPECT_EQ(
"input:1: expected build command name\n"
519 EXPECT_FALSE(parser.
ParseTest(
"rule cat\n command = cat ok\n"
520 "build x: cat $\n :\n",
522 EXPECT_EQ(
"input:4: expected newline, got ':'\n"
532 EXPECT_FALSE(parser.
ParseTest(
"rule cat\n",
534 EXPECT_EQ(
"input:2: expected 'command =' line\n", err);
541 EXPECT_FALSE(parser.
ParseTest(
"rule cat\n"
544 " command = echo\n", &err));
545 EXPECT_EQ(
"input:3: duplicate rule 'cat'\n"
555 EXPECT_FALSE(parser.
ParseTest(
"rule cat\n"
557 " rspfile = cat.rsp\n", &err));
559 "input:4: rspfile and rspfile_content need to be both specified\n",
567 EXPECT_FALSE(parser.
ParseTest(
"rule cat\n"
568 " command = ${fafsd\n"
571 EXPECT_EQ(
"input:2: bad $-escape (literal $ must be written as $$)\n"
572 " command = ${fafsd\n"
582 EXPECT_FALSE(parser.
ParseTest(
"rule cat\n"
584 "build $.: cat foo\n",
586 EXPECT_EQ(
"input:3: bad $-escape (literal $ must be written as $$)\n"
587 "build $.: cat foo\n"
597 EXPECT_FALSE(parser.
ParseTest(
"rule cat\n"
599 "build $: cat foo\n",
601 EXPECT_EQ(
"input:3: expected ':', got newline ($ also escapes ':')\n"
611 EXPECT_FALSE(parser.
ParseTest(
"rule %foo\n",
613 EXPECT_EQ(
"input:1: expected rule name\n"
623 EXPECT_FALSE(parser.
ParseTest(
"rule cc\n"
627 EXPECT_EQ(
"input:3: unexpected variable 'othervar'\n"
637 EXPECT_FALSE(parser.
ParseTest(
"rule cc\n command = foo\n"
638 "build $.: cc bar.cc\n",
640 EXPECT_EQ(
"input:3: bad $-escape (literal $ must be written as $$)\n"
641 "build $.: cc bar.cc\n"
650 EXPECT_FALSE(parser.
ParseTest(
"rule cc\n command = foo\n && bar",
652 EXPECT_EQ(
"input:3: expected variable name\n"
662 EXPECT_FALSE(parser.
ParseTest(
"rule cc\n command = foo\n"
663 "build $: cc bar.cc\n",
665 EXPECT_EQ(
"input:3: expected ':', got newline ($ also escapes ':')\n"
666 "build $: cc bar.cc\n"
675 EXPECT_FALSE(parser.
ParseTest(
"default\n",
677 EXPECT_EQ(
"input:1: expected target name\n"
687 EXPECT_FALSE(parser.
ParseTest(
"default nonexistent\n",
689 EXPECT_EQ(
"input:1: unknown target 'nonexistent'\n"
690 "default nonexistent\n"
699 EXPECT_FALSE(parser.
ParseTest(
"rule r\n command = r\n"
703 EXPECT_EQ(
"input:4: expected newline, got ':'\n"
713 EXPECT_FALSE(parser.
ParseTest(
"default $a\n", &err));
714 EXPECT_EQ(
"input:1: empty path\n"
726 "build $a: r $c\n", &err));
729 EXPECT_EQ(
"input:4: empty path\n", err);
741 " generator = 1\n", &err));
742 EXPECT_EQ(
"input:4: unexpected indent\n", err);
749 EXPECT_FALSE(parser.
ParseTest(
"pool\n", &err));
750 EXPECT_EQ(
"input:1: expected pool name\n"
752 " ^ near here", err);
759 EXPECT_FALSE(parser.
ParseTest(
"pool foo\n", &err));
760 EXPECT_EQ(
"input:2: expected 'depth =' line\n", err);
767 EXPECT_FALSE(parser.
ParseTest(
"pool foo\n"
769 "pool foo\n", &err));
770 EXPECT_EQ(
"input:3: duplicate pool 'foo'\n"
780 EXPECT_FALSE(parser.
ParseTest(
"pool foo\n"
781 " depth = -1\n", &err));
782 EXPECT_EQ(
"input:2: invalid pool depth\n"
792 EXPECT_FALSE(parser.
ParseTest(
"pool foo\n"
793 " bar = 1\n", &err));
794 EXPECT_EQ(
"input:2: unexpected variable 'bar'\n"
805 EXPECT_FALSE(parser.
ParseTest(
"rule run\n"
807 " pool = unnamed_pool\n"
808 "build out: run in\n", &err));
809 EXPECT_EQ(
"input:5: unknown pool name 'unnamed_pool'\n", err);
842 fs_.Create(
"test.ninja",
844 "build $builddir/inner: varref\n");
846"builddir = some_dir/\n"
848" command = varref $var\n"
850"build $builddir/outer: varref\n"
851"subninja test.ninja\n"
852"build $builddir/outer2: varref\n"));
853 ASSERT_EQ(1u, fs_.files_read_.size());
855 EXPECT_EQ(
"test.ninja", fs_.files_read_[0]);
856 EXPECT_TRUE(state.LookupNode(
"some_dir/outer"));
858 EXPECT_TRUE(state.LookupNode(
"some_dir/inner"));
860 ASSERT_EQ(3u, state.edges_.size());
861 EXPECT_EQ(
"varref outer", state.edges_[0]->EvaluateCommand());
862 EXPECT_EQ(
"varref inner", state.edges_[1]->EvaluateCommand());
863 EXPECT_EQ(
"varref outer", state.edges_[2]->EvaluateCommand());