| 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/files/file_path.h" | 5 #include "base/files/file_path.h" |
| 6 #include "base/files/file_util.h" | 6 #include "base/files/file_util.h" |
| 7 #include "base/files/scoped_temp_dir.h" | 7 #include "base/files/scoped_temp_dir.h" |
| 8 #include "base/strings/string_util.h" | 8 #include "base/strings/string_util.h" |
| 9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
| 10 #include "base/threading/platform_thread.h" | 10 #include "base/threading/platform_thread.h" |
| (...skipping 620 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 631 | 631 |
| 632 TEST(FilesystemUtils, GetToolchainDirs) { | 632 TEST(FilesystemUtils, GetToolchainDirs) { |
| 633 BuildSettings build_settings; | 633 BuildSettings build_settings; |
| 634 build_settings.SetBuildDir(SourceDir("//out/Debug/")); | 634 build_settings.SetBuildDir(SourceDir("//out/Debug/")); |
| 635 | 635 |
| 636 // The default toolchain. | 636 // The default toolchain. |
| 637 Settings default_settings(&build_settings, ""); | 637 Settings default_settings(&build_settings, ""); |
| 638 Label default_toolchain_label(SourceDir("//toolchain/"), "default"); | 638 Label default_toolchain_label(SourceDir("//toolchain/"), "default"); |
| 639 default_settings.set_toolchain_label(default_toolchain_label); | 639 default_settings.set_toolchain_label(default_toolchain_label); |
| 640 default_settings.set_default_toolchain_label(default_toolchain_label); | 640 default_settings.set_default_toolchain_label(default_toolchain_label); |
| 641 BuildDirContext default_context(&default_settings); |
| 641 | 642 |
| 642 // Default toolchain out dir. | 643 // Default toolchain out dir as source dirs. |
| 643 EXPECT_EQ("//out/Debug/", | 644 EXPECT_EQ("//out/Debug/", |
| 644 GetToolchainOutputDir(&default_settings).value()); | 645 GetBuildDirAsSourceDir(default_context, |
| 645 EXPECT_EQ("//out/Debug/", | 646 BuildDirType::TOOLCHAIN_ROOT).value()); |
| 646 GetToolchainOutputDir(&build_settings, default_toolchain_label, | 647 EXPECT_EQ("//out/Debug/obj/", |
| 647 true).value()); | 648 GetBuildDirAsSourceDir(default_context, |
| 649 BuildDirType::OBJ).value()); |
| 650 EXPECT_EQ("//out/Debug/gen/", |
| 651 GetBuildDirAsSourceDir(default_context, |
| 652 BuildDirType::GEN).value()); |
| 648 | 653 |
| 649 // Default toolchain gen dir. | 654 // Default toolchain our dir as output files. |
| 650 EXPECT_EQ("//out/Debug/gen/", | 655 EXPECT_EQ("", |
| 651 GetToolchainGenDir(&default_settings).value()); | 656 GetBuildDirAsOutputFile(default_context, |
| 657 BuildDirType::TOOLCHAIN_ROOT).value()); |
| 658 EXPECT_EQ("obj/", |
| 659 GetBuildDirAsOutputFile(default_context, |
| 660 BuildDirType::OBJ).value()); |
| 652 EXPECT_EQ("gen/", | 661 EXPECT_EQ("gen/", |
| 653 GetToolchainGenDirAsOutputFile(&default_settings).value()); | 662 GetBuildDirAsOutputFile(default_context, |
| 654 EXPECT_EQ("//out/Debug/gen/", | 663 BuildDirType::GEN).value()); |
| 655 GetToolchainGenDir(&build_settings, default_toolchain_label, | |
| 656 true).value()); | |
| 657 | 664 |
| 658 // Check a secondary toolchain. | 665 // Check a secondary toolchain. |
| 659 Settings other_settings(&build_settings, "two/"); | 666 Settings other_settings(&build_settings, "two/"); |
| 660 Label other_toolchain_label(SourceDir("//toolchain/"), "two"); | 667 Label other_toolchain_label(SourceDir("//toolchain/"), "two"); |
| 661 default_settings.set_toolchain_label(other_toolchain_label); | 668 other_settings.set_toolchain_label(other_toolchain_label); |
| 662 default_settings.set_default_toolchain_label(default_toolchain_label); | 669 other_settings.set_default_toolchain_label(default_toolchain_label); |
| 670 BuildDirContext other_context(&other_settings); |
| 663 | 671 |
| 664 // Secondary toolchain out dir. | 672 // Secondary toolchain out dir as source dirs. |
| 665 EXPECT_EQ("//out/Debug/two/", | 673 EXPECT_EQ("//out/Debug/two/", |
| 666 GetToolchainOutputDir(&other_settings).value()); | 674 GetBuildDirAsSourceDir(other_context, |
| 667 EXPECT_EQ("//out/Debug/two/", | 675 BuildDirType::TOOLCHAIN_ROOT).value()); |
| 668 GetToolchainOutputDir(&build_settings, other_toolchain_label, | 676 EXPECT_EQ("//out/Debug/two/obj/", |
| 669 false).value()); | 677 GetBuildDirAsSourceDir(other_context, |
| 678 BuildDirType::OBJ).value()); |
| 679 EXPECT_EQ("//out/Debug/two/gen/", |
| 680 GetBuildDirAsSourceDir(other_context, |
| 681 BuildDirType::GEN).value()); |
| 670 | 682 |
| 671 // Secondary toolchain gen dir. | 683 // Secondary toolchain out dir as output files. |
| 672 EXPECT_EQ("//out/Debug/two/gen/", | 684 EXPECT_EQ("two/", |
| 673 GetToolchainGenDir(&other_settings).value()); | 685 GetBuildDirAsOutputFile(other_context, |
| 686 BuildDirType::TOOLCHAIN_ROOT).value()); |
| 687 EXPECT_EQ("two/obj/", |
| 688 GetBuildDirAsOutputFile(other_context, |
| 689 BuildDirType::OBJ).value()); |
| 674 EXPECT_EQ("two/gen/", | 690 EXPECT_EQ("two/gen/", |
| 675 GetToolchainGenDirAsOutputFile(&other_settings).value()); | 691 GetBuildDirAsOutputFile(other_context, |
| 676 EXPECT_EQ("//out/Debug/two/gen/", | 692 BuildDirType::GEN).value()); |
| 677 GetToolchainGenDir(&build_settings, other_toolchain_label, | |
| 678 false).value()); | |
| 679 } | 693 } |
| 680 | 694 |
| 681 TEST(FilesystemUtils, GetOutDirForSourceDir) { | 695 TEST(FilesystemUtils, GetSubBuildDir) { |
| 682 BuildSettings build_settings; | 696 BuildSettings build_settings; |
| 683 build_settings.SetBuildDir(SourceDir("//out/Debug/")); | 697 build_settings.SetBuildDir(SourceDir("//out/Debug/")); |
| 684 | 698 |
| 685 // Test the default toolchain. | 699 // Test the default toolchain. |
| 686 Label default_toolchain_label(SourceDir("//toolchain/"), "default"); | 700 Label default_toolchain_label(SourceDir("//toolchain/"), "default"); |
| 687 Settings default_settings(&build_settings, ""); | 701 Settings default_settings(&build_settings, ""); |
| 688 default_settings.set_toolchain_label(default_toolchain_label); | 702 default_settings.set_toolchain_label(default_toolchain_label); |
| 689 default_settings.set_default_toolchain_label(default_toolchain_label); | 703 default_settings.set_default_toolchain_label(default_toolchain_label); |
| 704 BuildDirContext default_context(&default_settings); |
| 705 |
| 706 // Target in the root. |
| 690 EXPECT_EQ("//out/Debug/obj/", | 707 EXPECT_EQ("//out/Debug/obj/", |
| 691 GetOutputDirForSourceDir( | 708 GetSubBuildDirAsSourceDir( |
| 692 &default_settings, SourceDir("//")).value()); | 709 default_context, SourceDir("//"), BuildDirType::OBJ).value()); |
| 693 EXPECT_EQ("obj/", | 710 EXPECT_EQ("gen/", |
| 694 GetOutputDirForSourceDirAsOutputFile( | 711 GetSubBuildDirAsOutputFile( |
| 695 &default_settings, SourceDir("//")).value()); | 712 default_context, SourceDir("//"), BuildDirType::GEN).value()); |
| 696 | 713 |
| 714 // Target in another directory. |
| 697 EXPECT_EQ("//out/Debug/obj/foo/bar/", | 715 EXPECT_EQ("//out/Debug/obj/foo/bar/", |
| 698 GetOutputDirForSourceDir( | 716 GetSubBuildDirAsSourceDir( |
| 699 &default_settings, SourceDir("//foo/bar/")).value()); | 717 default_context, SourceDir("//foo/bar/"), BuildDirType::OBJ) |
| 700 EXPECT_EQ("obj/foo/bar/", | 718 .value()); |
| 701 GetOutputDirForSourceDirAsOutputFile( | 719 EXPECT_EQ("gen/foo/bar/", |
| 702 &default_settings, SourceDir("//foo/bar/")).value()); | 720 GetSubBuildDirAsOutputFile( |
| 721 default_context, SourceDir("//foo/bar/"), BuildDirType::GEN) |
| 722 .value()); |
| 703 | 723 |
| 704 // Secondary toolchain. | 724 // Secondary toolchain. |
| 705 Settings other_settings(&build_settings, "two/"); | 725 Settings other_settings(&build_settings, "two/"); |
| 706 other_settings.set_toolchain_label(Label(SourceDir("//toolchain/"), "two")); | 726 other_settings.set_toolchain_label(Label(SourceDir("//toolchain/"), "two")); |
| 707 other_settings.set_default_toolchain_label(default_toolchain_label); | 727 other_settings.set_default_toolchain_label(default_toolchain_label); |
| 728 BuildDirContext other_context(&other_settings); |
| 729 |
| 730 // Target in the root. |
| 708 EXPECT_EQ("//out/Debug/two/obj/", | 731 EXPECT_EQ("//out/Debug/two/obj/", |
| 709 GetOutputDirForSourceDir( | 732 GetSubBuildDirAsSourceDir( |
| 710 &other_settings, SourceDir("//")).value()); | 733 other_context, SourceDir("//"), BuildDirType::OBJ).value()); |
| 711 EXPECT_EQ("two/obj/", | 734 EXPECT_EQ("two/gen/", |
| 712 GetOutputDirForSourceDirAsOutputFile( | 735 GetSubBuildDirAsOutputFile( |
| 713 &other_settings, SourceDir("//")).value()); | 736 other_context, SourceDir("//"), BuildDirType::GEN).value()); |
| 714 | 737 |
| 738 // Target in another directory. |
| 715 EXPECT_EQ("//out/Debug/two/obj/foo/bar/", | 739 EXPECT_EQ("//out/Debug/two/obj/foo/bar/", |
| 716 GetOutputDirForSourceDir(&other_settings, | 740 GetSubBuildDirAsSourceDir( |
| 717 SourceDir("//foo/bar/")).value()); | 741 other_context, SourceDir("//foo/bar/"), BuildDirType::OBJ) |
| 718 EXPECT_EQ("two/obj/foo/bar/", | 742 .value()); |
| 719 GetOutputDirForSourceDirAsOutputFile( | 743 EXPECT_EQ("two/gen/foo/bar/", |
| 720 &other_settings, SourceDir("//foo/bar/")).value()); | 744 GetSubBuildDirAsOutputFile( |
| 745 other_context, SourceDir("//foo/bar/"), BuildDirType::GEN) |
| 746 .value()); |
| 721 | 747 |
| 722 // Absolute source path | 748 // Absolute source path |
| 723 EXPECT_EQ("//out/Debug/obj/ABS_PATH/abs/", | 749 EXPECT_EQ("//out/Debug/obj/ABS_PATH/abs/", |
| 724 GetOutputDirForSourceDir( | 750 GetSubBuildDirAsSourceDir( |
| 725 &default_settings, SourceDir("/abs")).value()); | 751 default_context, SourceDir("/abs"), BuildDirType::OBJ).value()); |
| 726 EXPECT_EQ("obj/ABS_PATH/abs/", | 752 EXPECT_EQ("gen/ABS_PATH/abs/", |
| 727 GetOutputDirForSourceDirAsOutputFile( | 753 GetSubBuildDirAsOutputFile( |
| 728 &default_settings, SourceDir("/abs")).value()); | 754 default_context, SourceDir("/abs"), BuildDirType::GEN).value()); |
| 729 #if defined(OS_WIN) | 755 #if defined(OS_WIN) |
| 730 EXPECT_EQ("//out/Debug/obj/ABS_PATH/C/abs/", | 756 EXPECT_EQ("//out/Debug/obj/ABS_PATH/C/abs/", |
| 731 GetOutputDirForSourceDir( | 757 GetSubBuildDirAsSourceDir( |
| 732 &default_settings, SourceDir("/C:/abs")).value()); | 758 default_context, SourceDir("/C:/abs"), BuildDirType::OBJ) |
| 733 EXPECT_EQ("obj/ABS_PATH/C/abs/", | 759 .value()); |
| 734 GetOutputDirForSourceDirAsOutputFile( | 760 EXPECT_EQ("gen/ABS_PATH/C/abs/", |
| 735 &default_settings, SourceDir("/C:/abs")).value()); | 761 GetSubBuildDirAsOutputFile( |
| 762 default_context, SourceDir("/C:/abs"), BuildDirType::GEN) |
| 763 .value()); |
| 736 #endif | 764 #endif |
| 737 } | 765 } |
| 738 | 766 |
| 739 TEST(FilesystemUtils, GetGenDirForSourceDir) { | 767 TEST(FilesystemUtils, GetBuildDirForTarget) { |
| 740 BuildSettings build_settings; | |
| 741 build_settings.SetBuildDir(SourceDir("//out/Debug/")); | |
| 742 | |
| 743 // Test the default toolchain. | |
| 744 Settings default_settings(&build_settings, ""); | |
| 745 EXPECT_EQ("//out/Debug/gen/", | |
| 746 GetGenDirForSourceDir( | |
| 747 &default_settings, SourceDir("//")).value()); | |
| 748 EXPECT_EQ("gen/", | |
| 749 GetGenDirForSourceDirAsOutputFile( | |
| 750 &default_settings, SourceDir("//")).value()); | |
| 751 | |
| 752 EXPECT_EQ("//out/Debug/gen/foo/bar/", | |
| 753 GetGenDirForSourceDir( | |
| 754 &default_settings, SourceDir("//foo/bar/")).value()); | |
| 755 EXPECT_EQ("gen/foo/bar/", | |
| 756 GetGenDirForSourceDirAsOutputFile( | |
| 757 &default_settings, SourceDir("//foo/bar/")).value()); | |
| 758 | |
| 759 // Secondary toolchain. | |
| 760 Settings other_settings(&build_settings, "two/"); | |
| 761 EXPECT_EQ("//out/Debug/two/gen/", | |
| 762 GetGenDirForSourceDir( | |
| 763 &other_settings, SourceDir("//")).value()); | |
| 764 EXPECT_EQ("two/gen/", | |
| 765 GetGenDirForSourceDirAsOutputFile( | |
| 766 &other_settings, SourceDir("//")).value()); | |
| 767 | |
| 768 EXPECT_EQ("//out/Debug/two/gen/foo/bar/", | |
| 769 GetGenDirForSourceDir( | |
| 770 &other_settings, SourceDir("//foo/bar/")).value()); | |
| 771 EXPECT_EQ("two/gen/foo/bar/", | |
| 772 GetGenDirForSourceDirAsOutputFile( | |
| 773 &other_settings, SourceDir("//foo/bar/")).value()); | |
| 774 } | |
| 775 | |
| 776 TEST(FilesystemUtils, GetTargetDirs) { | |
| 777 BuildSettings build_settings; | 768 BuildSettings build_settings; |
| 778 build_settings.SetBuildDir(SourceDir("//out/Debug/")); | 769 build_settings.SetBuildDir(SourceDir("//out/Debug/")); |
| 779 Settings settings(&build_settings, ""); | 770 Settings settings(&build_settings, ""); |
| 780 | 771 |
| 781 Target a(&settings, Label(SourceDir("//foo/bar/"), "baz")); | 772 Target a(&settings, Label(SourceDir("//foo/bar/"), "baz")); |
| 782 EXPECT_EQ("//out/Debug/obj/foo/bar/", GetTargetOutputDir(&a).value()); | 773 EXPECT_EQ("//out/Debug/obj/foo/bar/", |
| 783 EXPECT_EQ("obj/foo/bar/", GetTargetOutputDirAsOutputFile(&a).value()); | 774 GetBuildDirForTargetAsSourceDir(&a, BuildDirType::OBJ).value()); |
| 784 EXPECT_EQ("//out/Debug/gen/foo/bar/", GetTargetGenDir(&a).value()); | 775 EXPECT_EQ("obj/foo/bar/", |
| 785 EXPECT_EQ("gen/foo/bar/", GetTargetGenDirAsOutputFile(&a).value()); | 776 GetBuildDirForTargetAsOutputFile(&a, BuildDirType::OBJ).value()); |
| 777 EXPECT_EQ("//out/Debug/gen/foo/bar/", |
| 778 GetBuildDirForTargetAsSourceDir(&a, BuildDirType::GEN).value()); |
| 779 EXPECT_EQ("gen/foo/bar/", |
| 780 GetBuildDirForTargetAsOutputFile(&a, BuildDirType::GEN).value()); |
| 786 } | 781 } |
| 787 | 782 |
| 788 // Tests handling of output dirs when build dir is the same as the root. | 783 // Tests handling of output dirs when build dir is the same as the root. |
| 789 TEST(FilesystemUtils, GetDirForEmptyBuildDir) { | 784 TEST(FilesystemUtils, GetDirForEmptyBuildDir) { |
| 790 BuildSettings build_settings; | 785 BuildSettings build_settings; |
| 791 build_settings.SetBuildDir(SourceDir("//")); | 786 build_settings.SetBuildDir(SourceDir("//")); |
| 792 Settings settings(&build_settings, ""); | 787 Settings settings(&build_settings, ""); |
| 793 | 788 |
| 794 EXPECT_EQ("//", GetToolchainOutputDir(&settings).value()); | 789 BuildDirContext context(&settings); |
| 795 EXPECT_EQ("//gen/", GetToolchainGenDir(&settings).value()); | 790 |
| 796 EXPECT_EQ("gen/", GetToolchainGenDirAsOutputFile(&settings).value()); | 791 EXPECT_EQ("//", |
| 792 GetBuildDirAsSourceDir(context, BuildDirType::TOOLCHAIN_ROOT) |
| 793 .value()); |
| 794 EXPECT_EQ("//gen/", |
| 795 GetBuildDirAsSourceDir(context, BuildDirType::GEN).value()); |
| 797 EXPECT_EQ("//obj/", | 796 EXPECT_EQ("//obj/", |
| 798 GetOutputDirForSourceDir(&settings, SourceDir("//")).value()); | 797 GetBuildDirAsSourceDir(context, BuildDirType::OBJ).value()); |
| 798 |
| 799 EXPECT_EQ("", |
| 800 GetBuildDirAsOutputFile(context, BuildDirType::TOOLCHAIN_ROOT) |
| 801 .value()); |
| 802 EXPECT_EQ("gen/", |
| 803 GetBuildDirAsOutputFile(context, BuildDirType::GEN).value()); |
| 799 EXPECT_EQ("obj/", | 804 EXPECT_EQ("obj/", |
| 800 GetOutputDirForSourceDirAsOutputFile( | 805 GetBuildDirAsOutputFile(context, BuildDirType::OBJ).value()); |
| 801 &settings, SourceDir("//")).value()); | |
| 802 EXPECT_EQ("gen/", | |
| 803 GetGenDirForSourceDirAsOutputFile( | |
| 804 &settings, SourceDir("//")).value()); | |
| 805 } | 806 } |
| OLD | NEW |