| OLD | NEW |
| 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 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 99 | 99 |
| 100 EXPECT_EQ( | 100 EXPECT_EQ( |
| 101 "-i ${in} --out=bar\"${source_name_part}\".o", | 101 "-i ${in} --out=bar\"${source_name_part}\".o", |
| 102 out.str()); | 102 out.str()); |
| 103 } | 103 } |
| 104 | 104 |
| 105 TEST(SubstitutionWriter, SourceSubstitutions) { | 105 TEST(SubstitutionWriter, SourceSubstitutions) { |
| 106 TestWithScope setup; | 106 TestWithScope setup; |
| 107 Err err; | 107 Err err; |
| 108 | 108 |
| 109 Target target(setup.settings(), Label(SourceDir("//foo/bar/"), "baz")); | 109 Target target(setup.settings(), Label(SourceDir("//foo/bar/"), "baz"), {}); |
| 110 target.set_output_type(Target::STATIC_LIBRARY); | 110 target.set_output_type(Target::STATIC_LIBRARY); |
| 111 target.SetToolchain(setup.toolchain()); | 111 target.SetToolchain(setup.toolchain()); |
| 112 ASSERT_TRUE(target.OnResolved(&err)); | 112 ASSERT_TRUE(target.OnResolved(&err)); |
| 113 | 113 |
| 114 // Call to get substitutions relative to the build dir. | 114 // Call to get substitutions relative to the build dir. |
| 115 #define GetRelSubst(str, what) \ | 115 #define GetRelSubst(str, what) \ |
| 116 SubstitutionWriter::GetSourceSubstitution( \ | 116 SubstitutionWriter::GetSourceSubstitution( \ |
| 117 &target, \ | 117 &target, \ |
| 118 setup.settings(), \ | 118 setup.settings(), \ |
| 119 SourceFile(str), \ | 119 SourceFile(str), \ |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 190 GetAbsSubst("//foo/bar/baz.txt", SUBSTITUTION_SOURCE_TARGET_RELATIVE)); | 190 GetAbsSubst("//foo/bar/baz.txt", SUBSTITUTION_SOURCE_TARGET_RELATIVE)); |
| 191 | 191 |
| 192 #undef GetAbsSubst | 192 #undef GetAbsSubst |
| 193 #undef GetRelSubst | 193 #undef GetRelSubst |
| 194 } | 194 } |
| 195 | 195 |
| 196 TEST(SubstitutionWriter, TargetSubstitutions) { | 196 TEST(SubstitutionWriter, TargetSubstitutions) { |
| 197 TestWithScope setup; | 197 TestWithScope setup; |
| 198 Err err; | 198 Err err; |
| 199 | 199 |
| 200 Target target(setup.settings(), Label(SourceDir("//foo/bar/"), "baz")); | 200 Target target(setup.settings(), Label(SourceDir("//foo/bar/"), "baz"), {}); |
| 201 target.set_output_type(Target::STATIC_LIBRARY); | 201 target.set_output_type(Target::STATIC_LIBRARY); |
| 202 target.SetToolchain(setup.toolchain()); | 202 target.SetToolchain(setup.toolchain()); |
| 203 ASSERT_TRUE(target.OnResolved(&err)); | 203 ASSERT_TRUE(target.OnResolved(&err)); |
| 204 | 204 |
| 205 std::string result; | 205 std::string result; |
| 206 EXPECT_TRUE(SubstitutionWriter::GetTargetSubstitution( | 206 EXPECT_TRUE(SubstitutionWriter::GetTargetSubstitution( |
| 207 &target, SUBSTITUTION_LABEL, &result)); | 207 &target, SUBSTITUTION_LABEL, &result)); |
| 208 EXPECT_EQ("//foo/bar:baz", result); | 208 EXPECT_EQ("//foo/bar:baz", result); |
| 209 | 209 |
| 210 EXPECT_TRUE(SubstitutionWriter::GetTargetSubstitution( | 210 EXPECT_TRUE(SubstitutionWriter::GetTargetSubstitution( |
| (...skipping 18 matching lines...) Expand all Loading... |
| 229 | 229 |
| 230 EXPECT_TRUE(SubstitutionWriter::GetTargetSubstitution( | 230 EXPECT_TRUE(SubstitutionWriter::GetTargetSubstitution( |
| 231 &target, SUBSTITUTION_TARGET_OUTPUT_NAME, &result)); | 231 &target, SUBSTITUTION_TARGET_OUTPUT_NAME, &result)); |
| 232 EXPECT_EQ("libbaz", result); | 232 EXPECT_EQ("libbaz", result); |
| 233 } | 233 } |
| 234 | 234 |
| 235 TEST(SubstitutionWriter, CompilerSubstitutions) { | 235 TEST(SubstitutionWriter, CompilerSubstitutions) { |
| 236 TestWithScope setup; | 236 TestWithScope setup; |
| 237 Err err; | 237 Err err; |
| 238 | 238 |
| 239 Target target(setup.settings(), Label(SourceDir("//foo/bar/"), "baz")); | 239 Target target(setup.settings(), Label(SourceDir("//foo/bar/"), "baz"), {}); |
| 240 target.set_output_type(Target::STATIC_LIBRARY); | 240 target.set_output_type(Target::STATIC_LIBRARY); |
| 241 target.SetToolchain(setup.toolchain()); | 241 target.SetToolchain(setup.toolchain()); |
| 242 ASSERT_TRUE(target.OnResolved(&err)); | 242 ASSERT_TRUE(target.OnResolved(&err)); |
| 243 | 243 |
| 244 // The compiler substitution is just source + target combined. So test one | 244 // The compiler substitution is just source + target combined. So test one |
| 245 // of each of those classes of things to make sure this is hooked up. | 245 // of each of those classes of things to make sure this is hooked up. |
| 246 EXPECT_EQ("file", | 246 EXPECT_EQ("file", |
| 247 SubstitutionWriter::GetCompilerSubstitution( | 247 SubstitutionWriter::GetCompilerSubstitution( |
| 248 &target, SourceFile("//foo/bar/file.txt"), | 248 &target, SourceFile("//foo/bar/file.txt"), |
| 249 SUBSTITUTION_SOURCE_NAME_PART)); | 249 SUBSTITUTION_SOURCE_NAME_PART)); |
| 250 EXPECT_EQ("gen/foo/bar", | 250 EXPECT_EQ("gen/foo/bar", |
| 251 SubstitutionWriter::GetCompilerSubstitution( | 251 SubstitutionWriter::GetCompilerSubstitution( |
| 252 &target, SourceFile("//foo/bar/file.txt"), | 252 &target, SourceFile("//foo/bar/file.txt"), |
| 253 SUBSTITUTION_TARGET_GEN_DIR)); | 253 SUBSTITUTION_TARGET_GEN_DIR)); |
| 254 } | 254 } |
| 255 | 255 |
| 256 TEST(SubstitutionWriter, LinkerSubstitutions) { | 256 TEST(SubstitutionWriter, LinkerSubstitutions) { |
| 257 TestWithScope setup; | 257 TestWithScope setup; |
| 258 Err err; | 258 Err err; |
| 259 | 259 |
| 260 Target target(setup.settings(), Label(SourceDir("//foo/bar/"), "baz")); | 260 Target target(setup.settings(), Label(SourceDir("//foo/bar/"), "baz"), {}); |
| 261 target.set_output_type(Target::SHARED_LIBRARY); | 261 target.set_output_type(Target::SHARED_LIBRARY); |
| 262 target.SetToolchain(setup.toolchain()); | 262 target.SetToolchain(setup.toolchain()); |
| 263 ASSERT_TRUE(target.OnResolved(&err)); | 263 ASSERT_TRUE(target.OnResolved(&err)); |
| 264 | 264 |
| 265 const Tool* tool = setup.toolchain()->GetToolForTargetFinalOutput(&target); | 265 const Tool* tool = setup.toolchain()->GetToolForTargetFinalOutput(&target); |
| 266 | 266 |
| 267 // The compiler substitution is just target + OUTPUT_EXTENSION combined. So | 267 // The compiler substitution is just target + OUTPUT_EXTENSION combined. So |
| 268 // test one target one plus the output extension. | 268 // test one target one plus the output extension. |
| 269 EXPECT_EQ(".so", | 269 EXPECT_EQ(".so", |
| 270 SubstitutionWriter::GetLinkerSubstitution( | 270 SubstitutionWriter::GetLinkerSubstitution( |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 303 // This tool has an output directory pattern and uses that for the | 303 // This tool has an output directory pattern and uses that for the |
| 304 // output name. | 304 // output name. |
| 305 Tool tool; | 305 Tool tool; |
| 306 SubstitutionPattern out_dir_pattern; | 306 SubstitutionPattern out_dir_pattern; |
| 307 ASSERT_TRUE(out_dir_pattern.Parse("{{root_out_dir}}/{{target_output_name}}", | 307 ASSERT_TRUE(out_dir_pattern.Parse("{{root_out_dir}}/{{target_output_name}}", |
| 308 nullptr, &err)); | 308 nullptr, &err)); |
| 309 tool.set_default_output_dir(out_dir_pattern); | 309 tool.set_default_output_dir(out_dir_pattern); |
| 310 tool.SetComplete(); | 310 tool.SetComplete(); |
| 311 | 311 |
| 312 // Default target with no output dir overrides. | 312 // Default target with no output dir overrides. |
| 313 Target target(setup.settings(), Label(SourceDir("//foo/"), "baz")); | 313 Target target(setup.settings(), Label(SourceDir("//foo/"), "baz"), {}); |
| 314 target.set_output_type(Target::EXECUTABLE); | 314 target.set_output_type(Target::EXECUTABLE); |
| 315 target.SetToolchain(setup.toolchain()); | 315 target.SetToolchain(setup.toolchain()); |
| 316 ASSERT_TRUE(target.OnResolved(&err)); | 316 ASSERT_TRUE(target.OnResolved(&err)); |
| 317 | 317 |
| 318 // The output should expand the default from the patterns in the tool. | 318 // The output should expand the default from the patterns in the tool. |
| 319 SubstitutionPattern output_name; | 319 SubstitutionPattern output_name; |
| 320 ASSERT_TRUE(output_name.Parse("{{output_dir}}/{{target_output_name}}.exe", | 320 ASSERT_TRUE(output_name.Parse("{{output_dir}}/{{target_output_name}}.exe", |
| 321 nullptr, &err)); | 321 nullptr, &err)); |
| 322 EXPECT_EQ("./baz/baz.exe", | 322 EXPECT_EQ("./baz/baz.exe", |
| 323 SubstitutionWriter::ApplyPatternToLinkerAsOutputFile( | 323 SubstitutionWriter::ApplyPatternToLinkerAsOutputFile( |
| 324 &target, &tool, output_name).value()); | 324 &target, &tool, output_name).value()); |
| 325 | 325 |
| 326 // Override the output name to the root build dir. | 326 // Override the output name to the root build dir. |
| 327 target.set_output_dir(SourceDir("//out/Debug/")); | 327 target.set_output_dir(SourceDir("//out/Debug/")); |
| 328 EXPECT_EQ("./baz.exe", | 328 EXPECT_EQ("./baz.exe", |
| 329 SubstitutionWriter::ApplyPatternToLinkerAsOutputFile( | 329 SubstitutionWriter::ApplyPatternToLinkerAsOutputFile( |
| 330 &target, &tool, output_name).value()); | 330 &target, &tool, output_name).value()); |
| 331 | 331 |
| 332 // Override the output name to a new subdirectory. | 332 // Override the output name to a new subdirectory. |
| 333 target.set_output_dir(SourceDir("//out/Debug/foo/bar")); | 333 target.set_output_dir(SourceDir("//out/Debug/foo/bar")); |
| 334 EXPECT_EQ("foo/bar/baz.exe", | 334 EXPECT_EQ("foo/bar/baz.exe", |
| 335 SubstitutionWriter::ApplyPatternToLinkerAsOutputFile( | 335 SubstitutionWriter::ApplyPatternToLinkerAsOutputFile( |
| 336 &target, &tool, output_name).value()); | 336 &target, &tool, output_name).value()); |
| 337 } | 337 } |
| OLD | NEW |