File: WebViewManagerE2ETests.cs
Web Access
Project: src\src\Components\WebView\test\E2ETest\Microsoft.AspNetCore.Components.WebViewE2E.Test.csproj (Microsoft.AspNetCore.Components.WebViewE2E.Test)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System.Diagnostics;
using Microsoft.AspNetCore.InternalTesting;
 
namespace Microsoft.AspNetCore.Components.WebViewE2E.Test;
 
public class WebViewManagerE2ETests
{
    // Skips:
    // - Ubuntu is skipped due to this error:
    //       "Unable to load shared library 'Photino.Native' or one of its dependencies. In order to help diagnose
    //       loading problems, consider using a tool like strace."
    //   There's probably some way to make it work, but it's not currently a supported Blazor Hybrid scenario anyway
    // - macOS is skipped due to the test not being able to detect when the WebView is ready. There's probably an issue
    //   with the JS code sending a WebMessage to C# and not being sent properly or detected properly.
    [ConditionalFact]
    [OSSkipCondition(OperatingSystems.Linux | OperatingSystems.MacOSX,
        SkipReason = "On Helix/Ubuntu the native Photino assemblies can't be found, and on macOS it can't detect when the WebView is ready")]
    [QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/50802")]
    public async Task CanLaunchPhotinoWebViewAndClickButton()
    {
        var photinoTestProgramExePath = typeof(WebViewManagerE2ETests).Assembly.Location;
 
        // This test launches this very test assembly as an executable so that the Photino UI window
        // can launch and be automated. See the comment in Program.Main() for more info.
        var photinoProcess = new Process()
        {
            StartInfo = new ProcessStartInfo
            {
                WorkingDirectory = Path.GetDirectoryName(photinoTestProgramExePath),
                FileName = "dotnet",
                Arguments = $"\"{photinoTestProgramExePath}\"",
                RedirectStandardOutput = true,
            },
        };
 
        photinoProcess.Start();
 
        var testProgramOutput = photinoProcess.StandardOutput.ReadToEnd();
 
        await photinoProcess.WaitForExitAsync().TimeoutAfter(TimeSpan.FromSeconds(30));
 
        // The test app reports its own results by calling Console.WriteLine(), so here we only need to verify that
        // the test internally believes it passed (and we trust it!).
        Assert.Contains($"Test passed? {true}", testProgramOutput);
    }
}