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 |