diff --git a/.azure/pipelines/ci.yml b/.azure/pipelines/ci.yml index 1c716b2d4066..3f1f8f1a9aed 100644 --- a/.azure/pipelines/ci.yml +++ b/.azure/pipelines/ci.yml @@ -697,7 +697,7 @@ stages: # Just uploading artifacts/logs/ files can take 15 minutes. Doubling the cancel timeout for this job. cancelTimeoutInMinutes: 30 buildArgs: -all -pack -test -binaryLog /p:SkipHelixReadyTests=true /p:SkipIISNewHandlerTests=true /p:SkipIISTests=true - /p:SkipIISExpressTests=true /p:SkipIISNewShimTests=true /p:RunTemplateTests=false + /p:SkipIISExpressTests=true /p:SkipIISNewShimTests=true /p:RunTemplateTests=false /p:RunBlazorPlaywrightTemplateTests=true $(_InternalRuntimeDownloadArgs) beforeBuild: - powershell: "& ./src/Servers/IIS/tools/UpdateIISExpressCertificate.ps1; & ./src/Servers/IIS/tools/update_schema.ps1" diff --git a/eng/RequiresDelayedBuildProjects.props b/eng/RequiresDelayedBuildProjects.props index 0951a943c555..75ab8a61e6db 100644 --- a/eng/RequiresDelayedBuildProjects.props +++ b/eng/RequiresDelayedBuildProjects.props @@ -16,5 +16,6 @@ + diff --git a/eng/Versions.props b/eng/Versions.props index d4176dab7a80..dbca08fa2260 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -280,7 +280,7 @@ 13.0.1 13.0.4 1.1.6 - 1.17.3 + 1.28.0 3.0.0 7.2.3 4.7.0 diff --git a/eng/tools/GenerateFiles/Directory.Build.props.in b/eng/tools/GenerateFiles/Directory.Build.props.in index c3502bee4217..13205d2f4961 100644 --- a/eng/tools/GenerateFiles/Directory.Build.props.in +++ b/eng/tools/GenerateFiles/Directory.Build.props.in @@ -1,6 +1,7 @@ ${DefaultNetCoreTargetFramework} + ${ArtifactsShippingPackagesDir} true ${LibNetHostAppPackVersion} diff --git a/eng/tools/GenerateFiles/GenerateFiles.csproj b/eng/tools/GenerateFiles/GenerateFiles.csproj index 0b6322f44b1f..e23567530a1b 100644 --- a/eng/tools/GenerateFiles/GenerateFiles.csproj +++ b/eng/tools/GenerateFiles/GenerateFiles.csproj @@ -26,7 +26,8 @@ MicrosoftNETCoreAppRuntimeVersion=$(MicrosoftNETCoreAppRuntimeVersion); MicrosoftPlaywrightCLIVersion=$(MicrosoftPlaywrightCLIVersion); LibNetHostAppPackVersion=$(BundledNETCoreAppPackageVersion); - SupportedRuntimeIdentifiers=$(SupportedRuntimeIdentifiers.Trim()) + SupportedRuntimeIdentifiers=$(SupportedRuntimeIdentifiers.Trim()); + ArtifactsShippingPackagesDir=$(ArtifactsShippingPackagesDir) diff --git a/src/ProjectTemplates/README.md b/src/ProjectTemplates/README.md index b5ea7e11b861..62fdb426a975 100644 --- a/src/ProjectTemplates/README.md +++ b/src/ProjectTemplates/README.md @@ -71,6 +71,18 @@ Then, use one of: previous step, it is NOT advised that you install templates created on your local machine using just `dotnet new -i [nupkgPath]`. +#### Running Blazor Playwright Template Tests + +1. From the root of the repo, build the templates: `.\eng\build.cmd -all -pack` +2. `cd .\src\ProjectTemplates\test\Templates.Blazor.Tests` +3. `dotnet test .\Templates.Blazor.Tests.csproj` with optional `--filter` arg to run a specific test. + +The requisite browsers should be automatically installed. If you encounter browser errors, the browsers can be manually installed via the following script, replacing `[TFM]` with the current target TFM (ex. `net8.0`). + +```cmd +.\bin\Debug\[TFM]\playwright.ps1 install +``` + #### Conditional tests & skipping test platforms Individual test methods can be decorated with attributes to configure them to not run ("skip running") on certain platforms. The `[ConditionalFact]` and `[ConditionalTheory]` attributes must be used on tests using the skip attributes in order for them to actually be skipped: diff --git a/src/ProjectTemplates/Shared/TemplatePackageInstaller.cs b/src/ProjectTemplates/Shared/TemplatePackageInstaller.cs index 40325ebf134b..05ed84845f1a 100644 --- a/src/ProjectTemplates/Shared/TemplatePackageInstaller.cs +++ b/src/ProjectTemplates/Shared/TemplatePackageInstaller.cs @@ -99,6 +99,11 @@ private static async Task InstallTemplatePackages(ITestOutputHelper output) .Where(p => _templatePackages.Any(t => Path.GetFileName(p).StartsWith(t, StringComparison.OrdinalIgnoreCase))) .ToArray(); + if (builtPackages.Length == 0) + { + throw new InvalidOperationException($"Failed to find required templates in {packagesDir}. Please ensure the *Templates*.nupkg have been built."); + } + Assert.Equal(4, builtPackages.Length); await VerifyCannotFindTemplateAsync(output, "web"); diff --git a/src/ProjectTemplates/TestInfrastructure/Directory.Build.props.in b/src/ProjectTemplates/TestInfrastructure/Directory.Build.props.in index a2f7a41bd7e0..88c7d6173021 100644 --- a/src/ProjectTemplates/TestInfrastructure/Directory.Build.props.in +++ b/src/ProjectTemplates/TestInfrastructure/Directory.Build.props.in @@ -7,4 +7,7 @@ + + $(RestoreAdditionalProjectSources);$(ArtifactsShippingPackagesDir) + diff --git a/src/ProjectTemplates/test/Templates.Blazor.Tests/BlazorServerTemplateTest.cs b/src/ProjectTemplates/test/Templates.Blazor.Tests/BlazorServerTemplateTest.cs index 5681de730647..6e96fdd96c1d 100644 --- a/src/ProjectTemplates/test/Templates.Blazor.Tests/BlazorServerTemplateTest.cs +++ b/src/ProjectTemplates/test/Templates.Blazor.Tests/BlazorServerTemplateTest.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.Linq; using System.Net; +using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.BrowserTesting; using Microsoft.AspNetCore.Testing; @@ -25,7 +26,7 @@ public BlazorServerTemplateTest(ProjectFactoryFixture projectFactory) public override string ProjectType { get; } = "blazorserver"; - [Theory(Skip = "https://github.com/dotnet/aspnetcore/issues/30761")] + [Theory] [InlineData(BrowserKind.Chromium)] public async Task BlazorServerTemplateWorks_NoAuth(BrowserKind browserKind) { @@ -77,11 +78,8 @@ await BrowserManager.GetBrowserInstance(browserKind, BrowserContextInfo) : } } - public static IEnumerable BlazorServerTemplateWorks_IndividualAuthData => - BrowserManager.WithBrowsers(new[] { BrowserKind.Chromium }, true, false); - - [Theory(Skip = "https://github.com/dotnet/aspnetcore/issues/30882")] - [MemberData(nameof(BlazorServerTemplateWorks_IndividualAuthData))] + [InlineData(BrowserKind.Chromium)] + [Theory] [SkipOnHelix("https://github.com/dotnet/aspnetcore/issues/30825", Queues = "All.OSX")] public async Task BlazorServerTemplateWorks_IndividualAuth(BrowserKind browserKind) { @@ -134,29 +132,9 @@ public async Task BlazorServerTemplateWorks_IndividualAuth(BrowserKind browserKi private async Task TestBasicNavigation(IPage page) { - var socket = await page.WaitForWebSocketAsync(); - - var framesReceived = 0; - var framesSent = 0; - - void FrameReceived(object sender, IWebSocketFrame frame) { framesReceived++; } - void FrameSent(object sender, IWebSocketFrame frame) { framesSent++; } - - socket.FrameReceived += FrameReceived; - socket.FrameSent += FrameSent; + // Wait for the page to load, and the connection to idle for >500ms + await page.WaitForLoadStateAsync(LoadState.NetworkIdle, new() { Timeout = 60_000 }); - // Receive render batch - await page.WaitForWebSocketAsync(new() { Predicate = (s) => framesReceived == 1 }); - await page.WaitForWebSocketAsync(new() { Predicate = (s) => framesSent == 1 }); - - // JS interop call to intercept navigation - await page.WaitForWebSocketAsync(new() { Predicate = (s) => framesReceived == 2 }); - await page.WaitForWebSocketAsync(new() { Predicate = (s) => framesSent == 2 }); - - socket.FrameReceived -= FrameReceived; - socket.FrameSent -= FrameSent; - - await page.WaitForSelectorAsync("nav"); // element gets project ID injected into it during template execution Assert.Equal("Index", (await page.TitleAsync()).Trim()); @@ -168,10 +146,13 @@ private async Task TestBasicNavigation(IPage page) await page.WaitForSelectorAsync("h1+p >> text=Current count: 0"); // Clicking the counter button works - await page.ClickAsync("p+button >> text=Click me"); - await page.WaitForSelectorAsync("h1+p >> text=Current count: 1"); + for (var i = 1; i <= 3; i++) + { + await page.ClickAsync("p+button >> text=Click me"); + await page.WaitForSelectorAsync($"h1+p >> text=Current count: {i}"); + } - // Can navigate to the 'fetch data' page + // Can navigate to the 'Fetch Data' page await page.ClickAsync("a[href=fetchdata] >> text=Fetch data"); await page.WaitForSelectorAsync("h1 >> text=Weather forecast"); @@ -180,7 +161,7 @@ private async Task TestBasicNavigation(IPage page) Assert.Equal(5, await page.Locator("p+table>tbody>tr").CountAsync()); } - [Theory(Skip = "https://github.com/dotnet/aspnetcore/issues/30882")] + [Theory(Skip="https://github.com/dotnet/aspnetcore/issues/46430")] [InlineData("IndividualB2C", null)] [InlineData("IndividualB2C", new [] { "--called-api-url \"https://graph.microsoft.com\"", "--called-api-scopes user.readwrite" })] [InlineData("SingleOrg", null)] diff --git a/src/ProjectTemplates/test/Templates.Blazor.Tests/BlazorTemplateTest.cs b/src/ProjectTemplates/test/Templates.Blazor.Tests/BlazorTemplateTest.cs index d8fa6d3d8e76..cfded6021e29 100644 --- a/src/ProjectTemplates/test/Templates.Blazor.Tests/BlazorTemplateTest.cs +++ b/src/ProjectTemplates/test/Templates.Blazor.Tests/BlazorTemplateTest.cs @@ -18,6 +18,7 @@ public abstract class BlazorTemplateTest : BrowserTestBase public BlazorTemplateTest(ProjectFactoryFixture projectFactory) { ProjectFactory = projectFactory; + Microsoft.Playwright.Program.Main(new[] { "install" }); } public ProjectFactoryFixture ProjectFactory { get; set; } diff --git a/src/ProjectTemplates/test/Templates.Blazor.Tests/BlazorWasmTemplateTest.cs b/src/ProjectTemplates/test/Templates.Blazor.Tests/BlazorWasmTemplateTest.cs index ff0073cff263..92714b1eca4d 100644 --- a/src/ProjectTemplates/test/Templates.Blazor.Tests/BlazorWasmTemplateTest.cs +++ b/src/ProjectTemplates/test/Templates.Blazor.Tests/BlazorWasmTemplateTest.cs @@ -23,7 +23,7 @@ public BlazorWasmTemplateTest(ProjectFactoryFixture projectFactory) public override string ProjectType { get; } = "blazorwasm"; - [Theory(Skip = "https://github.com/dotnet/aspnetcore/issues/30882")] + [Theory] [InlineData(BrowserKind.Chromium)] public async Task BlazorWasmStandaloneTemplate_Works(BrowserKind browserKind) { @@ -59,7 +59,7 @@ private static async Task<IPage> NavigateToPage(IBrowserContext browser, string return page; } - [Theory(Skip = "https://github.com/dotnet/aspnetcore/issues/30882")] + [Theory(Skip="https://github.com/dotnet/aspnetcore/issues/46430")] [InlineData(BrowserKind.Chromium)] public async Task BlazorWasmHostedTemplate_Works(BrowserKind browserKind) { @@ -107,7 +107,7 @@ private static async Task AssertCompressionFormat(AspNetProcess aspNetProcess, s Assert.Equal(expectedEncoding, response.Content.Headers.ContentEncoding.Single()); } - [Theory(Skip = "https://github.com/dotnet/aspnetcore/issues/30882")] + [Theory(Skip = "https://github.com/dotnet/aspnetcore/issues/45736")] [InlineData(BrowserKind.Chromium)] public async Task BlazorWasmStandalonePwaTemplate_Works(BrowserKind browserKind) { @@ -142,7 +142,7 @@ public async Task BlazorWasmStandalonePwaTemplate_Works(BrowserKind browserKind) } } - [Theory(Skip = "https://github.com/dotnet/aspnetcore/issues/30882")] + [Theory(Skip = "https://github.com/dotnet/aspnetcore/issues/45736")] [InlineData(BrowserKind.Chromium)] public async Task BlazorWasmHostedPwaTemplate_Works(BrowserKind browserKind) { @@ -212,7 +212,7 @@ private static void ValidatePublishedServiceWorker(Project project) Assert.True(serviceWorkerContents.Contains($"/* Manifest version: {serviceWorkerAssetsManifestVersion} */", StringComparison.Ordinal)); } - [ConditionalTheory(Skip = "https://github.com/dotnet/aspnetcore/issues/30882")] + [ConditionalTheory(Skip="https://github.com/dotnet/aspnetcore/issues/46430")] [InlineData(BrowserKind.Chromium)] // LocalDB doesn't work on non Windows platforms [OSSkipCondition(OperatingSystems.Linux | OperatingSystems.MacOSX)] @@ -220,7 +220,7 @@ public Task BlazorWasmHostedTemplate_IndividualAuth_Works_WithLocalDB(BrowserKin => BlazorWasmHostedTemplate_IndividualAuth_Works(browserKind, true); // This test depends on BlazorWasmTemplate_CreateBuildPublish_IndividualAuthNoLocalDb running first - [Theory(Skip = "https://github.com/dotnet/aspnetcore/issues/30882")] + [Theory(Skip="https://github.com/dotnet/aspnetcore/issues/46430")] [InlineData(BrowserKind.Chromium)] [SkipOnHelix("https://github.com/dotnet/aspnetcore/issues/30825", Queues = "All.OSX")] public Task BlazorWasmHostedTemplate_IndividualAuth_Works_WithOutLocalDB(BrowserKind browserKind) diff --git a/src/ProjectTemplates/test/Templates.Blazor.Tests/Templates.Blazor.Tests.csproj b/src/ProjectTemplates/test/Templates.Blazor.Tests/Templates.Blazor.Tests.csproj index d2447a390f60..b1995b145d1e 100644 --- a/src/ProjectTemplates/test/Templates.Blazor.Tests/Templates.Blazor.Tests.csproj +++ b/src/ProjectTemplates/test/Templates.Blazor.Tests/Templates.Blazor.Tests.csproj @@ -4,8 +4,12 @@ <TestGroupName>ProjectTemplates.Blazor.E2ETests</TestGroupName> <DefineConstants>$(DefineConstants);XPLAT</DefineConstants> + <RequiresDelayedBuild>true</RequiresDelayedBuild> + <RunTemplateTests Condition="'$(RunTemplateTests)' == ''">true</RunTemplateTests> - <SkipTests Condition="'$(RunTemplateTests)' != 'true'">true</SkipTests> + <RunBlazorPlaywrightTemplateTests Condition="'$(RunBlazorPlaywrightTemplateTests)' == ''">$(RunTemplateTests)</RunBlazorPlaywrightTemplateTests> + <SkipTests Condition="'$(RunBlazorPlaywrightTemplateTests)' != 'true'">true</SkipTests> + <BaseOutputPath /> <OutputPath /> @@ -47,6 +51,7 @@ <Reference Include="Microsoft.Extensions.Configuration.Json" /> <Reference Include="AngleSharp" /> <Reference Include="System.Net.Http" /> + <Reference Include="Microsoft.AspNetCore.Components.WebAssembly" /> <Reference Include="Microsoft.Playwright" Condition="'$(IsPlaywrightAvailable)' == 'true'" /> <Reference Include="Microsoft.Playwright" ExcludeAssets="build" Condition="'$(IsPlaywrightAvailable)' != 'true'" /> <ProjectReference Include="$(RepoRoot)src\Framework\App.Runtime\src\Microsoft.AspNetCore.App.Runtime.csproj" diff --git a/src/ProjectTemplates/test/Templates.Blazor.Tests/package.json b/src/ProjectTemplates/test/Templates.Blazor.Tests/package.json deleted file mode 100644 index cf27e5755093..000000000000 --- a/src/ProjectTemplates/test/Templates.Blazor.Tests/package.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "microsoft.aspnetcore.projecttemplates.tests", - "version": "0.0.1", - "description": "Not a real package. This file exists only to declare dependencies.", - "main": "index.js", - "private": true, - "scripts": { - "selenium-standalone": "selenium-standalone", - "prepare": "selenium-standalone install --config ../../../Shared/E2ETesting/selenium-config.json" - }, - "author": "", - "license": "MIT", - "dependencies": { - "selenium-standalone": "^7.1.0" - } -} diff --git a/src/ProjectTemplates/test/Templates.Blazor.Tests/yarn.lock b/src/ProjectTemplates/test/Templates.Blazor.Tests/yarn.lock deleted file mode 100644 index a5c50951974b..000000000000 --- a/src/ProjectTemplates/test/Templates.Blazor.Tests/yarn.lock +++ /dev/null @@ -1,436 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@sindresorhus/is@^4.0.0": - version "4.6.0" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" - integrity sha1-PHycRuZ4/u/nouW7YJ09vWZf+z8= - -"@szmarczak/http-timer@^4.0.5": - version "4.0.6" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" - integrity sha1-tKkUu2LnwnLU5Zif5EQPgSqx2Ac= - dependencies: - defer-to-connect "^2.0.0" - -"@types/cacheable-request@^6.0.1": - version "6.0.3" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" - integrity sha1-pDCzJgRmyntcpb/XNWk7Nuep0YM= - dependencies: - "@types/http-cache-semantics" "*" - "@types/keyv" "^3.1.4" - "@types/node" "*" - "@types/responselike" "^1.0.0" - -"@types/http-cache-semantics@*": - version "4.0.1" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" - integrity sha1-Dqe2FJaQK5WJDcTDoRa2DLja6BI= - -"@types/keyv@^3.1.4": - version "3.1.4" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" - integrity sha1-PM2xxnUbDH5SMAvNrNW8v4+qdbY= - dependencies: - "@types/node" "*" - -"@types/node@*": - version "18.11.18" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/node/-/node-18.11.18.tgz#8dfb97f0da23c2293e554c5a50d61ef134d7697f" - integrity sha1-jfuX8Nojwik+VUxaUNYe8TTXaX8= - -"@types/responselike@^1.0.0": - version "1.0.0" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" - integrity sha1-JR9P59FU0rrRJavhtCmyOv0mLik= - dependencies: - "@types/node" "*" - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha1-GxtEAWClv3rUC2UPCVljSBkDkwo= - -bl@^4.0.3: - version "4.1.0" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha1-RRU1JkGCvsL7vIOmKrmM8R2fezo= - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= - -buffer@^5.5.0: - version "5.7.1" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha1-umLnwTEzBTWCGXFghRqPZI6Z7tA= - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -cacheable-lookup@^5.0.3: - version "5.0.4" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" - integrity sha1-WmuGWyxENXvj1evCpGewMnGacAU= - -cacheable-request@^7.0.2: - version "7.0.2" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27" - integrity sha1-6g0LiJNkolhUdXMByhKy2nf5HSc= - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^4.0.0" - lowercase-keys "^2.0.0" - normalize-url "^6.0.1" - responselike "^2.0.0" - -clone-response@^1.0.2: - version "1.0.3" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" - integrity sha1-ryAyqkeBY5nPXwodDbkC9ReruMM= - dependencies: - mimic-response "^1.0.0" - -commander@^7.2.0: - version "7.2.0" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" - integrity sha1-o2y1fQtQHOEI5NIFWaFQo5HZerc= - -cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha1-9zqFudXUHQRVUcF34ogtSshXKKY= - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -debug@^4.3.1: - version "4.3.4" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha1-Exn2V5NX8jONMzfSzdSRS7XcyGU= - dependencies: - ms "2.1.2" - -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" - integrity sha1-yjh2Et234QS9FthaqwDV7PCcZvw= - dependencies: - mimic-response "^3.1.0" - -defer-to-connect@^2.0.0: - version "2.0.1" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" - integrity sha1-gBa9tBQ+RjK3ejRJxiNid95SBYc= - -end-of-stream@^1.1.0, end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha1-WuZKX0UFe682JuwU2gyl5LJDHrA= - dependencies: - once "^1.4.0" - -fd-slicer@~1.1.0: - version "1.1.0" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" - integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= - dependencies: - pend "~1.2.0" - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha1-a+Dem+mYzhavivwkSXue6bfM2a0= - -fs-extra@^10.0.0: - version "10.1.0" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha1-Aoc8+8QITd4SfqpfmQXu8jJdGr8= - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -get-stream@^5.1.0: - version "5.2.0" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha1-SWaheV7lrOZecGxLe+txJX1uItM= - dependencies: - pump "^3.0.0" - -got@^11.8.2: - version "11.8.6" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" - integrity sha1-J26Cfq2Hcu3bz8lxcFkLhBgjIzo= - dependencies: - "@sindresorhus/is" "^4.0.0" - "@szmarczak/http-timer" "^4.0.5" - "@types/cacheable-request" "^6.0.1" - "@types/responselike" "^1.0.0" - cacheable-lookup "^5.0.3" - cacheable-request "^7.0.2" - decompress-response "^6.0.0" - http2-wrapper "^1.0.0-beta.5.2" - lowercase-keys "^2.0.0" - p-cancelable "^2.0.0" - responselike "^2.0.0" - -graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.10" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha1-FH06AG2kyjzhRyjHrvwofDZ9emw= - -http-cache-semantics@^4.0.0: - version "4.1.0" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha1-SekcXL82yblLz81xwj1SSex045A= - -http2-wrapper@^1.0.0-beta.5.2: - version "1.0.3" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" - integrity sha1-uPVeDB8l1OvQizsMLAeflZCACz0= - dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.0.0" - -ieee754@^1.1.13: - version "1.2.1" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha1-jrehCmP/8l0VpXsAFYbRd9Gw01I= - -inherits@^2.0.3, inherits@^2.0.4: - version "2.0.4" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w= - -is-port-reachable@^3.0.0: - version "3.1.0" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/is-port-reachable/-/is-port-reachable-3.1.0.tgz#f6668d3bca9c36b07f737c48a8f875ab0653cd2b" - integrity sha1-9maNO8qcNrB/c3xIqPh1qwZTzSs= - -isexe@^2.0.0: - version "2.0.0" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha1-kziAKjDTtmBfvgYT4JQAjKjAWhM= - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha1-vFWyY0eTxnnsZAMJTrE2mKbsCq4= - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -keyv@^4.0.0: - version "4.5.2" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/keyv/-/keyv-4.5.2.tgz#0e310ce73bf7851ec702f2eaf46ec4e3805cce56" - integrity sha1-DjEM5zv3hR7HAvLq9G7E44BczlY= - dependencies: - json-buffer "3.0.1" - -lodash.mapvalues@^4.6.0: - version "4.6.0" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c" - integrity sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw= - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha1-VYqlO0O2YeGSWgr9+japoQhf5Xo= - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha1-JgPni3tLAAbLyi+8yKMgJVislHk= - -mimic-response@^1.0.0: - version "1.0.1" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha1-SSNTiHju9CBjy4o+OweYeBSHqxs= - -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" - integrity sha1-LR1Zr5wbEpgVrMwsRqAipc4fo8k= - -minimist@^1.2.5: - version "1.2.7" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" - integrity sha1-2qHE2R9Qc5BDfGqLwBB45wAMTRg= - -mkdirp@^1.0.4: - version "1.0.4" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha1-PrXtYmInVteaXw4qIh3+utdcL34= - -ms@2.1.2: - version "2.1.2" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk= - -normalize-url@^6.0.1: - version "6.1.0" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" - integrity sha1-QNCIW1Nd7/4/MUe+yHfQX+TFZoo= - -once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -p-cancelable@^2.0.0: - version "2.1.1" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" - integrity sha1-qrf71BZYL6MqPbSYWcEiSHxe0s8= - -path-key@^3.1.0: - version "3.1.1" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U= - -pend@~1.2.0: - version "1.2.0" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" - integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= - -progress@2.0.3: - version "2.0.3" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha1-foz42PW48jnBvGi+tOt4Vn1XLvg= - -pump@^3.0.0: - version "3.0.0" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ= - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -quick-lru@^5.1.1: - version "5.1.1" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" - integrity sha1-NmST5rPkKjpoheLpnRj4D7eoyTI= - -readable-stream@^3.1.1, readable-stream@^3.4.0: - version "3.6.0" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha1-M3u9o63AcGvT4CRCaihtS0sskZg= - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -resolve-alpn@^1.0.0: - version "1.2.1" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" - integrity sha1-t629rDVGqq7CC0Xn2CZZJwcnJvk= - -responselike@^2.0.0: - version "2.0.1" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" - integrity sha1-mgvI/cJS8/scymiwFlkQWboUIrw= - dependencies: - lowercase-keys "^2.0.0" - -safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY= - -selenium-standalone@^7.1.0: - version "7.1.0" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/selenium-standalone/-/selenium-standalone-7.1.0.tgz#1192a4ad84f114137dd5deadcb81b0f56afe054a" - integrity sha1-EZKkrYTxFBN91d6ty4Gw9Wr+BUo= - dependencies: - commander "^7.2.0" - cross-spawn "^7.0.3" - debug "^4.3.1" - fs-extra "^10.0.0" - got "^11.8.2" - is-port-reachable "^3.0.0" - lodash.mapvalues "^4.6.0" - lodash.merge "^4.6.2" - minimist "^1.2.5" - mkdirp "^1.0.4" - progress "2.0.3" - tar-stream "2.2.0" - which "^2.0.2" - yauzl "^2.10.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo= - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI= - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha1-QvEUWUpGzxqOMLCoT1bHjD7awh4= - dependencies: - safe-buffer "~5.2.0" - -tar-stream@2.2.0: - version "2.2.0" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" - integrity sha1-rK2EwoQTawYNw/qmRHSqmuvXcoc= - dependencies: - bl "^4.0.3" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - -universalify@^2.0.0: - version "2.0.0" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha1-daSYTv7cSwiXXFrrc/Uw0C3yVxc= - -util-deprecate@^1.0.1: - version "1.0.2" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -which@^2.0.1, which@^2.0.2: - version "2.0.2" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE= - dependencies: - isexe "^2.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -yauzl@^2.10.0: - version "2.10.0" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" - integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= - dependencies: - buffer-crc32 "~0.2.3" - fd-slicer "~1.1.0" diff --git a/src/Shared/Process/ProcessEx.cs b/src/Shared/Process/ProcessEx.cs index c1a8d613f5a5..e20f7cf7b4cb 100644 --- a/src/Shared/Process/ProcessEx.cs +++ b/src/Shared/Process/ProcessEx.cs @@ -179,7 +179,7 @@ private void OnProcessExited(object sender, EventArgs e) _output.WriteLine("Process exited."); } } - _process.WaitForExit(); + _stdoutLines.CompleteAdding(); _stdoutLines = null; _exited.TrySetResult(_process.ExitCode);