GivenThatWeWantToGenerateGlobalUsings_WebApp.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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. namespace Microsoft.NET.Build.Tests
  4. {
  5. public class GivenThatWeWantToGenerateGlobalUsings_WebApp : SdkTest
  6. {
  7. public GivenThatWeWantToGenerateGlobalUsings_WebApp(ITestOutputHelper log) : base(log) { }
  8. [RequiresMSBuildVersionFact("17.0.0.32901")]
  9. public void It_generates_web_implicit_usings_and_builds_successfully()
  10. {
  11. var tfm = ToolsetInfo.CurrentTargetFramework;
  12. var testProject = CreateTestProject(tfm);
  13. testProject.AdditionalProperties["ImplicitUsings"] = "enable";
  14. var testAsset = _testAssetsManager.CreateTestProject(testProject);
  15. var globalUsingsFileName = $"{testAsset.TestProject.Name}.GlobalUsings.g.cs";
  16. var buildCommand = new BuildCommand(testAsset);
  17. buildCommand
  18. .Execute()
  19. .Should()
  20. .Pass();
  21. var outputDirectory = buildCommand.GetIntermediateDirectory(tfm);
  22. outputDirectory.Should().HaveFile(globalUsingsFileName);
  23. File.ReadAllText(Path.Combine(outputDirectory.FullName, globalUsingsFileName)).Should().Be(
  24. @"// <auto-generated/>
  25. global using global::Microsoft.AspNetCore.Builder;
  26. global using global::Microsoft.AspNetCore.Hosting;
  27. global using global::Microsoft.AspNetCore.Http;
  28. global using global::Microsoft.AspNetCore.Routing;
  29. global using global::Microsoft.Extensions.Configuration;
  30. global using global::Microsoft.Extensions.DependencyInjection;
  31. global using global::Microsoft.Extensions.Hosting;
  32. global using global::Microsoft.Extensions.Logging;
  33. global using global::System;
  34. global using global::System.Collections.Generic;
  35. global using global::System.IO;
  36. global using global::System.Linq;
  37. global using global::System.Net.Http;
  38. global using global::System.Net.Http.Json;
  39. global using global::System.Threading;
  40. global using global::System.Threading.Tasks;
  41. ");
  42. }
  43. [Fact]
  44. public void It_can_disable_web_usings()
  45. {
  46. var tfm = ToolsetInfo.CurrentTargetFramework;
  47. var testProject = CreateTestProject(tfm);
  48. testProject.AdditionalProperties["ImplicitUsings"] = "disable";
  49. var testAsset = _testAssetsManager.CreateTestProject(testProject);
  50. var globalUsingsFileName = $"{testAsset.TestProject.Name}.GlobalUsings.g.cs";
  51. var buildCommand = new BuildCommand(testAsset);
  52. buildCommand
  53. .Execute()
  54. .Should()
  55. .Fail();
  56. var outputDirectory = buildCommand.GetIntermediateDirectory(tfm);
  57. outputDirectory.Should().NotHaveFile(globalUsingsFileName);
  58. }
  59. private TestProject CreateTestProject(string tfm)
  60. {
  61. var testProject = new TestProject
  62. {
  63. IsExe = true,
  64. TargetFrameworks = tfm,
  65. ProjectSdk = "Microsoft.NET.Sdk.Web"
  66. };
  67. testProject.SourceFiles["Program.cs"] = @"
  68. var builder = WebApplication.CreateBuilder(args);
  69. var app = builder.Build();
  70. if (app.Environment.IsDevelopment())
  71. {
  72. app.UseDeveloperExceptionPage();
  73. }
  74. app.MapGet(""/"", (Func<string>)(() => ""Hello World!""));
  75. app.Run();
  76. ";
  77. return testProject;
  78. }
  79. }
  80. }