public void ExitOnChange() { using (var scenario = new NoDepsAppScenario()) { // Wait for the process to start using (var wait = new WaitForFileToChange(scenario.StartedFile)) { scenario.RunDotNetWatch($"--exit-on-change -- {scenario.StatusFile} --no-exit"); wait.Wait(_defaultTimeout, expectedToChange: true, errorMessage: $"File not created: {scenario.StartedFile}"); } // Change a file var fileToChange = Path.Combine(scenario.TestAppFolder, "Program.cs"); var programCs = File.ReadAllText(fileToChange); File.WriteAllText(fileToChange, programCs); Waiters.WaitForProcessToStop( scenario.WatcherProcess.Id, _defaultTimeout, expectedToStop: true, errorMessage: "The watcher did not stop"); // Check that the first child process is no longer running var ids = File.ReadAllLines(scenario.StatusFile); var firstProcessId = int.Parse(ids[0]); Waiters.WaitForProcessToStop( firstProcessId, TimeSpan.FromSeconds(1), expectedToStop: true, errorMessage: $"PID: {firstProcessId} is still alive"); } }
public void Start() { // Wait for the process to start using (var wait = new WaitForFileToChange(StartedFile)) { RunDotNetWatch(StatusFile, Path.Combine(_scenario.WorkFolder, TestAppName)); wait.Wait(_defaultTimeout, expectedToChange: true, errorMessage: $"File not created: {StartedFile}"); } Waiters.WaitForFileToBeReadable(StartedFile, _defaultTimeout); }
public void DeleteCompiledFile() { using (var scenario = new GlobbingAppScenario()) using (var wait = new WaitForFileToChange(scenario.StartedFile)) { scenario.Start(); var fileToChange = Path.Combine(scenario.TestAppFolder, "include", "Foo.cs"); File.Delete(fileToChange); wait.Wait(_defaultTimeout, expectedToChange: true, errorMessage: $"Process did not restart because {scenario.StartedFile} was not changed"); } }
public void DeleteSourceFolder() { using (var scenario = new GlobbingAppScenario()) using (var wait = new WaitForFileToChange(scenario.StartedFile)) { scenario.Start(); var folderToDelete = Path.Combine(scenario.TestAppFolder, "include"); Directory.Delete(folderToDelete, recursive: true); wait.Wait(_defaultTimeout, expectedToChange: true, errorMessage: $"Process did not restart because {scenario.StartedFile} was not changed"); } }
public void AddCompiledFile() { // Add a file in a folder that's included in compilation using (var scenario = new GlobbingAppScenario()) using (var wait = new WaitForFileToChange(scenario.StartedFile)) { scenario.Start(); var fileToChange = Path.Combine(scenario.TestAppFolder, "include", "Bar.cs"); File.WriteAllText(fileToChange, ""); wait.Wait(_defaultTimeout, expectedToChange: true, errorMessage: $"Process did not restart because {scenario.StartedFile} was not changed"); } }
public void ChangeFileInDependency() { using (var scenario = new AppWithDepsScenario()) { scenario.Start(); using (var wait = new WaitForFileToChange(scenario.StartedFile)) { var fileToChange = Path.Combine(scenario.DependencyFolder, "Foo.cs"); var programCs = File.ReadAllText(fileToChange); File.WriteAllText(fileToChange, programCs); wait.Wait(_defaultTimeout, expectedToChange: true, errorMessage: $"Process did not restart because {scenario.StartedFile} was not changed"); } } }
// Change a file included in compilation private void ChangeCompiledFile(bool usePollingWatcher) { using (var scenario = new GlobbingAppScenario()) using (var wait = new WaitForFileToChange(scenario.StartedFile)) { scenario.UsePollingWatcher = usePollingWatcher; scenario.Start(); var fileToChange = Path.Combine(scenario.TestAppFolder, "include", "Foo.cs"); var programCs = File.ReadAllText(fileToChange); File.WriteAllText(fileToChange, programCs); wait.Wait(_defaultTimeout, expectedToChange: true, errorMessage: $"Process did not restart because {scenario.StartedFile} was not changed"); } }
public void RestartProcessThatTerminatesAfterFileChange() { using (var scenario = new NoDepsAppScenario()) { // Wait for the process to start using (var wait = new WaitForFileToChange(scenario.StartedFile)) { scenario.RunDotNetWatch($"run {scenario.StatusFile}"); wait.Wait(_defaultTimeout, expectedToChange: true, errorMessage: $"File not created: {scenario.StartedFile}"); } // Then wait for the app to exit Waiters.WaitForFileToBeReadable(scenario.StartedFile, _defaultTimeout); var ids = File.ReadAllLines(scenario.StatusFile); var procId = int.Parse(ids[0]); Waiters.WaitForProcessToStop( procId, _defaultTimeout, expectedToStop: true, errorMessage: "Test app did not exit"); // Then wait for it to restart when we change a file using (var wait = new WaitForFileToChange(scenario.StartedFile)) { // On Unix the file write time is in 1s increments; // if we don't wait, there's a chance that the polling // watcher will not detect the change Thread.Sleep(1000); var fileToChange = Path.Combine(scenario.TestAppFolder, "Program.cs"); var programCs = File.ReadAllText(fileToChange); File.WriteAllText(fileToChange, programCs); wait.Wait(_defaultTimeout, expectedToChange: true, errorMessage: $"Process did not restart because {scenario.StartedFile} was not changed"); } } }
public void RestartProcessOnFileChange() { using (var scenario = new NoDepsAppScenario()) { // Wait for the process to start using (var wait = new WaitForFileToChange(scenario.StartedFile)) { scenario.RunDotNetWatch($"run {scenario.StatusFile} --no-exit"); wait.Wait(_defaultTimeout, expectedToChange: true, errorMessage: $"File not created: {scenario.StartedFile}"); } // Then wait for it to restart when we change a file using (var wait = new WaitForFileToChange(scenario.StartedFile)) { var fileToChange = Path.Combine(scenario.TestAppFolder, "Program.cs"); var programCs = File.ReadAllText(fileToChange); File.WriteAllText(fileToChange, programCs); wait.Wait(_defaultTimeout, expectedToChange: true, errorMessage: $"Process did not restart because {scenario.StartedFile} was not changed"); } // Check that the first child process is no longer running Waiters.WaitForFileToBeReadable(scenario.StatusFile, _defaultTimeout); var ids = File.ReadAllLines(scenario.StatusFile); var firstProcessId = int.Parse(ids[0]); Waiters.WaitForProcessToStop( firstProcessId, TimeSpan.FromSeconds(1), expectedToStop: true, errorMessage: $"PID: {firstProcessId} is still alive"); } }
public void Start() { // Wait for the process to start using (var wait = new WaitForFileToChange(StatusFile)) { RunDotNetWatch($"run {StatusFile}", Path.Combine(_scenario.WorkFolder, AppWithDeps)); wait.Wait(_defaultTimeout, expectedToChange: true, errorMessage: $"File not created: {StatusFile}"); } Waiters.WaitForFileToBeReadable(StatusFile, _defaultTimeout); }