Skip to content

Commit 0c381d2

Browse files
authored
Add some tests for hosted project building and publishing (#17398)
* Add some tests for hosted project building and publishing
1 parent 3c6dc1c commit 0c381d2

File tree

6 files changed

+175
-4
lines changed

6 files changed

+175
-4
lines changed

src/Components/Blazor/Build/src/targets/Publish.targets

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,17 @@
4040
<PropertyGroup>
4141
<_BlazorConfigPath>$(OutDir)$(AssemblyName).blazor.config</_BlazorConfigPath>
4242
</PropertyGroup>
43-
<WriteLinesToFile File="$(_BlazorConfigPath)" Lines="." Overwrite="true" />
44-
<WriteLinesToFile File="$(_BlazorConfigPath)" Lines="$(AssemblyName)/" Overwrite="false" />
43+
44+
<ItemGroup>
45+
<_BlazorPublishConfigContent Include="." />
46+
<_BlazorPublishConfigContent Include="$(AssemblyName)" />
47+
</ItemGroup>
48+
49+
<WriteLinesToFile
50+
File="$(_BlazorConfigPath)"
51+
Lines="@(_BlazorPublishConfigContent)"
52+
Overwrite="true"
53+
WriteOnlyWhenDifferent="true" />
4554
</Target>
4655

4756
<!-- The following target runs only for standalone publishing -->

src/Components/Blazor/Build/test/BuildIntegrationTests/BuildIntegrationTest.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,25 @@ public async Task Build_WithDefaultSettings_Works()
2828
Assert.FileExists(result, buildOutputDirectory, "dist", "_framework", "_bin", "Microsoft.Extensions.Logging.Abstractions.dll"); // Verify dependencies are part of the output.
2929
}
3030

