aboutsummaryrefslogtreecommitdiff
path: root/src/wix/test/WixToolsetTest.Sdk/MsbuildFixture.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/wix/test/WixToolsetTest.Sdk/MsbuildFixture.cs')
-rw-r--r--src/wix/test/WixToolsetTest.Sdk/MsbuildFixture.cs132
1 files changed, 131 insertions, 1 deletions
diff --git a/src/wix/test/WixToolsetTest.Sdk/MsbuildFixture.cs b/src/wix/test/WixToolsetTest.Sdk/MsbuildFixture.cs
index 98fffbbc..6cbd445c 100644
--- a/src/wix/test/WixToolsetTest.Sdk/MsbuildFixture.cs
+++ b/src/wix/test/WixToolsetTest.Sdk/MsbuildFixture.cs
@@ -670,6 +670,114 @@ namespace WixToolsetTest.Sdk
670 } 670 }
671 } 671 }
672 672
673 [Theory]
674 [InlineData(BuildSystem.DotNetCoreSdk)]
675 [InlineData(BuildSystem.MSBuild)]
676 [InlineData(BuildSystem.MSBuild64)]
677 public void CanBuildMultiTargetingWixlibUsingRids(BuildSystem buildSystem)
678 {
679 var sourceFolder = TestData.Get(@"TestData", "MultiTargetingWixlib");
680
681 using (var fs = new TestDataFolderFileSystem())
682 {
683 fs.Initialize(sourceFolder);
684 var baseFolder = Path.Combine(fs.BaseFolder, "PackageUsingRids");
685 var binFolder = Path.Combine(baseFolder, @"bin\");
686 var filesFolder = Path.Combine(binFolder, "Release", @"PFiles\");
687 var projectPath = Path.Combine(baseFolder, "PackageUsingRids.wixproj");
688
689 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[] {
690 "-Restore",
691 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "WixMSBuildProps", MsbuildFixture.WixPropsPath)
692 });
693 result.AssertSuccess();
694
695 var warnings = result.Output.Where(line => line.Contains(": warning")).ToArray();
696 WixAssert.StringCollectionEmpty(warnings);
697
698 var releaseFiles = Directory.EnumerateFiles(filesFolder, "*", SearchOption.AllDirectories);
699 var releaseFileSizes = releaseFiles.Select(p => PathAndSize(p, filesFolder)).OrderBy(s => s).ToArray();
700
701 WixAssert.CompareLineByLine(new[]
702 {
703 @"net472_x64\e_sqlite3.dll - 1601536",
704 @"net472_x86\e_sqlite3.dll - 1207296",
705 @"net6_x64\e_sqlite3.dll - 1601536",
706 @"net6_x86\e_sqlite3.dll - 1207296",
707 }, releaseFileSizes);
708 }
709 }
710
711 [Theory]
712 [InlineData(BuildSystem.DotNetCoreSdk)]
713 [InlineData(BuildSystem.MSBuild)]
714 [InlineData(BuildSystem.MSBuild64)]
715 public void CanBuildMultiTargetingWixlibUsingRidsWithReleaseAndDebug(BuildSystem buildSystem)
716 {
717 var sourceFolder = TestData.Get(@"TestData", "MultiTargetingWixlib");
718
719 using (var fs = new TestDataFolderFileSystem())
720 {
721 fs.Initialize(sourceFolder);
722 var baseFolder = Path.Combine(fs.BaseFolder, "PackageReleaseAndDebug");
723 var binFolder = Path.Combine(baseFolder, @"bin\");
724 var filesFolder = Path.Combine(binFolder, "Release", @"PFiles\");
725 var projectPath = Path.Combine(baseFolder, "PackageReleaseAndDebug.wixproj");
726
727 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[] {
728 "-Restore",
729 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "WixMSBuildProps", MsbuildFixture.WixPropsPath)
730 });
731 result.AssertSuccess();
732
733 var warnings = result.Output.Where(line => line.Contains(": warning")).ToArray();
734 WixAssert.StringCollectionEmpty(warnings);
735
736 var releaseFiles = Directory.EnumerateFiles(filesFolder, "*", SearchOption.AllDirectories);
737 var releaseFileSizes = releaseFiles.Select(p => PathAndSize(p, filesFolder)).OrderBy(s => s).ToArray();
738
739 WixAssert.CompareLineByLine(new[]
740 {
741 @"debug_net472_x64\e_sqlite3.dll - 1601536",
742 @"debug_net472_x86\e_sqlite3.dll - 1207296",
743 @"debug_net6_x64\e_sqlite3.dll - 1601536",
744 @"debug_net6_x86\e_sqlite3.dll - 1207296",
745 @"release_net472_x64\e_sqlite3.dll - 1601536",
746 @"release_net472_x86\e_sqlite3.dll - 1207296",
747 @"release_net6_x64\e_sqlite3.dll - 1601536",
748 @"release_net6_x86\e_sqlite3.dll - 1207296",
749 }, releaseFileSizes);
750 }
751 }
752
753 [Theory]
754 [InlineData(BuildSystem.DotNetCoreSdk)]
755 [InlineData(BuildSystem.MSBuild)]
756 [InlineData(BuildSystem.MSBuild64)]
757 public void CannotBuildMultiTargetingWixlibUsingExplicitSubsetOfTfmAndRid(BuildSystem buildSystem)
758 {
759 var sourceFolder = TestData.Get(@"TestData", "MultiTargetingWixlib");
760
761 using (var fs = new TestDataFolderFileSystem())
762 {
763 fs.Initialize(sourceFolder);
764 var baseFolder = Path.Combine(fs.BaseFolder, "PackageUsingExplicitTfmAndRids");
765 var binFolder = Path.Combine(baseFolder, @"bin\");
766 var filesFolder = Path.Combine(binFolder, "Release", @"PFiles\");
767 var projectPath = Path.Combine(baseFolder, "PackageUsingExplicitTfmAndRids.wixproj");
768
769 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[] {
770 "-Restore",
771 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "WixMSBuildProps", MsbuildFixture.WixPropsPath)
772 });
773
774 var errors = GetDistinctErrorMessages(result.Output, baseFolder);
775 WixAssert.CompareLineByLine(new[]
776 {
777 @"<basefolder>\Package.wxs(22): error WIX0103: Cannot find the File file '!(bindpath.TestExe.net472.win_x86)\e_sqlite3.dll'. The following paths were checked: !(bindpath.TestExe.net472.win_x86)\e_sqlite3.dll [<basefolder>\PackageUsingExplicitTfmAndRids.wixproj]",
778 }, errors);
779 }
780 }
673 781
674 [Theory] 782 [Theory]
675 [InlineData(BuildSystem.DotNetCoreSdk)] 783 [InlineData(BuildSystem.DotNetCoreSdk)]
@@ -773,9 +881,31 @@ namespace WixToolsetTest.Sdk
773 return ReplacePathsInMessage(message.Substring(start, end - start), baseFolder); 881 return ReplacePathsInMessage(message.Substring(start, end - start), baseFolder);
774 } 882 }
775 883
884 private static string[] GetDistinctErrorMessages(string[] output, string baseFolder)
885 {
886 return output.Where(l => l.Contains(": error ")).Select(line =>
887 {
888 var trimmed = ReplacePathsInMessage(line, baseFolder);
889
890 // If the message starts with a multi-proc build marker (like: "1>" or "2>") trim it.
891 if (trimmed[1] == '>')
892 {
893 trimmed = trimmed.Substring(2);
894 }
895
896 return trimmed;
897 }).Distinct().ToArray();
898 }
899
776 private static string ReplacePathsInMessage(string message, string baseFolder) 900 private static string ReplacePathsInMessage(string message, string baseFolder)
777 { 901 {
778 return message.Replace(baseFolder, "<basefolder>").Trim(); 902 return message.Trim().Replace(baseFolder, "<basefolder>");
903 }
904
905 private static string PathAndSize(string path, string replace)
906 {
907 var fi = new FileInfo(path);
908 return $"{fi.FullName.Replace(replace, String.Empty)} - {fi.Length}";
779 } 909 }
780 } 910 }
781} 911}