GivenThatWeWantToFilterSatelliteAssemblies.cs 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. // Licensed to the .NET Foundation under one or more agreements.
  2. // The .NET Foundation licenses this file to you under the MIT license.
  3. using Microsoft.DotNet.Cli.Utils;
  4. namespace Microsoft.NET.Build.Tests
  5. {
  6. public class GivenThatWeWantToFilterSatelliteAssemblies : SdkTest
  7. {
  8. public GivenThatWeWantToFilterSatelliteAssemblies(ITestOutputHelper log) : base(log)
  9. {
  10. }
  11. [Theory]
  12. [InlineData("netcoreapp2.0", true, false)]
  13. [InlineData("netcoreapp3.0", false, false)]
  14. [InlineData("net47", false, true)]
  15. public void It_only_publish_selected_ResourceLanguages(string targetFramework, bool explicitCopyLocalLockFile,
  16. bool needsNetFrameworkReferenceAssemblies)
  17. {
  18. if (needsNetFrameworkReferenceAssemblies && !RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
  19. {
  20. // .NET Framework reference assemblies aren't currently available on non-Windows
  21. return;
  22. }
  23. var testProject = new TestProject()
  24. {
  25. Name = "FilterSatelliteAssemblies",
  26. TargetFrameworks = targetFramework,
  27. IsExe = true,
  28. };
  29. testProject.PackageReferences.Add(new TestPackageReference("System.Spatial", "5.8.3"));
  30. testProject.AdditionalProperties.Add("SatelliteResourceLanguages", "en-US;it;fr");
  31. if (explicitCopyLocalLockFile)
  32. {
  33. testProject.AdditionalProperties.Add("CopyLocalLockFileAssemblies", "true");
  34. }
  35. var testProjectInstance = _testAssetsManager.CreateTestProject(testProject, identifier: targetFramework);
  36. var buildCommand = new BuildCommand(testProjectInstance);
  37. var buildResult = buildCommand.Execute();
  38. buildResult.Should().Pass();
  39. var outputDirectory = buildCommand.GetOutputDirectory(targetFramework: testProject.TargetFrameworks);
  40. List<string> expectedFiles = new()
  41. {
  42. "it/System.Spatial.resources.dll",
  43. "fr/System.Spatial.resources.dll",
  44. "System.Spatial.dll",
  45. $"{testProject.Name}.pdb",
  46. };
  47. if (testProject.TargetFrameworks.StartsWith("netcoreapp"))
  48. {
  49. expectedFiles.AddRange(new[]
  50. {
  51. $"{testProject.Name}.dll",
  52. $"{testProject.Name}.deps.json",
  53. $"{testProject.Name}.runtimeconfig.json",
  54. $"{testProject.Name}.runtimeconfig.dev.json"
  55. });
  56. if (testProject.TargetFrameworks == "netcoreapp3.0")
  57. {
  58. expectedFiles.Add($"{testProject.Name}{Constants.ExeSuffix}");
  59. }
  60. }
  61. else
  62. {
  63. expectedFiles.Add($"{testProject.Name}.exe");
  64. expectedFiles.Add($"{testProject.Name}.exe.config");
  65. }
  66. outputDirectory.Should().OnlyHaveFiles(expectedFiles);
  67. }
  68. [Theory]
  69. [InlineData("netcoreapp2.0", true, false)]
  70. [InlineData("net47", false, true)]
  71. public void It_copies_all_satellites_when_not_filtered(string targetFramework, bool explicitCopyLocalLockFile,
  72. bool needsNetFrameworkReferenceAssemblies)
  73. {
  74. if (needsNetFrameworkReferenceAssemblies && !RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
  75. {
  76. // .NET Framework reference assemblies aren't currently available on non-Windows
  77. return;
  78. }
  79. var testProject = new TestProject()
  80. {
  81. Name = "DontFilterSatelliteAssemblies",
  82. TargetFrameworks = targetFramework,
  83. IsExe = true,
  84. };
  85. testProject.PackageReferences.Add(new TestPackageReference("System.Spatial", "5.8.3"));
  86. if (explicitCopyLocalLockFile)
  87. {
  88. testProject.AdditionalProperties.Add("CopyLocalLockFileAssemblies", "true");
  89. }
  90. var testProjectInstance = _testAssetsManager.CreateTestProject(testProject, identifier: targetFramework);
  91. var buildCommand = new BuildCommand(testProjectInstance);
  92. var buildResult = buildCommand.Execute();
  93. buildResult.Should().Pass();
  94. var outputDirectory = buildCommand.GetOutputDirectory(targetFramework: testProject.TargetFrameworks);
  95. List<string> expectedFiles = new()
  96. {
  97. "de/System.Spatial.resources.dll",
  98. "es/System.Spatial.resources.dll",
  99. "fr/System.Spatial.resources.dll",
  100. "it/System.Spatial.resources.dll",
  101. "ja/System.Spatial.resources.dll",
  102. "ko/System.Spatial.resources.dll",
  103. "ru/System.Spatial.resources.dll",
  104. "zh-Hans/System.Spatial.resources.dll",
  105. "zh-Hant/System.Spatial.resources.dll",
  106. "System.Spatial.dll",
  107. $"{testProject.Name}.pdb",
  108. };
  109. if (testProject.TargetFrameworks.StartsWith("netcoreapp"))
  110. {
  111. expectedFiles.AddRange(new[]
  112. {
  113. $"{testProject.Name}.dll",
  114. $"{testProject.Name}.deps.json",
  115. $"{testProject.Name}.runtimeconfig.json",
  116. $"{testProject.Name}.runtimeconfig.dev.json"
  117. });
  118. }
  119. else
  120. {
  121. expectedFiles.Add($"{testProject.Name}.exe");
  122. expectedFiles.Add($"{testProject.Name}.exe.config");
  123. }
  124. outputDirectory.Should().OnlyHaveFiles(expectedFiles);
  125. }
  126. }
  127. }