OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 "base/strings/string_util.h" | 5 #include "base/strings/string_util.h" |
6 #include "base/strings/utf_string_conversions.h" | 6 #include "base/strings/utf_string_conversions.h" |
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/filesystem_utils.h" | 9 #include "tools/gn/filesystem_utils.h" |
| 10 #include "tools/gn/target.h" |
10 | 11 |
11 TEST(FilesystemUtils, FileExtensionOffset) { | 12 TEST(FilesystemUtils, FileExtensionOffset) { |
12 EXPECT_EQ(std::string::npos, FindExtensionOffset("")); | 13 EXPECT_EQ(std::string::npos, FindExtensionOffset("")); |
13 EXPECT_EQ(std::string::npos, FindExtensionOffset("foo/bar/baz")); | 14 EXPECT_EQ(std::string::npos, FindExtensionOffset("foo/bar/baz")); |
14 EXPECT_EQ(4u, FindExtensionOffset("foo.")); | 15 EXPECT_EQ(4u, FindExtensionOffset("foo.")); |
15 EXPECT_EQ(4u, FindExtensionOffset("f.o.bar")); | 16 EXPECT_EQ(4u, FindExtensionOffset("f.o.bar")); |
16 EXPECT_EQ(std::string::npos, FindExtensionOffset("foo.bar/")); | 17 EXPECT_EQ(std::string::npos, FindExtensionOffset("foo.bar/")); |
17 EXPECT_EQ(std::string::npos, FindExtensionOffset("foo.bar/baz")); | 18 EXPECT_EQ(std::string::npos, FindExtensionOffset("foo.bar/baz")); |
18 } | 19 } |
19 | 20 |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
88 | 89 |
89 SourceDir regular2("//foo/bar/"); | 90 SourceDir regular2("//foo/bar/"); |
90 EXPECT_EQ("bar", FindLastDirComponent(regular2)); | 91 EXPECT_EQ("bar", FindLastDirComponent(regular2)); |
91 } | 92 } |
92 | 93 |
93 TEST(FilesystemUtils, EnsureStringIsInOutputDir) { | 94 TEST(FilesystemUtils, EnsureStringIsInOutputDir) { |
94 SourceDir output_dir("//out/Debug/"); | 95 SourceDir output_dir("//out/Debug/"); |
95 | 96 |
96 // Some outside. | 97 // Some outside. |
97 Err err; | 98 Err err; |
98 EXPECT_FALSE(EnsureStringIsInOutputDir(output_dir, "//foo", Value(), &err)); | 99 EXPECT_FALSE(EnsureStringIsInOutputDir(output_dir, "//foo", NULL, &err)); |
99 EXPECT_TRUE(err.has_error()); | 100 EXPECT_TRUE(err.has_error()); |
100 err = Err(); | 101 err = Err(); |
101 EXPECT_FALSE(EnsureStringIsInOutputDir(output_dir, "//out/Debugit", Value(), | 102 EXPECT_FALSE(EnsureStringIsInOutputDir(output_dir, "//out/Debugit", NULL, |
102 &err)); | 103 &err)); |
103 EXPECT_TRUE(err.has_error()); | 104 EXPECT_TRUE(err.has_error()); |
104 | 105 |
105 // Some inside. | 106 // Some inside. |
106 err = Err(); | 107 err = Err(); |
107 EXPECT_TRUE(EnsureStringIsInOutputDir(output_dir, "//out/Debug/", Value(), | 108 EXPECT_TRUE(EnsureStringIsInOutputDir(output_dir, "//out/Debug/", NULL, |
108 &err)); | 109 &err)); |
109 EXPECT_FALSE(err.has_error()); | 110 EXPECT_FALSE(err.has_error()); |
110 EXPECT_TRUE(EnsureStringIsInOutputDir(output_dir, "//out/Debug/foo", Value(), | 111 EXPECT_TRUE(EnsureStringIsInOutputDir(output_dir, "//out/Debug/foo", NULL, |
111 &err)); | 112 &err)); |
112 EXPECT_FALSE(err.has_error()); | 113 EXPECT_FALSE(err.has_error()); |
113 | 114 |
114 // Pattern but no template expansions are allowed. | 115 // Pattern but no template expansions are allowed. |
115 EXPECT_FALSE(EnsureStringIsInOutputDir(output_dir, "{{source_gen_dir}}", | 116 EXPECT_FALSE(EnsureStringIsInOutputDir(output_dir, "{{source_gen_dir}}", |
116 Value(), &err)); | 117 NULL, &err)); |
117 EXPECT_TRUE(err.has_error()); | 118 EXPECT_TRUE(err.has_error()); |
118 } | 119 } |
119 | 120 |
120 TEST(FilesystemUtils, IsPathAbsolute) { | 121 TEST(FilesystemUtils, IsPathAbsolute) { |
121 EXPECT_TRUE(IsPathAbsolute("/foo/bar")); | 122 EXPECT_TRUE(IsPathAbsolute("/foo/bar")); |
122 EXPECT_TRUE(IsPathAbsolute("/")); | 123 EXPECT_TRUE(IsPathAbsolute("/")); |
123 EXPECT_FALSE(IsPathAbsolute("")); | 124 EXPECT_FALSE(IsPathAbsolute("")); |
124 EXPECT_FALSE(IsPathAbsolute("//")); | 125 EXPECT_FALSE(IsPathAbsolute("//")); |
125 EXPECT_FALSE(IsPathAbsolute("//foo/bar")); | 126 EXPECT_FALSE(IsPathAbsolute("//foo/bar")); |
126 | 127 |
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
350 // Should be case-sensitive. | 351 // Should be case-sensitive. |
351 EXPECT_EQ("/SOURCE/foo/bar/", SourceDirForPath(root, | 352 EXPECT_EQ("/SOURCE/foo/bar/", SourceDirForPath(root, |
352 base::FilePath("/SOURCE/foo/bar/")).value()); | 353 base::FilePath("/SOURCE/foo/bar/")).value()); |
353 #endif | 354 #endif |
354 } | 355 } |
355 | 356 |
356 TEST(FilesystemUtils, GetToolchainDirs) { | 357 TEST(FilesystemUtils, GetToolchainDirs) { |
357 BuildSettings build_settings; | 358 BuildSettings build_settings; |
358 build_settings.SetBuildDir(SourceDir("//out/Debug/")); | 359 build_settings.SetBuildDir(SourceDir("//out/Debug/")); |
359 | 360 |
| 361 // The default toolchain. |
360 Settings default_settings(&build_settings, ""); | 362 Settings default_settings(&build_settings, ""); |
| 363 Label default_toolchain_label(SourceDir("//toolchain/"), "default"); |
| 364 default_settings.set_toolchain_label(default_toolchain_label); |
| 365 default_settings.set_default_toolchain_label(default_toolchain_label); |
| 366 |
| 367 // Default toolchain out dir. |
361 EXPECT_EQ("//out/Debug/", | 368 EXPECT_EQ("//out/Debug/", |
362 GetToolchainOutputDir(&default_settings).value()); | 369 GetToolchainOutputDir(&default_settings).value()); |
| 370 EXPECT_EQ("//out/Debug/", |
| 371 GetToolchainOutputDir(&build_settings, default_toolchain_label, |
| 372 true).value()); |
| 373 |
| 374 // Default toolchain gen dir. |
363 EXPECT_EQ("//out/Debug/gen/", | 375 EXPECT_EQ("//out/Debug/gen/", |
364 GetToolchainGenDir(&default_settings).value()); | 376 GetToolchainGenDir(&default_settings).value()); |
| 377 EXPECT_EQ("gen/", |
| 378 GetToolchainGenDirAsOutputFile(&default_settings).value()); |
| 379 EXPECT_EQ("//out/Debug/gen/", |
| 380 GetToolchainGenDir(&build_settings, default_toolchain_label, |
| 381 true).value()); |
365 | 382 |
| 383 // Check a secondary toolchain. |
366 Settings other_settings(&build_settings, "two/"); | 384 Settings other_settings(&build_settings, "two/"); |
| 385 Label other_toolchain_label(SourceDir("//toolchain/"), "two"); |
| 386 default_settings.set_toolchain_label(other_toolchain_label); |
| 387 default_settings.set_default_toolchain_label(default_toolchain_label); |
| 388 |
| 389 // Secondary toolchain out dir. |
367 EXPECT_EQ("//out/Debug/two/", | 390 EXPECT_EQ("//out/Debug/two/", |
368 GetToolchainOutputDir(&other_settings).value()); | 391 GetToolchainOutputDir(&other_settings).value()); |
| 392 EXPECT_EQ("//out/Debug/two/", |
| 393 GetToolchainOutputDir(&build_settings, other_toolchain_label, |
| 394 false).value()); |
| 395 |
| 396 // Secondary toolchain gen dir. |
369 EXPECT_EQ("//out/Debug/two/gen/", | 397 EXPECT_EQ("//out/Debug/two/gen/", |
370 GetToolchainGenDir(&other_settings).value()); | 398 GetToolchainGenDir(&other_settings).value()); |
| 399 EXPECT_EQ("two/gen/", |
| 400 GetToolchainGenDirAsOutputFile(&other_settings).value()); |
| 401 EXPECT_EQ("//out/Debug/two/gen/", |
| 402 GetToolchainGenDir(&build_settings, other_toolchain_label, |
| 403 false).value()); |
371 } | 404 } |
372 | 405 |
373 TEST(FilesystemUtils, GetOutDirForSourceDir) { | 406 TEST(FilesystemUtils, GetOutDirForSourceDir) { |
374 BuildSettings build_settings; | 407 BuildSettings build_settings; |
375 build_settings.SetBuildDir(SourceDir("//out/Debug/")); | 408 build_settings.SetBuildDir(SourceDir("//out/Debug/")); |
376 | 409 |
377 // Test the default toolchain. | 410 // Test the default toolchain. |
378 Settings default_settings(&build_settings, ""); | 411 Settings default_settings(&build_settings, ""); |
379 EXPECT_EQ("//out/Debug/obj/", | 412 EXPECT_EQ("//out/Debug/obj/", |
380 GetOutputDirForSourceDir(&default_settings, | 413 GetOutputDirForSourceDir( |
381 SourceDir("//")).value()); | 414 &default_settings, SourceDir("//")).value()); |
| 415 EXPECT_EQ("obj/", |
| 416 GetOutputDirForSourceDirAsOutputFile( |
| 417 &default_settings, SourceDir("//")).value()); |
| 418 |
382 EXPECT_EQ("//out/Debug/obj/foo/bar/", | 419 EXPECT_EQ("//out/Debug/obj/foo/bar/", |
383 GetOutputDirForSourceDir(&default_settings, | 420 GetOutputDirForSourceDir( |
384 SourceDir("//foo/bar/")).value()); | 421 &default_settings, SourceDir("//foo/bar/")).value()); |
| 422 EXPECT_EQ("obj/foo/bar/", |
| 423 GetOutputDirForSourceDirAsOutputFile( |
| 424 &default_settings, SourceDir("//foo/bar/")).value()); |
385 | 425 |
386 // Secondary toolchain. | 426 // Secondary toolchain. |
387 Settings other_settings(&build_settings, "two/"); | 427 Settings other_settings(&build_settings, "two/"); |
388 EXPECT_EQ("//out/Debug/two/obj/", | 428 EXPECT_EQ("//out/Debug/two/obj/", |
389 GetOutputDirForSourceDir(&other_settings, SourceDir("//")).value()); | 429 GetOutputDirForSourceDir( |
| 430 &other_settings, SourceDir("//")).value()); |
| 431 EXPECT_EQ("two/obj/", |
| 432 GetOutputDirForSourceDirAsOutputFile( |
| 433 &other_settings, SourceDir("//")).value()); |
| 434 |
390 EXPECT_EQ("//out/Debug/two/obj/foo/bar/", | 435 EXPECT_EQ("//out/Debug/two/obj/foo/bar/", |
391 GetOutputDirForSourceDir(&other_settings, | 436 GetOutputDirForSourceDir(&other_settings, |
392 SourceDir("//foo/bar/")).value()); | 437 SourceDir("//foo/bar/")).value()); |
| 438 EXPECT_EQ("two/obj/foo/bar/", |
| 439 GetOutputDirForSourceDirAsOutputFile( |
| 440 &other_settings, SourceDir("//foo/bar/")).value()); |
393 } | 441 } |
394 | 442 |
395 TEST(FilesystemUtils, GetGenDirForSourceDir) { | 443 TEST(FilesystemUtils, GetGenDirForSourceDir) { |
396 BuildSettings build_settings; | 444 BuildSettings build_settings; |
397 build_settings.SetBuildDir(SourceDir("//out/Debug/")); | 445 build_settings.SetBuildDir(SourceDir("//out/Debug/")); |
398 | 446 |
399 // Test the default toolchain. | 447 // Test the default toolchain. |
400 Settings default_settings(&build_settings, ""); | 448 Settings default_settings(&build_settings, ""); |
401 EXPECT_EQ("//out/Debug/gen/", | 449 EXPECT_EQ("//out/Debug/gen/", |
402 GetGenDirForSourceDir(&default_settings, SourceDir("//")).value()); | 450 GetGenDirForSourceDir( |
| 451 &default_settings, SourceDir("//")).value()); |
| 452 EXPECT_EQ("gen/", |
| 453 GetGenDirForSourceDirAsOutputFile( |
| 454 &default_settings, SourceDir("//")).value()); |
| 455 |
403 EXPECT_EQ("//out/Debug/gen/foo/bar/", | 456 EXPECT_EQ("//out/Debug/gen/foo/bar/", |
404 GetGenDirForSourceDir(&default_settings, | 457 GetGenDirForSourceDir( |
405 SourceDir("//foo/bar/")).value()); | 458 &default_settings, SourceDir("//foo/bar/")).value()); |
| 459 EXPECT_EQ("gen/foo/bar/", |
| 460 GetGenDirForSourceDirAsOutputFile( |
| 461 &default_settings, SourceDir("//foo/bar/")).value()); |
406 | 462 |
407 // Secondary toolchain. | 463 // Secondary toolchain. |
408 Settings other_settings(&build_settings, "two/"); | 464 Settings other_settings(&build_settings, "two/"); |
409 EXPECT_EQ("//out/Debug/two/gen/", | 465 EXPECT_EQ("//out/Debug/two/gen/", |
410 GetGenDirForSourceDir(&other_settings, SourceDir("//")).value()); | 466 GetGenDirForSourceDir( |
| 467 &other_settings, SourceDir("//")).value()); |
| 468 EXPECT_EQ("two/gen/", |
| 469 GetGenDirForSourceDirAsOutputFile( |
| 470 &other_settings, SourceDir("//")).value()); |
| 471 |
411 EXPECT_EQ("//out/Debug/two/gen/foo/bar/", | 472 EXPECT_EQ("//out/Debug/two/gen/foo/bar/", |
412 GetGenDirForSourceDir(&other_settings, | 473 GetGenDirForSourceDir( |
413 SourceDir("//foo/bar/")).value()); | 474 &other_settings, SourceDir("//foo/bar/")).value()); |
| 475 EXPECT_EQ("two/gen/foo/bar/", |
| 476 GetGenDirForSourceDirAsOutputFile( |
| 477 &other_settings, SourceDir("//foo/bar/")).value()); |
| 478 } |
| 479 |
| 480 TEST(FilesystemUtils, GetTargetDirs) { |
| 481 BuildSettings build_settings; |
| 482 build_settings.SetBuildDir(SourceDir("//out/Debug/")); |
| 483 Settings settings(&build_settings, ""); |
| 484 |
| 485 Target a(&settings, Label(SourceDir("//foo/bar/"), "baz")); |
| 486 EXPECT_EQ("//out/Debug/obj/foo/bar/", GetTargetOutputDir(&a).value()); |
| 487 EXPECT_EQ("obj/foo/bar/", GetTargetOutputDirAsOutputFile(&a).value()); |
| 488 EXPECT_EQ("//out/Debug/gen/foo/bar/", GetTargetGenDir(&a).value()); |
| 489 EXPECT_EQ("gen/foo/bar/", GetTargetGenDirAsOutputFile(&a).value()); |
414 } | 490 } |
415 | 491 |
416 // Tests handling of output dirs when build dir is the same as the root. | 492 // Tests handling of output dirs when build dir is the same as the root. |
417 TEST(FilesystemUtils, GetDirForEmptyBuildDir) { | 493 TEST(FilesystemUtils, GetDirForEmptyBuildDir) { |
418 BuildSettings build_settings; | 494 BuildSettings build_settings; |
419 build_settings.SetBuildDir(SourceDir("//")); | 495 build_settings.SetBuildDir(SourceDir("//")); |
420 Settings settings(&build_settings, ""); | 496 Settings settings(&build_settings, ""); |
421 | 497 |
422 EXPECT_EQ("//", GetToolchainOutputDir(&settings).value()); | 498 EXPECT_EQ("//", GetToolchainOutputDir(&settings).value()); |
423 EXPECT_EQ("//gen/", GetToolchainGenDir(&settings).value()); | 499 EXPECT_EQ("//gen/", GetToolchainGenDir(&settings).value()); |
| 500 EXPECT_EQ("gen/", GetToolchainGenDirAsOutputFile(&settings).value()); |
424 EXPECT_EQ("//obj/", | 501 EXPECT_EQ("//obj/", |
425 GetOutputDirForSourceDir(&settings, SourceDir("//")).value()); | 502 GetOutputDirForSourceDir(&settings, SourceDir("//")).value()); |
426 EXPECT_EQ("//gen/", | 503 EXPECT_EQ("obj/", |
427 GetGenDirForSourceDir(&settings, SourceDir("//")).value()); | 504 GetOutputDirForSourceDirAsOutputFile( |
| 505 &settings, SourceDir("//")).value()); |
| 506 EXPECT_EQ("gen/", |
| 507 GetGenDirForSourceDirAsOutputFile( |
| 508 &settings, SourceDir("//")).value()); |
428 } | 509 } |
OLD | NEW |