예제 #1
0
        public async Task RunAsync_Cancellation_Test()
        {
            // Arrange
            using var console = new VirtualConsole();

            var application = new CliApplicationBuilder()
                              .AddCommand(typeof(CancellableCommand))
                              .UseConsole(console)
                              .Build();

            var commandLineArguments = new[] { "cancel" };
            var environmentVariables = new Dictionary <string, string>();

            // Act
            console.CancelAfter(TimeSpan.FromSeconds(0.2));

            var exitCode = await application.RunAsync(commandLineArguments, environmentVariables);

            var stdOut = console.ReadOutputString().Trim();
            var stdErr = console.ReadErrorString().Trim();

            // Assert
            exitCode.Should().NotBe(0);
            stdOut.Should().BeNullOrWhiteSpace();
            stdErr.Should().NotBeNullOrWhiteSpace();

            Console.WriteLine(stdErr);
        }
예제 #2
0
        public async Task RunAsync_Help_Test(
            IReadOnlyList <Type> commandTypes,
            IReadOnlyList <string> commandLineArguments,
            IReadOnlyList <string>?expectedSubstrings = null)
        {
            // Arrange
            using var console = new VirtualConsole();

            var application = new CliApplicationBuilder()
                              .AddCommands(commandTypes)
                              .UseTitle(TestAppName)
                              .UseExecutableName(TestAppName)
                              .UseVersionText(TestVersionText)
                              .UseConsole(console)
                              .Build();

            var environmentVariables = new Dictionary <string, string>();

            // Act
            var exitCode = await application.RunAsync(commandLineArguments, environmentVariables);

            var stdOut = console.ReadOutputString().Trim();

            // Assert
            exitCode.Should().Be(0);
            stdOut.Should().NotBeNullOrWhiteSpace();

            if (expectedSubstrings != null)
            {
                stdOut.Should().ContainAll(expectedSubstrings);
            }

            Console.WriteLine(stdOut);
        }
예제 #3
0
        public void Report_Redirected_Test()
        {
            // Arrange
            using var console = new VirtualConsole();
            var ticker = console.CreateProgressTicker();

            var progressValues = Enumerable.Range(0, 100).Select(p => p / 100.0).ToArray();

            // Act
            foreach (var progress in progressValues)
            {
                ticker.Report(progress);
            }

            // Assert
            console.ReadOutputString().Should().BeEmpty();
        }
예제 #4
0
        public void Report_Test()
        {
            // Arrange
            using var console = new VirtualConsole(false);
            var ticker = console.CreateProgressTicker();

            var progressValues       = Enumerable.Range(0, 100).Select(p => p / 100.0).ToArray();
            var progressStringValues = progressValues.Select(p => p.ToString("P2")).ToArray();

            // Act
            foreach (var progress in progressValues)
            {
                ticker.Report(progress);
            }

            // Assert
            console.ReadOutputString().Should().ContainAll(progressStringValues);
        }