31+
[Fact]
32+
public async Task Build_Hosted_Works()
33+
{
34+
// Arrange
35+
using var project = ProjectDirectory.Create("blazorhosted", additionalProjects: new[] { "standalone", "razorclasslibrary", });
36+
project.TargetFramework = "netcoreapp3.1";
37+
var result = await MSBuildProcessManager.DotnetMSBuild(project);
38+
39+
Assert.BuildPassed(result);
40+
41+
var buildOutputDirectory = project.BuildOutputDirectory;
42+
var blazorConfig = Path.Combine(buildOutputDirectory, "standalone.blazor.config");
43+
Assert.FileExists(result, blazorConfig);
44+
45+
var path = Path.GetFullPath(Path.Combine(project.SolutionPath, "standalone", "bin", project.Configuration, "netstandard2.1", "standalone.dll"));
46+
Assert.FileContains(result, blazorConfig, path);
47+
Assert.FileDoesNotExist(result, buildOutputDirectory, "dist", "_framework", "_bin", "standalone.dll");
48+
}
49+
3150
[Fact]
3251
public async Task Build_WithLinkOnBuildDisabled_Works()
3352
{

src/Components/Blazor/Build/test/BuildIntegrationTests/PublishIntegrationTest.cs

Lines changed: 118 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public class PublishIntegrationTest
1313
public async Task Publish_WithDefaultSettings_Works()
1414
{
1515
// Arrange
16-
using var project = ProjectDirectory.Create("standalone", additionalProjects: new string[] { "razorclasslibrary" });
16+
using var project = ProjectDirectory.Create("standalone", additionalProjects: new [] { "razorclasslibrary" });
1717
var result = await MSBuildProcessManager.DotnetMSBuild(project, "Publish");
1818

1919
Assert.BuildPassed(result);
@@ -39,11 +39,49 @@ public async Task Publish_WithDefaultSettings_Works()
3939
Assert.FileExists(result, publishDirectory, "web.config");
4040
}
4141

42+
[Fact]
43+
public async Task Publish_WithNoBuild_Works()
44+
{
45+
// Arrange
46+
using var project = ProjectDirectory.Create("standalone", additionalProjects: new[] { "razorclasslibrary" });
47+
var result = await MSBuildProcessManager.DotnetMSBuild(project, "Build");
48+
49+
Assert.BuildPassed(result);
50+
51+
result = await MSBuildProcessManager.DotnetMSBuild(project, "Publish", "/p:NoBuild=true");
52+
53+
Assert.BuildPassed(result);
54+
55+
var publishDirectory = project.PublishOutputDirectory;
56+
var blazorPublishDirectory = Path.Combine(publishDirectory, Path.GetFileNameWithoutExtension(project.ProjectFilePath));
57+
58+
Assert.FileExists(result, blazorPublishDirectory, "dist", "_framework", "blazor.boot.json");
59+
Assert.FileExists(result, blazorPublishDirectory, "dist", "_framework", "blazor.webassembly.js");
60+
Assert.FileExists(result, blazorPublishDirectory, "dist", "_framework", "wasm", "mono.wasm");
61+
Assert.FileExists(result, blazorPublishDirectory, "dist", "_framework", "wasm", "mono.js");
62+
Assert.FileExists(result, blazorPublishDirectory, "dist", "_framework", "_bin", "standalone.dll");
63+
Assert.FileExists(result, blazorPublishDirectory, "dist", "_framework", "_bin", "Microsoft.Extensions.Logging.Abstractions.dll"); // Verify dependencies are part of the output.
64+
65+
// Verify static assets are in the publish directory
66+
Assert.FileExists(result, blazorPublishDirectory, "dist", "index.html");
67+
68+
// Verify static web assets from referenced projects are copied.
69+
// Uncomment once https://github.com/aspnet/AspNetCore/issues/17426 is resolved.
70+
// Assert.FileExists(result, blazorPublishDirectory, "dist", "_content", "RazorClassLibrary", "wwwroot", "exampleJsInterop.js");
71+
// Assert.FileExists(result, blazorPublishDirectory, "dist", "_content", "RazorClassLibrary", "styles.css");
72+
73+
// Verify static assets are in the publish directory
74+
Assert.FileExists(result, blazorPublishDirectory, "dist", "index.html");
75+
76+
// Verify web.config
77+
Assert.FileExists(result, publishDirectory, "web.config");
78+
}
79+
4280
[Fact]
4381
public async Task Publish_WithLinkOnBuildDisabled_Works()
4482
{
4583
// Arrange
46-
using var project = ProjectDirectory.Create("standalone", additionalProjects: new string[] { "razorclasslibrary" });
84+
using var project = ProjectDirectory.Create("standalone", additionalProjects: new [] { "razorclasslibrary" });
4785
project.AddProjectFileContent(
4886
@"<PropertyGroup>
4987
<BlazorLinkOnBuild>false</BlazorLinkOnBuild>
@@ -73,5 +111,83 @@ public async Task Publish_WithLinkOnBuildDisabled_Works()
73111
// Verify web.config
74112
Assert.FileExists(result, publishDirectory, "web.config");
75113
}
114+
115+
[Fact]
116+
public async Task Publish_HostedApp_Works()
117+
{
118+
// Arrange
119+
using var project = ProjectDirectory.Create("blazorhosted", additionalProjects: new[] { "standalone", "razorclasslibrary", });
120+
project.TargetFramework = "netcoreapp3.1";
121+
var result = await MSBuildProcessManager.DotnetMSBuild(project, "Publish");
122+
123+
Assert.BuildPassed(result);
124+
125+
var publishDirectory = project.PublishOutputDirectory;
126+
// Make sure the main project exists
127+
Assert.FileExists(result, publishDirectory, "blazorhosted.dll");
128+
129+
var blazorPublishDirectory = Path.Combine(publishDirectory, "standalone");
130+
Assert.FileExists(result, blazorPublishDirectory, "dist", "_framework", "blazor.boot.json");
131+
Assert.FileExists(result, blazorPublishDirectory, "dist", "_framework", "blazor.webassembly.js");
132+
Assert.FileExists(result, blazorPublishDirectory, "dist", "_framework", "wasm", "mono.wasm");
133+
Assert.FileExists(result, blazorPublishDirectory, "dist", "_framework", "wasm", "mono.js");
134+
Assert.FileExists(result, blazorPublishDirectory, "dist", "_framework", "_bin", "standalone.dll");
135+
Assert.FileExists(result, blazorPublishDirectory, "dist", "_framework", "_bin", "Microsoft.Extensions.Logging.Abstractions.dll"); // Verify dependencies are part of the output.
136+
137+
// Verify static assets are in the publish directory
138+
Assert.FileExists(result, blazorPublishDirectory, "dist", "index.html");
139+
140+
// Verify static web assets from referenced projects are copied.
141+
Assert.FileExists(result, publishDirectory, "wwwroot", "_content", "RazorClassLibrary", "wwwroot", "exampleJsInterop.js");
142+
Assert.FileExists(result, publishDirectory, "wwwroot", "_content", "RazorClassLibrary", "styles.css");
143+
144+
// Verify static assets are in the publish directory
145+
Assert.FileExists(result, blazorPublishDirectory, "dist", "index.html");
146+
147+
// Verify web.config
148+
Assert.FileExists(result, publishDirectory, "web.config");
149+
150+
var blazorConfig = Path.Combine(publishDirectory, "standalone.blazor.config");
151+
Assert.FileContains(result, blazorConfig, ".");
152+
}
153+
154+
[Fact]
155+
public async Task Publish_HostedApp_WithNoBuild_Works()
156+
{
157+
// Arrange
158+
using var project = ProjectDirectory.Create("blazorhosted", additionalProjects: new[] { "standalone", "razorclasslibrary", });
159+
project.TargetFramework = "netcoreapp3.1";
160+
var result = await MSBuildProcessManager.DotnetMSBuild(project, "Build");
161+
162+
Assert.BuildPassed(result);
163+
164+
result = await MSBuildProcessManager.DotnetMSBuild(project, "Publish", "/p:NoBuild=true");
165+
166+
var publishDirectory = project.PublishOutputDirectory;
167+
// Make sure the main project exists
168+
Assert.FileExists(result, publishDirectory, "blazorhosted.dll");
169+
170+
var blazorPublishDirectory = Path.Combine(publishDirectory, "standalone");
171+
Assert.FileExists(result, blazorPublishDirectory, "dist", "_framework", "blazor.boot.json");
172+
Assert.FileExists(result, blazorPublishDirectory, "dist", "_framework", "blazor.webassembly.js");
173+
Assert.FileExists(result, blazorPublishDirectory, "dist", "_framework", "wasm", "mono.wasm");
174+
Assert.FileExists(result, blazorPublishDirectory, "dist", "_framework", "wasm", "mono.js");
175+
Assert.FileExists(result, blazorPublishDirectory, "dist", "_framework", "_bin", "standalone.dll");
176+
Assert.FileExists(result, blazorPublishDirectory, "dist", "_framework", "_bin", "Microsoft.Extensions.Logging.Abstractions.dll"); // Verify dependencies are part of the output.
177+
178+
// Verify static assets are in the publish directory
179+
Assert.FileExists(result, blazorPublishDirectory, "dist", "index.html");
180+
181+
// Verify static web assets from referenced projects are copied.
182+
// Uncomment once https://github.com/aspnet/AspNetCore/issues/17426 is resolved.
183+
// Assert.FileExists(result, publishDirectory, "wwwroot", "_content", "RazorClassLibrary", "wwwroot", "exampleJsInterop.js");
184+
// Assert.FileExists(result, publishDirectory, "wwwroot", "_content", "RazorClassLibrary", "styles.css");
185+
186+
// Verify static assets are in the publish directory
187+
Assert.FileExists(result, blazorPublishDirectory, "dist", "index.html");
188+
189+
// Verify web.config
190+
Assert.FileExists(result, publishDirectory, "web.config");
191+
}
76192
}
77193
}

