| File: Utils\AspireAnsiConsoleOutputTests.cs | Web Access |
| Project: src\tests\Aspire.Cli.Tests\Aspire.Cli.Tests.csproj (Aspire.Cli.Tests) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Aspire.Cli.Utils; using Microsoft.Extensions.Configuration; namespace Aspire.Cli.Tests.Utils; public class AspireAnsiConsoleOutputTests { [Fact] public void Width_ReturnsConfiguredValue_WhenASPIRE_CONSOLE_WIDTH_IsSet() { // Arrange var configuration = new ConfigurationBuilder() .AddInMemoryCollection(new Dictionary<string, string?> { ["ASPIRE_CONSOLE_WIDTH"] = "200" }) .Build(); var output = new AspireAnsiConsoleOutput(Console.Out, configuration); // Act var width = output.Width; // Assert Assert.Equal(200, width); } [Fact] public void Width_CapsAt500_WhenASPIRE_CONSOLE_WIDTH_ExceedsMaximum() { // Arrange var configuration = new ConfigurationBuilder() .AddInMemoryCollection(new Dictionary<string, string?> { ["ASPIRE_CONSOLE_WIDTH"] = "600" }) .Build(); var output = new AspireAnsiConsoleOutput(Console.Out, configuration); // Act var width = output.Width; // Assert Assert.Equal(500, width); } [Fact] public void Width_IgnoresInvalidValue_WhenASPIRE_CONSOLE_WIDTH_IsNotNumeric() { // Arrange var configuration = new ConfigurationBuilder() .AddInMemoryCollection(new Dictionary<string, string?> { ["ASPIRE_CONSOLE_WIDTH"] = "invalid" }) .Build(); var output = new AspireAnsiConsoleOutput(Console.Out, configuration); // Act var width = output.Width; // Assert // Should fall back to default width detection Assert.True(width > 0); } [Fact] public void Width_IgnoresNegativeValue_WhenASPIRE_CONSOLE_WIDTH_IsNegative() { // Arrange var configuration = new ConfigurationBuilder() .AddInMemoryCollection(new Dictionary<string, string?> { ["ASPIRE_CONSOLE_WIDTH"] = "-100" }) .Build(); var output = new AspireAnsiConsoleOutput(Console.Out, configuration); // Act var width = output.Width; // Assert // Should fall back to default width detection Assert.True(width > 0); } [Fact] public void Width_IgnoresZeroValue_WhenASPIRE_CONSOLE_WIDTH_IsZero() { // Arrange var configuration = new ConfigurationBuilder() .AddInMemoryCollection(new Dictionary<string, string?> { ["ASPIRE_CONSOLE_WIDTH"] = "0" }) .Build(); var output = new AspireAnsiConsoleOutput(Console.Out, configuration); // Act var width = output.Width; // Assert // Should fall back to default width detection Assert.True(width > 0); } [Fact] public void Width_UsesSafeWidth_WhenNoConfigurationSet() { // Arrange var configuration = new ConfigurationBuilder().Build(); var output = new AspireAnsiConsoleOutput(Console.Out, configuration); // Act var width = output.Width; // Assert // Should return either console buffer width or default Assert.True(width > 0); } [Fact] public void Width_CachesValue_AfterFirstAccess() { // Arrange var configuration = new ConfigurationBuilder().Build(); var output = new AspireAnsiConsoleOutput(Console.Out, configuration); // Act var width1 = output.Width; output.Width = 250; // Set explicit value var width2 = output.Width; // Assert Assert.Equal(250, width2); Assert.NotEqual(width1, width2); } [Fact] public void IsTerminal_ReturnsFalse_WhenOutputIsRedirected() { // Arrange var configuration = new ConfigurationBuilder().Build(); var output = new AspireAnsiConsoleOutput(Console.Out, configuration); // Act var isTerminal = output.IsTerminal; // Assert // When running in tests, output is typically redirected // This test verifies the property is accessible and returns a boolean Assert.True(isTerminal == true || isTerminal == false); } [Fact] public void Height_ReturnsPositiveValue() { // Arrange var configuration = new ConfigurationBuilder().Build(); var output = new AspireAnsiConsoleOutput(Console.Out, configuration); // Act var height = output.Height; // Assert Assert.True(height > 0); } [Fact] public void Writer_ReturnsSameInstance_AsConstructorParameter() { // Arrange var configuration = new ConfigurationBuilder().Build(); var writer = Console.Out; var output = new AspireAnsiConsoleOutput(writer, configuration); // Act var returnedWriter = output.Writer; // Assert Assert.Same(writer, returnedWriter); } [Fact] public void Constructor_ThrowsArgumentNullException_WhenWriterIsNull() { // Arrange var configuration = new ConfigurationBuilder().Build(); // Act & Assert Assert.Throws<ArgumentNullException>(() => new AspireAnsiConsoleOutput(null!, configuration)); } [Fact] public void Constructor_ThrowsArgumentNullException_WhenConfigurationIsNull() { // Act & Assert Assert.Throws<ArgumentNullException>(() => new AspireAnsiConsoleOutput(Console.Out, null!)); } }