| Index: tools/gn/file_template_unittest.cc
|
| diff --git a/tools/gn/file_template_unittest.cc b/tools/gn/file_template_unittest.cc
|
| index 8e3bf40b90c4b22850f532726b1e83c3407af3be..d10791eeb4fc9fe0e9614edf578f27af558e7765 100644
|
| --- a/tools/gn/file_template_unittest.cc
|
| +++ b/tools/gn/file_template_unittest.cc
|
| @@ -7,58 +7,62 @@
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "tools/gn/escape.h"
|
| #include "tools/gn/file_template.h"
|
| +#include "tools/gn/test_with_scope.h"
|
|
|
| TEST(FileTemplate, Static) {
|
| + TestWithScope setup;
|
| +
|
| std::vector<std::string> templates;
|
| templates.push_back("something_static");
|
| - FileTemplate t(templates);
|
| + FileTemplate t(setup.settings(), templates);
|
| EXPECT_FALSE(t.has_substitutions());
|
|
|
| std::vector<std::string> result;
|
| - t.ApplyString("", &result);
|
| - ASSERT_EQ(1u, result.size());
|
| - EXPECT_EQ("something_static", result[0]);
|
| -
|
| - result.clear();
|
| - t.ApplyString("lalala", &result);
|
| + t.Apply(SourceFile("//foo/bar"), &result);
|
| ASSERT_EQ(1u, result.size());
|
| EXPECT_EQ("something_static", result[0]);
|
| }
|
|
|
| TEST(FileTemplate, Typical) {
|
| + TestWithScope setup;
|
| +
|
| std::vector<std::string> templates;
|
| templates.push_back("foo/{{source_name_part}}.cc");
|
| templates.push_back("foo/{{source_name_part}}.h");
|
| - FileTemplate t(templates);
|
| + FileTemplate t(setup.settings(), templates);
|
| EXPECT_TRUE(t.has_substitutions());
|
|
|
| std::vector<std::string> result;
|
| - t.ApplyString("sources/ha.idl", &result);
|
| + t.Apply(SourceFile("//sources/ha.idl"), &result);
|
| ASSERT_EQ(2u, result.size());
|
| EXPECT_EQ("foo/ha.cc", result[0]);
|
| EXPECT_EQ("foo/ha.h", result[1]);
|
| }
|
|
|
| TEST(FileTemplate, Weird) {
|
| + TestWithScope setup;
|
| +
|
| std::vector<std::string> templates;
|
| templates.push_back("{{{source}}{{source}}{{");
|
| - FileTemplate t(templates);
|
| + FileTemplate t(setup.settings(), templates);
|
| EXPECT_TRUE(t.has_substitutions());
|
|
|
| std::vector<std::string> result;
|
| - t.ApplyString("foo/lalala.c", &result);
|
| + t.Apply(SourceFile("//foo/lalala.c"), &result);
|
| ASSERT_EQ(1u, result.size());
|
| - EXPECT_EQ("{foo/lalala.cfoo/lalala.c{{", result[0]);
|
| + EXPECT_EQ("{../../foo/lalala.c../../foo/lalala.c{{", result[0]);
|
| }
|
|
|
| TEST(FileTemplate, NinjaExpansions) {
|
| + TestWithScope setup;
|
| +
|
| std::vector<std::string> templates;
|
| templates.push_back("-i");
|
| templates.push_back("{{source}}");
|
| templates.push_back("--out=foo bar\"{{source_name_part}}\".o");
|
| templates.push_back(""); // Test empty string.
|
|
|
| - FileTemplate t(templates);
|
| + FileTemplate t(setup.settings(), templates);
|
|
|
| std::ostringstream out;
|
| t.WriteWithNinjaExpansions(out);
|
| @@ -79,21 +83,64 @@ TEST(FileTemplate, NinjaExpansions) {
|
| }
|
|
|
| TEST(FileTemplate, NinjaVariables) {
|
| + TestWithScope setup;
|
| +
|
| std::vector<std::string> templates;
|
| templates.push_back("-i");
|
| templates.push_back("{{source}}");
|
| templates.push_back("--out=foo bar\"{{source_name_part}}\".o");
|
| + templates.push_back("{{source_file_part}}");
|
| + templates.push_back("{{source_dir}}");
|
| + templates.push_back("{{source_root_relative_dir}}");
|
| + templates.push_back("{{source_gen_dir}}");
|
| + templates.push_back("{{source_out_dir}}");
|
|
|
| - FileTemplate t(templates);
|
| + FileTemplate t(setup.settings(), templates);
|
|
|
| std::ostringstream out;
|
| EscapeOptions options;
|
| options.mode = ESCAPE_NINJA_COMMAND;
|
| - t.WriteNinjaVariablesForSubstitution(out, "../../foo/bar.txt", options);
|
| + t.WriteNinjaVariablesForSubstitution(out, setup.settings(),
|
| + SourceFile("//foo/bar.txt"), options);
|
|
|
| // Just the variables used above should be written.
|
| EXPECT_EQ(
|
| " source = ../../foo/bar.txt\n"
|
| - " source_name_part = bar\n",
|
| + " source_name_part = bar\n"
|
| + " source_file_part = bar.txt\n"
|
| + " source_dir = ../../foo\n"
|
| + " source_root_rel_dir = foo\n"
|
| + " source_gen_dir = gen/foo\n"
|
| + " source_out_dir = obj/foo\n",
|
| out.str());
|
| }
|
| +
|
| +// Tests in isolation different types of substitutions and that the right
|
| +// things are generated.
|
| +TEST(FileTemplate, Substitutions) {
|
| + TestWithScope setup;
|
| +
|
| + #define GetSubst(str, what) \
|
| + FileTemplate::GetSubstitution(setup.settings(), \
|
| + SourceFile(str), \
|
| + FileTemplate::Subrange::what)
|
| +
|
| + // Try all possible templates with a normal looking string.
|
| + EXPECT_EQ("../../foo/bar/baz.txt", GetSubst("//foo/bar/baz.txt", SOURCE));
|
| + EXPECT_EQ("baz", GetSubst("//foo/bar/baz.txt", NAME_PART));
|
| + EXPECT_EQ("baz.txt", GetSubst("//foo/bar/baz.txt", FILE_PART));
|
| + EXPECT_EQ("../../foo/bar", GetSubst("//foo/bar/baz.txt", SOURCE_DIR));
|
| + EXPECT_EQ("foo/bar", GetSubst("//foo/bar/baz.txt", ROOT_RELATIVE_DIR));
|
| + EXPECT_EQ("gen/foo/bar", GetSubst("//foo/bar/baz.txt", SOURCE_GEN_DIR));
|
| + EXPECT_EQ("obj/foo/bar", GetSubst("//foo/bar/baz.txt", SOURCE_OUT_DIR));
|
| +
|
| + // Operations on an absolute path.
|
| + EXPECT_EQ("/baz.txt", GetSubst("/baz.txt", SOURCE));
|
| + EXPECT_EQ("/.", GetSubst("/baz.txt", SOURCE_DIR));
|
| + EXPECT_EQ("gen", GetSubst("/baz.txt", SOURCE_GEN_DIR));
|
| + EXPECT_EQ("obj", GetSubst("/baz.txt", SOURCE_OUT_DIR));
|
| +
|
| + EXPECT_EQ(".", GetSubst("//baz.txt", ROOT_RELATIVE_DIR));
|
| +
|
| + #undef GetSubst
|
| +}
|
|
|