diff --git a/CliFx.Analyzers.Tests/SystemConsoleShouldBeAvoidedAnalyzerSpecs.cs b/CliFx.Analyzers.Tests/SystemConsoleShouldBeAvoidedAnalyzerSpecs.cs index 8992c8e..6216cc4 100644 --- a/CliFx.Analyzers.Tests/SystemConsoleShouldBeAvoidedAnalyzerSpecs.cs +++ b/CliFx.Analyzers.Tests/SystemConsoleShouldBeAvoidedAnalyzerSpecs.cs @@ -83,7 +83,7 @@ public class SystemConsoleShouldBeAvoidedAnalyzerSpecs { public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine("Hello world"); + console.WriteLine("Hello world"); return default; } } diff --git a/CliFx.Demo/Commands/BookAddCommand.cs b/CliFx.Demo/Commands/BookAddCommand.cs index ba863ab..12e47e5 100644 --- a/CliFx.Demo/Commands/BookAddCommand.cs +++ b/CliFx.Demo/Commands/BookAddCommand.cs @@ -9,7 +9,7 @@ using CliFx.Infrastructure; namespace CliFx.Demo.Commands; [Command("book add", Description = "Adds a book to the library.")] -public partial class BookAddCommand(LibraryProvider libraryProvider) : ICommand +public class BookAddCommand(LibraryProvider libraryProvider) : ICommand { [CommandParameter(0, Name = "title", Description = "Book title.")] public required string Title { get; init; } @@ -18,47 +18,38 @@ public partial class BookAddCommand(LibraryProvider libraryProvider) : ICommand public required string Author { get; init; } [CommandOption("published", 'p', Description = "Book publish date.")] - public DateTimeOffset Published { get; init; } = CreateRandomDate(); + public DateTimeOffset Published { get; init; } = + new( + Random.Shared.Next(1800, 2020), + Random.Shared.Next(1, 12), + Random.Shared.Next(1, 28), + Random.Shared.Next(1, 23), + Random.Shared.Next(1, 59), + Random.Shared.Next(1, 59), + TimeSpan.Zero + ); [CommandOption("isbn", 'n', Description = "Book ISBN.")] - public Isbn Isbn { get; init; } = CreateRandomIsbn(); + public Isbn Isbn { get; init; } = + new( + Random.Shared.Next(0, 999), + Random.Shared.Next(0, 99), + Random.Shared.Next(0, 99999), + Random.Shared.Next(0, 99), + Random.Shared.Next(0, 9) + ); public ValueTask ExecuteAsync(IConsole console) { if (libraryProvider.TryGetBook(Title) is not null) - throw new CommandException("Book already exists.", 10); + throw new CommandException($"Book '{Title}' already exists.", 10); var book = new Book(Title, Author, Published, Isbn); libraryProvider.AddBook(book); - console.Output.WriteLine("Book added."); - console.Output.WriteBook(book); + console.WriteLine($"Book '{Title}' added."); + console.WriteBook(book); return default; } } - -public partial class BookAddCommand -{ - private static readonly Random Random = new(); - - private static DateTimeOffset CreateRandomDate() => - new( - Random.Next(1800, 2020), - Random.Next(1, 12), - Random.Next(1, 28), - Random.Next(1, 23), - Random.Next(1, 59), - Random.Next(1, 59), - TimeSpan.Zero - ); - - private static Isbn CreateRandomIsbn() => - new( - Random.Next(0, 999), - Random.Next(0, 99), - Random.Next(0, 99999), - Random.Next(0, 99), - Random.Next(0, 9) - ); -} diff --git a/CliFx.Demo/Commands/BookCommand.cs b/CliFx.Demo/Commands/BookCommand.cs index 93690d1..1e9658c 100644 --- a/CliFx.Demo/Commands/BookCommand.cs +++ b/CliFx.Demo/Commands/BookCommand.cs @@ -18,9 +18,9 @@ public class BookCommand(LibraryProvider libraryProvider) : ICommand var book = libraryProvider.TryGetBook(Title); if (book is null) - throw new CommandException("Book not found.", 10); + throw new CommandException($"Book '{Title}' not found.", 10); - console.Output.WriteBook(book); + console.WriteBook(book); return default; } diff --git a/CliFx.Demo/Commands/BookListCommand.cs b/CliFx.Demo/Commands/BookListCommand.cs index 2dd5648..7f8b92f 100644 --- a/CliFx.Demo/Commands/BookListCommand.cs +++ b/CliFx.Demo/Commands/BookListCommand.cs @@ -17,11 +17,11 @@ public class BookListCommand(LibraryProvider libraryProvider) : ICommand { // Add margin if (i != 0) - console.Output.WriteLine(); + console.WriteLine(); // Render book var book = library.Books[i]; - console.Output.WriteBook(book); + console.WriteBook(book); } return default; diff --git a/CliFx.Demo/Commands/BookRemoveCommand.cs b/CliFx.Demo/Commands/BookRemoveCommand.cs index 487c92a..4334a40 100644 --- a/CliFx.Demo/Commands/BookRemoveCommand.cs +++ b/CliFx.Demo/Commands/BookRemoveCommand.cs @@ -17,11 +17,11 @@ public class BookRemoveCommand(LibraryProvider libraryProvider) : ICommand var book = libraryProvider.TryGetBook(Title); if (book is null) - throw new CommandException("Book not found.", 10); + throw new CommandException($"Book '{Title}' not found.", 10); libraryProvider.RemoveBook(book); - console.Output.WriteLine($"Book {Title} removed."); + console.WriteLine($"Book '{Title}' removed."); return default; } diff --git a/CliFx.Demo/Utils/ConsoleExtensions.cs b/CliFx.Demo/Utils/ConsoleExtensions.cs index a0605ba..92dc7c1 100644 --- a/CliFx.Demo/Utils/ConsoleExtensions.cs +++ b/CliFx.Demo/Utils/ConsoleExtensions.cs @@ -33,4 +33,7 @@ internal static class ConsoleExtensions using (writer.Console.WithForegroundColor(ConsoleColor.White)) writer.WriteLine(book.Isbn); } + + public static void WriteBook(this IConsole console, Book book) => + console.Output.WriteBook(book); } diff --git a/CliFx.Tests.Dummy/Commands/CancellationTestCommand.cs b/CliFx.Tests.Dummy/Commands/CancellationTestCommand.cs index b2c568c..1858770 100644 --- a/CliFx.Tests.Dummy/Commands/CancellationTestCommand.cs +++ b/CliFx.Tests.Dummy/Commands/CancellationTestCommand.cs @@ -12,15 +12,15 @@ public class CancellationTestCommand : ICommand { try { - console.Output.WriteLine("Started."); + console.WriteLine("Started."); await Task.Delay(TimeSpan.FromSeconds(3), console.RegisterCancellationHandler()); - console.Output.WriteLine("Completed."); + console.WriteLine("Completed."); } catch (OperationCanceledException) { - console.Output.WriteLine("Cancelled."); + console.WriteLine("Cancelled."); throw; } } diff --git a/CliFx.Tests.Dummy/Commands/EnvironmentTestCommand.cs b/CliFx.Tests.Dummy/Commands/EnvironmentTestCommand.cs index 1ec64f8..ae65ef0 100644 --- a/CliFx.Tests.Dummy/Commands/EnvironmentTestCommand.cs +++ b/CliFx.Tests.Dummy/Commands/EnvironmentTestCommand.cs @@ -12,8 +12,7 @@ public class EnvironmentTestCommand : ICommand public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine($"Hello {GreetingTarget}!"); - + console.WriteLine($"Hello {GreetingTarget}!"); return default; } } diff --git a/CliFx.Tests/CancellationSpecs.cs b/CliFx.Tests/CancellationSpecs.cs index 3550745..aa6a6b5 100644 --- a/CliFx.Tests/CancellationSpecs.cs +++ b/CliFx.Tests/CancellationSpecs.cs @@ -66,18 +66,18 @@ public class CancellationSpecs(ITestOutputHelper testOutput) : SpecsBase(testOut { try { - console.Output.WriteLine("Started."); + console.WriteLine("Started."); await Task.Delay( TimeSpan.FromSeconds(3), console.RegisterCancellationHandler() ); - console.Output.WriteLine("Completed."); + console.WriteLine("Completed."); } catch (OperationCanceledException) { - console.Output.WriteLine("Cancelled."); + console.WriteLine("Cancelled."); throw; } } diff --git a/CliFx.Tests/ConsoleSpecs.cs b/CliFx.Tests/ConsoleSpecs.cs index 2a95007..852de83 100644 --- a/CliFx.Tests/ConsoleSpecs.cs +++ b/CliFx.Tests/ConsoleSpecs.cs @@ -170,9 +170,9 @@ public class ConsoleSpecs(ITestOutputHelper testOutput) : SpecsBase(testOutput) { public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine(console.ReadKey().Key); - console.Output.WriteLine(console.ReadKey().Key); - console.Output.WriteLine(console.ReadKey().Key); + console.WriteLine(console.ReadKey().Key); + console.WriteLine(console.ReadKey().Key); + console.WriteLine(console.ReadKey().Key); return default; } diff --git a/CliFx.Tests/ConversionSpecs.cs b/CliFx.Tests/ConversionSpecs.cs index 5d9bda8..52f2a63 100644 --- a/CliFx.Tests/ConversionSpecs.cs +++ b/CliFx.Tests/ConversionSpecs.cs @@ -25,7 +25,7 @@ public class ConversionSpecs(ITestOutputHelper testOutput) : SpecsBase(testOutpu public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine(Foo); + console.WriteLine(Foo); return default; } } @@ -62,7 +62,7 @@ public class ConversionSpecs(ITestOutputHelper testOutput) : SpecsBase(testOutpu public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine(Foo); + console.WriteLine(Foo); return default; } } @@ -105,9 +105,9 @@ public class ConversionSpecs(ITestOutputHelper testOutput) : SpecsBase(testOutpu public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine("Foo = " + Foo); - console.Output.WriteLine("Bar = " + Bar); - console.Output.WriteLine("Baz = " + Baz); + console.WriteLine("Foo = " + Foo); + console.WriteLine("Bar = " + Bar); + console.WriteLine("Baz = " + Baz); return default; } @@ -148,7 +148,7 @@ public class ConversionSpecs(ITestOutputHelper testOutput) : SpecsBase(testOutpu public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine(Foo); + console.WriteLine(Foo); return default; } } @@ -185,7 +185,7 @@ public class ConversionSpecs(ITestOutputHelper testOutput) : SpecsBase(testOutpu public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine(Foo.ToString(CultureInfo.InvariantCulture)); + console.WriteLine(Foo.ToString(CultureInfo.InvariantCulture)); return default; } } @@ -225,7 +225,7 @@ public class ConversionSpecs(ITestOutputHelper testOutput) : SpecsBase(testOutpu public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine(Foo.ToString("u", CultureInfo.InvariantCulture)); + console.WriteLine(Foo.ToString("u", CultureInfo.InvariantCulture)); return default; } } @@ -265,7 +265,7 @@ public class ConversionSpecs(ITestOutputHelper testOutput) : SpecsBase(testOutpu public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine(Foo.ToString(null, CultureInfo.InvariantCulture)); + console.WriteLine(Foo.ToString(null, CultureInfo.InvariantCulture)); return default; } } @@ -307,7 +307,7 @@ public class ConversionSpecs(ITestOutputHelper testOutput) : SpecsBase(testOutpu public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine((int) Foo); + console.WriteLine((int) Foo); return default; } } @@ -347,8 +347,8 @@ public class ConversionSpecs(ITestOutputHelper testOutput) : SpecsBase(testOutpu public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine("Foo = " + Foo); - console.Output.WriteLine("Bar = " + Bar); + console.WriteLine("Foo = " + Foo); + console.WriteLine("Bar = " + Bar); return default; } @@ -391,8 +391,8 @@ public class ConversionSpecs(ITestOutputHelper testOutput) : SpecsBase(testOutpu public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine("Foo = " + (int?) Foo); - console.Output.WriteLine("Bar = " + (int?) Bar); + console.WriteLine("Foo = " + (int?) Foo); + console.WriteLine("Bar = " + (int?) Bar); return default; } @@ -437,7 +437,7 @@ public class ConversionSpecs(ITestOutputHelper testOutput) : SpecsBase(testOutpu public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine(Foo.Value); + console.WriteLine(Foo.Value); return default; } } @@ -497,8 +497,8 @@ public class ConversionSpecs(ITestOutputHelper testOutput) : SpecsBase(testOutpu public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine("Foo = " + Foo.Value); - console.Output.WriteLine("Bar = " + Bar.Value); + console.WriteLine("Foo = " + Foo.Value); + console.WriteLine("Bar = " + Bar.Value); return default; } @@ -545,7 +545,7 @@ public class ConversionSpecs(ITestOutputHelper testOutput) : SpecsBase(testOutpu public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine(Foo); + console.WriteLine(Foo); return default; } } @@ -586,7 +586,7 @@ public class ConversionSpecs(ITestOutputHelper testOutput) : SpecsBase(testOutpu public ValueTask ExecuteAsync(IConsole console) { foreach (var i in Foo) - console.Output.WriteLine(i); + console.WriteLine(i); return default; } @@ -628,7 +628,7 @@ public class ConversionSpecs(ITestOutputHelper testOutput) : SpecsBase(testOutpu public ValueTask ExecuteAsync(IConsole console) { foreach (var i in Foo) - console.Output.WriteLine(i); + console.WriteLine(i); return default; } @@ -670,7 +670,7 @@ public class ConversionSpecs(ITestOutputHelper testOutput) : SpecsBase(testOutpu public ValueTask ExecuteAsync(IConsole console) { foreach (var i in Foo) - console.Output.WriteLine(i); + console.WriteLine(i); return default; } @@ -712,7 +712,7 @@ public class ConversionSpecs(ITestOutputHelper testOutput) : SpecsBase(testOutpu public ValueTask ExecuteAsync(IConsole console) { foreach (var i in Foo) - console.Output.WriteLine(i); + console.WriteLine(i); return default; } diff --git a/CliFx.Tests/EnvironmentSpecs.cs b/CliFx.Tests/EnvironmentSpecs.cs index aa233a4..a419c7d 100644 --- a/CliFx.Tests/EnvironmentSpecs.cs +++ b/CliFx.Tests/EnvironmentSpecs.cs @@ -32,8 +32,8 @@ public class EnvironmentSpecs(ITestOutputHelper testOutput) : SpecsBase(testOutp public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine(Foo); - console.Output.WriteLine(Bar); + console.WriteLine(Foo); + console.WriteLine(Bar); return default; } @@ -75,7 +75,7 @@ public class EnvironmentSpecs(ITestOutputHelper testOutput) : SpecsBase(testOutp public ValueTask ExecuteAsync(IConsole console) { foreach (var i in Foo) - console.Output.WriteLine(i); + console.WriteLine(i); return default; } @@ -116,7 +116,7 @@ public class EnvironmentSpecs(ITestOutputHelper testOutput) : SpecsBase(testOutp public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine(Foo); + console.WriteLine(Foo); return default; } } diff --git a/CliFx.Tests/OptionBindingSpecs.cs b/CliFx.Tests/OptionBindingSpecs.cs index b635803..4e7dbb6 100644 --- a/CliFx.Tests/OptionBindingSpecs.cs +++ b/CliFx.Tests/OptionBindingSpecs.cs @@ -26,7 +26,7 @@ public class OptionBindingSpecs(ITestOutputHelper testOutput) : SpecsBase(testOu public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine(Foo); + console.WriteLine(Foo); return default; } } @@ -63,7 +63,7 @@ public class OptionBindingSpecs(ITestOutputHelper testOutput) : SpecsBase(testOu public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine(Foo); + console.WriteLine(Foo); return default; } } @@ -103,8 +103,8 @@ public class OptionBindingSpecs(ITestOutputHelper testOutput) : SpecsBase(testOu public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine("Foo = " + Foo); - console.Output.WriteLine("Bar = " + Bar); + console.WriteLine("Foo = " + Foo); + console.WriteLine("Bar = " + Bar); return default; } @@ -148,8 +148,8 @@ public class OptionBindingSpecs(ITestOutputHelper testOutput) : SpecsBase(testOu public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine("Foo = " + Foo); - console.Output.WriteLine("Bar = " + Bar); + console.WriteLine("Foo = " + Foo); + console.WriteLine("Bar = " + Bar); return default; } @@ -193,8 +193,8 @@ public class OptionBindingSpecs(ITestOutputHelper testOutput) : SpecsBase(testOu public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine("Foo = " + Foo); - console.Output.WriteLine("Bar = " + Bar); + console.WriteLine("Foo = " + Foo); + console.WriteLine("Bar = " + Bar); return default; } @@ -236,7 +236,7 @@ public class OptionBindingSpecs(ITestOutputHelper testOutput) : SpecsBase(testOu public ValueTask ExecuteAsync(IConsole console) { foreach (var i in Foo) - console.Output.WriteLine(i); + console.WriteLine(i); return default; } @@ -278,7 +278,7 @@ public class OptionBindingSpecs(ITestOutputHelper testOutput) : SpecsBase(testOu public ValueTask ExecuteAsync(IConsole console) { foreach (var i in Foo) - console.Output.WriteLine(i); + console.WriteLine(i); return default; } @@ -320,7 +320,7 @@ public class OptionBindingSpecs(ITestOutputHelper testOutput) : SpecsBase(testOu public ValueTask ExecuteAsync(IConsole console) { foreach (var i in Foo) - console.Output.WriteLine(i); + console.WriteLine(i); return default; } @@ -362,7 +362,7 @@ public class OptionBindingSpecs(ITestOutputHelper testOutput) : SpecsBase(testOu public ValueTask ExecuteAsync(IConsole console) { foreach (var i in Foo) - console.Output.WriteLine(i); + console.WriteLine(i); return default; } @@ -404,7 +404,7 @@ public class OptionBindingSpecs(ITestOutputHelper testOutput) : SpecsBase(testOu public ValueTask ExecuteAsync(IConsole console) { foreach (var i in Foo) - console.Output.WriteLine(i); + console.WriteLine(i); return default; } @@ -448,8 +448,8 @@ public class OptionBindingSpecs(ITestOutputHelper testOutput) : SpecsBase(testOu public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine("Foo = " + Foo); - console.Output.WriteLine("Bar = " + Bar); + console.WriteLine("Foo = " + Foo); + console.WriteLine("Bar = " + Bar); return default; } @@ -522,9 +522,9 @@ public class OptionBindingSpecs(ITestOutputHelper testOutput) : SpecsBase(testOu public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine("Foo = " + SharedContext.Foo); - console.Output.WriteLine("Bar = " + SharedContext.Bar); - console.Output.WriteLine("Baz = " + Baz); + console.WriteLine("Foo = " + SharedContext.Foo); + console.WriteLine("Bar = " + SharedContext.Bar); + console.WriteLine("Baz = " + Baz); return default; } @@ -562,7 +562,7 @@ public class OptionBindingSpecs(ITestOutputHelper testOutput) : SpecsBase(testOu public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine(Foo); + console.WriteLine(Foo); return default; } } diff --git a/CliFx.Tests/ParameterBindingSpecs.cs b/CliFx.Tests/ParameterBindingSpecs.cs index 01318e4..0f7ad44 100644 --- a/CliFx.Tests/ParameterBindingSpecs.cs +++ b/CliFx.Tests/ParameterBindingSpecs.cs @@ -28,8 +28,8 @@ public class ParameterBindingSpecs(ITestOutputHelper testOutput) : SpecsBase(tes public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine("Foo = " + Foo); - console.Output.WriteLine("Bar = " + Bar); + console.WriteLine("Foo = " + Foo); + console.WriteLine("Bar = " + Bar); return default; } @@ -76,11 +76,11 @@ public class ParameterBindingSpecs(ITestOutputHelper testOutput) : SpecsBase(tes public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine("Foo = " + Foo); - console.Output.WriteLine("Bar = " + Bar); + console.WriteLine("Foo = " + Foo); + console.WriteLine("Bar = " + Bar); foreach (var i in Baz) - console.Output.WriteLine("Baz = " + i); + console.WriteLine("Baz = " + i); return default; } @@ -198,8 +198,8 @@ public class ParameterBindingSpecs(ITestOutputHelper testOutput) : SpecsBase(tes public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine("Foo = " + Foo); - console.Output.WriteLine("Bar = " + Bar); + console.WriteLine("Foo = " + Foo); + console.WriteLine("Bar = " + Bar); return default; } diff --git a/CliFx.Tests/RoutingSpecs.cs b/CliFx.Tests/RoutingSpecs.cs index 0a36a1e..a302e67 100644 --- a/CliFx.Tests/RoutingSpecs.cs +++ b/CliFx.Tests/RoutingSpecs.cs @@ -22,7 +22,7 @@ public class RoutingSpecs(ITestOutputHelper testOutput) : SpecsBase(testOutput) { public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine("default"); + console.WriteLine("default"); return default; } } @@ -32,7 +32,7 @@ public class RoutingSpecs(ITestOutputHelper testOutput) : SpecsBase(testOutput) { public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine("cmd"); + console.WriteLine("cmd"); return default; } } @@ -42,7 +42,7 @@ public class RoutingSpecs(ITestOutputHelper testOutput) : SpecsBase(testOutput) { public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine("cmd child"); + console.WriteLine("cmd child"); return default; } } @@ -79,7 +79,7 @@ public class RoutingSpecs(ITestOutputHelper testOutput) : SpecsBase(testOutput) { public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine("default"); + console.WriteLine("default"); return default; } } @@ -89,7 +89,7 @@ public class RoutingSpecs(ITestOutputHelper testOutput) : SpecsBase(testOutput) { public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine("cmd"); + console.WriteLine("cmd"); return default; } } @@ -99,7 +99,7 @@ public class RoutingSpecs(ITestOutputHelper testOutput) : SpecsBase(testOutput) { public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine("cmd child"); + console.WriteLine("cmd child"); return default; } } @@ -133,7 +133,7 @@ public class RoutingSpecs(ITestOutputHelper testOutput) : SpecsBase(testOutput) { public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine("default"); + console.WriteLine("default"); return default; } } @@ -143,7 +143,7 @@ public class RoutingSpecs(ITestOutputHelper testOutput) : SpecsBase(testOutput) { public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine("cmd"); + console.WriteLine("cmd"); return default; } } @@ -153,7 +153,7 @@ public class RoutingSpecs(ITestOutputHelper testOutput) : SpecsBase(testOutput) { public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine("cmd child"); + console.WriteLine("cmd child"); return default; } } diff --git a/CliFx.Tests/TypeActivationSpecs.cs b/CliFx.Tests/TypeActivationSpecs.cs index 035f6d3..24c1ad3 100644 --- a/CliFx.Tests/TypeActivationSpecs.cs +++ b/CliFx.Tests/TypeActivationSpecs.cs @@ -24,7 +24,7 @@ public class TypeActivationSpecs(ITestOutputHelper testOutput) : SpecsBase(testO { public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine("foo"); + console.WriteLine("foo"); return default; } } @@ -102,7 +102,7 @@ public class TypeActivationSpecs(ITestOutputHelper testOutput) : SpecsBase(testO public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine(_foo); + console.WriteLine(_foo); return default; } } @@ -144,7 +144,7 @@ public class TypeActivationSpecs(ITestOutputHelper testOutput) : SpecsBase(testO public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine(_foo); + console.WriteLine(_foo); return default; } } @@ -195,7 +195,7 @@ public class TypeActivationSpecs(ITestOutputHelper testOutput) : SpecsBase(testO { public ValueTask ExecuteAsync(IConsole console) { - console.Output.WriteLine("foo"); + console.WriteLine("foo"); return default; } } diff --git a/CliFx/Attributes/CommandOptionAttribute.cs b/CliFx/Attributes/CommandOptionAttribute.cs index 96d237a..517a56b 100644 --- a/CliFx/Attributes/CommandOptionAttribute.cs +++ b/CliFx/Attributes/CommandOptionAttribute.cs @@ -35,7 +35,7 @@ public sealed class CommandOptionAttribute : Attribute /// public CommandOptionAttribute(char shortName) : this(null, (char?)shortName) { } - + /// /// Option name. /// diff --git a/CliFx/CliApplication.cs b/CliFx/CliApplication.cs index 061e3c3..bb06d07 100644 --- a/CliFx/CliApplication.cs +++ b/CliFx/CliApplication.cs @@ -88,7 +88,7 @@ public class CliApplication( // Handle the preview directive if (IsPreviewModeEnabled(commandInput)) { - console.Output.WriteCommandInput(commandInput); + console.WriteCommandInput(commandInput); return 0; } @@ -125,14 +125,14 @@ public class CliApplication( // Handle the help option if (ShouldShowHelpText(commandSchema, commandInput)) { - console.Output.WriteHelpText(helpContext); + console.WriteHelpText(helpContext); return 0; } // Handle the version option if (ShouldShowVersionText(commandSchema, commandInput)) { - console.Output.WriteLine(Metadata.Version); + console.WriteLine(Metadata.Version); return 0; } @@ -150,12 +150,12 @@ public class CliApplication( } catch (CliFxException ex) { - console.Error.WriteException(ex); + console.WriteException(ex); if (ex.ShowHelp) { - console.Output.WriteLine(); - console.Output.WriteHelpText(helpContext); + console.WriteLine(); + console.WriteHelpText(helpContext); } return ex.ExitCode; @@ -195,7 +195,7 @@ public class CliApplication( // developer, so we don't swallow them in that case. catch (Exception ex) when (!Debugger.IsAttached) { - console.Error.WriteException(ex); + console.WriteException(ex); return 1; } } diff --git a/CliFx/Formatting/CommandInputConsoleFormatter.cs b/CliFx/Formatting/CommandInputConsoleFormatter.cs index 5d62bf4..fd9a9d6 100644 --- a/CliFx/Formatting/CommandInputConsoleFormatter.cs +++ b/CliFx/Formatting/CommandInputConsoleFormatter.cs @@ -92,4 +92,7 @@ internal static class CommandInputConsoleFormatterExtensions this ConsoleWriter consoleWriter, CommandInput commandInput ) => new CommandInputConsoleFormatter(consoleWriter).WriteCommandInput(commandInput); + + public static void WriteCommandInput(this IConsole console, CommandInput commandInput) => + console.Output.WriteCommandInput(commandInput); } diff --git a/CliFx/Formatting/ExceptionConsoleFormatter.cs b/CliFx/Formatting/ExceptionConsoleFormatter.cs index 6772d56..829dd0f 100644 --- a/CliFx/Formatting/ExceptionConsoleFormatter.cs +++ b/CliFx/Formatting/ExceptionConsoleFormatter.cs @@ -122,4 +122,7 @@ internal static class ExceptionConsoleFormatterExtensions { public static void WriteException(this ConsoleWriter consoleWriter, Exception exception) => new ExceptionConsoleFormatter(consoleWriter).WriteException(exception); + + public static void WriteException(this IConsole console, Exception exception) => + console.Error.WriteException(exception); } diff --git a/CliFx/Formatting/HelpConsoleFormatter.cs b/CliFx/Formatting/HelpConsoleFormatter.cs index ebab1c0..982653b 100644 --- a/CliFx/Formatting/HelpConsoleFormatter.cs +++ b/CliFx/Formatting/HelpConsoleFormatter.cs @@ -458,4 +458,7 @@ internal static class HelpConsoleFormatterExtensions { public static void WriteHelpText(this ConsoleWriter consoleWriter, HelpContext context) => new HelpConsoleFormatter(consoleWriter, context).WriteHelpText(); + + public static void WriteHelpText(this IConsole console, HelpContext context) => + console.Output.WriteHelpText(context); } diff --git a/CliFx/Infrastructure/IConsole.cs b/CliFx/Infrastructure/IConsole.cs index 50e5c39..23a4664 100644 --- a/CliFx/Infrastructure/IConsole.cs +++ b/CliFx/Infrastructure/IConsole.cs @@ -108,6 +108,43 @@ public interface IConsole /// public static class ConsoleExtensions { + /// + /// Writes a string to the console's output stream. + /// + public static void Write(this IConsole console, string? value) => console.Output.Write(value); + + /// + /// Writes an object to the console's output stream. + /// + public static void Write(this IConsole console, object? value) => console.Output.Write(value); + + /// + /// Writes an empty line to the console's output stream. + /// + public static void WriteLine(this IConsole console) => console.Output.WriteLine(); + + /// + /// Writes a string to the console's output stream, followed by a line terminator. + /// + public static void WriteLine(this IConsole console, string? value) => + console.Output.WriteLine(value); + + /// + /// Writes an object to the console's output stream, followed by a line terminator. + /// + public static void WriteLine(this IConsole console, object? value) => + console.Output.WriteLine(value); + + /// + /// Reads a single character from the console's input stream. + /// + public static int Read(this IConsole console) => console.Input.Read(); + + /// + /// Reads a line from the console's input stream. + /// + public static string? ReadLine(this IConsole console) => console.Input.ReadLine(); + /// /// Sets the specified foreground color and returns an /// that will reset the color back to its previous value upon disposal.