1 write to App
dotnet-watch.Tests (1)
TestUtilities\DotNetWatchTestBase.cs (1)
19App = new WatchableApp(debugLogger);
433 references to App
dotnet-watch.Tests (433)
Browser\BrowserTests.cs (26)
16App.Start(testAsset, [], testFlags: TestFlags.MockBrowser); 19await App.WaitForOutputLineContaining("Content root path:"); 21Assert.Contains(App.Process.Output, line => line.Contains("Application started. Press Ctrl+C to shut down.")); 22Assert.Contains(App.Process.Output, line => line.Contains("Hosting environment: Development")); 25App.AssertOutputContains(MessageDescriptor.LaunchingBrowser.GetMessage("https://localhost:5001", "")); 34App.UseTestBrowser(); 39App.Start(testAsset, ["--urls", url], relativeProjectDirectory: "RazorApp", testFlags: TestFlags.ReadKeyFromStdin); 41await App.WaitForOutputLineContaining(MessageDescriptor.ConfiguredToUseBrowserRefresh); 42await App.WaitForOutputLineContaining(MessageDescriptor.ConfiguredToLaunchBrowser); 43await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 46await App.WaitUntilOutputContains($"🧪 Test browser opened at '{url}'."); 49await App.WaitUntilOutputContains(MessageDescriptor.ConnectedToRefreshServer, "Browser #1"); 51App.Process.ClearOutput(); 63await App.WaitForOutputLineContaining(errorMessage); 65await App.WaitForOutputLineContaining("Do you want to restart your app?"); 67await App.WaitUntilOutputContains($$""" 72App.SendKey('a'); 75await App.WaitForOutputLineContaining(MessageDescriptor.ReloadingBrowser, $"RazorApp ({tfm})"); 78await App.WaitUntilOutputContains(""" 82await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 88await App.WaitForOutputLineContaining("[auto-restart] " + errorMessage); 90await App.WaitUntilOutputContains($$""" 94await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 97await App.WaitUntilOutputContains(""" 104await App.WaitForOutputLineContaining(MessageDescriptor.HotReloadSucceeded); 106await App.WaitUntilOutputContains($$"""
CommandLine\LaunchSettingsTests.cs (28)
27App.Start(testAsset, []); 28Assert.Equal("1", await App.AssertOutputLineStartsWith("DOTNET_WATCH = ")); 42App.DotnetWatchArgs.Add("--no-hot-reload"); 45App.Start(testAsset, []); 46Assert.Equal("<<<First>>>", await App.AssertOutputLineStartsWith("DOTNET_LAUNCH_PROFILE = ")); 60App.DotnetWatchArgs.Add("--no-hot-reload"); 63App.DotnetWatchArgs.Add("--launch-profile"); 64App.DotnetWatchArgs.Add("Second"); 65App.Start(testAsset, []); 66Assert.Equal("<<<Second>>>", await App.AssertOutputLineStartsWith("DOTNET_LAUNCH_PROFILE = ")); 80App.DotnetWatchArgs.Add("--no-hot-reload"); 83App.Start(testAsset, ["--", "--launch-profile", "Third"]); 84Assert.Equal("<<<First>>>", await App.AssertOutputLineStartsWith("DOTNET_LAUNCH_PROFILE = ")); 93App.Start(testAsset, []); 95await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForFileChangeBeforeRestarting); 97App.AssertOutputContains("DOTNET_WATCH_ITERATION = 1"); 98App.Process.ClearOutput(); 102await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForFileChangeBeforeRestarting); 103App.AssertOutputContains("DOTNET_WATCH_ITERATION = 2"); 112App.Start(testAsset, []); 114await App.AssertOutputLineEquals("Environment: Development"); 126App.Start( 131await App.AssertOutputLineEquals("Environment: Development"); 140App.EnvironmentVariables.Add("READ_INPUT", "true"); 141App.Start(testAsset, ["--non-interactive"]); 143await App.AssertStarted(); 145var standardInput = App.Process.Process.StandardInput; 149Assert.Equal(inputString, await App.AssertOutputLineStartsWith("Echo: "));
CommandLine\ProgramTests.cs (71)
63App.DotnetWatchArgs.Clear(); 64App.Start(testAsset, arguments); 66Assert.Equal(expectedApplicationArgs, await App.AssertOutputLineStartsWith("Arguments = ")); 81App.Start(testAsset, arguments); 83AssertEx.Equal(expectedApplicationArgs, await App.AssertOutputLineStartsWith("Arguments = ")); 93App.DotnetWatchArgs.Clear(); 94App.Start(testAsset, arguments: 109Assert.Equal("-v", await App.AssertOutputLineStartsWith("Arguments = ")); 110Assert.Equal("WatchHotReloadAppMultiTfm, Version=1.2.3.4, Culture=neutral, PublicKeyToken=null", await App.AssertOutputLineStartsWith("AssemblyName = ")); 111Assert.Equal("' | A=B'\tC | '", await App.AssertOutputLineStartsWith("AssemblyTitle = ")); 112Assert.Equal(".NETCoreApp,Version=v6.0", await App.AssertOutputLineStartsWith("TFM = ")); 115Assert.Contains(App.Process.Output, l => l.Contains("Determining projects to restore...")); 118Assert.DoesNotContain(App.Process.Output, l => l.Contains("Working directory:")); 128App.DotnetWatchArgs.Clear(); 129App.Start(testAsset, arguments: 143Assert.Equal("WatchHotReloadAppMultiTfm, Version=1.2.3.4, Culture=neutral, PublicKeyToken=null", await App.AssertOutputLineStartsWith("AssemblyName = ")); 144Assert.Equal("' | A=B'\tC | '", await App.AssertOutputLineStartsWith("AssemblyTitle = ")); 145Assert.Equal(".NETCoreApp,Version=v6.0", await App.AssertOutputLineStartsWith("TFM = ")); 148Assert.DoesNotContain(App.Process.Output, l => l.Contains("Working directory:")); 150Assert.Contains(App.Process.Output, l => l.Contains("Hot reload enabled.")); 161App.Start(testAsset, arguments: new[] 169Assert.Equal(expectedArgs, await App.AssertOutputLineStartsWith("Arguments: ")); 171Assert.Contains(App.Process.Output, l => l.Contains($"Found named launch profile '{profileName}'.")); 172Assert.Contains(App.Process.Output, l => l.Contains("Hot Reload disabled by command line switch.")); 183App.Start(testAsset, arguments: new[] 190Assert.Equal(expectedArgs, await App.AssertOutputLineStartsWith("Arguments: ")); 192Assert.Contains(App.Process.Output, l => l.Contains($"Found named launch profile '{profileName}'.")); 201App.Start(testAsset, ["--verbose", "test", "--list-tests", "/p:VSTestUseMSBuildOutput=false"]); 203await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForFileChangeBeforeRestarting); 205App.AssertOutputContains("The following Tests are available:"); 206App.AssertOutputContains(" TestNamespace.VSTestXunitTests.VSTestXunitPassTest"); 207App.Process.ClearOutput(); 214await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForFileChangeBeforeRestarting); 216App.AssertOutputContains("The following Tests are available:"); 217App.AssertOutputContains(" TestNamespace.VSTestXunitTests.VSTestXunitPassTest2"); 226App.Start(testAsset, ["--verbose", "test", "--framework", ToolsetInfo.CurrentTargetFramework, "--list-tests", "/p:VSTestUseMSBuildOutput=false"]); 228await App.AssertOutputLineEquals("The following Tests are available:"); 229await App.AssertOutputLineEquals(" TestNamespace.VSTestXunitTests.VSTestXunitFailTestNetCoreApp"); 238App.Start(testAsset, ["--verbose", "--property", "TestProperty=123", "build", "/t:TestTarget"]); 240await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForFileChangeBeforeRestarting); 243Assert.Contains("TestProperty", App.Process.Output.Single(line => line.Contains("/t:GenerateWatchList"))); 245App.AssertOutputContains("dotnet watch ⌚ Command 'build' does not support Hot Reload."); 246App.AssertOutputContains("warning : The value of property is '123'"); 255App.Start(testAsset, ["--verbose", "/p:TestProperty=123", "msbuild", "/t:TestTarget"]); 257await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForFileChangeBeforeRestarting); 260Assert.DoesNotContain("TestProperty", App.Process.Output.Single(line => line.Contains("/t:GenerateWatchList"))); 262App.AssertOutputContains("dotnet watch ⌚ Command 'msbuild' does not support Hot Reload."); 263App.AssertOutputContains("warning : The value of property is '123'"); 272App.Start(testAsset, ["--verbose", "pack", "-c", "Release"]); 276await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForFileChangeBeforeRestarting); 279Assert.Contains("-property:Configuration=Release", App.Process.Output.Single(line => line.Contains("/t:GenerateWatchList"))); 281App.AssertOutputContains("dotnet watch ⌚ Command 'pack' does not support Hot Reload."); 282App.AssertOutputContains($"Successfully created package '{packagePath}'"); 291App.Start(testAsset, ["--verbose", "publish", "-c", "Release"]); 293await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForFileChangeBeforeRestarting); 296Assert.Contains("-property:Configuration=Release", App.Process.Output.Single(line => line.Contains("/t:GenerateWatchList"))); 298App.AssertOutputContains("dotnet watch ⌚ Command 'publish' does not support Hot Reload."); 300App.AssertOutputContains(Path.Combine("Release", ToolsetInfo.CurrentTargetFramework, "publish")); 309App.DotnetWatchArgs.Clear(); 310App.Start(testAsset, ["--verbose", "format", "--verbosity", "detailed"]); 312await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForFileChangeBeforeRestarting); 314App.AssertOutputContains("dotnet watch ⌚ Command 'format' does not support Hot Reload."); 316App.AssertOutputContains("format --verbosity detailed"); 317App.AssertOutputContains("Format complete in"); 338App.Start(testAsset, [], "AppWithDeps"); 340await App.AssertOutputLineStartsWith("dotnet watch ⌚ Fix the error to continue or press Ctrl+C to exit."); 342App.AssertOutputContains(@"dotnet watch 🔨 Failed to load project graph."); 343App.AssertOutputContains($"dotnet watch ❌ The project file could not be loaded. Could not find a part of the path '{Path.Combine(testAsset.Path, "AppWithDeps", "NonExistentDirectory", "X.csproj")}'"); 352App.DotnetWatchArgs.Clear(); 353App.Start(testAsset, ["--list"]); 354var lines = await App.Process.GetAllOutputLinesAsync(CancellationToken.None);
HotReload\ApplyDeltaTests.cs (279)
22App.Start(testAsset, [], "AppWithDeps"); 24await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 35await App.WaitForOutputLineContaining(MessageDescriptor.ReEvaluationCompleted); 46await App.AssertOutputLineStartsWith("Changed!"); 57App.Start(testAsset, [], "AppWithDeps"); 59await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 71await App.AssertOutputLineStartsWith("Changed!"); 82App.Start(testAsset, [], "AppWithDeps"); 84await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 90await App.WaitForOutputLineContaining(MessageDescriptor.NoCSharpChangesToApply); 91App.AssertOutputContains(MessageDescriptor.ProjectChangeTriggeredReEvaluation); 92App.Process.ClearOutput(); 108await App.AssertOutputLineStartsWith("Changed!"); 109await App.WaitUntilOutputContains($"dotnet watch 🔥 [App.WithDeps ({ToolsetInfo.CurrentTargetFramework})] Hot reload succeeded."); 139App.Start(testAsset, ["--non-interactive"], "AppWithDeps"); 141await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 142await App.WaitUntilOutputContains($"{symbolName} set"); 143App.Process.ClearOutput(); 147await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 148App.AssertOutputContains(MessageDescriptor.ProjectChangeTriggeredReEvaluation); 149App.AssertOutputContains("dotnet watch ⌚ [auto-restart] error ENC1102: Changing project setting 'DefineConstants'"); 151await App.WaitUntilOutputContains($"{symbolName} not set"); 181App.Start(testAsset, [], "AppWithDeps"); 183await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 184await App.WaitUntilOutputContains("BUILD_CONST_IN_PROPS set"); 185App.Process.ClearOutput(); 191await App.WaitUntilOutputContains($"dotnet watch 🔥 [App.WithDeps ({ToolsetInfo.CurrentTargetFramework})] Hot reload succeeded."); 192await App.WaitUntilOutputContains("BUILD_CONST not set"); 194App.AssertOutputContains(MessageDescriptor.ProjectChangeTriggeredReEvaluation); 221App.Start(testAsset, [], "AppWithDeps"); 223await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 224await App.WaitUntilOutputContains("BUILD_CONST_IN_PROPS set"); 229await App.WaitForOutputLineContaining(MessageDescriptor.NoCSharpChangesToApply); 230App.AssertOutputContains(MessageDescriptor.ProjectChangeTriggeredReEvaluation); 231App.Process.ClearOutput(); 233await App.AssertOutputLineStartsWith("BUILD_CONST_IN_PROPS not set"); 255App.Start(testAsset, []); 257await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 258App.AssertOutputContains(new Regex(@"dotnet watch ⌚ Exclusion glob: 'AppData/[*][*]/[*][.][*];bin[/\\]+Debug[/\\]+[*][*];obj[/\\]+Debug[/\\]+[*][*];bin[/\\]+[*][*];obj[/\\]+[*][*]")); 259App.Process.ClearOutput(); 265await App.WaitUntilOutputContains($"dotnet watch ⌚ Ignoring change in excluded file '{appDataFilePath}': Add. Path matches DefaultItemExcludes glob 'AppData/**/*.*' set in '{testAsset.Path}'."); 296App.Start(testAsset, []); 298await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 299App.AssertOutputContains($"dotnet watch ⌚ Excluded directory: '{binDir}'"); 300App.AssertOutputContains($"dotnet watch ⌚ Excluded directory: '{objDir}'"); 301App.Process.ClearOutput(); 306await App.WaitUntilOutputContains($"dotnet watch ⌚ Ignoring change in output directory: Add '{binDirFilePath}'"); 307await App.WaitUntilOutputContains($"dotnet watch ⌚ Ignoring change in output directory: Add '{objDirFilePath}'"); 319App.Start(testAsset, []); 321await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 331await App.WaitForOutputLineContaining(MessageDescriptor.UnableToApplyChanges); 340await App.WaitForOutputLineContaining(MessageDescriptor.HotReloadSucceeded, $"WatchHotReloadApp ({ToolsetInfo.CurrentTargetFramework})"); 342await App.WaitUntilOutputContains(">>> System.Xml.Linq.XDocument"); 344App.AssertOutputContains(MessageDescriptor.ReEvaluationCompleted); 360App.DotnetWatchArgs.Clear(); 361App.Start(testAsset, ["--verbose", $"-bl:{binLogPath}"], testFlags: TestFlags.None); 363await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 384await App.WaitForOutputLineContaining(MessageDescriptor.ReEvaluationCompleted); 422App.Start(testAsset, nonInteractive ? ["--non-interactive"] : []); 424await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 429await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 431App.AssertOutputContains(MessageDescriptor.RestartNeededToApplyChanges); 432App.AssertOutputContains($"⌚ [auto-restart] {programPath}(39,11): error ENC0023: Adding an abstract method or overriding an inherited method requires restarting the application."); 433App.AssertOutputContains($"[WatchHotReloadApp ({ToolsetInfo.CurrentTargetFramework})] Exited"); 434App.AssertOutputContains($"[WatchHotReloadApp ({ToolsetInfo.CurrentTargetFramework})] Launched"); 435App.Process.ClearOutput(); 440await App.WaitForOutputLineContaining(MessageDescriptor.HotReloadSucceeded); 480App.Start(testAsset, nonInteractive ? ["--non-interactive"] : []); 482await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 483await App.WaitUntilOutputContains("System.Int32"); 484App.Process.ClearOutput(); 488await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 489await App.WaitUntilOutputContains("System.Byte"); 491App.AssertOutputContains($"dotnet watch 🕵️ [WatchHotReloadApp ({tfm})] HotReloadException handler installed."); 492App.AssertOutputContains($"dotnet watch 🕵️ [WatchHotReloadApp ({tfm})] Runtime rude edit detected:"); 494App.AssertOutputContains($"dotnet watch ⚠ [WatchHotReloadApp ({tfm})] " + 498App.AssertOutputContains(MessageDescriptor.RestartingApplication, $"WatchHotReloadApp ({tfm})"); 509App.Start(testAsset, [], testFlags: TestFlags.ReadKeyFromStdin); 511await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 512App.Process.ClearOutput(); 517await App.AssertOutputLineStartsWith(" ❔ Do you want to restart your app? Yes (y) / No (n) / Always (a) / Never (v)", failure: _ => false); 519App.AssertOutputContains(MessageDescriptor.RestartNeededToApplyChanges); 520App.AssertOutputContains($"❌ {programPath}(39,11): error ENC0023: Adding an abstract method or overriding an inherited method requires restarting the application."); 521App.Process.ClearOutput(); 523App.SendKey('a'); 525await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 527App.AssertOutputContains($"[WatchHotReloadApp ({ToolsetInfo.CurrentTargetFramework})] Exited"); 528App.AssertOutputContains($"[WatchHotReloadApp ({ToolsetInfo.CurrentTargetFramework})] Launched"); 529App.Process.ClearOutput(); 534await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 536App.AssertOutputContains(MessageDescriptor.RestartNeededToApplyChanges); 537App.AssertOutputContains($"⌚ [auto-restart] {programPath}(39,1): error ENC0033: Deleting method 'F()' requires restarting the application."); 538App.AssertOutputContains($"[WatchHotReloadApp ({ToolsetInfo.CurrentTargetFramework})] Exited"); 539App.AssertOutputContains($"[WatchHotReloadApp ({ToolsetInfo.CurrentTargetFramework})] Launched"); 564App.Start(testAsset, nonInteractive ? ["--non-interactive"] : []); 566await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 567App.Process.ClearOutput(); 572await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 574App.AssertOutputContains(MessageDescriptor.RestartNeededToApplyChanges); 575App.AssertOutputContains($"⌚ [auto-restart] {programPath}(17,19): warning ENC0118: Changing 'top-level code' might not have any effect until the application is restarted."); 576App.AssertOutputContains($"[WatchHotReloadApp ({ToolsetInfo.CurrentTargetFramework})] Exited"); 577App.AssertOutputContains($"[WatchHotReloadApp ({ToolsetInfo.CurrentTargetFramework})] Launched"); 578App.AssertOutputContains("<Updated>"); 579App.Process.ClearOutput(); 584await App.WaitForOutputLineContaining(MessageDescriptor.HotReloadSucceeded); 602App.Start(testAsset, []); 604await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForFileChangeBeforeRestarting); 610await App.WaitUntilOutputContains("<Updated>"); 619App.Start(testAsset, []); 621await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForFileChangeBeforeRestarting); 625await App.WaitUntilOutputContains("<Updated>"); 652App.Start(testAsset, []); 654await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 658await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 659await App.AssertOutputLineStartsWith("<Updated>"); 663await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 664await App.AssertOutputLineStartsWith("<Updated2>"); 674App.Start(testAsset, [], "App"); 676await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 695await App.AssertOutputLineStartsWith("Updated types: Printer"); 718App.Start(testAsset, []); 720await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 724await App.WaitForOutputLineContaining("<Updated>"); 726await App.WaitUntilOutputContains( 755App.DotnetWatchArgs.Clear(); 758App.Start(testAsset, [], testFlags: TestFlags.ElevateWaitingForChangesMessageSeverity); 760await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 764await App.WaitForOutputLineContaining("<Updated>"); 766await App.WaitUntilOutputContains($"dotnet watch ⚠ [WatchHotReloadApp ({ToolsetInfo.CurrentTargetFramework})] Exception from 'AppUpdateHandler.ClearCache': System.InvalidOperationException: Bug!"); 770await App.WaitUntilOutputContains(MessageDescriptor.UpdatesApplied); 775App.AssertOutputDoesNotContain("🕵️"); 798App.Start(testAsset, [], testFlags: TestFlags.ReadKeyFromStdin); 800await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 802await App.WaitUntilOutputContains($"dotnet watch 🕵️ [WatchHotReloadApp ({tfm})] Windows Ctrl+C handling enabled."); 804await App.WaitUntilOutputContains("Started"); 806App.SendControlC(); 808await App.WaitForOutputLineContaining("Ctrl+C detected! Performing cleanup..."); 809await App.WaitUntilOutputContains("exited with exit code 0."); 829App.Start(testAsset, [], testFlags: TestFlags.ReadKeyFromStdin); 831await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 833await App.WaitUntilOutputContains($"dotnet watch 🕵️ [WatchHotReloadApp ({tfm})] Posix signal handlers registered."); 835await App.WaitUntilOutputContains("Started"); 837App.SendControlC(); 839await App.WaitForOutputLineContaining("SIGTERM detected! Performing cleanup..."); 840await App.WaitUntilOutputContains("exited with exit code 0."); 863App.Start(testAsset, ["--urls", "http://localhost:" + port], testFlags: TestFlags.MockBrowser); 865await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 867App.AssertOutputContains(MessageDescriptor.ConfiguredToUseBrowserRefresh); 868App.AssertOutputContains(MessageDescriptor.ConfiguredToLaunchBrowser); 871await App.WaitUntilOutputContains(MessageDescriptor.LaunchingBrowser.GetMessage($"http://localhost:{port}", "")); 874App.AssertOutputContains("dbug: Microsoft.AspNetCore.Watch.BrowserRefresh.BlazorWasmHotReloadMiddleware[0]"); 875App.AssertOutputContains("dbug: Microsoft.AspNetCore.Watch.BrowserRefresh.BrowserScriptMiddleware[0]"); 876App.AssertOutputContains("Middleware loaded. Script /_framework/aspnetcore-browser-refresh.js"); 877App.AssertOutputContains("Middleware loaded. Script /_framework/blazor-hotreload.js"); 878App.AssertOutputContains("dbug: Microsoft.AspNetCore.Watch.BrowserRefresh.BrowserRefreshMiddleware"); 879App.AssertOutputContains("Middleware loaded: DOTNET_MODIFIABLE_ASSEMBLIES=debug, __ASPNETCORE_BROWSER_TOOLS=true"); 882App.AssertOutputDoesNotContain("🕵️"); 890await App.WaitForOutputLineContaining(MessageDescriptor.HotReloadSucceeded, $"blazorwasm ({ToolsetInfo.CurrentTargetFramework})"); 895App.AssertOutputContains("dotnet watch 🔥 Hot reload capabilities: Baseline AddMethodToExistingType."); 899App.AssertOutputContains("dotnet watch 🔥 Hot reload capabilities: Baseline AddMethodToExistingType AddStaticFieldToExistingType NewTypeDefinition ChangeCustomAttributes AddInstanceFieldToExistingType GenericAddMethodToExistingType GenericUpdateMethod UpdateParameters GenericAddFieldToExistingType."); 919App.Start(testAsset, ["--urls", "http://localhost:" + port], testFlags: TestFlags.MockBrowser); 921await App.AssertOutputLineStartsWith("dotnet watch ⚠ msbuild: [Warning] Duplicate source file"); 922await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 932App.Start(testAsset, ["--urls", "http://localhost:" + port, "--non-interactive"], testFlags: TestFlags.ReadKeyFromStdin | TestFlags.MockBrowser); 934await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 936App.AssertOutputContains(MessageDescriptor.ConfiguredToUseBrowserRefresh); 937App.AssertOutputContains(MessageDescriptor.ConfiguredToLaunchBrowser); 938App.AssertOutputContains(MessageDescriptor.PressCtrlRToRestart); 941await App.WaitUntilOutputContains(MessageDescriptor.LaunchingBrowser.GetMessage($"http://localhost:{port}", "")); 943App.SendControlR(); 945await App.WaitUntilOutputContains(MessageDescriptor.ReloadingBrowser); 957App.Start(testAsset, ["--urls", "http://localhost:" + port], "blazorhosted", testFlags: TestFlags.MockBrowser); 959await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 961App.AssertOutputContains(MessageDescriptor.ConfiguredToUseBrowserRefresh); 962App.AssertOutputContains(MessageDescriptor.ConfiguredToLaunchBrowser); 963App.AssertOutputContains(MessageDescriptor.ApplicationKind_BlazorHosted); 966App.AssertOutputContains($"dotnet watch ⌚ [blazorhosted ({tfm})] Project 'blazorwasm ({tfm})' specifies capabilities: 'Baseline AddMethodToExistingType AddStaticFieldToExistingType NewTypeDefinition ChangeCustomAttributes AddInstanceFieldToExistingType GenericAddMethodToExistingType GenericUpdateMethod UpdateParameters GenericAddFieldToExistingType'"); 969App.AssertOutputContains($"dotnet watch ⌚ [blazorhosted ({tfm})] Capabilities: 'Baseline AddMethodToExistingType AddStaticFieldToExistingType AddInstanceFieldToExistingType NewTypeDefinition ChangeCustomAttributes UpdateParameters GenericUpdateMethod GenericAddMethodToExistingType GenericAddFieldToExistingType AddFieldRva'"); 979App.Start(testAsset, ["--urls", "http://localhost:" + port], relativeProjectDirectory: "RazorApp", testFlags: TestFlags.MockBrowser); 981await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 983App.AssertOutputContains(MessageDescriptor.ConfiguredToUseBrowserRefresh); 984App.AssertOutputContains(MessageDescriptor.ConfiguredToLaunchBrowser); 985App.AssertOutputContains(MessageDescriptor.LaunchingBrowser.GetMessage($"http://localhost:{port}", "")); 986App.Process.ClearOutput(); 997await App.WaitForOutputLineContaining(MessageDescriptor.HotReloadChangeHandled); 999App.AssertOutputContains(MessageDescriptor.SendingStaticAssetUpdateRequest.GetMessage("RazorApp.css")); 1000App.AssertOutputContains(MessageDescriptor.HotReloadOfScopedCssSucceeded); 1001App.AssertOutputContains(MessageDescriptor.NoCSharpChangesToApply); 1002App.Process.ClearOutput(); 1007await App.WaitForOutputLineContaining(MessageDescriptor.HotReloadChangeHandled); 1010App.AssertOutputContains(MessageDescriptor.SendingStaticAssetUpdateRequest.GetMessage("wwwroot/app.css")); 1011App.AssertOutputContains(MessageDescriptor.HotReloadOfStaticAssetsSucceeded); 1012App.AssertOutputContains(MessageDescriptor.NoCSharpChangesToApply); 1013App.Process.ClearOutput(); 1036App.Start(testAsset, ["-f", tfm]); 1038await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 1044await App.WaitForOutputLineContaining(MessageDescriptor.HotReloadChangeHandled); 1047App.AssertOutputContains("Updates applied: 1 out of 1."); 1048App.AssertOutputContains("Microsoft.AspNetCore.Components.HotReload.HotReloadManager.UpdateApplication"); 1049App.Process.ClearOutput(); 1055await App.WaitForOutputLineContaining(MessageDescriptor.HotReloadChangeHandled); 1056App.AssertOutputContains("Updates applied: 1 out of 1."); 1057App.AssertOutputContains("Microsoft.AspNetCore.Components.WebView.StaticContentHotReloadManager.UpdateContent"); 1058App.AssertOutputContains("No C# changes to apply."); 1068App.Start(testAsset, [], "App"); 1070await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 1095await App.AssertOutputLineStartsWith("Updated types: Printer"); 1130App.Start(testAsset, [], "AppWithDeps"); 1132await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 1147await App.AssertOutputLineStartsWith("> Renamed.cs"); 1184App.Start(testAsset, ["--non-interactive"], "AppWithDeps"); 1186await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 1205await App.AssertOutputLineStartsWith("> NewSubdir", failure: _ => false); 1222App.Start(testAsset, ["-lp", "http"], relativeProjectDirectory: "WatchAspire.AppHost", testFlags: TestFlags.ReadKeyFromStdin); 1224await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 1227await App.WaitUntilOutputContains("dotnet watch ⭐ Now listening on:"); 1230await App.WaitUntilOutputContains("dotnet watch ⭐ Session started: #3"); 1231App.AssertOutputContains("dotnet watch ⭐ Session started: #1"); 1232App.AssertOutputContains("dotnet watch ⭐ Session started: #2"); 1235App.AssertOutputContains("dotnet watch ⭐ [#1] Sending 'sessionTerminated'"); 1238await App.WaitUntilOutputContains($"ApiService working directory: '{Path.GetDirectoryName(serviceProjectPath)}'"); 1245await App.WaitForOutputLineContaining(MessageDescriptor.HotReloadChangeHandled); 1247App.AssertOutputContains("Using Aspire process launcher."); 1248App.AssertOutputContains(MessageDescriptor.HotReloadSucceeded, $"WatchAspire.AppHost ({tfm})"); 1249App.AssertOutputContains(MessageDescriptor.HotReloadSucceeded, $"WatchAspire.ApiService ({tfm})"); 1250App.AssertOutputContains(MessageDescriptor.HotReloadSucceeded, $"WatchAspire.Web ({tfm})"); 1253Assert.Equal(1, App.Process.Output.Count(line => line.StartsWith("dotnet watch ⌚ Launching browser: "))); 1254App.Process.ClearOutput(); 1261await App.WaitForOutputLineContaining(" ❔ Do you want to restart these projects? Yes (y) / No (n) / Always (a) / Never (v)"); 1263App.AssertOutputContains(MessageDescriptor.RestartNeededToApplyChanges); 1264App.AssertOutputContains($"dotnet watch ❌ {serviceSourcePath}(40,1): error ENC0020: Renaming record 'WeatherForecast' requires restarting the application."); 1265App.AssertOutputContains("dotnet watch ⌚ Affected projects:"); 1266App.AssertOutputContains("dotnet watch ⌚ WatchAspire.ApiService"); 1267App.Process.ClearOutput(); 1269App.SendKey('y'); 1271await App.WaitForOutputLineContaining(MessageDescriptor.FixBuildError); 1273App.AssertOutputContains("Application is shutting down..."); 1275App.AssertOutputContains($"[WatchAspire.ApiService ({tfm})] Exited"); 1277App.AssertOutputContains(MessageDescriptor.Building.GetMessage(serviceProjectPath)); 1278App.AssertOutputContains("error CS0246: The type or namespace name 'WeatherForecast' could not be found"); 1279App.Process.ClearOutput(); 1286await App.WaitForOutputLineContaining(MessageDescriptor.ProjectsRestarted.GetMessage(1)); 1288App.AssertOutputContains(MessageDescriptor.BuildSucceeded.GetMessage(serviceProjectPath)); 1289App.AssertOutputContains(MessageDescriptor.ProjectsRebuilt); 1290App.AssertOutputContains($"dotnet watch ⭐ Starting project: {serviceProjectPath}"); 1291App.Process.ClearOutput(); 1293App.SendControlC(); 1295await App.WaitForOutputLineContaining(MessageDescriptor.ShutdownRequested); 1297await App.WaitUntilOutputContains($"[WatchAspire.ApiService ({tfm})] Exited"); 1298await App.WaitUntilOutputContains($"[WatchAspire.AppHost ({tfm})] Exited"); 1300await App.WaitUntilOutputContains("dotnet watch ⭐ Waiting for server to shutdown ..."); 1302App.AssertOutputContains("dotnet watch ⭐ Stop session #1"); 1303App.AssertOutputContains("dotnet watch ⭐ Stop session #2"); 1304App.AssertOutputContains("dotnet watch ⭐ Stop session #3"); 1305App.AssertOutputContains("dotnet watch ⭐ [#2] Sending 'sessionTerminated'"); 1306App.AssertOutputContains("dotnet watch ⭐ [#3] Sending 'sessionTerminated'"); 1320App.Start(testAsset, ["-lp", "http", "--non-interactive"], relativeProjectDirectory: "WatchAspire.AppHost"); 1322await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 1325await App.WaitUntilOutputContains("dotnet watch ⭐ Session started: #3"); 1328App.AssertOutputContains("dotnet watch ⭐ Session started: #1"); 1329App.AssertOutputContains(MessageDescriptor.Exited, $"WatchAspire.MigrationService ({tfm})"); 1330App.AssertOutputContains("dotnet watch ⭐ [#1] Sending 'sessionTerminated'"); 1333App.AssertOutputContains("dotnet watch ⭐ [#1] Sending 'serviceLogs': log_message=' Migration complete', is_std_err=False"); 1334App.AssertOutputDoesNotContain(new Regex("^ +Migration complete")); 1336App.Process.ClearOutput(); 1341await App.WaitForOutputLineContaining(MessageDescriptor.HotReloadChangeHandled); 1342await App.WaitUntilOutputContains("dotnet watch ⭐ Session started: #3"); 1344App.AssertOutputContains(MessageDescriptor.ProjectsRestarted.GetMessage(1)); 1345App.AssertOutputDoesNotContain("⚠"); 1348App.AssertOutputDoesNotContain($"[WatchAspire.MigrationService ({tfm})]"); 1349App.AssertOutputDoesNotContain("dotnet watch ⭐ [#1]"); 1351App.Process.ClearOutput(); 1356await App.WaitForOutputLineContaining(MessageDescriptor.HotReloadChangeHandled); 1357App.AssertOutputContains($"dotnet watch 🕵️ [WatchAspire.Web ({tfm})] Updates applied."); 1358App.AssertOutputDoesNotContain(MessageDescriptor.ProjectsRebuilt); 1359App.AssertOutputDoesNotContain(MessageDescriptor.ProjectsRestarted); 1360App.AssertOutputDoesNotContain("⚠"); 1363App.AssertOutputDoesNotContain($"[WatchAspire.MigrationService ({tfm})]"); 1364App.AssertOutputDoesNotContain("dotnet watch ⭐ [#1]");
TestUtilities\DotNetWatchTestBase.cs (3)
26public DebugTestOutputLogger Logger => App.Logger; 29=> App.Logger.Log(message, testPath, testLine); 62App.Dispose();
Watch\GlobbingAppTests.cs (13)
13App.Start(testAsset, ["--no-hot-reload"]); 15await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 16await App.WaitUntilOutputContains("Defined types = 2"); 17App.Process.ClearOutput(); 21await App.WaitUntilOutputContains($"Defined types = {expectedTypesAfterOperation}"); 76App.Start(testAsset, ["--no-hot-reload"]); 78await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 79await App.WaitUntilOutputContains("Defined types = 2"); 80App.Process.ClearOutput(); 86var fileChanged = App.AssertFileChanged(); 97App.DotnetWatchArgs.Clear(); 98App.Start(testAsset, ["--list"]); 99var lines = await App.Process.GetAllOutputLinesAsync(CancellationToken.None);
Watch\NoDepsAppTests.cs (13)
16App.Start(testAsset, ["--no-hot-reload", "--no-exit"]); 17var processIdentifier = await App.AssertOutputLineStartsWith("Process identifier ="); 21await App.AssertStarted(); 22Assert.DoesNotContain(App.Process.Output, l => l.StartsWith("Exited with error code")); 24var processIdentifier2 = await App.AssertOutputLineStartsWith("Process identifier ="); 34App.Start(testAsset, []); 36var processIdentifier = await App.AssertOutputLineStartsWith("Process identifier ="); 39await App.AssertExiting(); 41await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForFileChangeBeforeRestarting); 42await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); 45await App.AssertStarted(); 47var processIdentifier2 = await App.AssertOutputLineStartsWith("Process identifier ="); 49await App.AssertExiting(); // process should exit after run