public void TerminateSecondPreTerminationAction() { // Arrage var builder = TerminatorBuilder.CreateBuilder(ValidationLevel.None); Exception exception = null; bool actionExecuted = false; builder.RegisterPreTerminationAction(() => { actionExecuted = true; }); try { builder.RegisterPreTerminationAction(() => { actionExecuted = true; }); } catch (Exception e) { exception = e; } // Assert Assert.NotNull(exception); Assert.Equal(typeof(NotSupportedException), exception.GetType()); Assert.Equal("A pre-termination action is already registered", exception.Message); }
public async static Task Run() { // Create cancellation token var cts = new CancellationTokenSource(); // Set up builder var builder = TerminatorBuilder.CreateBuilder(ValidationLevel.None) .RegisterCancellationToken(cts.Token, new TerminateEventArgs(20, "Terminated by CTS")); builder.TerminateEventHandler += Exit_Terminating; // Build terminator var terminator = builder.Build(); // Display something on console var x = Task.Run(async() => { while (true) { Console.WriteLine("Hello"); await Task.Delay(2000).ConfigureAwait(false); } }); Console.WriteLine("Press a key"); Console.ReadKey(); // Cancel termination cts.Cancel(); // Application has exited before this line is executed Console.WriteLine("I should not run..."); await Task.CompletedTask; }
public void CancellationTokenAndEventHandler() { // Arrage var environment = new TestEnvironment(OSPlatform.Linux); var cts = new CancellationTokenSource(); var builder = TerminatorBuilder.CreateBuilder(ValidationLevel.ExitCodeOnlyOnce); builder.RegisterCancellationToken(cts.Token, new TerminateEventArgs(21, "Test 21")); string exitMessage = null; builder.TerminateEventHandler += (object sender, TerminateEventArgs args) => { exitMessage = args.ExitMessage; }; var terminator = builder.Build(); // Replace environment replaceEnvironment(terminator, environment); // Act cts.Cancel(); // Assert Assert.Equal(21, environment.ExitCode); Assert.Equal("Test 21", exitMessage); }
public void TerminateWithUnixCodeEventArgs() { // Arrage var environment = new TestEnvironment(OSPlatform.Linux); var builder = TerminatorBuilder.CreateBuilder(ValidationLevel.None); string exitMessage = null; builder.TerminateEventHandler += (object sender, TerminateEventArgs args) => { exitMessage = args.ExitMessage; }; var terminator = builder.Build(); // Replace environment replaceEnvironment(terminator, environment); // Act var tea = new TerminateEventArgs(UnixCode.CONFIG, "Test 11"); var teaToString = tea.ToString(); terminator.Terminate(tea); // Assert Assert.Equal(78, environment.ExitCode); Assert.Equal("Test 11", exitMessage); Assert.Equal("78: Test 11", teaToString); }
public void TerminatePreTerminationAction() { // Arrage var environment = new TestEnvironment(OSPlatform.Linux); var builder = TerminatorBuilder.CreateBuilder(ValidationLevel.None); string exitMessage = null; bool actionExecuted = false; builder.TerminateEventHandler += (object sender, TerminateEventArgs args) => { exitMessage = args.ExitMessage; }; builder.RegisterPreTerminationAction(() => { actionExecuted = true; }); var terminator = builder.Build(); // Replace environment replaceEnvironment(terminator, environment); // Act terminator.Terminate(205, "Test 205"); // Assert Assert.Equal(205, environment.ExitCode); Assert.Equal("Test 205", exitMessage); Assert.True(actionExecuted); }
public void CreateBuilder() { // Arrage // Act var builder = TerminatorBuilder.CreateBuilder(ValidationLevel.None); // Assert Assert.NotNull(builder); }
public void ExitCodeNotInReservedSpace() { // Arrage var builder = TerminatorBuilder.CreateBuilder(ValidationLevel.ExitCodeNotInReservedSpace); builder.Register <Exception>(new TerminateEventArgs(202, "Test 202")); var terminator = builder.Build(); // Assert Assert.NotNull(terminator); }
public static void Run() { // Set up builder var builder = TerminatorBuilder.CreateBuilder(ValidationLevel.ExitCodeOnlyOnce | ValidationLevel.ExitCodeWithBoundaries) .Register <ArgumentException>(new TerminateEventArgs(77, "Optional example message")) .Register <NullReferenceException>(new TerminateEventArgs(77, "Optional example message")); // Build terminator, throws exception var terminator = builder.Build(); // Application has exited before this line is executed Console.WriteLine("I should not run..."); }
public void SameExitCodeTwiceNoValidation() { // Arrage var builder = TerminatorBuilder.CreateBuilder(ValidationLevel.None); builder.Register <Exception>(new TerminateEventArgs(20, "Test 20")); builder.Register <ArgumentException>(new TerminateEventArgs(20, "Test 20")); // Act var terminator = builder.Build(); // Assert Assert.NotNull(terminator); }
public void TerminateWithException() { // Arrage var environment = new TestEnvironment(OSPlatform.Linux); var builder = TerminatorBuilder.CreateBuilder(ValidationLevel.None) .Register <ArgumentException>(new TerminateEventArgs(201)) .Register <IndexOutOfRangeException>(new TerminateEventArgs(202, "Test 202")); var terminator = builder.Build(); // Replace environment replaceEnvironment(terminator, environment); // Act terminator.Terminate(new ArgumentException()); // Assert Assert.Equal(201, environment.ExitCode); }
public void ExitCodeInReservedSpace() { // Arrage var builder = TerminatorBuilder.CreateBuilder(ValidationLevel.ExitCodeNotInReservedSpace); Exception exception = null; // Act try { builder.Register <Exception>(new TerminateEventArgs(130, "Test 130")); } catch (Exception e) { exception = e; } // Assert Assert.NotNull(exception); Assert.Equal(typeof(ArgumentException), exception.GetType()); }
public void ExitCodeWithBoundaries256() { // Arrage var builder = TerminatorBuilder.CreateBuilder(ValidationLevel.ExitCodeWithBoundaries); Exception exception = null; // Act try { builder.Register <Exception>(new TerminateEventArgs(256, "Test 256")); } catch (Exception e) { exception = e; } // Assert Assert.NotNull(exception); Assert.Equal(typeof(ArgumentOutOfRangeException), exception.GetType()); }
public void RegisterMultipleCtrlCActions() { // Arrage var builder = TerminatorBuilder.CreateBuilder(ValidationLevel.None); Exception exception = null; builder.RegisterCtrlC(() => {; }); try { builder.RegisterCtrlC(() => {; }); } catch (Exception e) { exception = e; } // Assert Assert.NotNull(exception); Assert.Equal(typeof(NotSupportedException), exception.GetType()); Assert.Equal("A CTRL+C action is already registered", exception.Message); }
public void SameExceptionTwice() { // Arrage var builder = TerminatorBuilder.CreateBuilder(ValidationLevel.None); Exception exception = null; // Act builder.Register <Exception>(new TerminateEventArgs(20, "Test 20")); try { builder.Register <Exception>(new TerminateEventArgs(20, "Test 20")); } catch (Exception e) { exception = e; } // Assert Assert.NotNull(builder); Assert.NotNull(exception); Assert.Equal(typeof(ArgumentException), exception.GetType()); }
public void TerminateWithInteger() { // Arrage var environment = new TestEnvironment(OSPlatform.Linux); var builder = TerminatorBuilder.CreateBuilder(ValidationLevel.None); string exitMessage = null; builder.TerminateEventHandler += (object sender, TerminateEventArgs args) => { exitMessage = args.ExitMessage; }; var terminator = builder.Build(); // Replace environment replaceEnvironment(terminator, environment); // Act terminator.Terminate(205, "Test 205"); // Assert Assert.Equal(205, environment.ExitCode); Assert.Equal("Test 205", exitMessage); }
public void TerminateWithNonRegisteredException() { // Arrage var environment = new TestEnvironment(OSPlatform.Linux); var builder = TerminatorBuilder.CreateBuilder(ValidationLevel.None) .Register <ArgumentException>(new TerminateEventArgs(201)); string exitMessage = null; builder.TerminateEventHandler += (object sender, TerminateEventArgs args) => { exitMessage = args.ExitMessage; }; var terminator = builder.Build(); // Replace environment replaceEnvironment(terminator, environment); // Act terminator.Terminate(new IndexOutOfRangeException("Test 210")); // Assert Assert.Equal(1, environment.ExitCode); Assert.Equal($"Unspecified error. IndexOutOfRangeException: Test 210", exitMessage); }
public void SecondCancellationTokenAndEventHandler() { // Arrage var environment = new TestEnvironment(OSPlatform.Linux); var cts = new CancellationTokenSource(); var builder = TerminatorBuilder.CreateBuilder(ValidationLevel.ExitCodeOnlyOnce); builder.RegisterCancellationToken(cts.Token, new TerminateEventArgs(21, "Test 21")); Exception exception = null; // Act try { builder.RegisterCancellationToken(cts.Token, new TerminateEventArgs(21, "Test 21")); } catch (Exception e) { exception = e; } // Assert Assert.Equal(typeof(ArgumentException), exception.GetType()); Assert.Equal("A cancellation token is already registered.", exception.Message); }
public void SameExitCodeTwiceValidate() { // Arrage var builder = TerminatorBuilder.CreateBuilder(ValidationLevel.ExitCodeOnlyOnce); builder.Register <Exception>(new TerminateEventArgs(20, "Test 20")); builder.Register <ArgumentException>(new TerminateEventArgs(20, "Test 20")); Exception exception = null; // Act try { var terminator = builder.Build(); } catch (Exception e) { exception = e; } // Assert Assert.NotNull(exception); Assert.Equal(typeof(ArgumentException), exception.GetType()); }
public static void Run() { Console.WriteLine("Hello World!"); // Set up builder var builder = TerminatorBuilder.CreateBuilder(ValidationLevel.None) .RegisterCtrlC() .RegisterPreTerminationAction(() => { Console.WriteLine("Pre Termination Action"); }) .Register <ArgumentException>(new TerminateEventArgs(77, "Optional example message")); builder.TerminateEventHandler += Exit_Terminating; // Build terminator var terminator = builder.Build(); try { throw new ArgumentException("test"); } catch (Exception e) { terminator.Terminate(e); } }