Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(25)

Side by Side Diff: tools/gn/substitution_writer_unittest.cc

Issue 2387763002: Support for source_target_relative expansion in GN (Closed)
Patch Set: Rebased Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « tools/gn/substitution_writer.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <sstream> 5 #include <sstream>
6 6
7 #include "build/build_config.h" 7 #include "build/build_config.h"
8 #include "testing/gtest/include/gtest/gtest.h" 8 #include "testing/gtest/include/gtest/gtest.h"
9 #include "tools/gn/err.h" 9 #include "tools/gn/err.h"
10 #include "tools/gn/escape.h" 10 #include "tools/gn/escape.h"
(...skipping 25 matching lines...) Expand all
36 36
37 TEST(SubstitutionWriter, ApplyPatternToSource) { 37 TEST(SubstitutionWriter, ApplyPatternToSource) {
38 TestWithScope setup; 38 TestWithScope setup;
39 39
40 SubstitutionPattern pattern; 40 SubstitutionPattern pattern;
41 Err err; 41 Err err;
42 ASSERT_TRUE(pattern.Parse("{{source_gen_dir}}/{{source_name_part}}.tmp", 42 ASSERT_TRUE(pattern.Parse("{{source_gen_dir}}/{{source_name_part}}.tmp",
43 nullptr, &err)); 43 nullptr, &err));
44 44
45 SourceFile result = SubstitutionWriter::ApplyPatternToSource( 45 SourceFile result = SubstitutionWriter::ApplyPatternToSource(
46 setup.settings(), pattern, SourceFile("//foo/bar/myfile.txt")); 46 nullptr, setup.settings(), pattern, SourceFile("//foo/bar/myfile.txt"));
47 ASSERT_EQ("//out/Debug/gen/foo/bar/myfile.tmp", result.value()); 47 ASSERT_EQ("//out/Debug/gen/foo/bar/myfile.tmp", result.value());
48 } 48 }
49 49
50 TEST(SubstitutionWriter, ApplyPatternToSourceAsOutputFile) { 50 TEST(SubstitutionWriter, ApplyPatternToSourceAsOutputFile) {
51 TestWithScope setup; 51 TestWithScope setup;
52 52
53 SubstitutionPattern pattern; 53 SubstitutionPattern pattern;
54 Err err; 54 Err err;
55 ASSERT_TRUE(pattern.Parse("{{source_gen_dir}}/{{source_name_part}}.tmp", 55 ASSERT_TRUE(pattern.Parse("{{source_gen_dir}}/{{source_name_part}}.tmp",
56 nullptr, &err)); 56 nullptr, &err));
57 57
58 OutputFile result = SubstitutionWriter::ApplyPatternToSourceAsOutputFile( 58 OutputFile result = SubstitutionWriter::ApplyPatternToSourceAsOutputFile(
59 setup.settings(), pattern, SourceFile("//foo/bar/myfile.txt")); 59 nullptr, setup.settings(), pattern, SourceFile("//foo/bar/myfile.txt"));
60 ASSERT_EQ("gen/foo/bar/myfile.tmp", result.value()); 60 ASSERT_EQ("gen/foo/bar/myfile.tmp", result.value());
61 } 61 }
62 62
63 TEST(SubstitutionWriter, WriteNinjaVariablesForSource) { 63 TEST(SubstitutionWriter, WriteNinjaVariablesForSource) {
64 TestWithScope setup; 64 TestWithScope setup;
65 65
66 std::vector<SubstitutionType> types; 66 std::vector<SubstitutionType> types;
67 types.push_back(SUBSTITUTION_SOURCE); 67 types.push_back(SUBSTITUTION_SOURCE);
68 types.push_back(SUBSTITUTION_SOURCE_NAME_PART); 68 types.push_back(SUBSTITUTION_SOURCE_NAME_PART);
69 types.push_back(SUBSTITUTION_SOURCE_DIR); 69 types.push_back(SUBSTITUTION_SOURCE_DIR);
70 70
71 EscapeOptions options; 71 EscapeOptions options;
72 options.mode = ESCAPE_NONE; 72 options.mode = ESCAPE_NONE;
73 73
74 std::ostringstream out; 74 std::ostringstream out;
75 SubstitutionWriter::WriteNinjaVariablesForSource( 75 SubstitutionWriter::WriteNinjaVariablesForSource(
76 setup.settings(), SourceFile("//foo/bar/baz.txt"), types, options, out); 76 nullptr, setup.settings(), SourceFile("//foo/bar/baz.txt"), types,
77 options, out);
77 78
78 // The "source" should be skipped since that will expand to $in which is 79 // The "source" should be skipped since that will expand to $in which is
79 // implicit. 80 // implicit.
80 EXPECT_EQ( 81 EXPECT_EQ(
81 " source_name_part = baz\n" 82 " source_name_part = baz\n"
82 " source_dir = ../../foo/bar\n", 83 " source_dir = ../../foo/bar\n",
83 out.str()); 84 out.str());
84 } 85 }
85 86
86 TEST(SubstitutionWriter, WriteWithNinjaVariables) { 87 TEST(SubstitutionWriter, WriteWithNinjaVariables) {
87 Err err; 88 Err err;
88 SubstitutionPattern pattern; 89 SubstitutionPattern pattern;
89 ASSERT_TRUE(pattern.Parse("-i {{source}} --out=bar\"{{source_name_part}}\".o", 90 ASSERT_TRUE(pattern.Parse("-i {{source}} --out=bar\"{{source_name_part}}\".o",
90 nullptr, &err)); 91 nullptr, &err));
91 EXPECT_FALSE(err.has_error()); 92 EXPECT_FALSE(err.has_error());
92 93
93 EscapeOptions options; 94 EscapeOptions options;
94 options.mode = ESCAPE_NONE; 95 options.mode = ESCAPE_NONE;
95 96
96 std::ostringstream out; 97 std::ostringstream out;
97 SubstitutionWriter::WriteWithNinjaVariables(pattern, options, out); 98 SubstitutionWriter::WriteWithNinjaVariables(pattern, options, out);
98 99
99 EXPECT_EQ( 100 EXPECT_EQ(
100 "-i ${in} --out=bar\"${source_name_part}\".o", 101 "-i ${in} --out=bar\"${source_name_part}\".o",
101 out.str()); 102 out.str());
102 } 103 }
103 104
104 TEST(SubstitutionWriter, SourceSubstitutions) { 105 TEST(SubstitutionWriter, SourceSubstitutions) {
105 TestWithScope setup; 106 TestWithScope setup;
107 Err err;
108
109 Target target(setup.settings(), Label(SourceDir("//foo/bar/"), "baz"));
110 target.set_output_type(Target::STATIC_LIBRARY);
111 target.SetToolchain(setup.toolchain());
112 ASSERT_TRUE(target.OnResolved(&err));
106 113
107 // Call to get substitutions relative to the build dir. 114 // Call to get substitutions relative to the build dir.
108 #define GetRelSubst(str, what) \ 115 #define GetRelSubst(str, what) \
109 SubstitutionWriter::GetSourceSubstitution( \ 116 SubstitutionWriter::GetSourceSubstitution( \
117 &target, \
110 setup.settings(), \ 118 setup.settings(), \
111 SourceFile(str), \ 119 SourceFile(str), \
112 what, \ 120 what, \
113 SubstitutionWriter::OUTPUT_RELATIVE, \ 121 SubstitutionWriter::OUTPUT_RELATIVE, \
114 setup.settings()->build_settings()->build_dir()) 122 setup.settings()->build_settings()->build_dir())
115 123
116 // Call to get absolute directory substitutions. 124 // Call to get absolute directory substitutions.
117 #define GetAbsSubst(str, what) \ 125 #define GetAbsSubst(str, what) \
118 SubstitutionWriter::GetSourceSubstitution( \ 126 SubstitutionWriter::GetSourceSubstitution( \
127 &target, \
119 setup.settings(), \ 128 setup.settings(), \
120 SourceFile(str), \ 129 SourceFile(str), \
121 what, \ 130 what, \
122 SubstitutionWriter::OUTPUT_ABSOLUTE, \ 131 SubstitutionWriter::OUTPUT_ABSOLUTE, \
123 SourceDir()) 132 SourceDir())
124 133
125 // Try all possible templates with a normal looking string. 134 // Try all possible templates with a normal looking string.
126 EXPECT_EQ("../../foo/bar/baz.txt", 135 EXPECT_EQ("../../foo/bar/baz.txt",
127 GetRelSubst("//foo/bar/baz.txt", SUBSTITUTION_SOURCE)); 136 GetRelSubst("//foo/bar/baz.txt", SUBSTITUTION_SOURCE));
128 EXPECT_EQ("//foo/bar/baz.txt", 137 EXPECT_EQ("//foo/bar/baz.txt",
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 #if defined(OS_WIN) 177 #if defined(OS_WIN)
169 EXPECT_EQ("gen/ABS_PATH/C", 178 EXPECT_EQ("gen/ABS_PATH/C",
170 GetRelSubst("/C:/baz.txt", SUBSTITUTION_SOURCE_GEN_DIR)); 179 GetRelSubst("/C:/baz.txt", SUBSTITUTION_SOURCE_GEN_DIR));
171 EXPECT_EQ("obj/ABS_PATH/C", 180 EXPECT_EQ("obj/ABS_PATH/C",
172 GetRelSubst("/C:/baz.txt", SUBSTITUTION_SOURCE_OUT_DIR)); 181 GetRelSubst("/C:/baz.txt", SUBSTITUTION_SOURCE_OUT_DIR));
173 #endif 182 #endif
174 183
175 EXPECT_EQ(".", 184 EXPECT_EQ(".",
176 GetRelSubst("//baz.txt", SUBSTITUTION_SOURCE_ROOT_RELATIVE_DIR)); 185 GetRelSubst("//baz.txt", SUBSTITUTION_SOURCE_ROOT_RELATIVE_DIR));
177 186
187 EXPECT_EQ("baz.txt",
188 GetRelSubst("//foo/bar/baz.txt", SUBSTITUTION_SOURCE_TARGET_RELATIVE));
189 EXPECT_EQ("baz.txt",
190 GetAbsSubst("//foo/bar/baz.txt", SUBSTITUTION_SOURCE_TARGET_RELATIVE));
191
178 #undef GetAbsSubst 192 #undef GetAbsSubst
179 #undef GetRelSubst 193 #undef GetRelSubst
180 } 194 }
181 195
182 TEST(SubstitutionWriter, TargetSubstitutions) { 196 TEST(SubstitutionWriter, TargetSubstitutions) {
183 TestWithScope setup; 197 TestWithScope setup;
184 Err err; 198 Err err;
185 199
186 Target target(setup.settings(), Label(SourceDir("//foo/bar/"), "baz")); 200 Target target(setup.settings(), Label(SourceDir("//foo/bar/"), "baz"));
187 target.set_output_type(Target::STATIC_LIBRARY); 201 target.set_output_type(Target::STATIC_LIBRARY);
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 EXPECT_EQ("./baz.exe", 328 EXPECT_EQ("./baz.exe",
315 SubstitutionWriter::ApplyPatternToLinkerAsOutputFile( 329 SubstitutionWriter::ApplyPatternToLinkerAsOutputFile(
316 &target, &tool, output_name).value()); 330 &target, &tool, output_name).value());
317 331
318 // Override the output name to a new subdirectory. 332 // Override the output name to a new subdirectory.
319 target.set_output_dir(SourceDir("//out/Debug/foo/bar")); 333 target.set_output_dir(SourceDir("//out/Debug/foo/bar"));
320 EXPECT_EQ("foo/bar/baz.exe", 334 EXPECT_EQ("foo/bar/baz.exe",
321 SubstitutionWriter::ApplyPatternToLinkerAsOutputFile( 335 SubstitutionWriter::ApplyPatternToLinkerAsOutputFile(
322 &target, &tool, output_name).value()); 336 &target, &tool, output_name).value());
323 } 337 }
OLDNEW
« no previous file with comments | « tools/gn/substitution_writer.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698