Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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;
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        public void CreateBuilder()
        {
            // Arrage

            // Act
            var builder = TerminatorBuilder.CreateBuilder(ValidationLevel.None);

            // Assert
            Assert.NotNull(builder);
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
        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...");
        }
Exemplo n.º 9
0
        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);
        }
Exemplo n.º 10
0
        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);
        }
Exemplo n.º 11
0
        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());
        }
Exemplo n.º 12
0
        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());
        }
Exemplo n.º 13
0
        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);
        }
Exemplo n.º 14
0
        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());
        }
Exemplo n.º 15
0
        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);
        }
Exemplo n.º 16
0
        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);
        }
Exemplo n.º 17
0
        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);
        }
Exemplo n.º 18
0
        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());
        }
Exemplo n.º 19
0
        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);
            }
        }