diff options
Diffstat (limited to 'tools/gn/file_template_unittest.cc')
-rw-r--r-- | tools/gn/file_template_unittest.cc | 79 |
1 files changed, 63 insertions, 16 deletions
diff --git a/tools/gn/file_template_unittest.cc b/tools/gn/file_template_unittest.cc index 8e3bf40..d10791e 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 +} |