diff --git a/Generate-ReleaseNotes.bat b/Generate-ReleaseNotes.bat index 2b2c1c8..f9eca00 100644 --- a/Generate-ReleaseNotes.bat +++ b/Generate-ReleaseNotes.bat @@ -1,5 +1,5 @@ rem See https://github.com/StefH/GitHubReleaseNotes for more information. -SET version=3.0.23 +SET version=3.1.0 GitHubReleaseNotes --output ReleaseNotes.md --skip-empty-releases --exclude-labels question invalid doc --version %version% \ No newline at end of file diff --git a/README.md b/README.md index c0e43aa..70bad68 100644 --- a/README.md +++ b/README.md @@ -9,12 +9,6 @@ CommandLine Parser Library lets you easily define strongly typed command line ar See [Quick Start](https://github.com/j-maly/CommandLineParser/wiki) on how to use the library. Supports the following Frameworks: -* NET 2.0 -* NET 3.5 -* NET 4.0 -* NET 4.5 -* NET 4.5.2 and higher -* NETStandard 1.3 and higher * NETStandard 2.0 * NETStandard 2.1 @@ -32,7 +26,9 @@ For application with one or two arguments, you could probably manage with some s This is the way you define arguments for your application: ```csharp -CommandLineParser.CommandLineParser parser = new CommandLineParser.CommandLineParser(); +var factory = LoggerFactory.Create(b => b.AddConsole()); +ILogger logger = factory.CreateLogger(); +CommandLineParser.CommandLineParser parser = new CommandLineParser.CommandLineParser(logger); //switch argument is meant for true/false logic SwitchArgument showArgument = new SwitchArgument('s', "show", "Set whether show or not", true); ValueArgument version = new ValueArgument('v', "version", "Set desired version"); @@ -60,7 +56,7 @@ try } catch (CommandLineException e) { - Console.WriteLine(e.Message); + logger.LogWarning(e.Message); } ``` You can find more examples of use in the [wiki](https://github.com/j-maly/CommandLineParser/wiki). diff --git a/appveyor.yml b/appveyor.yml index bb55a46..3ac3fa0 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,6 +1,6 @@ os: Visual Studio 2022 -version: 3.0.23.{build} +version: 3.1.0.{build} configuration: - Debug @@ -15,13 +15,13 @@ build_script: - cmd: dotnet --info - cmd: dotnet restore src\CommandLineArgumentsParser\CommandLineArgumentsParser.csproj - - cmd: dotnet build src\CommandLineArgumentsParser\CommandLineArgumentsParser.csproj --configuration %CONFIGURATION% --framework net452 - - cmd: dotnet build src\CommandLineArgumentsParser\CommandLineArgumentsParser.csproj --configuration %CONFIGURATION% --framework netstandard1.3 + - cmd: dotnet build src\CommandLineArgumentsParser\CommandLineArgumentsParser.csproj --configuration %CONFIGURATION% --framework netstandard2.0 + - cmd: dotnet build src\CommandLineArgumentsParser\CommandLineArgumentsParser.csproj --configuration %CONFIGURATION% --framework netstandard2.1 - cmd: dotnet restore src\ParserTest\ParserTest.csproj - - cmd: dotnet build src\ParserTest\ParserTest.csproj --configuration %CONFIGURATION% --framework net452 - - cmd: dotnet build src\ParserTest\ParserTest.csproj --configuration %CONFIGURATION% --framework netcoreapp1.1 - - cmd: dotnet build src\ParserTest\ParserTest.csproj --configuration %CONFIGURATION% --framework netcoreapp2.1 + - cmd: dotnet build src\ParserTest\ParserTest.csproj --configuration %CONFIGURATION% --framework net472 + - cmd: dotnet build src\ParserTest\ParserTest.csproj --configuration %CONFIGURATION% --framework net48 + - cmd: dotnet build src\ParserTest\ParserTest.csproj --configuration %CONFIGURATION% --framework netcoreapp3.1 - cmd: dotnet build src\ParserTest\ParserTest.csproj --configuration %CONFIGURATION% --framework net6.0 - cmd: dotnet restore src\Tests\Tests.csproj diff --git a/src/CommandLineArgumentsParser/Arguments/Argument.cs b/src/CommandLineArgumentsParser/Arguments/Argument.cs index 6911e12..ec452e5 100644 --- a/src/CommandLineArgumentsParser/Arguments/Argument.cs +++ b/src/CommandLineArgumentsParser/Arguments/Argument.cs @@ -4,6 +4,7 @@ using System.Reflection; using CommandLineParser.Compatibility; using CommandLineParser.Exceptions; +using Microsoft.Extensions.Logging; namespace CommandLineParser.Arguments; @@ -251,9 +252,9 @@ public virtual void Parse(IList args, ref int i) } /// - /// Prints information about the argument value to the console. + /// Prints information about the argument value to the log. /// - public abstract void PrintValueInfo(); + public abstract void PrintValueInfo(ILogger logger); /// /// Initializes the argument. Sets to false. Override in inherited classes diff --git a/src/CommandLineArgumentsParser/Arguments/BoundedValueArgument.cs b/src/CommandLineArgumentsParser/Arguments/BoundedValueArgument.cs index 534e5e7..7965992 100644 --- a/src/CommandLineArgumentsParser/Arguments/BoundedValueArgument.cs +++ b/src/CommandLineArgumentsParser/Arguments/BoundedValueArgument.cs @@ -1,6 +1,7 @@ using System; using CommandLineParser.Compatibility; using CommandLineParser.Exceptions; +using Microsoft.Extensions.Logging; namespace CommandLineParser.Arguments { diff --git a/src/CommandLineArgumentsParser/Arguments/CertifiedValueArgument.cs b/src/CommandLineArgumentsParser/Arguments/CertifiedValueArgument.cs index 03502f4..61f925f 100644 --- a/src/CommandLineArgumentsParser/Arguments/CertifiedValueArgument.cs +++ b/src/CommandLineArgumentsParser/Arguments/CertifiedValueArgument.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using Microsoft.Extensions.Logging; +using System.Collections.Generic; namespace CommandLineParser.Arguments { diff --git a/src/CommandLineArgumentsParser/Arguments/DirectoryArgument.cs b/src/CommandLineArgumentsParser/Arguments/DirectoryArgument.cs index c21a898..4b26876 100644 --- a/src/CommandLineArgumentsParser/Arguments/DirectoryArgument.cs +++ b/src/CommandLineArgumentsParser/Arguments/DirectoryArgument.cs @@ -1,3 +1,4 @@ +using Microsoft.Extensions.Logging; using System.IO; namespace CommandLineParser.Arguments diff --git a/src/CommandLineArgumentsParser/Arguments/EnumeratedValueArgument.cs b/src/CommandLineArgumentsParser/Arguments/EnumeratedValueArgument.cs index 7220db6..5708a4b 100644 --- a/src/CommandLineArgumentsParser/Arguments/EnumeratedValueArgument.cs +++ b/src/CommandLineArgumentsParser/Arguments/EnumeratedValueArgument.cs @@ -3,6 +3,7 @@ using System.Linq; using CommandLineParser.Compatibility; using CommandLineParser.Exceptions; +using Microsoft.Extensions.Logging; namespace CommandLineParser.Arguments { diff --git a/src/CommandLineArgumentsParser/Arguments/FileArgument.cs b/src/CommandLineArgumentsParser/Arguments/FileArgument.cs index 4654323..a540084 100644 --- a/src/CommandLineArgumentsParser/Arguments/FileArgument.cs +++ b/src/CommandLineArgumentsParser/Arguments/FileArgument.cs @@ -1,3 +1,4 @@ +using Microsoft.Extensions.Logging; using System; using System.IO; diff --git a/src/CommandLineArgumentsParser/Arguments/RegexValueArgument.cs b/src/CommandLineArgumentsParser/Arguments/RegexValueArgument.cs index 94f39a2..09d6be8 100644 --- a/src/CommandLineArgumentsParser/Arguments/RegexValueArgument.cs +++ b/src/CommandLineArgumentsParser/Arguments/RegexValueArgument.cs @@ -2,6 +2,7 @@ using System.Text.RegularExpressions; using CommandLineParser.Compatibility; using CommandLineParser.Exceptions; +using Microsoft.Extensions.Logging; namespace CommandLineParser.Arguments; diff --git a/src/CommandLineArgumentsParser/Arguments/SwitchArgument.cs b/src/CommandLineArgumentsParser/Arguments/SwitchArgument.cs index e4f6cf6..c7d6a34 100644 --- a/src/CommandLineArgumentsParser/Arguments/SwitchArgument.cs +++ b/src/CommandLineArgumentsParser/Arguments/SwitchArgument.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using CommandLineParser.Compatibility; using CommandLineParser.Exceptions; +using Microsoft.Extensions.Logging; namespace CommandLineParser.Arguments { @@ -113,11 +114,11 @@ public override void UpdateBoundObject() } /// - /// Prints information about the argument value to the console. + /// Prints information about the argument value to the ILogger. /// - public override void PrintValueInfo() + public override void PrintValueInfo(ILogger logger) { - Console.WriteLine(Messages.EXC_ARG_SWITCH_PRINT, Name, Value ? "1" : "0"); + logger.LogInformation(Messages.IL_EXC_ARG_SWITCH_PRINT, Name, Value ? "1" : "0"); } /// diff --git a/src/CommandLineArgumentsParser/Arguments/ValueArgument.cs b/src/CommandLineArgumentsParser/Arguments/ValueArgument.cs index 92cd5d3..49d4c3b 100644 --- a/src/CommandLineArgumentsParser/Arguments/ValueArgument.cs +++ b/src/CommandLineArgumentsParser/Arguments/ValueArgument.cs @@ -1,5 +1,6 @@ using CommandLineParser.Compatibility; using CommandLineParser.Exceptions; +using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Globalization; @@ -442,18 +443,18 @@ public override void Init() } /// - /// Prints information about the argument value to the console. + /// Prints information about the argument value to the log. /// - public override void PrintValueInfo() + public override void PrintValueInfo(ILogger logger) { if (!AllowMultiple) { - Console.WriteLine(Messages.EXC_ARG_VALUE_PRINT, Name, _stringValue, _value, typeof(TValue).Name); + logger.LogInformation(Messages.IL_EXC_ARG_VALUE_PRINT, Name, _stringValue, _value, typeof(TValue).Name); } else { string valuesString = string.Join(", ", _values.Select(v => v.ToString()).ToArray()); - Console.WriteLine(Messages.EXC_ARG_VALUE_PRINT_MULTIPLE, Name, Values.Count, valuesString, typeof(TValue).Name); + logger.LogInformation(Messages.IL_EXC_ARG_VALUE_PRINT_MULTIPLE, Name, Values.Count, valuesString, typeof(TValue).Name); } } } diff --git a/src/CommandLineArgumentsParser/CommandLineArgumentsParser.csproj b/src/CommandLineArgumentsParser/CommandLineArgumentsParser.csproj index ac0f0c6..9f2e15f 100644 --- a/src/CommandLineArgumentsParser/CommandLineArgumentsParser.csproj +++ b/src/CommandLineArgumentsParser/CommandLineArgumentsParser.csproj @@ -6,7 +6,7 @@ Jakub Maly;Stef Heyenrath;NTTAKR Copyright Jakub Maly & Stef Heyenrath © 2018-2022 Jakub Maly - net20;net35;net40;net45;net452;netstandard1.3;netstandard2.0;netstandard2.1 + netstandard2.0;netstandard2.1 CommandLineArgumentsParser CommandLineParser CommandLineArgumentsParser @@ -16,7 +16,7 @@ See ReleaseNotes.md git https://github.com/j-maly/CommandLineParser - 3.0.23 + 3.1.0 full true CommandLineArgumentsParser.snk @@ -30,30 +30,9 @@ - - - - - - - - - $(DefineConstants);NETSTANDARD - - - - - - - - - - - - - - - + + + \ No newline at end of file diff --git a/src/CommandLineArgumentsParser/CommandLineParser.cs b/src/CommandLineArgumentsParser/CommandLineParser.cs index adafbb9..3003d2a 100644 --- a/src/CommandLineArgumentsParser/CommandLineParser.cs +++ b/src/CommandLineArgumentsParser/CommandLineParser.cs @@ -3,11 +3,13 @@ using System.IO; using System.Linq; using System.Reflection; +using System.Text; using System.Text.RegularExpressions; using CommandLineParser.Arguments; using CommandLineParser.Compatibility; using CommandLineParser.Exceptions; using CommandLineParser.Validation; +using Microsoft.Extensions.Logging; namespace CommandLineParser; @@ -41,7 +43,7 @@ public class CommandLineParser : IDisposable private readonly AdditionalArgumentsSettings _additionalArgumentsSettings = new AdditionalArgumentsSettings(); private readonly List _showUsageCommands = new List { "--help", "/?", "/help" }; - + private readonly ILogger _logger; private bool _acceptSlash = true; private bool _acceptHyphen = true; @@ -54,6 +56,13 @@ public class CommandLineParser : IDisposable #endregion + public CommandLineParser(ILogger? logger) + { + _logger = (logger == null ? + LoggerFactory.Create(b => b.AddConsole()).CreateLogger() + : logger) ; + } + /// /// Defined command line arguments /// @@ -617,82 +626,81 @@ public Argument LookupArgument(string argName) } /// - /// Prints arguments information and usage information to - /// the . + /// Prints arguments information and usage information using ILogger /// - public void PrintUsage(TextWriter outputStream) + public void PrintUsage() { - outputStream.WriteLine(ShowUsageHeader); - - outputStream.WriteLine(Messages.MSG_USAGE); - + _logger.LogInformation(ShowUsageHeader); + _logger.LogInformation(Messages.MSG_USAGE); + var sb = new StringBuilder(); foreach (Argument argument in _arguments) { - outputStream.Write("\t"); + sb.Append("\t"); bool comma = false; if (argument.ShortName.HasValue) { - outputStream.Write("-" + argument.ShortName); + sb.Append("-" + argument.ShortName); comma = true; } foreach (char c in argument.ShortAliases) { if (comma) - outputStream.WriteLine(", "); - outputStream.Write("-" + c); + sb.Append(", "); + sb.Append("-" + c); comma = true; } if (!string.IsNullOrEmpty(argument.LongName)) { if (comma) - outputStream.Write(", "); - outputStream.Write("--" + argument.LongName); + sb.Append(", "); + sb.Append("--" + argument.LongName); comma = true; } foreach (string str in argument.LongAliases) { if (comma) - outputStream.Write(", "); - outputStream.Write("--" + str); + sb.Append(", "); + sb.Append("--" + str); comma = true; } if (argument.Optional) - outputStream.Write(Messages.MSG_OPTIONAL); - outputStream.WriteLine("... {0} ", argument.Description); + sb.Append(Messages.MSG_OPTIONAL); + _logger.LogInformation(sb.ToString()); + _logger.LogInformation($"... {argument.Description} "); if (!string.IsNullOrEmpty(argument.Example)) { - outputStream.WriteLine(Messages.MSG_EXAMPLE_FORMAT, argument.Example); + _logger.LogInformation(Messages.IL_MSG_EXAMPLE_FORMAT, argument.Example); } if (!string.IsNullOrEmpty(argument.FullDescription)) { - outputStream.WriteLine(); - outputStream.WriteLine(argument.FullDescription); + _logger.LogInformation(Messages.IL_MSG_FULL_DESC, argument.FullDescription); } - outputStream.WriteLine(); } if (Certifications.Count > 0) { - outputStream.WriteLine(Messages.CERT_REMARKS); + sb.Clear(); + sb.AppendLine(Messages.CERT_REMARKS); foreach (ArgumentCertification certification in Certifications) { - outputStream.WriteLine("\t" + certification.Description); + sb.Append("\t" + certification.Description); } - outputStream.WriteLine(); + _logger.LogInformation(sb.ToString()); } - outputStream.WriteLine(ShowUsageFooter); + _logger.LogInformation(ShowUsageFooter); + } /// - /// Prints arguments information and usage information to the console. + /// Prints arguments information and usage information to the ILogger. /// public void ShowUsage() { - PrintUsage(Console.Out); + PrintUsage(); } /// @@ -700,41 +708,38 @@ public void ShowUsage() /// public void ShowParsedArguments(bool showOmittedArguments = false) { - Console.WriteLine(Messages.MSG_PARSING_RESULTS); - Console.WriteLine("\t" + Messages.MSG_COMMAND_LINE); + var sb = new StringBuilder(); + sb.AppendLine(Messages.MSG_PARSING_RESULTS); + sb.Append("\t" + Messages.MSG_COMMAND_LINE); foreach (string arg in _argsNotParsed) { - Console.Write(arg); - Console.Write(" "); + sb.Append(arg); + sb.Append(" "); } - Console.WriteLine(); - Console.WriteLine(); - Console.WriteLine("\t" + Messages.MSG_PARSED_ARGUMENTS); + sb.AppendLine("\t" + Messages.MSG_PARSED_ARGUMENTS); + _logger.LogInformation(sb.ToString()); foreach (Argument argument in _arguments) { if (argument.Parsed) - argument.PrintValueInfo(); + argument.PrintValueInfo(_logger); } - Console.WriteLine(); - Console.WriteLine("\t" + Messages.MSG_NOT_PARSED_ARGUMENTS); + _logger.LogInformation(Messages.MSG_NOT_PARSED_ARGUMENTS); foreach (Argument argument in _arguments) { if (!argument.Parsed) - argument.PrintValueInfo(); + argument.PrintValueInfo(_logger); } - Console.WriteLine(); if (AdditionalArgumentsSettings.AcceptAdditionalArguments) { - Console.WriteLine("\t" + Messages.MSG_ADDITIONAL_ARGUMENTS); - + _logger.LogInformation(Messages.MSG_ADDITIONAL_ARGUMENTS); + sb.Clear(); foreach (string simpleArgument in AdditionalArgumentsSettings.AdditionalArguments) { - Console.Write(simpleArgument + " "); + sb.Append(simpleArgument + " "); } - Console.WriteLine(); - Console.WriteLine(); + _logger.LogInformation(sb.ToString()); } } diff --git a/src/CommandLineArgumentsParser/Messages.cs b/src/CommandLineArgumentsParser/Messages.cs index 1d6618b..728d91b 100644 --- a/src/CommandLineArgumentsParser/Messages.cs +++ b/src/CommandLineArgumentsParser/Messages.cs @@ -20,6 +20,7 @@ internal static class Messages public static string EXC_ARG_NOT_ONE_WORD = "LongName of an argument must be one word."; public static string EXC_ARG_SWITCH_PRINT = "Argument: {0} value: {1}"; + public static string IL_EXC_ARG_SWITCH_PRINT = "Argument: {@Argument} value: {@Value}"; public static string EXC_ARG_UNKNOWN = "Unknown argument found: {0}."; @@ -30,8 +31,10 @@ internal static class Messages public static string EXC_ARG_VALUE_MULTIPLE_OCCURS = "Argument {0} can not be used multiple times."; public static string EXC_ARG_VALUE_PRINT = "Argument: {0}, type: {3}, value: {2} (converted from: {1})"; + public static string IL_EXC_ARG_VALUE_PRINT = "Argument: {@Argument}, type: {@Type}, value: {@Value} (converted from: {@ConvertedFrom})"; public static string EXC_ARG_VALUE_PRINT_MULTIPLE = "Argument: {0}, type: {3}, occurred {1}x values: {2}"; + public static string IL_EXC_ARG_VALUE_PRINT_MULTIPLE = "Argument: {@Argument}, type: {@Type}, occurred {@occured}x values: {@Values}"; public static string EXC_ARG_VALUE_STANDARD_CONVERT_FAILED = "Failed to convert string {0} to type {1}. Use strings in accepted format or define custom conversion using ConvertValueHandler."; @@ -90,6 +93,8 @@ internal static class Messages public static string EXC_NOT_ENOUGH_ADDITIONAL_ARGUMENTS = "Not enough additional arguments. Needed {0} additional arguments."; public static string MSG_EXAMPLE_FORMAT = "Example: {0}"; + public static string IL_MSG_EXAMPLE_FORMAT = "Example: {@Example}"; + public static string IL_MSG_FULL_DESC = "Full Description: {@FullDescription}"; // public static string EXC_GROUP_ALL_OR_NONE_USED_NOT_ALL_USED = "All or none of these arguments: {0} must be used."; diff --git a/src/ParserTest/ParserTest.csproj b/src/ParserTest/ParserTest.csproj index 8d18dec..b63c92d 100644 --- a/src/ParserTest/ParserTest.csproj +++ b/src/ParserTest/ParserTest.csproj @@ -2,7 +2,7 @@ Jakub Maly;Stef Heyenrath - net20;net35;net40;net45;net452;netcoreapp1.1;netcoreapp2.1;net6.0 + net472;net48;netcoreapp3.1;net6.0 ParserTest Exe ParserTest diff --git a/src/ParserTest/Program.cs b/src/ParserTest/Program.cs index 6087091..56db3e2 100644 --- a/src/ParserTest/Program.cs +++ b/src/ParserTest/Program.cs @@ -4,6 +4,7 @@ using CommandLineParser.Arguments; using CommandLineParser.Exceptions; using CommandLineParser.Validation; +using Microsoft.Extensions.Logging; namespace ParserTest { @@ -54,7 +55,9 @@ public class Program { public static void Main(string[] args) { - var parser = new CommandLineParser.CommandLineParser(); + var factory = LoggerFactory.Create(b => b.AddConsole()); + ILogger logger = factory.CreateLogger(); + var parser = new CommandLineParser.CommandLineParser(logger); parser.ShowUsageOnEmptyCommandline = true; var p = new ParsingTarget(); @@ -82,20 +85,18 @@ public static void Main(string[] args) try { if (arguments.Length == 0) - Console.WriteLine("INPUT: No arguments supplied."); + logger.LogWarning("INPUT: No arguments supplied."); else - Console.WriteLine("INPUT: {0}", arguments); + logger.LogInformation("INPUT: {0}", arguments); parser.ParseCommandLine(arguments); parser.ShowParsedArguments(true); - Console.WriteLine("RESULT: OK"); - Console.WriteLine(); + logger.LogInformation("RESULT: OK"); } catch (CommandLineException e) { - Console.WriteLine("RESULT: EXC - " + e.Message); - Console.WriteLine(); + logger.LogError("RESULT: EXC - " + e.Message); } } @@ -121,15 +122,13 @@ public static void Main(string[] args) } catch (CommandLineException e) { - Console.WriteLine("RESULT: EXC - " + e.Message); - Console.WriteLine(); + logger.LogError("RESULT: EXC - " + e.Message); } // two files - OK parser.ParseCommandLine(new[] { "/d", "C:\\Input", "file1.txt", "file2.txt" }); parser.ShowParsedArguments(); - Console.WriteLine("RESULT: OK"); - Console.WriteLine(); + logger.LogInformation("RESULT: OK"); } } } \ No newline at end of file diff --git a/src/Tests/MandatoryArgumentsTests.cs b/src/Tests/MandatoryArgumentsTests.cs index 3a90b47..7d18b3f 100644 --- a/src/Tests/MandatoryArgumentsTests.cs +++ b/src/Tests/MandatoryArgumentsTests.cs @@ -1,6 +1,7 @@ using CommandLineParser.Arguments; using CommandLineParser.Exceptions; using FluentAssertions; +using Microsoft.Extensions.Logging; using System; using Xunit; @@ -25,8 +26,9 @@ public void ParseCommandLine_WithCheckMandatoryArgumentsTrue_OptionalArgumentTru { // Assign string[] args = { "-s", "test" }; - - var commandLineParser = new CommandLineParser.CommandLineParser(); + var factory = LoggerFactory.Create(b => b.AddConsole()); + ILogger logger = factory.CreateLogger(); + var commandLineParser = new CommandLineParser.CommandLineParser(logger); var target = new TestTargetWithOptionalTrue(); commandLineParser.ExtractArgumentAttributes(target); @@ -43,7 +45,9 @@ public void ParseCommandLine_WithCheckMandatoryArgumentsTrue_OptionalArgumentFal // Assign string[] args = { "-s", "test" }; - var commandLineParser = new CommandLineParser.CommandLineParser(); + var factory = LoggerFactory.Create(b => b.AddConsole()); + ILogger logger = factory.CreateLogger(); + var commandLineParser = new CommandLineParser.CommandLineParser(logger); var target = new TestTargetWithOptionalFalse(); commandLineParser.ExtractArgumentAttributes(target); @@ -60,7 +64,9 @@ public void ParseCommandLine_WithCheckMandatoryArgumentsTrue_OptionalArgumentTru // Assign string[] args = { }; - var commandLineParser = new CommandLineParser.CommandLineParser(); + var factory = LoggerFactory.Create(b => b.AddConsole()); + ILogger logger = factory.CreateLogger(); + var commandLineParser = new CommandLineParser.CommandLineParser(logger); var target = new TestTargetWithOptionalTrue(); commandLineParser.ExtractArgumentAttributes(target); @@ -77,7 +83,9 @@ public void ParseCommandLine_WithCheckMandatoryArgumentsTrue_OptionalArgumentTru // Assign string[] args = { }; - var commandLineParser = new CommandLineParser.CommandLineParser(); + var factory = LoggerFactory.Create(b => b.AddConsole()); + ILogger logger = factory.CreateLogger(); + var commandLineParser = new CommandLineParser.CommandLineParser(logger); var target = new TestTargetWithOptionalFalse(); commandLineParser.ExtractArgumentAttributes(target); @@ -94,16 +102,19 @@ public void ParseCommandLine_WithCheckMandatoryArgumentsFalse_OptionalArgumentTr // Assign string[] args = { }; - var commandLineParser = new CommandLineParser.CommandLineParser { CheckMandatoryArguments = false }; + var factory = LoggerFactory.Create(b => b.AddConsole()); + ILogger logger = factory.CreateLogger(); + var commandLineParser = new CommandLineParser.CommandLineParser(logger); var target = new TestTargetWithOptionalFalse(); commandLineParser.ExtractArgumentAttributes(target); // Act - commandLineParser.ParseCommandLine(args); + Action act = () => commandLineParser.ParseCommandLine(args); // Assert - target.Severity.Should().BeNull(); + act.Should().Throw(); + } } } \ No newline at end of file diff --git a/src/Tests/Tests.AdditionalArguments.cs b/src/Tests/Tests.AdditionalArguments.cs index 1e35097..924f697 100644 --- a/src/Tests/Tests.AdditionalArguments.cs +++ b/src/Tests/Tests.AdditionalArguments.cs @@ -1,5 +1,6 @@ using CommandLineParser.Arguments; using CommandLineParser.Exceptions; +using Microsoft.Extensions.Logging; using ParserTest; using Xunit; @@ -9,7 +10,10 @@ public partial class Tests { public CommandLineParser.CommandLineParser InitAdditionalArguments() { - var commandLineParser = new CommandLineParser.CommandLineParser(); + var factory = LoggerFactory.Create(b => b.AddConsole()); + ILogger logger = factory.CreateLogger(); + + var commandLineParser = new CommandLineParser.CommandLineParser(logger); commandLineParser.ShowUsageOnEmptyCommandline = true; SwitchArgument showArgument = new SwitchArgument('s', "show", "Set whether show or not", true); diff --git a/src/Tests/Tests.BoundedValueArgument.cs b/src/Tests/Tests.BoundedValueArgument.cs index 9c0bb20..eed13f8 100644 --- a/src/Tests/Tests.BoundedValueArgument.cs +++ b/src/Tests/Tests.BoundedValueArgument.cs @@ -1,5 +1,6 @@ using CommandLineParser.Arguments; using CommandLineParser.Exceptions; +using Microsoft.Extensions.Logging; using System.Collections.Generic; using Xunit; @@ -20,7 +21,9 @@ class BoundedValueArgumentParsingTarget public CommandLineParser.CommandLineParser InitBoundedValueArgument() { - var commandLineParser = new CommandLineParser.CommandLineParser(); + var factory = LoggerFactory.Create(b => b.AddConsole()); + ILogger logger = factory.CreateLogger(); + var commandLineParser = new CommandLineParser.CommandLineParser(logger); boundedValueArgumentTarget = new BoundedValueArgumentParsingTarget(); commandLineParser.ExtractArgumentAttributes(boundedValueArgumentTarget); return commandLineParser; diff --git a/src/Tests/Tests.CertifiedValueArgument.cs b/src/Tests/Tests.CertifiedValueArgument.cs index 9882df5..de61057 100644 --- a/src/Tests/Tests.CertifiedValueArgument.cs +++ b/src/Tests/Tests.CertifiedValueArgument.cs @@ -3,6 +3,7 @@ using CommandLineParser.Arguments; using CommandLineParser.Exceptions; using FluentAssertions; +using Microsoft.Extensions.Logging; using Xunit; namespace Tests; @@ -22,7 +23,9 @@ internal class CertifiedValueArgumentParsingTarget public CommandLineParser.CommandLineParser InitForCertifiedValueArgument() { - var commandLineParser = new CommandLineParser.CommandLineParser(); + var factory = LoggerFactory.Create(b => b.AddConsole()); + ILogger logger = factory.CreateLogger(); + var commandLineParser = new CommandLineParser.CommandLineParser(logger); _certifiedValueArgumentParsingTarget = new CertifiedValueArgumentParsingTarget(); commandLineParser.ExtractArgumentAttributes(_certifiedValueArgumentParsingTarget); @@ -83,7 +86,9 @@ public void EnumeratedValueArgument_shouldNotAllowIgnoreCaseForNonStrings() [Fact] public void ValueArgument_ShouldParseDate() { - var commandLineParser = new CommandLineParser.CommandLineParser(); + var factory = LoggerFactory.Create(b => b.AddConsole()); + ILogger logger = factory.CreateLogger(); + var commandLineParser = new CommandLineParser.CommandLineParser(logger); ValueArgument dateTime = new ValueArgument('d', "date"); commandLineParser.Arguments.Add(dateTime); diff --git a/src/Tests/Tests.DeclarativeArguments.cs b/src/Tests/Tests.DeclarativeArguments.cs index df04157..971f639 100644 --- a/src/Tests/Tests.DeclarativeArguments.cs +++ b/src/Tests/Tests.DeclarativeArguments.cs @@ -2,6 +2,7 @@ using System.IO; using CommandLineParser.Arguments; using CommandLineParser.Exceptions; +using Microsoft.Extensions.Logging; using ParserTest; using Xunit; @@ -46,7 +47,9 @@ class DeclarativeArgumentsParsingTarget private CommandLineParser.CommandLineParser InitDeclarativeArguments() { - var commandLineParser = new CommandLineParser.CommandLineParser(); + var factory = LoggerFactory.Create(b => b.AddConsole()); + ILogger logger = factory.CreateLogger(); + var commandLineParser = new CommandLineParser.CommandLineParser(logger); DeclarativeArgumentsParsingTarget p = new DeclarativeArgumentsParsingTarget(); // read the argument attributes diff --git a/src/Tests/Tests.DeclarativeSwitch.cs b/src/Tests/Tests.DeclarativeSwitch.cs index 17abc11..3e0cc09 100644 --- a/src/Tests/Tests.DeclarativeSwitch.cs +++ b/src/Tests/Tests.DeclarativeSwitch.cs @@ -1,4 +1,5 @@ using CommandLineParser.Arguments; +using Microsoft.Extensions.Logging; using Xunit; namespace Tests @@ -42,7 +43,9 @@ public bool DefaultTrue [Fact] public void DeclarativeSwitch_SwitchArgumentTrueDefault() { - var parser = new CommandLineParser.CommandLineParser(); + var factory = LoggerFactory.Create(b => b.AddConsole()); + ILogger logger = factory.CreateLogger(); + var parser = new CommandLineParser.CommandLineParser(logger); var options = new TestOptionsTrue(); parser.ExtractArgumentAttributes(options); @@ -54,7 +57,9 @@ public void DeclarativeSwitch_SwitchArgumentTrueDefault() [Fact] public void DeclarativeSwitch_SwitchArgumentTrueSet() { - var parser = new CommandLineParser.CommandLineParser(); + var factory = LoggerFactory.Create(b => b.AddConsole()); + ILogger logger = factory.CreateLogger(); + var parser = new CommandLineParser.CommandLineParser(logger); var options = new TestOptionsTrue(); parser.ExtractArgumentAttributes(options); @@ -66,7 +71,9 @@ public void DeclarativeSwitch_SwitchArgumentTrueSet() [Fact] public void DeclarativeSwitch_SwitchArgumentFalseDefault() { - var parser = new CommandLineParser.CommandLineParser(); + var factory = LoggerFactory.Create(b => b.AddConsole()); + ILogger logger = factory.CreateLogger(); + var parser = new CommandLineParser.CommandLineParser(logger); var options = new TestOptionsFalse(); parser.ExtractArgumentAttributes(options); @@ -78,7 +85,9 @@ public void DeclarativeSwitch_SwitchArgumentFalseDefault() [Fact] public void DeclarativeSwitch_SwitchArgumentFalseSet() { - var parser = new CommandLineParser.CommandLineParser(); + var factory = LoggerFactory.Create(b => b.AddConsole()); + ILogger logger = factory.CreateLogger(); + var parser = new CommandLineParser.CommandLineParser(logger); var options = new TestOptionsFalse(); parser.ExtractArgumentAttributes(options); @@ -90,7 +99,9 @@ public void DeclarativeSwitch_SwitchArgumentFalseSet() [Fact] public void PathAsAnArgumentShouldNotBreakThings() { - var parser = new CommandLineParser.CommandLineParser(); + var factory = LoggerFactory.Create(b => b.AddConsole()); + ILogger logger = factory.CreateLogger(); + var parser = new CommandLineParser.CommandLineParser(logger); var options = new TestOptionsFalse(); parser.ExtractArgumentAttributes(options); diff --git a/src/Tests/Tests.DeclarativeValue.cs b/src/Tests/Tests.DeclarativeValue.cs index 38e29b0..3d960eb 100644 --- a/src/Tests/Tests.DeclarativeValue.cs +++ b/src/Tests/Tests.DeclarativeValue.cs @@ -1,4 +1,5 @@ using CommandLineParser.Arguments; +using Microsoft.Extensions.Logging; using Xunit; namespace Tests @@ -39,7 +40,9 @@ public bool DefaultTrue [Fact] public void DeclarativeValue_SwitchArgumentTrueDefault() { - var parser = new CommandLineParser.CommandLineParser(); + var factory = LoggerFactory.Create(b => b.AddConsole()); + ILogger logger = factory.CreateLogger(); + var parser = new CommandLineParser.CommandLineParser(logger); var options = new DeclarativeValueTestOptionsTrue(); parser.ExtractArgumentAttributes(options); @@ -51,7 +54,9 @@ public void DeclarativeValue_SwitchArgumentTrueDefault() [Fact] public void DeclarativeValue_SwitchArgumentTrueSetTrue() { - var parser = new CommandLineParser.CommandLineParser(); + var factory = LoggerFactory.Create(b => b.AddConsole()); + ILogger logger = factory.CreateLogger(); + var parser = new CommandLineParser.CommandLineParser(logger); var options = new DeclarativeValueTestOptionsTrue(); parser.ExtractArgumentAttributes(options); @@ -63,7 +68,9 @@ public void DeclarativeValue_SwitchArgumentTrueSetTrue() [Fact] public void DeclarativeValue_SwitchArgumentTrueSetFalse() { - var parser = new CommandLineParser.CommandLineParser(); + var factory = LoggerFactory.Create(b => b.AddConsole()); + ILogger logger = factory.CreateLogger(); + var parser = new CommandLineParser.CommandLineParser(logger); var options = new DeclarativeValueTestOptionsTrue(); parser.ExtractArgumentAttributes(options); @@ -75,7 +82,9 @@ public void DeclarativeValue_SwitchArgumentTrueSetFalse() [Fact] public void DeclarativeValue_SwitchArgumentFalseDefault() { - var parser = new CommandLineParser.CommandLineParser(); + var factory = LoggerFactory.Create(b => b.AddConsole()); + ILogger logger = factory.CreateLogger(); + var parser = new CommandLineParser.CommandLineParser(logger); var options = new DeclarativeValueTestOptionsFalse(); parser.ExtractArgumentAttributes(options); @@ -87,7 +96,9 @@ public void DeclarativeValue_SwitchArgumentFalseDefault() [Fact] public void DeclarativeValue_SwitchArgumentFalseSetFalse() { - var parser = new CommandLineParser.CommandLineParser(); + var factory = LoggerFactory.Create(b => b.AddConsole()); + ILogger logger = factory.CreateLogger(); + var parser = new CommandLineParser.CommandLineParser(logger); var options = new DeclarativeValueTestOptionsFalse(); parser.ExtractArgumentAttributes(options); @@ -99,7 +110,9 @@ public void DeclarativeValue_SwitchArgumentFalseSetFalse() [Fact] public void DeclarativeValue_SwitchArgumentFalseSetTrue() { - var parser = new CommandLineParser.CommandLineParser(); + var factory = LoggerFactory.Create(b => b.AddConsole()); + ILogger logger = factory.CreateLogger(); + var parser = new CommandLineParser.CommandLineParser(logger); var options = new DeclarativeValueTestOptionsFalse(); parser.ExtractArgumentAttributes(options); diff --git a/src/Tests/Tests.EqualSignSyntax.cs b/src/Tests/Tests.EqualSignSyntax.cs index 17dc8c5..ba3e0b0 100644 --- a/src/Tests/Tests.EqualSignSyntax.cs +++ b/src/Tests/Tests.EqualSignSyntax.cs @@ -1,5 +1,6 @@ using CommandLineParser.Arguments; using CommandLineParser.Exceptions; +using Microsoft.Extensions.Logging; using ParserTest; using System.Collections.Generic; using Xunit; @@ -10,7 +11,9 @@ public partial class Tests { private CommandLineParser.CommandLineParser InitEqualSignSyntax() { - var commandLineParser = new CommandLineParser.CommandLineParser(); + var factory = LoggerFactory.Create(b => b.AddConsole()); + ILogger logger = factory.CreateLogger(); + var commandLineParser = new CommandLineParser.CommandLineParser(logger); commandLineParser.AcceptEqualSignSyntaxForValueArguments = true; commandLineParser.ShowUsageOnEmptyCommandline = true; @@ -154,7 +157,9 @@ public void EqualSignSyntax_ShouldAcceptCommaSeparatedValues() { string[] args = new[] { "-n=\"1,2,3\"", "x" }; - var commandLineParser = new CommandLineParser.CommandLineParser(); + var factory = LoggerFactory.Create(b => b.AddConsole()); + ILogger logger = factory.CreateLogger(); + var commandLineParser = new CommandLineParser.CommandLineParser(logger); commandLineParser.AcceptEqualSignSyntaxForValueArguments = true; ValueArgument lines = new ValueArgument('n', "lines", "Specific lines") { AllowMultiple = true }; commandLineParser.Arguments.Add(lines); @@ -164,7 +169,7 @@ public void EqualSignSyntax_ShouldAcceptCommaSeparatedValues() // ASSERT Assert.Equal(new List { 1, 2, 3 }, lines.Values); - Assert.Equal(1, commandLineParser.AdditionalArgumentsSettings.AdditionalArguments.Length); + Assert.Single(commandLineParser.AdditionalArgumentsSettings.AdditionalArguments); Assert.Equal("x", commandLineParser.AdditionalArgumentsSettings.AdditionalArguments[0]); } @@ -173,7 +178,9 @@ public void EqualSignSyntax_ShouldAcceptCommaSeparatedValues_WithoutQuotes() { string[] args = new[] { "-n=1,2,3", "-n=4" }; - var commandLineParser = new CommandLineParser.CommandLineParser(); + var factory = LoggerFactory.Create(b => b.AddConsole()); + ILogger logger = factory.CreateLogger(); + var commandLineParser = new CommandLineParser.CommandLineParser(logger); commandLineParser.AcceptEqualSignSyntaxForValueArguments = true; ValueArgument lines = new ValueArgument('n', "lines", "Specific lines") { AllowMultiple = true }; commandLineParser.Arguments.Add(lines); @@ -190,7 +197,9 @@ public void EqualSignSyntax_ShouldAcceptEmptyListOfValues_whenValueOptional() { string[] args = new[] { "-n=", "-n=" }; - var commandLineParser = new CommandLineParser.CommandLineParser(); + var factory = LoggerFactory.Create(b => b.AddConsole()); + ILogger logger = factory.CreateLogger(); + var commandLineParser = new CommandLineParser.CommandLineParser(logger); commandLineParser.AcceptEqualSignSyntaxForValueArguments = true; ValueArgument lines = new ValueArgument('n', "lines", "Specific lines") { AllowMultiple = true, ValueOptional=true }; commandLineParser.Arguments.Add(lines); diff --git a/src/Tests/Tests.GroupCertifications.cs b/src/Tests/Tests.GroupCertifications.cs index b947ff4..a3fc402 100644 --- a/src/Tests/Tests.GroupCertifications.cs +++ b/src/Tests/Tests.GroupCertifications.cs @@ -2,6 +2,7 @@ using CommandLineParser.Validation; using CommandLineParser.Exceptions; using Xunit; +using Microsoft.Extensions.Logging; namespace Tests { @@ -39,7 +40,9 @@ public class Archiver private CommandLineParser.CommandLineParser InitGroupCertifications() { - var commandLineParser = new CommandLineParser.CommandLineParser(); + var factory = LoggerFactory.Create(b => b.AddConsole()); + ILogger logger = factory.CreateLogger(); + var commandLineParser = new CommandLineParser.CommandLineParser(logger); Archiver a = new Archiver(); @@ -439,7 +442,9 @@ internal class TestDefaultValues [Fact] public void ArgumentRequiresOtherArgumentsCertification_shouldPass_whenDefaultValuesAreThere() { - var commandLineParser = new CommandLineParser.CommandLineParser(); + var factory = LoggerFactory.Create(b => b.AddConsole()); + ILogger logger = factory.CreateLogger(); + var commandLineParser = new CommandLineParser.CommandLineParser(logger); var parsingTarget = new TestDefaultValues(); commandLineParser.ExtractArgumentAttributes(parsingTarget); diff --git a/src/Tests/Tests.IgnoreCase.cs b/src/Tests/Tests.IgnoreCase.cs index d564b79..e5a3a67 100644 --- a/src/Tests/Tests.IgnoreCase.cs +++ b/src/Tests/Tests.IgnoreCase.cs @@ -1,5 +1,6 @@ using CommandLineParser.Arguments; using CommandLineParser.Exceptions; +using Microsoft.Extensions.Logging; using ParserTest; using Xunit; @@ -9,7 +10,9 @@ public partial class Tests { private CommandLineParser.CommandLineParser InitIgnoreCase() { - var commandLineParser = new CommandLineParser.CommandLineParser(); + var factory = LoggerFactory.Create(b => b.AddConsole()); + ILogger logger = factory.CreateLogger(); + var commandLineParser = new CommandLineParser.CommandLineParser(logger); commandLineParser.IgnoreCase = true; commandLineParser.ShowUsageOnEmptyCommandline = true; diff --git a/src/Tests/Tests.ImperativeArguments.cs b/src/Tests/Tests.ImperativeArguments.cs index 5365a7d..ae40cf0 100644 --- a/src/Tests/Tests.ImperativeArguments.cs +++ b/src/Tests/Tests.ImperativeArguments.cs @@ -1,5 +1,6 @@ using CommandLineParser.Arguments; using CommandLineParser.Exceptions; +using Microsoft.Extensions.Logging; using ParserTest; using Xunit; @@ -9,7 +10,9 @@ public partial class Tests { private CommandLineParser.CommandLineParser InitImperativeArguments() { - var commandLineParser = new CommandLineParser.CommandLineParser(); + var factory = LoggerFactory.Create(b => b.AddConsole()); + ILogger logger = factory.CreateLogger(); + var commandLineParser = new CommandLineParser.CommandLineParser(logger); commandLineParser.ShowUsageOnEmptyCommandline = true; SwitchArgument showArgument = new SwitchArgument('s', "show", "Set whether show or not", true); diff --git a/src/Tests/Tests.Parser.cs b/src/Tests/Tests.Parser.cs index c3d477e..39c1cfb 100644 --- a/src/Tests/Tests.Parser.cs +++ b/src/Tests/Tests.Parser.cs @@ -1,5 +1,6 @@ using System; using CommandLineParser.Arguments; +using Microsoft.Extensions.Logging; using Xunit; namespace Tests; @@ -34,7 +35,9 @@ public void ParserResult_ShouldBeTrue_WhenParsingSucceeds() public void Parser_shouldAllowArgsWithTheSameToUpperConversion_whenIgnoreCaseIsNotUsed() { // ARRANGE - var parser = new CommandLineParser.CommandLineParser(); + var factory = LoggerFactory.Create(b => b.AddConsole()); + ILogger logger = factory.CreateLogger(); + var parser = new CommandLineParser.CommandLineParser(logger); parser.Arguments.Add(new SwitchArgument('a', "switch", false)); parser.Arguments.Add(new SwitchArgument('b', "SWiTCH", false)); parser.IgnoreCase = false; @@ -47,7 +50,9 @@ public void Parser_shouldAllowArgsWithTheSameToUpperConversion_whenIgnoreCaseIsN public void Parser_shouldFailWithArgsWithTheSameToUpperConversion_whenIgnoreCaseIsUsed() { // ARRANGE - var parser = new CommandLineParser.CommandLineParser(); + var factory = LoggerFactory.Create(b => b.AddConsole()); + ILogger logger = factory.CreateLogger(); + var parser = new CommandLineParser.CommandLineParser(logger); parser.Arguments.Add(new SwitchArgument('a', "switch", false)); parser.Arguments.Add(new SwitchArgument('b', "SWiTCH", false)); parser.IgnoreCase = true; @@ -60,7 +65,9 @@ public void Parser_shouldFailWithArgsWithTheSameToUpperConversion_whenIgnoreCase public void Parser_shouldAcceptSwitch_WithoutShortName() { // ARRANGE - var parser = new CommandLineParser.CommandLineParser(); + var factory = LoggerFactory.Create(b => b.AddConsole()); + ILogger logger = factory.CreateLogger(); + var parser = new CommandLineParser.CommandLineParser(logger); var switchArgument = new SwitchArgument("switch", false); parser.Arguments.Add(switchArgument); diff --git a/src/Tests/Tests.RegexValueArgument.cs b/src/Tests/Tests.RegexValueArgument.cs index 64a4e0b..7f35296 100644 --- a/src/Tests/Tests.RegexValueArgument.cs +++ b/src/Tests/Tests.RegexValueArgument.cs @@ -1,6 +1,7 @@ using CommandLineParser.Arguments; using CommandLineParser.Exceptions; using FluentAssertions; +using Microsoft.Extensions.Logging; using Xunit; namespace Tests; @@ -28,7 +29,9 @@ private class RegexValueArgumentParsingTarget private (CommandLineParser.CommandLineParser Parser, RegexValueArgumentParsingTarget ParsingTarget) InitForRegexValueArgument() { - var commandLineParser = new CommandLineParser.CommandLineParser(); + var factory = LoggerFactory.Create(b => b.AddConsole()); + ILogger logger = factory.CreateLogger(); + var commandLineParser = new CommandLineParser.CommandLineParser(logger); var regexValueArgumentParsingTarget = new RegexValueArgumentParsingTarget(); commandLineParser.ExtractArgumentAttributes(regexValueArgumentParsingTarget); diff --git a/src/Tests/Tests.ValueArgument.cs b/src/Tests/Tests.ValueArgument.cs index 038295e..c91d8b2 100644 --- a/src/Tests/Tests.ValueArgument.cs +++ b/src/Tests/Tests.ValueArgument.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using CommandLineParser.Arguments; using CommandLineParser.Exceptions; +using Microsoft.Extensions.Logging; using Xunit; namespace Tests; @@ -40,7 +41,9 @@ class ValueArgumentParsingTarget private (CommandLineParser.CommandLineParser Parser, ValueArgumentParsingTarget ParsingTarget) InitValueArgument() { - var commandLineParser = new CommandLineParser.CommandLineParser(); + var factory = LoggerFactory.Create(b => b.AddConsole()); + ILogger logger = factory.CreateLogger(); + var commandLineParser = new CommandLineParser.CommandLineParser(logger); var valueArgumentTarget = new ValueArgumentParsingTarget(); commandLineParser.ExtractArgumentAttributes(valueArgumentTarget); return (commandLineParser, valueArgumentTarget);