diff --git a/eng/Dependencies.props b/eng/Dependencies.props
index 8dd976051839..8b2bd9ca7d15 100644
--- a/eng/Dependencies.props
+++ b/eng/Dependencies.props
@@ -181,6 +181,7 @@ and are generated based on the last package release.
+
diff --git a/eng/Versions.props b/eng/Versions.props
index 96cc0344e36d..f2a6c48cf541 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -252,6 +252,7 @@
89.0.4389.2300-beta
4.0.0-beta1
1.4.0
+ 2.0.0
4.0.0
2.0.593
3.1.1
diff --git a/eng/helix/content/RunTests/TestRunner.cs b/eng/helix/content/RunTests/TestRunner.cs
index 2a48452d7356..993365dd97dc 100644
--- a/eng/helix/content/RunTests/TestRunner.cs
+++ b/eng/helix/content/RunTests/TestRunner.cs
@@ -48,6 +48,9 @@ public bool SetupEnvironment()
var playwrightBrowsers = Path.Combine(helixDir, "ms-playwright");
Console.WriteLine($"Setting PLAYWRIGHT_BROWSERS_PATH: {playwrightBrowsers}");
EnvironmentVariables.Add("PLAYWRIGHT_BROWSERS_PATH", playwrightBrowsers);
+
+ Console.WriteLine($"Setting playwright console logging to warning: Logging__Console__LogLevel__PlaywrightSharp = Warning");
+ EnvironmentVariables.Add("Logging__Console__LogLevel__PlaywrightSharp", "Warning");
#endif
Console.WriteLine($"Creating nuget restore directory: {nugetRestore}");
diff --git a/src/ProjectTemplates/BlazorTemplates.Tests/BlazorServerTemplateTest.cs b/src/ProjectTemplates/BlazorTemplates.Tests/BlazorServerTemplateTest.cs
index 0fc61a174167..bb8f2961ccb6 100644
--- a/src/ProjectTemplates/BlazorTemplates.Tests/BlazorServerTemplateTest.cs
+++ b/src/ProjectTemplates/BlazorTemplates.Tests/BlazorServerTemplateTest.cs
@@ -9,6 +9,8 @@
using System.Threading.Tasks;
using Microsoft.AspNetCore.BrowserTesting;
using Microsoft.AspNetCore.Testing;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Logging.Testing;
using PlaywrightSharp;
using ProjectTemplates.Tests.Infrastructure;
using Templates.Test.Helpers;
@@ -17,19 +19,16 @@
namespace Templates.Test
{
+ [LogLevel(LogLevel.Debug)]
public class BlazorServerTemplateTest : BlazorTemplateTest
{
- public BlazorServerTemplateTest(ProjectFactoryFixture projectFactory, PlaywrightFixture fixture, ITestOutputHelper output)
+ public BlazorServerTemplateTest(ProjectFactoryFixture projectFactory, PlaywrightFixture fixture)
: base(fixture)
{
ProjectFactory = projectFactory; ;
- Output = output;
- BrowserContextInfo = new ContextInformation(CreateFactory(output));
}
public ProjectFactoryFixture ProjectFactory { get; set; }
- public ITestOutputHelper Output { get; }
- public ContextInformation BrowserContextInfo { get; }
public Project Project { get; private set; }
@@ -40,7 +39,7 @@ public async Task BlazorServerTemplateWorks_NoAuth(BrowserKind browserKind)
// Additional arguments are needed. See: https://github.com/dotnet/aspnetcore/issues/24278
Environment.SetEnvironmentVariable("EnableDefaultScopedCssItems", "true");
- Project = await ProjectFactory.GetOrCreateProject("blazorservernoauth" + browserKind.ToString(), Output);
+ Project = await ProjectFactory.GetOrCreateProject("blazorservernoauth" + browserKind.ToString(), TestOutputHelper );
var createResult = await Project.RunDotNetNewAsync("blazorserver");
Assert.True(0 == createResult.ExitCode, ErrorMessages.GetFailedProcessMessage("create/restore", Project, createResult));
@@ -111,7 +110,7 @@ public async Task BlazorServerTemplateWorks_IndividualAuth(BrowserKind browserKi
// Additional arguments are needed. See: https://github.com/dotnet/aspnetcore/issues/24278
Environment.SetEnvironmentVariable("EnableDefaultScopedCssItems", "true");
- Project = await ProjectFactory.GetOrCreateProject("blazorserverindividual" + browserKind + (useLocalDB ? "uld" : ""), Output);
+ Project = await ProjectFactory.GetOrCreateProject("blazorserverindividual" + browserKind + (useLocalDB ? "uld" : ""), TestOutputHelper );
var createResult = await Project.RunDotNetNewAsync("blazorserver", auth: "Individual", useLocalDB: useLocalDB);
Assert.True(0 == createResult.ExitCode, ErrorMessages.GetFailedProcessMessage("create/restore", Project, createResult));
@@ -216,7 +215,7 @@ private async Task TestBasicNavigation(IPage page)
[InlineData("SingleOrg", new string[] { "--calls-graph" })]
public async Task BlazorServerTemplat_IdentityWeb_BuildAndPublish(string auth, string[] args)
{
- Project = await ProjectFactory.GetOrCreateProject("blazorserveridweb" + Guid.NewGuid().ToString().Substring(0, 10).ToLowerInvariant(), Output);
+ Project = await ProjectFactory.GetOrCreateProject("blazorserveridweb" + Guid.NewGuid().ToString().Substring(0, 10).ToLowerInvariant(), TestOutputHelper );
var createResult = await Project.RunDotNetNewAsync("blazorserver", auth: auth, args: args);
Assert.True(0 == createResult.ExitCode, ErrorMessages.GetFailedProcessMessage("create/restore", Project, createResult));
diff --git a/src/ProjectTemplates/BlazorTemplates.Tests/BlazorTemplateTest.cs b/src/ProjectTemplates/BlazorTemplates.Tests/BlazorTemplateTest.cs
index 4057e99fec6a..0c28674a9a7c 100644
--- a/src/ProjectTemplates/BlazorTemplates.Tests/BlazorTemplateTest.cs
+++ b/src/ProjectTemplates/BlazorTemplates.Tests/BlazorTemplateTest.cs
@@ -1,8 +1,10 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+using System.Reflection;
using System.Runtime.InteropServices;
using Microsoft.AspNetCore.BrowserTesting;
+using Microsoft.AspNetCore.Testing;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Testing;
using ProjectTemplates.Tests.Infrastructure;
@@ -11,7 +13,7 @@
namespace Templates.Test
{
- public class BlazorTemplateTest
+ public class BlazorTemplateTest : LoggedTest
{
public BlazorTemplateTest(PlaywrightFixture browserFixture)
{
@@ -19,18 +21,18 @@ public BlazorTemplateTest(PlaywrightFixture browserFix
}
public PlaywrightFixture Fixture { get; }
+ public ContextInformation BrowserContextInfo { get; private set; }
-
- public static ILoggerFactory CreateFactory(ITestOutputHelper output)
+ public override void Initialize(TestContext context, MethodInfo methodInfo, object[] testMethodArguments, ITestOutputHelper testOutputHelper)
{
- var testSink = new TestSink();
- testSink.MessageLogged += LogMessage;
- var loggerFactory = new TestLoggerFactory(testSink, enabled: true);
- return loggerFactory;
+ base.Initialize(context, methodInfo, testMethodArguments, testOutputHelper);
+ TestSink.MessageLogged += LogMessage;
+ BrowserContextInfo = new ContextInformation(LoggerFactory);
+
void LogMessage(WriteContext ctx)
{
- output.WriteLine($"{MapLogLevel(ctx)}: [Browser]{ctx.Message}");
+ testOutputHelper.WriteLine($"{MapLogLevel(ctx)}: [Browser]{ctx.Message}");
static string MapLogLevel(WriteContext obj) => obj.LogLevel switch
{
diff --git a/src/ProjectTemplates/BlazorTemplates.Tests/BlazorTemplates.Tests.csproj b/src/ProjectTemplates/BlazorTemplates.Tests/BlazorTemplates.Tests.csproj
index 8001d254d00c..b8c36467abc6 100644
--- a/src/ProjectTemplates/BlazorTemplates.Tests/BlazorTemplates.Tests.csproj
+++ b/src/ProjectTemplates/BlazorTemplates.Tests/BlazorTemplates.Tests.csproj
@@ -45,6 +45,7 @@
+
false
true
diff --git a/src/ProjectTemplates/BlazorTemplates.Tests/BlazorWasmTemplateTest.cs b/src/ProjectTemplates/BlazorTemplates.Tests/BlazorWasmTemplateTest.cs
index d917e71ca32a..5d285975c541 100644
--- a/src/ProjectTemplates/BlazorTemplates.Tests/BlazorWasmTemplateTest.cs
+++ b/src/ProjectTemplates/BlazorTemplates.Tests/BlazorWasmTemplateTest.cs
@@ -15,6 +15,8 @@
using Microsoft.AspNetCore.Internal;
using Microsoft.AspNetCore.Testing;
using Microsoft.Extensions.CommandLineUtils;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Logging.Testing;
using Newtonsoft.Json.Linq;
using PlaywrightSharp;
using ProjectTemplates.Tests.Infrastructure;
@@ -24,22 +26,17 @@
namespace Templates.Test
{
+ [LogLevel(LogLevel.Debug)]
public class BlazorWasmTemplateTest : BlazorTemplateTest
{
- public BlazorWasmTemplateTest(ProjectFactoryFixture projectFactory, PlaywrightFixture browserFixture, ITestOutputHelper output)
+ public BlazorWasmTemplateTest(ProjectFactoryFixture projectFactory, PlaywrightFixture browserFixture)
: base(browserFixture)
{
ProjectFactory = projectFactory;
- Output = output;
- BrowserContextInfo = new ContextInformation(CreateFactory(output));
}
public ProjectFactoryFixture ProjectFactory { get; set; }
- public ITestOutputHelper Output { get; }
-
- public ContextInformation BrowserContextInfo { get; }
-
[Theory]
[InlineData(BrowserKind.Chromium)]
public async Task BlazorWasmStandaloneTemplate_Works(BrowserKind browserKind)
@@ -47,7 +44,7 @@ public async Task BlazorWasmStandaloneTemplate_Works(BrowserKind browserKind)
// Additional arguments are needed. See: https://github.com/dotnet/aspnetcore/issues/24278
Environment.SetEnvironmentVariable("EnableDefaultScopedCssItems", "true");
- var project = await ProjectFactory.GetOrCreateProject("blazorstandalone" + browserKind, Output);
+ var project = await ProjectFactory.GetOrCreateProject("blazorstandalone" + browserKind, TestOutputHelper);
var createResult = await project.RunDotNetNewAsync("blazorwasm");
Assert.True(0 == createResult.ExitCode, ErrorMessages.GetFailedProcessMessage("create/restore", project, createResult));
@@ -67,7 +64,7 @@ public async Task BlazorWasmStandaloneTemplate_Works(BrowserKind browserKind)
var (serveProcess, listeningUri) = RunPublishedStandaloneBlazorProject(project);
using (serveProcess)
{
- Output.WriteLine($"Opening browser at {listeningUri}...");
+ TestOutputHelper.WriteLine($"Opening browser at {listeningUri}...");
if (Fixture.BrowserManager.IsAvailable(browserKind))
{
await using var browser = await Fixture.BrowserManager.GetBrowserInstance(browserKind, BrowserContextInfo);
@@ -79,6 +76,8 @@ public async Task BlazorWasmStandaloneTemplate_Works(BrowserKind browserKind)
EnsureBrowserAvailable(browserKind);
}
}
+
+ Assert.True(0 == 1);
}
private async Task NavigateToPage(IBrowserContext browser, string listeningUri)
@@ -95,7 +94,7 @@ public async Task BlazorWasmHostedTemplate_Works(BrowserKind browserKind)
// Additional arguments are needed. See: https://github.com/dotnet/aspnetcore/issues/24278
Environment.SetEnvironmentVariable("EnableDefaultScopedCssItems", "true");
- var project = await ProjectFactory.GetOrCreateProject("blazorhosted" + browserKind, Output);
+ var project = await ProjectFactory.GetOrCreateProject("blazorhosted" + browserKind, TestOutputHelper);
var createResult = await project.RunDotNetNewAsync("blazorwasm", args: new[] { "--hosted" });
Assert.True(0 == createResult.ExitCode, ErrorMessages.GetFailedProcessMessage("create/restore", project, createResult));
@@ -154,7 +153,7 @@ public async Task BlazorWasmStandalonePwaTemplate_Works(BrowserKind browserKind)
// Additional arguments are needed. See: https://github.com/dotnet/aspnetcore/issues/24278
Environment.SetEnvironmentVariable("EnableDefaultScopedCssItems", "true");
- var project = await ProjectFactory.GetOrCreateProject("blazorstandalonepwa", Output);
+ var project = await ProjectFactory.GetOrCreateProject("blazorstandalonepwa", TestOutputHelper);
var createResult = await project.RunDotNetNewAsync("blazorwasm", args: new[] { "--pwa" });
Assert.True(0 == createResult.ExitCode, ErrorMessages.GetFailedProcessMessage("create/restore", project, createResult));
@@ -173,7 +172,7 @@ public async Task BlazorWasmStandalonePwaTemplate_Works(BrowserKind browserKind)
{
var (serveProcess, listeningUri) = RunPublishedStandaloneBlazorProject(project);
await using var browser = await Fixture.BrowserManager.GetBrowserInstance(browserKind, BrowserContextInfo);
- Output.WriteLine($"Opening browser at {listeningUri}...");
+ TestOutputHelper.WriteLine($"Opening browser at {listeningUri}...");
var page = await NavigateToPage(browser, listeningUri);
using (serveProcess)
{
@@ -201,7 +200,7 @@ public async Task BlazorWasmHostedPwaTemplate_Works(BrowserKind browserKind)
// Additional arguments are needed. See: https://github.com/dotnet/aspnetcore/issues/24278
Environment.SetEnvironmentVariable("EnableDefaultScopedCssItems", "true");
- var project = await ProjectFactory.GetOrCreateProject("blazorhostedpwa", Output);
+ var project = await ProjectFactory.GetOrCreateProject("blazorhostedpwa", TestOutputHelper);
var createResult = await project.RunDotNetNewAsync("blazorwasm", args: new[] { "--hosted", "--pwa" });
Assert.True(0 == createResult.ExitCode, ErrorMessages.GetFailedProcessMessage("create/restore", project, createResult));
@@ -297,7 +296,7 @@ private async Task BlazorWasmHostedTemplate_IndividualAuth_Works(BrowserKind bro
// Additional arguments are needed. See: https://github.com/dotnet/aspnetcore/issues/24278
Environment.SetEnvironmentVariable("EnableDefaultScopedCssItems", "true");
- var project = await ProjectFactory.GetOrCreateProject("blazorhostedindividual" + browserKind + (useLocalDb ? "uld" : ""), Output);
+ var project = await ProjectFactory.GetOrCreateProject("blazorhostedindividual" + browserKind + (useLocalDb ? "uld" : ""), TestOutputHelper);
var createResult = await project.RunDotNetNewAsync("blazorwasm", args: new[] { "--hosted", "-au", "Individual", useLocalDb ? "-uld" : "" });
Assert.True(0 == createResult.ExitCode, ErrorMessages.GetFailedProcessMessage("create/restore", project, createResult));
@@ -370,7 +369,7 @@ public async Task BlazorWasmStandaloneTemplate_IndividualAuth_Works(BrowserKind
// Additional arguments are needed. See: https://github.com/dotnet/aspnetcore/issues/24278
Environment.SetEnvironmentVariable("EnableDefaultScopedCssItems", "true");
- var project = await ProjectFactory.GetOrCreateProject("blazorstandaloneindividual" + browserKind, Output);
+ var project = await ProjectFactory.GetOrCreateProject("blazorstandaloneindividual" + browserKind, TestOutputHelper);
var createResult = await project.RunDotNetNewAsync("blazorwasm", args: new[] {
"-au",
@@ -402,7 +401,7 @@ public async Task BlazorWasmStandaloneTemplate_IndividualAuth_Works(BrowserKind
var (serveProcess, listeningUri) = RunPublishedStandaloneBlazorProject(project);
using (serveProcess)
{
- Output.WriteLine($"Opening browser at {listeningUri}...");
+ TestOutputHelper.WriteLine($"Opening browser at {listeningUri}...");
await using var browser = await Fixture.BrowserManager.GetBrowserInstance(browserKind, BrowserContextInfo);
var page = await NavigateToPage(browser, listeningUri);
await TestBasicNavigation(project.ProjectName, page);
@@ -483,7 +482,7 @@ public TemplateInstance(string name, params string[] arguments)
[MemberData(nameof(TemplateData))]
public async Task BlazorWasmHostedTemplate_AzureActiveDirectoryTemplate_Works(TemplateInstance instance)
{
- var project = await ProjectFactory.GetOrCreateProject(instance.Name, Output);
+ var project = await ProjectFactory.GetOrCreateProject(instance.Name, TestOutputHelper);
project.TargetFramework = "netstandard2.1";
var createResult = await project.RunDotNetNewAsync("blazorwasm", args: instance.Arguments);
@@ -652,7 +651,7 @@ private void UpdatePublishedSettings(Project serverProject)
{
var publishDir = Path.Combine(project.TemplatePublishDir, "wwwroot");
- Output.WriteLine("Running dotnet serve on published output...");
+ TestOutputHelper.WriteLine("Running dotnet serve on published output...");
var developmentCertificate = DevelopmentCertificate.Create(project.TemplateOutputDir);
var args = $"-S --pfx \"{developmentCertificate.CertificatePath}\" --pfx-pwd \"{developmentCertificate.CertificatePassword}\" --port 0";
var command = DotNetMuxer.MuxerPathOrDefault();
@@ -666,7 +665,7 @@ private void UpdatePublishedSettings(Project serverProject)
args = "--roll-forward LatestMajor " + args; // dotnet-serve targets net5.0 by default
}
- var serveProcess = ProcessEx.Run(Output, publishDir, command, args);
+ var serveProcess = ProcessEx.Run(TestOutputHelper, publishDir, command, args);
var listeningUri = ResolveListeningUrl(serveProcess);
return (serveProcess, listeningUri);
}
diff --git a/src/ProjectTemplates/BlazorTemplates.Tests/PlaywrightFixture.cs b/src/ProjectTemplates/BlazorTemplates.Tests/PlaywrightFixture.cs
index f5ad94c908d3..842919f2c968 100644
--- a/src/ProjectTemplates/BlazorTemplates.Tests/PlaywrightFixture.cs
+++ b/src/ProjectTemplates/BlazorTemplates.Tests/PlaywrightFixture.cs
@@ -9,6 +9,7 @@
using System.Threading.Tasks;
using Microsoft.AspNetCore.BrowserTesting;
using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Testing;
using Xunit;
using Xunit.Abstractions;
@@ -65,6 +66,11 @@ public async Task InitializeAsync()
var sink = new TestSink();
sink.MessageLogged += LogBrowserManagerMessage;
var factory = new TestLoggerFactory(sink, enabled: true);
+ var helixUploadDir = Environment.GetEnvironmentVariable("HELIX_WORKITEM_UPLOAD_ROOT");
+ if (!string.IsNullOrEmpty(helixUploadDir))
+ {
+ factory.AddFile(Path.Combine(helixUploadDir, "playwright-fixture.log"));
+ }
BrowserManager = await BrowserManager.CreateAsync(_configuration, factory);
}
diff --git a/src/Shared/BrowserTesting/src/BrowserManager.cs b/src/Shared/BrowserTesting/src/BrowserManager.cs
index 20f970736e27..ede459195318 100644
--- a/src/Shared/BrowserTesting/src/BrowserManager.cs
+++ b/src/Shared/BrowserTesting/src/BrowserManager.cs
@@ -46,7 +46,7 @@ private async Task InitializeAsync()
async Task InitializeCore()
{
- Playwright = await PlaywrightSharp.Playwright.CreateAsync(_loggerFactory/*, debug: "pw:api"*/);
+ Playwright = await PlaywrightSharp.Playwright.CreateAsync(_loggerFactory, debug: "pw:api");
foreach (var (browserName, options) in _browserManagerConfiguration.BrowserOptions)
{
if (!_launchBrowsers.ContainsKey(browserName))