src/Components/Blazor/Build/test/Microsoft.AspNetCore.Blazor.Build.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
<Target Name="RestoreTestAssets" AfterTargets="Restore;Build" Condition="'$(DotNetBuildFromSource)' != 'true'">
4848
<ItemGroup>
4949
<_TestAsset Include="..\testassets\standalone\standalone.csproj" />
50+
<_TestAsset Include="..\testassets\blazorhosted\blazorhosted.csproj" />
5051
</ItemGroup>
5152

5253
<MSBuild
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using System;
2+
using Microsoft.AspNetCore;
3+
using Microsoft.AspNetCore.Hosting;
4+
using Microsoft.Extensions.Configuration;
5+
6+
namespace blazorhosted.Server
7+
{
8+
public class Program
9+
{
10+
public static void Main(string[] args)
11+
{
12+
Console.WriteLine(typeof(IWebHost));
13+
}
14+
}
15+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<Project Sdk="Microsoft.NET.Sdk.Web">
2+
3+
<PropertyGroup>
4+
<TargetFramework>netcoreapp3.1</TargetFramework>
5+
</PropertyGroup>
6+
7+
<ItemGroup>
8+
<ProjectReference Include="..\standalone\standalone.csproj" />
9+
</ItemGroup>
10+
11+
</Project>

0 commit comments

Comments
 (0)