diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..b713459b --- /dev/null +++ b/.editorconfig @@ -0,0 +1,26 @@ +#top-most EditorConfig for project +root = true + +[*] +end_of_line = crlf +insert_final_newline = true + +[*.cs] +indent_style = space +indent_size = 4 + +[*.{xml,csproj,config}] +indent_style = tab +indent_size = 4 + +[*.json] +indent_style = space +indent_size = 2 + +[*.js] +indent_style = space +indent_size = 2 + +[*.yml] +indent_style = space +indent_size = 2 diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 00000000..c6020604 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,31 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: '' +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Either fork from this fiddle and paste link here: https://dotnetfiddle.net/mh9CjX + +or + +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Additional context** +Add any other context about the problem here. diff --git a/.gitignore b/.gitignore index 388719cd..4969d4de 100644 --- a/.gitignore +++ b/.gitignore @@ -1,24 +1,43 @@ -src/libcmdline/bin/* -src/libcmdline/obj -src/demo/bin/* -src/demo/obj -src/tests/bin/* -src/tests/obj -src/templates/CSharpTemplate/bin/* -src/templates/CSharpTemplate/obj -src/templates/VBNetTemplate/bin/* -src/templates/VBNetTemplate/obj + +#ignore build outputs +[B|b]in +[O|o]bj +build/* + +#ignore managed external libs packages +paket-files + *.suo *.userprefs *~ +\#*\# *.pidb + +#ignore Test results/temps *.test-cache -src/libcmdline/test-results/* -src/tests/test-results/* +tests/CommandLine/test-results/* +tests/CommandLine.Tests/test-results/* +TestResult.xml + *.DS_Store *.csproj.user -TestResult.xml *.nupkg *.old -StyleCop.Cache \ No newline at end of file +StyleCop.Cache +.paket/paket.exe +.fake +*.cache +docs/output/* +artifacts/* +*.xproj.user +*.nuget.targets +*.lock.json +*.nuget.props +*.DotSettings.user +# Visual Studio 2015 cache/options directory +.vs/ +# Rider +.idea/ + +[R|r]elease/** diff --git a/.nuget/NuGet.Config b/.nuget/NuGet.Config deleted file mode 100644 index 6a318ad9..00000000 --- a/.nuget/NuGet.Config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.nuget/NuGet.exe b/.nuget/NuGet.exe deleted file mode 100644 index 4645f4b3..00000000 Binary files a/.nuget/NuGet.exe and /dev/null differ diff --git a/.nuget/NuGet.targets b/.nuget/NuGet.targets deleted file mode 100644 index dce921ac..00000000 --- a/.nuget/NuGet.targets +++ /dev/null @@ -1,153 +0,0 @@ - - - - $(MSBuildProjectDirectory)\..\ - - - false - - - false - - - true - - - false - - - - - - - - - - - $([System.IO.Path]::Combine($(SolutionDir), ".nuget")) - $([System.IO.Path]::Combine($(ProjectDir), "packages.config")) - $([System.IO.Path]::Combine($(SolutionDir), "packages")) - - - - - $(SolutionDir).nuget - packages.config - $(SolutionDir)packages - - - - - $(NuGetToolsPath)\nuget.exe - @(PackageSource) - - "$(NuGetExePath)" - mono --runtime=v4.0.30319 $(NuGetExePath) - - $(TargetDir.Trim('\\')) - - -RequireConsent - - $(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" $(RequireConsentSwitch) -o "$(PackagesDir)" - $(NuGetCommand) pack "$(ProjectPath)" -p Configuration=$(Configuration) -o "$(PackageOutputDir)" -symbols - - - - RestorePackages; - $(BuildDependsOn); - - - - - $(BuildDependsOn); - BuildPackage; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.nuget/packages.config b/.nuget/packages.config deleted file mode 100644 index 1c6d6842..00000000 --- a/.nuget/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..eea8ad12 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,174 @@ +# Changelog +All notable changes to this project will be documented in this file. + +CommandLineParser project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [2.9.0-preview2] + +### Added +- Properly assign arguments after a double dash to values, fix #605 by [@robnasby, PR# 610](https://github.com/commandlineparser/commandline/pull/610). + +### Changed +- Drop "Add multi-instance option support". + + +## [2.9.0-preview1] - 2020-7-24 + +### Added +- Add multi-instance option support by [@rmunn and @tydunkel, PR# 594](https://github.com/commandlineparser/commandline/pull/594). +- Fix unparsing FileInfo and DirectoryInfo by[@kapsiR, PR# 627](https://github.com/commandlineparser/commandline/pull/627). +- Move Errors and Value up to the abstract class definition, fixes #543 , #165 by [@johnjaylward, PR# 634](https://github.com/commandlineparser/commandline/pull/634). +- Add support for flags enums, fixes #247, #599 and #582 by [@shaosss, PR# 623](https://github.com/commandlineparser/commandline/pull/623). +- Implement verb aliases, fixes #6, #517 by[@johnjaylward, PR# 636](https://github.com/commandlineparser/commandline/pull/636). +- Add a new method FormatCommandLineArgs to unparse commandline to array of string, Fix #375 and #628 . + - Also, add SplitArgs method to split commandline, fix #665 by[@moh-hassan, PR# 662](https://github.com/commandlineparser/commandline/pull/662) and [commit cccae2db](https://github.com/commandlineparser/commandline/commit/cccae2db749c2ebf25125bfd18e05427be0adbcf). +- Allow single dash as a value, fix #300 and #574 by [@moh-hassan, PR# 669](https://github.com/commandlineparser/commandline/pull/669). + + +## [2.8.0] - 2020-5-1 +## [2.8.0-preview4] - 2020-4-30 +## [2.8.0-preview1] - 2020-3-14 + +### Added +- Added support for async programming for `WithParsed and WithNotParsed` by [@joseangelmt, PR# 390 ](https://github.com/commandlineparser/commandline/pull/390). +- Publish a new symbol packages with source link support for c# and F# (.snupkg) to improved package debugging experience by [@moh-hassan, PR#554](https://github.com/commandlineparser/commandline/pull/554) +- Add default verb support by [@Artentus, PR# 556](https://github.com/commandlineparser/commandline/pull/556). +- Add more details for localized attribute properties by [@EdmondShtogu, PR# 558](https://github.com/commandlineparser/commandline/pull/558) +- Support Default in Group Options and raise error if both SetName and Group are applied on option by [@hadzhiyski, PR# 575](https://github.com/commandlineparser/commandline/pull/575). +- Support mutable types without empty constructor that only does explicit implementation of interfaces by [@pergardebrink, PR#590](https://github.com/commandlineparser/commandline/pull/590). + + +### Changed +- Tests cleanup by [@gsscoder, PR# 560](https://github.com/commandlineparser/commandline/pull/560). +- Upgraded parts of CSharpx from Version 1.6.2-alpha by [@gsscoder, PR# 561](https://github.com/commandlineparser/commandline/pull/561). +- Upgraded RailwaySharp from Version 1.1.0 by [@gsscoder, PR# 562](https://github.com/commandlineparser/commandline/pull/562). +- SkipDefault is being respected by [Usage] Examples by [@kendfrey, PR# 565](https://github.com/commandlineparser/commandline/pull/565). +- Remove useless testing code by [@gsscoder, PR# 568](https://github.com/commandlineparser/commandline/pull/568). +- Remove constraint on T for ParseArguments with factory (required by issue #70) by [@pergardebrink](https://github.com/commandlineparser/commandline/pull/590). +- Update nuget api key by [@ericnewton76](https://github.com/commandlineparser/commandline/commit/2218294550e94bcbc2b76783970541385eaf9c07) + +### Fixed +- Fix #579 Unable to parse TimeSpan given from the FormatCommandLine by [@gsscoder, PR# 580](https://github.com/commandlineparser/commandline/pull/580). +- Fix issue #339 for using custom struct having a constructor with string parameter by [moh-hassan, PR# 588](https://github.com/commandlineparser/commandline/pull/588). +- Fix issue #409 to avoid IOException break in Debug mode in WPF app by [moh-hassan, PR# 589 ](https://github.com/commandlineparser/commandline/pull/589). + + +## [2.7.82] - 2020-1-1 +## [2.7.0] - 2020-1-1 +### Added +- Add option groups feature by [@hadzhiyski](https://github.com/commandlineparser/commandline/pull/552) - When one or more options has group set, at least one of these properties should have set value (they behave as required). +- Add a new overload method for AutoBuild to enable HelpText customization by [@moh-hassan](https://github.com/commandlineparser/commandline/pull/557). +- Improve spacing in HelpText by [@asherber](https://github.com/commandlineparser/commandline/pull/494) by adding a new option in the HelpText. +- Add a new option "SkipDefault" in UnParserSettings by [@moh-hassan](https://github.com/commandlineparser/commandline/pull/550) to add the ability of skipping the options with a default value and fix [#541](https://github.com/commandlineparser/commandline/issues/541). +- Generate a new symbolic nuget Package by [@moh-hassan](https://github.com/commandlineparser/commandline/pull/554) to Improve the debugging of Applications with the NuGet package using [symbols experience](https://github.com/NuGet/Home/wiki/NuGet-Package-Debugging-&-Symbols-Improvements). +- Add Support to [SourceLink](https://github.com/dotnet/sourcelink/blob/master/docs/README.md) in the nuget package [@moh-hassan](https://github.com/commandlineparser/commandline/pull/554). + +### Changed +- Remove the Exception when both CompanyAttribute and CopyRightAttribute are null in the Excuting assembly and set the copyright text to a default value by [@moh-hassan](https://github.com/commandlineparser/commandline/pull/557). +- Change the default copyright to include current year instead of 1 by [@moh-hassan](https://github.com/commandlineparser/commandline/pull/557). +- Enabling c# 8 and Vs2019 image in Appveyor. + +### Fixed +- Fix NullReferenceException when creating a default immutable instance by [@0xced](https://github.com/commandlineparser/commandline/pull/495). +- Fix issue [#496](https://github.com/commandlineparser/commandline/issues/496) - Cryptic error message with immutable option class by[@moh-hassan](https://github.com/commandlineparser/commandline/pull/555). +- Fix UnParserExtensions.FormatCommandLine by [@moh-hassan](https://github.com/commandlineparser/commandline/pull/550) to resolve: + - Fix Quote for Options of type DatTime [#502](https://github.com/commandlineparser/commandline/issues/502) and [#528](https://github.com/commandlineparser/commandline/issues/258). + - Fix Quote for options of type TimeSpan and DateTimeOffset. + - Fix Nullable type [#305](https://github.com/commandlineparser/commandline/issues/305) + +- Fix nuget Licence in nuget package by [@moh-hassan](https://github.com/commandlineparser/commandline/pull/549) and fix issue [#545](https://github.com/commandlineparser/commandline/issues/545). +- Fix PackageIconUrl warning in nuget package by [@moh-hassan](https://github.com/commandlineparser/commandline/pull/551). +- Fix immutable nullException, Improve exception message when immutable type can't be created +- Fix Custom help for verbs issue[#529](https://github.com/commandlineparser/commandline/issues/529) by [@moh-hassan](https://github.com/commandlineparser/commandline/pull/557). +- Fix --help switch throwing exception in F# [#366](https://github.com/commandlineparser/commandline/issues/366) +by [@WallaceKelly](https://github.com/commandlineparser/commandline/pull/493) + +## [2.6.0] - 2019-07-31 +### Added +- Support HelpText localization with ResourceType property by [@tkouba](https://github.com/commandlineparser/commandline/pull/356). +- Add demo for complete localization of command line help using resources by[@tkouba](https://github.com/commandlineparser/commandline/pull/485). +- Localize VerbAttribute by [@moh-hassan](https://github.com/commandlineparser/commandline/pull/473). +- Improve support for multiline help text by [@NeilMacMullen](https://github.com/commandlineparser/commandline/pull/456/). +- Reorder options in auto help text (issue #482) [@b3b00](https://github.com/commandlineparser/commandline/pull/484). +- Add IsHelp() and IsVersion() Extension methods to mange HelpText errors by [@moh-hassan](https://github.com/commandlineparser/commandline/pull/467). + +### Fixed +- Fix issues for HelpText.AutoBuild configuration (issues #224 , # 259) by [@moh-hassan](https://github.com/commandlineparser/commandline/pull/467). +- Test maintainance: add missed tests and removing xUnit1013 warning by [@moh-hassan](https://github.com/commandlineparser/commandline/pull/462). +- Fix issue #104 of nullable enum by [@moh-hassan](https://github.com/commandlineparser/commandline/pull/453). +- Fix issue #418, modify version screen to print a new line at the end by [@moh-hassan](https://github.com/commandlineparser/commandline/pull/443). + + +## [2.5.0] - 2019-04-27 +### Added +- Add support to NET40 and NET45 for both CSharp and FSharp by [@moh-hassan](https://github.com/commandlineparser/commandline/pull/430). + + +### Changed +- Proposed changes for enhancement by [@Wind010](https://github.com/commandlineparser/commandline/pull/314), cover:appveyor.yml, ReflectionExtensions.cs and error.cs. +- Enhance the CSharp demo to run in multi-target net40;net45;netcoreapp2.0;netcoreapp2.1 by [@moh-hassan](https://github.com/commandlineparser/commandline/pull/430). +- Added explicit support for .NET 4.6.1 and .NET Core 2.0 by [@ravenpride](https://github.com/commandlineparser/commandline/pull/400). +- Convert commandline project to multi-target project netstandard2.0;net40;net45;net461. +- Convert commandline Test to multi-target project net461;netcoreapp2.0. + + + +### Fixed +- Fix the null EntryAssembly Exception in unit test of net4x projects: issues #389,#424 by [@moh-hassan](https://github.com/commandlineparser/commandline/pull/430). +- Fix the test case 'Add unit tests for Issue #389 and #392 +- Fix CSC error CS7027: Error signing output with public key from file 'CommandLine.snk' -- Invalid public key in appveyor CI. +- Fix the error CS0234: The type or namespace name 'FSharp' for net40 Framework. +- Fix Mis-typed CommandLine.BaseAttribute.Default results in ArgumentException: Object of type 'X' cannot be converted to type 'Y' (issue #189) by[@Wind010](https://github.com/commandlineparser/commandline/pull/314). + + + + +## [2.4.3] - 2019-01-09 +### Added +- Add support to NetStandard2.0 by [@ViktorHofer](https://github.com/commandlineparser/commandline/pull/307) +- Add strong name signing [@ViktorHofer](https://github.com/commandlineparser/commandline/pull/307) +- Added AutoBuild and AutoVersion properties to control adding of implicit 'help' and 'version' options/verbs by [@Athari](https://github.com/commandlineparser/commandline/pull/256). +- Added simpler C# Quick Start example at readme.md by [@lythix](https://github.com/commandlineparser/commandline/pull/274). +- Add validate feature in Set parameter, and throw exception, and show usage,Issue #283 by[@e673](https://github.com/commandlineparser/commandline/pull/286). + + +### Deprecated +- Drop support for NET40 and NET45 + + +### Removed +- Disable faulty tests in netsatbdard2.0 and enable testing in CI. + + +### Fixed +- Fix grammar error in specification error message by [@DillonAd](https://github.com/commandlineparser/commandline/pull/276). +- Fix HelpText.AutoBuild Usage spacing by[@ElijahReva](https://github.com/commandlineparser/commandline/pull/280). +- Fix type at readme.md file by [@matthewjberger](https://github.com/commandlineparser/commandline/pull/304) +- Fix not showing correct header info, issue #34 by[@tynar](https://github.com/commandlineparser/commandline/pull/312). +- Fix title of assembly renders oddly issue-#197 by [@Yiabiten](https://github.com/commandlineparser/commandline/pull/344). +- Fix nuget apikey by [@ericnewton76](https://github.com/commandlineparser/commandline/pull/386). +- Fix missing fsharp from github release deployment by @ericnewton76. +- Fix to Display Width Tests by [@Oddley](https://github.com/commandlineparser/commandline/pull/278). +- Fixing DisplayWidth for newer Mono by [@Oddley](https://github.com/commandlineparser/commandline/pull/279). + + +## [2.3.0] - 2018-08-13 +### Added +- Properly handle CaseInsensitiveEnumValues flag fixing issue #198 by [@niklaskarl](https://github.com/commandlineparser/commandline/pull/231). + +### Changed +- Updated README examples quick start example for c# and Vb.net to work with the new API by [@loligans](https://github.com/commandlineparser/commandline/pull/218). +- Updated README by [@ericnewton76](https://github.com/commandlineparser/commandline/pull/208). +- Update copyright in unit tests +- Patching appveyor dotnet csproj +- Updates to appveyor to create a build matrix + +### Fixed +- hotfix/issue #213 fsharp dependency by [@ericnewton76](https://github.com/commandlineparser/commandline/pull/215). + + +## [2.2.1] - 2018-01-10 + +## [2.2.0] - 2018-01-07 + +## [1.9.71.2] - 2013-02-27: The starting bascode version diff --git a/CommandLine.5.1.ReSharper b/CommandLine.5.1.ReSharper deleted file mode 100644 index 7bac9e74..00000000 --- a/CommandLine.5.1.ReSharper +++ /dev/null @@ -1,105 +0,0 @@ - - - - - SOLUTION - - - False - False - False - False - False - 1 - 1 - True - - public - protected - internal - private - new - abstract - virtual - override - sealed - static - readonly - extern - unsafe - volatile - - False - True - False - False - - - - $object$_On$event$ - $event$Handler - - - - - - - - - - - - - - - - - - - - - - - $object$_On$event$ - $event$Handler - - - - - - - - - - - - - - - OnDifferentLines - FirstAttributeOnSingleLine - - - - - $object$_On$event$ - $event$Handler - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/CommandLine.sln b/CommandLine.sln index 293635db..102837f1 100644 --- a/CommandLine.sln +++ b/CommandLine.sln @@ -1,85 +1,39 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CommandLine", "src\libcmdline\CommandLine.csproj", "{5DEA2811-2FFA-4959-830B-CAD3ACACABEB}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CommandLine.Tests", "src\tests\CommandLine.Tests.csproj", "{86E1AC34-ED2D-4E42-8B95-65208FEA36C2}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CommandLine.Demo", "src\demo\CommandLine.Demo.csproj", "{9E573FFF-4ECB-4C59-A914-C0B74D44D2E8}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".Welcome", ".Welcome", "{4F498B61-A7BC-4B32-9ACB-901D4F50659B}" - ProjectSection(SolutionItems) = preProject - doc\ChangeLog = doc\ChangeLog - doc\LICENSE = doc\LICENSE - doc\PublicAPI.md = doc\PublicAPI.md - README.md = README.md - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NuGet", "NuGet", "{CC062800-4709-4A04-8A0D-DD972C1BFFC5}" - ProjectSection(SolutionItems) = preProject - nuget\CommandLine.nuspec = nuget\CommandLine.nuspec - nuget\readme.txt = nuget\readme.txt - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{18282A82-E36C-4938-8397-C0A1166983BA}" - ProjectSection(SolutionItems) = preProject - Rakefile.rb = Rakefile.rb - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{350E598F-50C7-45A2-83A6-346AF7D163F5}" - ProjectSection(SolutionItems) = preProject - .nuget\NuGet.Config = .nuget\NuGet.Config - .nuget\NuGet.exe = .nuget\NuGet.exe - .nuget\NuGet.targets = .nuget\NuGet.targets - .nuget\packages.config = .nuget\packages.config - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Develop", "Develop", "{939BEBC0-CE70-4209-A991-0DA4E8F3B9AE}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|x86 = Debug|x86 - Release|Any CPU = Release|Any CPU - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {5DEA2811-2FFA-4959-830B-CAD3ACACABEB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5DEA2811-2FFA-4959-830B-CAD3ACACABEB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5DEA2811-2FFA-4959-830B-CAD3ACACABEB}.Debug|x86.ActiveCfg = Debug|Any CPU - {5DEA2811-2FFA-4959-830B-CAD3ACACABEB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5DEA2811-2FFA-4959-830B-CAD3ACACABEB}.Release|Any CPU.Build.0 = Release|Any CPU - {5DEA2811-2FFA-4959-830B-CAD3ACACABEB}.Release|x86.ActiveCfg = Release|Any CPU - {86E1AC34-ED2D-4E42-8B95-65208FEA36C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {86E1AC34-ED2D-4E42-8B95-65208FEA36C2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {86E1AC34-ED2D-4E42-8B95-65208FEA36C2}.Debug|x86.ActiveCfg = Debug|Any CPU - {86E1AC34-ED2D-4E42-8B95-65208FEA36C2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {86E1AC34-ED2D-4E42-8B95-65208FEA36C2}.Release|Any CPU.Build.0 = Release|Any CPU - {86E1AC34-ED2D-4E42-8B95-65208FEA36C2}.Release|x86.ActiveCfg = Release|Any CPU - {9E573FFF-4ECB-4C59-A914-C0B74D44D2E8}.Debug|Any CPU.ActiveCfg = Debug|x86 - {9E573FFF-4ECB-4C59-A914-C0B74D44D2E8}.Debug|Any CPU.Build.0 = Debug|x86 - {9E573FFF-4ECB-4C59-A914-C0B74D44D2E8}.Debug|x86.ActiveCfg = Debug|x86 - {9E573FFF-4ECB-4C59-A914-C0B74D44D2E8}.Debug|x86.Build.0 = Debug|x86 - {9E573FFF-4ECB-4C59-A914-C0B74D44D2E8}.Release|Any CPU.ActiveCfg = Release|x86 - {9E573FFF-4ECB-4C59-A914-C0B74D44D2E8}.Release|Any CPU.Build.0 = Release|x86 - {9E573FFF-4ECB-4C59-A914-C0B74D44D2E8}.Release|x86.ActiveCfg = Release|x86 - {9E573FFF-4ECB-4C59-A914-C0B74D44D2E8}.Release|x86.Build.0 = Release|x86 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {939BEBC0-CE70-4209-A991-0DA4E8F3B9AE} = {4F498B61-A7BC-4B32-9ACB-901D4F50659B} - {18282A82-E36C-4938-8397-C0A1166983BA} = {4F498B61-A7BC-4B32-9ACB-901D4F50659B} - {CC062800-4709-4A04-8A0D-DD972C1BFFC5} = {939BEBC0-CE70-4209-A991-0DA4E8F3B9AE} - EndGlobalSection - GlobalSection(MonoDevelopProperties) = preSolution - StartupItem = src\demo\CommandLine.Demo.csproj - Policies = $0 - $0.TextStylePolicy = $1 - $1.FileWidth = 120 - $1.TabsToSpaces = False - $1.inheritsSet = VisualStudio - $1.inheritsScope = text/plain - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.27703.2042 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CommandLine", "src\CommandLine\CommandLine.csproj", "{E1BD3C65-49C3-49E7-BABA-C60980CB3F20}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CommandLine.Tests", "tests\CommandLine.Tests\CommandLine.Tests.csproj", "{0A15C4D2-B3E9-43AB-8155-1B39F7AC8A5E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{1361E8B1-D0E1-493E-B8C1-7380A7B7C472}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E1BD3C65-49C3-49E7-BABA-C60980CB3F20}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E1BD3C65-49C3-49E7-BABA-C60980CB3F20}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E1BD3C65-49C3-49E7-BABA-C60980CB3F20}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E1BD3C65-49C3-49E7-BABA-C60980CB3F20}.Release|Any CPU.Build.0 = Release|Any CPU + {0A15C4D2-B3E9-43AB-8155-1B39F7AC8A5E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0A15C4D2-B3E9-43AB-8155-1B39F7AC8A5E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0A15C4D2-B3E9-43AB-8155-1B39F7AC8A5E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0A15C4D2-B3E9-43AB-8155-1B39F7AC8A5E}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {0A15C4D2-B3E9-43AB-8155-1B39F7AC8A5E} = {1361E8B1-D0E1-493E-B8C1-7380A7B7C472} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {5B5A476C-82FB-49FB-B592-5224D9005186} + EndGlobalSection + GlobalSection(MonoDevelopProperties) = preSolution + StartupItem = src\CommandLine\CommandLine.csproj + EndGlobalSection +EndGlobal diff --git a/CommandLine.sln.DotSettings.user b/CommandLine.sln.DotSettings.user deleted file mode 100644 index 44ddc427..00000000 --- a/CommandLine.sln.DotSettings.user +++ /dev/null @@ -1,68 +0,0 @@ - - True - - - 1 - 1 - True - - True - False - False - OnDifferentLines - FirstAttributeOnSingleLine - $object$_On$event$ - <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> - <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> - <Policy Inspect="True" Prefix="I" Suffix="" Style="AaBb" /> - <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> - <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> - <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> - <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> - <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> - <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> - - <Policy Inspect="True" Prefix="_" Suffix="" Style="aaBb" /> - <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> - <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> - <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> - <Policy Inspect="True" Prefix="T" Suffix="" Style="AaBb" /> - <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> - $object$_On$event$ - <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> - <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> - <Policy Inspect="True" Prefix="I" Suffix="" Style="AaBb" /> - <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> - <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> - <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> - <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> - <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> - <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> - <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> - <Policy Inspect="True" Prefix="_" Suffix="" Style="aaBb" /> - <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> - <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> - <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> - <Policy Inspect="True" Prefix="T" Suffix="" Style="AaBb" /> - <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> - <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> - <Policy Inspect="True" Prefix="_" Suffix="" Style="aaBb" /> - <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> - False - VS - True - - [8,-35](1024,624) - - - True - 4 - - - - True - 4 - Session - <Session><Elements><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Infrastructure.ArgumentParserFixture" type="XunitTestClassElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Infrastructure.ArgumentParserFixture" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Attributes.AttributesFixture" type="XunitTestClassElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Attributes.AttributesFixture" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Text.CopyrightInfoFixture" type="XunitTestClassElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Text.CopyrightInfoFixture" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Infrastructure.EnumeratorsFixture" type="XunitTestClassElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Infrastructure.EnumeratorsFixture" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Text.HeadingInfoFixture" type="XunitTestClassElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Text.HeadingInfoFixture" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Attributes.HelpOptionAttributeFixture" type="XunitTestClassElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Attributes.HelpOptionAttributeFixture" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Text.HelpTextFixture" type="XunitTestClassElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Text.HelpTextFixture" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Text.MultiLineTextAttributeFixture" type="XunitTestClassElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Text.MultiLineTextAttributeFixture" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.MutuallyExclusiveParsingFixture" type="XunitTestClassElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.MutuallyExclusiveParsingFixture" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.NullableTypesParsingFixture" type="XunitTestClassElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.NullableTypesParsingFixture" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Attributes.OptionArrayAttributeFixture" type="XunitTestClassElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Attributes.OptionArrayAttributeFixture" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" type="XunitTestClassElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Attributes.OptionAttributeFixture" type="XunitTestClassElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Attributes.OptionAttributeFixture" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Attributes.OptionListAttributeFixture" type="XunitTestClassElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Attributes.OptionListAttributeFixture" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Infrastructure.OptionMapFixture" type="XunitTestClassElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Infrastructure.OptionMapFixture" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestClassElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserSettingsFixture" type="XunitTestClassElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserSettingsFixture" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserStateFixture" type="XunitTestClassElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserStateFixture" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Infrastructure.ReflectionHelperFixture" type="XunitTestClassElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Infrastructure.ReflectionHelperFixture" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.SingletonFixture" type="XunitTestClassElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.SingletonFixture" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.StrictFixture" type="XunitTestClassElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.StrictFixture" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.UnknownArgumentsFixture" type="XunitTestClassElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.UnknownArgumentsFixture" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Attributes.ValueListAttributeFixture" type="XunitTestClassElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Attributes.ValueListAttributeFixture" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ValueListAttributeParsingFixture" type="XunitTestClassElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ValueListAttributeParsingFixture" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Attributes.ValueOptionAttributeFixture" type="XunitTestClassElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Attributes.ValueOptionAttributeFixture" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ValueOptionAttributeParsingFixture" type="XunitTestClassElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ValueOptionAttributeParsingFixture" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.VerbsFixture" type="XunitTestClassElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.VerbsFixture" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Text.VerbsHelpTextFixture" type="XunitTestClassElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Text.VerbsHelpTextFixture" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Text.HelpTextFixture.Add_an_empty_pre_options_line_is_allowed" ParentId="xunit:CommandLine.Tests.Unit.Text.HelpTextFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Text.HelpTextFixture" methodName="Add_an_empty_pre_options_line_is_allowed" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Text.HelpTextFixture.Add_options_with_dashes" ParentId="xunit:CommandLine.Tests.Unit.Text.HelpTextFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Text.HelpTextFixture" methodName="Add_options_with_dashes" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Attributes.AttributesFixture.All_options_allow_null_value_in_short_name" ParentId="xunit:CommandLine.Tests.Unit.Attributes.AttributesFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Attributes.AttributesFixture" methodName="All_options_allow_null_value_in_short_name" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Attributes.AttributesFixture.All_options_allow_one_character_in_short_name" ParentId="xunit:CommandLine.Tests.Unit.Attributes.AttributesFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Attributes.AttributesFixture" methodName="All_options_allow_one_character_in_short_name" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture.Allow_single_dash_as_non_option_value" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" methodName="Allow_single_dash_as_non_option_value" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture.Allow_single_dash_as_option_input_value" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" methodName="Allow_single_dash_as_option_input_value" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Text.MultiLineTextAttributeFixture.Assembly_license_should_offer_read_only_property_named_value" ParentId="xunit:CommandLine.Tests.Unit.Text.MultiLineTextAttributeFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Text.MultiLineTextAttributeFixture" methodName="Assembly_license_should_offer_read_only_property_named_value" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Text.MultiLineTextAttributeFixture.Assembly_usage_should_offer_read_only_property_named_value" ParentId="xunit:CommandLine.Tests.Unit.Text.MultiLineTextAttributeFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Text.MultiLineTextAttributeFixture" methodName="Assembly_usage_should_offer_read_only_property_named_value" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Attributes.HelpOptionAttributeFixture.Bad_input_activates_help" ParentId="xunit:CommandLine.Tests.Unit.Attributes.HelpOptionAttributeFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Attributes.HelpOptionAttributeFixture" methodName="Bad_input_activates_help" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ValueOptionAttributeParsingFixture.Between_value_options_order_matters" ParentId="xunit:CommandLine.Tests.Unit.Parser.ValueOptionAttributeParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ValueOptionAttributeParsingFixture" methodName="Between_value_options_order_matters" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Infrastructure.EnumeratorsFixture.Char_iteration" ParentId="xunit:CommandLine.Tests.Unit.Infrastructure.EnumeratorsFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Infrastructure.EnumeratorsFixture" methodName="Char_iteration" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Attributes.ValueListAttributeFixture.Concrete_type_is_generic_list_of_string" ParentId="xunit:CommandLine.Tests.Unit.Attributes.ValueListAttributeFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Attributes.ValueListAttributeFixture" methodName="Concrete_type_is_generic_list_of_string" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Attributes.ValueListAttributeFixture.Concrete_type_is_generic_list_of_string_sub_type" ParentId="xunit:CommandLine.Tests.Unit.Attributes.ValueListAttributeFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Attributes.ValueListAttributeFixture" methodName="Concrete_type_is_generic_list_of_string_sub_type" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Attributes.HelpOptionAttributeFixture.Correct_input_not_activates_help" ParentId="xunit:CommandLine.Tests.Unit.Attributes.HelpOptionAttributeFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Attributes.HelpOptionAttributeFixture" methodName="Correct_input_not_activates_help" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Text.HelpTextFixture.Create_basic_instance" ParentId="xunit:CommandLine.Tests.Unit.Text.HelpTextFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Text.HelpTextFixture" methodName="Create_basic_instance" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Text.HelpTextFixture.Customize_options_format" ParentId="xunit:CommandLine.Tests.Unit.Text.HelpTextFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Text.HelpTextFixture" methodName="Customize_options_format" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.SingletonFixture.Default_doesnt_support_mutually_exclusive_options" ParentId="xunit:CommandLine.Tests.Unit.Parser.SingletonFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.SingletonFixture" methodName="Default_doesnt_support_mutually_exclusive_options" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.SingletonFixture.Default_parsing_culture_is_invariant" ParentId="xunit:CommandLine.Tests.Unit.Parser.SingletonFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.SingletonFixture" methodName="Default_parsing_culture_is_invariant" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture.Default_parsing_is_case_sensitive" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" methodName="Default_parsing_is_case_sensitive" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Text.CopyrightInfoFixture.Default_symbol_several_years" ParentId="xunit:CommandLine.Tests.Unit.Text.CopyrightInfoFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Text.CopyrightInfoFixture" methodName="Default_symbol_several_years" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Text.CopyrightInfoFixture.Default_symbol_two_non_consecutive_years" ParentId="xunit:CommandLine.Tests.Unit.Text.CopyrightInfoFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Text.CopyrightInfoFixture" methodName="Default_symbol_two_non_consecutive_years" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Text.CopyrightInfoFixture.Derived_class" ParentId="xunit:CommandLine.Tests.Unit.Text.CopyrightInfoFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Text.CopyrightInfoFixture" methodName="Derived_class" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Text.HelpTextFixture.Detailed_help_with_bad_format" ParentId="xunit:CommandLine.Tests.Unit.Text.HelpTextFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Text.HelpTextFixture" methodName="Detailed_help_with_bad_format" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Text.HelpTextFixture.Detailed_help_with_bad_format_and_mutual_exclusiveness" ParentId="xunit:CommandLine.Tests.Unit.Text.HelpTextFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Text.HelpTextFixture" methodName="Detailed_help_with_bad_format_and_mutual_exclusiveness" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Text.HelpTextFixture.Detailed_help_with_bad_mutual_exclusiveness" ParentId="xunit:CommandLine.Tests.Unit.Text.HelpTextFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Text.HelpTextFixture" methodName="Detailed_help_with_bad_mutual_exclusiveness" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Text.HelpTextFixture.Detailed_help_with_missing_required" ParentId="xunit:CommandLine.Tests.Unit.Text.HelpTextFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Text.HelpTextFixture" methodName="Detailed_help_with_missing_required" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Text.HelpTextFixture.Detailed_help_with_missing_required_and_bad_format" ParentId="xunit:CommandLine.Tests.Unit.Text.HelpTextFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Text.HelpTextFixture" methodName="Detailed_help_with_missing_required_and_bad_format" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture.Disabling_case_sensitive" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" methodName="Disabling_case_sensitive" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Attributes.HelpOptionAttributeFixture.Explicit_help_activation" ParentId="xunit:CommandLine.Tests.Unit.Attributes.HelpOptionAttributeFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Attributes.HelpOptionAttributeFixture" methodName="Explicit_help_activation" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.VerbsFixture.Failed_parsing_prints_help_index" ParentId="xunit:CommandLine.Tests.Unit.Parser.VerbsFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.VerbsFixture" methodName="Failed_parsing_prints_help_index" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Text.VerbsHelpTextFixture.Failed_parsing_prints_help_index" ParentId="xunit:CommandLine.Tests.Unit.Text.VerbsHelpTextFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Text.VerbsHelpTextFixture" methodName="Failed_parsing_prints_help_index" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.VerbsFixture.Failed_verb_parsing_prints_particular_help_screen" ParentId="xunit:CommandLine.Tests.Unit.Parser.VerbsFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.VerbsFixture" methodName="Failed_verb_parsing_prints_particular_help_screen" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Text.VerbsHelpTextFixture.Failed_verb_parsing_prints_particular_help_screen" ParentId="xunit:CommandLine.Tests.Unit.Text.VerbsHelpTextFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Text.VerbsHelpTextFixture" methodName="Failed_verb_parsing_prints_particular_help_screen" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Infrastructure.ReflectionHelperFixture.Get_fields_attribute_list" ParentId="xunit:CommandLine.Tests.Unit.Infrastructure.ReflectionHelperFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Infrastructure.ReflectionHelperFixture" methodName="Get_fields_attribute_list" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Infrastructure.ReflectionHelperFixture.Get_fields_by_attribute" ParentId="xunit:CommandLine.Tests.Unit.Infrastructure.ReflectionHelperFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Infrastructure.ReflectionHelperFixture" methodName="Get_fields_by_attribute" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Attributes.ValueListAttributeFixture.Get_generic_list_of_string_interface_reference" ParentId="xunit:CommandLine.Tests.Unit.Attributes.ValueListAttributeFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Attributes.ValueListAttributeFixture" methodName="Get_generic_list_of_string_interface_reference" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Infrastructure.ReflectionHelperFixture.Get_method_by_attribute" ParentId="xunit:CommandLine.Tests.Unit.Infrastructure.ReflectionHelperFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Infrastructure.ReflectionHelperFixture" methodName="Get_method_by_attribute" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Infrastructure.ArgumentParserFixture.Get_next_input_values" ParentId="xunit:CommandLine.Tests.Unit.Infrastructure.ArgumentParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Infrastructure.ArgumentParserFixture" methodName="Get_next_input_values" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Attributes.ValueOptionAttributeFixture.Index_Explicitly_Set_On_Value_Option" ParentId="xunit:CommandLine.Tests.Unit.Attributes.ValueOptionAttributeFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Attributes.ValueOptionAttributeFixture" methodName="Index_Explicitly_Set_On_Value_Option" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Attributes.ValueOptionAttributeFixture.Index_Implicit_By_Declaration_Order" ParentId="xunit:CommandLine.Tests.Unit.Attributes.ValueOptionAttributeFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Attributes.ValueOptionAttributeFixture" methodName="Index_Implicit_By_Declaration_Order" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Text.HelpTextFixture.Instancing_with_parameterless_constructor" ParentId="xunit:CommandLine.Tests.Unit.Text.HelpTextFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Text.HelpTextFixture" methodName="Instancing_with_parameterless_constructor" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Text.HelpTextFixture.Invoke_render_parsing_errors_text" ParentId="xunit:CommandLine.Tests.Unit.Text.HelpTextFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Text.HelpTextFixture" methodName="Invoke_render_parsing_errors_text" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Text.HelpTextFixture.Long_help_text_without_spaces" ParentId="xunit:CommandLine.Tests.Unit.Text.HelpTextFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Text.HelpTextFixture" methodName="Long_help_text_without_spaces" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Text.HelpTextFixture.Long_pre_and_post_lines_without_spaces" ParentId="xunit:CommandLine.Tests.Unit.Text.HelpTextFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Text.HelpTextFixture" methodName="Long_pre_and_post_lines_without_spaces" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Text.CopyrightInfoFixture.Lower_symbol_one_year" ParentId="xunit:CommandLine.Tests.Unit.Text.CopyrightInfoFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Text.CopyrightInfoFixture" methodName="Lower_symbol_one_year" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Infrastructure.OptionMapFixture.Manage_options" ParentId="xunit:CommandLine.Tests.Unit.Infrastructure.OptionMapFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Infrastructure.OptionMapFixture" methodName="Manage_options" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Text.HelpTextFixture.Meta_value" ParentId="xunit:CommandLine.Tests.Unit.Text.HelpTextFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Text.HelpTextFixture" methodName="Meta_value" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Text.HelpTextFixture.Multiple_required_fields_with_more_than_one_required_field_not_specified_reports_all_missing_required_fields" ParentId="xunit:CommandLine.Tests.Unit.Text.HelpTextFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Text.HelpTextFixture" methodName="Multiple_required_fields_with_more_than_one_required_field_not_specified_reports_all_missing_required_fields" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Text.HeadingInfoFixture.Only_program_name" ParentId="xunit:CommandLine.Tests.Unit.Text.HeadingInfoFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Text.HeadingInfoFixture" methodName="Only_program_name" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture.Parse_culture_specific_nullable_number" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" methodName="Parse_culture_specific_nullable_number" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture.Parse_culture_specific_number" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" methodName="Parse_culture_specific_number" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture.Parse_culture_specific_number" ParentId="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" methodName="Parse_culture_specific_number" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture.Parse_different_arrays_together__combination_one" ParentId="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" methodName="Parse_different_arrays_together__combination_one" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture.Parse_different_arrays_together__combination_two" ParentId="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" methodName="Parse_different_arrays_together__combination_two" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture.Parse_double_array_option_using_short_name" ParentId="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" methodName="Parse_double_array_option_using_short_name" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture.Parse_enum_options" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" methodName="Parse_enum_options" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture.Parse_integer_array_option_using_short_name" ParentId="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" methodName="Parse_integer_array_option_using_short_name" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture.Parse_negative_floating_point_value" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" methodName="Parse_negative_floating_point_value" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture.Parse_negative_floating_point_value_input_style2" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" methodName="Parse_negative_floating_point_value_input_style2" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture.Parse_negative_floating_point_value_input_style3" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" methodName="Parse_negative_floating_point_value_input_style3" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture.Parse_negative_floating_point_value_input_style4" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" methodName="Parse_negative_floating_point_value_input_style4" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture.Parse_negative_integer_value" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" methodName="Parse_negative_integer_value" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.NullableTypesParsingFixture.Parse_nullable_double_option" ParentId="xunit:CommandLine.Tests.Unit.Parser.NullableTypesParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.NullableTypesParsingFixture" methodName="Parse_nullable_double_option" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.NullableTypesParsingFixture.Parse_nullable_enumeration_option" ParentId="xunit:CommandLine.Tests.Unit.Parser.NullableTypesParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.NullableTypesParsingFixture" methodName="Parse_nullable_enumeration_option" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.NullableTypesParsingFixture.Parse_nullable_integer_option" ParentId="xunit:CommandLine.Tests.Unit.Parser.NullableTypesParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.NullableTypesParsingFixture" methodName="Parse_nullable_integer_option" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture.Parse_option_list" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" methodName="Parse_option_list" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture.Parse_options_with_bad_defaults" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" methodName="Parse_options_with_bad_defaults" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture.Parse_options_with_default_array" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" methodName="Parse_options_with_default_array" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture.Parse_options_with_defaults" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" methodName="Parse_options_with_defaults" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture.Parse_short_adjacent_options" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" methodName="Parse_short_adjacent_options" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture.Parse_short_long_options" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" methodName="Parse_short_long_options" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.StrictFixture.Parse_strict_bad_input_fails_and_exits" ParentId="xunit:CommandLine.Tests.Unit.Parser.StrictFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.StrictFixture" methodName="Parse_strict_bad_input_fails_and_exits" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.StrictFixture.Parse_strict_bad_input_fails_and_exits_when_get_usage_is_defined" ParentId="xunit:CommandLine.Tests.Unit.Parser.StrictFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.StrictFixture" methodName="Parse_strict_bad_input_fails_and_exits_when_get_usage_is_defined" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.StrictFixture.Parse_strict_bad_input_fails_and_exits_with_verbs" ParentId="xunit:CommandLine.Tests.Unit.Parser.StrictFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.StrictFixture" methodName="Parse_strict_bad_input_fails_and_exits_with_verbs" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.StrictFixture.Parse_strict_bad_input_fails_and_exits_with_verbs_when_get_usage_is_defined" ParentId="xunit:CommandLine.Tests.Unit.Parser.StrictFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.StrictFixture" methodName="Parse_strict_bad_input_fails_and_exits_with_verbs_when_get_usage_is_defined" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture.Parse_string_array_option_using_long_name" ParentId="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" methodName="Parse_string_array_option_using_long_name" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture.Parse_string_array_option_using_long_name_with_equal_sign" ParentId="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" methodName="Parse_string_array_option_using_long_name_with_equal_sign" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture.Parse_string_array_option_using_long_name_with_value_list" ParentId="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" methodName="Parse_string_array_option_using_long_name_with_value_list" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture.Parse_string_array_option_using_short_name" ParentId="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" methodName="Parse_string_array_option_using_short_name" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture.Parse_string_array_option_using_short_name_and_string_option_after" ParentId="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" methodName="Parse_string_array_option_using_short_name_and_string_option_after" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture.Parse_string_array_option_using_short_name_and_string_option_before" ParentId="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" methodName="Parse_string_array_option_using_short_name_and_string_option_before" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture.Parse_string_array_option_using_short_name_with_options_before_and_after" ParentId="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" methodName="Parse_string_array_option_using_short_name_with_options_before_and_after" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture.Parse_string_array_option_using_short_name_with_value_adjacent" ParentId="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" methodName="Parse_string_array_option_using_short_name_with_value_adjacent" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture.Parse_string_integer_bool_options" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" methodName="Parse_string_integer_bool_options" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.SingletonFixture.Parse_string_integer_bool_options" ParentId="xunit:CommandLine.Tests.Unit.Parser.SingletonFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.SingletonFixture" methodName="Parse_string_integer_bool_options" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture.Parse_string_option" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" methodName="Parse_string_option" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.NullableTypesParsingFixture.Parse_string_option_and_nullable_value_types" ParentId="xunit:CommandLine.Tests.Unit.Parser.NullableTypesParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.NullableTypesParsingFixture" methodName="Parse_string_option_and_nullable_value_types" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture.Parse_two_uint_consecutive_array" ParentId="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" methodName="Parse_two_uint_consecutive_array" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture.Parse_two_uint_consecutive_array_using_short_names" ParentId="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" methodName="Parse_two_uint_consecutive_array_using_short_names" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.UnknownArgumentsFixture.Parse_valid_unknown_arguments" ParentId="xunit:CommandLine.Tests.Unit.Parser.UnknownArgumentsFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.UnknownArgumentsFixture" methodName="Parse_valid_unknown_arguments" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.VerbsFixture.Parse_verbs_create_instance" ParentId="xunit:CommandLine.Tests.Unit.Parser.VerbsFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.VerbsFixture" methodName="Parse_verbs_create_instance" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.VerbsFixture.Parse_verbs_using_instance" ParentId="xunit:CommandLine.Tests.Unit.Parser.VerbsFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.VerbsFixture" methodName="Parse_verbs_using_instance" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture.Parser_should_report_missing_value" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" methodName="Parser_should_report_missing_value" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserStateFixture.Parser_state_attribute_should_be_applied_to_a_property_of_the_correct_type" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserStateFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserStateFixture" methodName="Parser_state_attribute_should_be_applied_to_a_property_of_the_correct_type" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserStateFixture.Parser_state_attribute_should_be_applied_to_a_property_of_the_correct_type_also_if_not_initialized" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserStateFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserStateFixture" methodName="Parser_state_attribute_should_be_applied_to_a_property_of_the_correct_type_also_if_not_initialized" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserStateFixture.Parser_state_instance_should_not_pre_built" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserStateFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserStateFixture" methodName="Parser_state_instance_should_not_pre_built" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.MutuallyExclusiveParsingFixture.Parsing_mutually_exclusive_options_and_required_option_fails" ParentId="xunit:CommandLine.Tests.Unit.Parser.MutuallyExclusiveParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.MutuallyExclusiveParsingFixture" methodName="Parsing_mutually_exclusive_options_and_required_option_fails" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.MutuallyExclusiveParsingFixture.Parsing_mutually_exclusive_options_and_required_option_succeeds" ParentId="xunit:CommandLine.Tests.Unit.Parser.MutuallyExclusiveParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.MutuallyExclusiveParsingFixture" methodName="Parsing_mutually_exclusive_options_and_required_option_succeeds" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture.Parsing_non_existent_long_option_fails_without_throwing_an_exception" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" methodName="Parsing_non_existent_long_option_fails_without_throwing_an_exception" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture.Parsing_non_existent_short_option_fails_without_throwing_an_exception" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" methodName="Parsing_non_existent_short_option_fails_without_throwing_an_exception" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.MutuallyExclusiveParsingFixture.Parsing_one_mutually_exclusive_option_succeeds" ParentId="xunit:CommandLine.Tests.Unit.Parser.MutuallyExclusiveParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.MutuallyExclusiveParsingFixture" methodName="Parsing_one_mutually_exclusive_option_succeeds" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.MutuallyExclusiveParsingFixture.Parsing_one_mutually_exclusive_option_with_another_option_succeeds" ParentId="xunit:CommandLine.Tests.Unit.Parser.MutuallyExclusiveParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.MutuallyExclusiveParsingFixture" methodName="Parsing_one_mutually_exclusive_option_with_another_option_succeeds" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.MutuallyExclusiveParsingFixture.Parsing_three_mutually_exclusive_options_in_two_set_fails" ParentId="xunit:CommandLine.Tests.Unit.Parser.MutuallyExclusiveParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.MutuallyExclusiveParsingFixture" methodName="Parsing_three_mutually_exclusive_options_in_two_set_fails" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.MutuallyExclusiveParsingFixture.Parsing_two_mutually_exclusive_options_fails" ParentId="xunit:CommandLine.Tests.Unit.Parser.MutuallyExclusiveParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.MutuallyExclusiveParsingFixture" methodName="Parsing_two_mutually_exclusive_options_fails" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.MutuallyExclusiveParsingFixture.Parsing_two_mutually_exclusive_options_in_two_set_succeeds" ParentId="xunit:CommandLine.Tests.Unit.Parser.MutuallyExclusiveParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.MutuallyExclusiveParsingFixture" methodName="Parsing_two_mutually_exclusive_options_in_two_set_succeeds" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.NullableTypesParsingFixture.Passing_bad_value_to_a_nullable_double_option_fails" ParentId="xunit:CommandLine.Tests.Unit.Parser.NullableTypesParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.NullableTypesParsingFixture" methodName="Passing_bad_value_to_a_nullable_double_option_fails" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.NullableTypesParsingFixture.Passing_bad_value_to_a_nullable_enumeration_option_fails" ParentId="xunit:CommandLine.Tests.Unit.Parser.NullableTypesParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.NullableTypesParsingFixture" methodName="Passing_bad_value_to_a_nullable_enumeration_option_fails" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.NullableTypesParsingFixture.Passing_bad_value_to_a_nullable_integer_option_fails" ParentId="xunit:CommandLine.Tests.Unit.Parser.NullableTypesParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.NullableTypesParsingFixture" methodName="Passing_bad_value_to_a_nullable_integer_option_fails" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture.Passing_bad_value_to_an_integer_array_option_fails" ParentId="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" methodName="Passing_bad_value_to_an_integer_array_option_fails" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture.Passing_double_value_to_float_option_must_fail_gracefully" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" methodName="Passing_double_value_to_float_option_must_fail_gracefully" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture.Passing_float_value_to_long_option_must_fail_gracefully" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" methodName="Passing_float_value_to_long_option_must_fail_gracefully" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture.Passing_integer_value_to_short_option_must_fail_gracefully" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" methodName="Passing_integer_value_to_short_option_must_fail_gracefully" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture.Passing_long_value_to_integer_option_must_fail_gracefully" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" methodName="Passing_long_value_to_integer_option_must_fail_gracefully" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture.Passing_no_value_to_a_byte_type_long_option_fails" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" methodName="Passing_no_value_to_a_byte_type_long_option_fails" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture.Passing_no_value_to_a_double_type_long_option_fails" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" methodName="Passing_no_value_to_a_double_type_long_option_fails" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture.Passing_no_value_to_a_float_type_long_option_fails" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" methodName="Passing_no_value_to_a_float_type_long_option_fails" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture.Passing_no_value_to_a_long_type_long_option_fails" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" methodName="Passing_no_value_to_a_long_type_long_option_fails" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.NullableTypesParsingFixture.Passing_no_value_to_a_nullable_double_option_fails" ParentId="xunit:CommandLine.Tests.Unit.Parser.NullableTypesParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.NullableTypesParsingFixture" methodName="Passing_no_value_to_a_nullable_double_option_fails" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.NullableTypesParsingFixture.Passing_no_value_to_a_nullable_enumeration_option_fails" ParentId="xunit:CommandLine.Tests.Unit.Parser.NullableTypesParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.NullableTypesParsingFixture" methodName="Passing_no_value_to_a_nullable_enumeration_option_fails" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.NullableTypesParsingFixture.Passing_no_value_to_a_nullable_integer_option_fails" ParentId="xunit:CommandLine.Tests.Unit.Parser.NullableTypesParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.NullableTypesParsingFixture" methodName="Passing_no_value_to_a_nullable_integer_option_fails" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture.Passing_no_value_to_a_short_type_long_option_fails" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" methodName="Passing_no_value_to_a_short_type_long_option_fails" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture.Passing_no_value_to_a_string_array_option_fails" ParentId="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" methodName="Passing_no_value_to_a_string_array_option_fails" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture.Passing_no_value_to_a_string_type_long_option_fails" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" methodName="Passing_no_value_to_a_string_type_long_option_fails" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture.Passing_no_value_to_an_integer_array_option_fails" ParentId="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" methodName="Passing_no_value_to_an_integer_array_option_fails" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture.Passing_no_value_to_an_integer_type_long_option_fails" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" methodName="Passing_no_value_to_an_integer_type_long_option_fails" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture.Passing_short_value_to_byte_option_must_fail_gracefully" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" methodName="Passing_short_value_to_byte_option_must_fail_gracefully" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Text.HelpTextFixture.Post_options_lines_feature_added" ParentId="xunit:CommandLine.Tests.Unit.Text.HelpTextFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Text.HelpTextFixture" methodName="Post_options_lines_feature_added" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Text.HeadingInfoFixture.Program_name_and_version" ParentId="xunit:CommandLine.Tests.Unit.Text.HeadingInfoFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Text.HeadingInfoFixture" methodName="Program_name_and_version" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Text.VerbsHelpTextFixture.Requesting_bad_help_prints_help_index" ParentId="xunit:CommandLine.Tests.Unit.Text.VerbsHelpTextFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Text.VerbsHelpTextFixture" methodName="Requesting_bad_help_prints_help_index" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Text.VerbsHelpTextFixture.Requesting_help_of_particular_verb_without_instance_should_work" ParentId="xunit:CommandLine.Tests.Unit.Text.VerbsHelpTextFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Text.VerbsHelpTextFixture" methodName="Requesting_help_of_particular_verb_without_instance_should_work" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Text.VerbsHelpTextFixture.Requesting_help_prints_help_index" ParentId="xunit:CommandLine.Tests.Unit.Text.VerbsHelpTextFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Text.VerbsHelpTextFixture" methodName="Requesting_help_prints_help_index" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserSettingsFixture.Setting_help_writer_using_constructor" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserSettingsFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserSettingsFixture" methodName="Setting_help_writer_using_constructor" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserSettingsFixture.Setting_help_writer_using_property" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserSettingsFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserSettingsFixture" methodName="Setting_help_writer_using_property" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserSettingsFixture.Setting_instance_became_immutable_after_being_consumed" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserSettingsFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserSettingsFixture" methodName="Setting_instance_became_immutable_after_being_consumed" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserSettingsFixture.Setting_instance_is_not_reusable" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserSettingsFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserSettingsFixture" methodName="Setting_instance_is_not_reusable" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Attributes.AttributesFixture.Short_name_with_line_terminator_throws_exception" ParentId="xunit:CommandLine.Tests.Unit.Attributes.AttributesFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Attributes.AttributesFixture" methodName="Short_name_with_line_terminator_throws_exception" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Attributes.AttributesFixture.Short_name_with_line_terminator_throws_exception_2" ParentId="xunit:CommandLine.Tests.Unit.Attributes.AttributesFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Attributes.AttributesFixture" methodName="Short_name_with_line_terminator_throws_exception_2" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Attributes.AttributesFixture.Short_name_with_white_space_throws_exception" ParentId="xunit:CommandLine.Tests.Unit.Attributes.AttributesFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Attributes.AttributesFixture" methodName="Short_name_with_white_space_throws_exception" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Attributes.AttributesFixture.Short_name_with_white_space_throws_exception_2" ParentId="xunit:CommandLine.Tests.Unit.Attributes.AttributesFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Attributes.AttributesFixture" methodName="Short_name_with_white_space_throws_exception_2" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture.Short_option_refuses_equal_token" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" methodName="Short_option_refuses_equal_token" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Attributes.OptionArrayAttributeFixture.Should_correctly_parse_two_consecutive_arrays" ParentId="xunit:CommandLine.Tests.Unit.Attributes.OptionArrayAttributeFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Attributes.OptionArrayAttributeFixture" methodName="Should_correctly_parse_two_consecutive_arrays" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.VerbsFixture.Should_fail_gracefully_when_no_getusage_is_defined" ParentId="xunit:CommandLine.Tests.Unit.Parser.VerbsFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.VerbsFixture" methodName="Should_fail_gracefully_when_no_getusage_is_defined" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Text.CopyrightInfoFixture.Should_not_grow_when_converted_to_string" ParentId="xunit:CommandLine.Tests.Unit.Text.CopyrightInfoFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Text.CopyrightInfoFixture" methodName="Should_not_grow_when_converted_to_string" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Attributes.OptionListAttributeFixture.Should_use_property_name_as_long_name_if_omitted" ParentId="xunit:CommandLine.Tests.Unit.Attributes.OptionListAttributeFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Attributes.OptionListAttributeFixture" methodName="Should_use_property_name_as_long_name_if_omitted" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Attributes.OptionArrayAttributeFixture.Should_use_property_name_as_long_name_if_omitted" ParentId="xunit:CommandLine.Tests.Unit.Attributes.OptionArrayAttributeFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Attributes.OptionArrayAttributeFixture" methodName="Should_use_property_name_as_long_name_if_omitted" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Attributes.OptionAttributeFixture.Should_use_property_name_as_long_name_if_omitted" ParentId="xunit:CommandLine.Tests.Unit.Attributes.OptionAttributeFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Attributes.OptionAttributeFixture" methodName="Should_use_property_name_as_long_name_if_omitted" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Infrastructure.EnumeratorsFixture.String_iteration" ParentId="xunit:CommandLine.Tests.Unit.Infrastructure.EnumeratorsFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Infrastructure.EnumeratorsFixture" methodName="String_iteration" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Text.CopyrightInfoFixture.Upper_symbol_two_consecutive_years" ParentId="xunit:CommandLine.Tests.Unit.Text.CopyrightInfoFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Text.CopyrightInfoFixture" methodName="Upper_symbol_two_consecutive_years" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Attributes.ValueListAttributeFixture.Use_generic_list_of_string_interface_reference" ParentId="xunit:CommandLine.Tests.Unit.Attributes.ValueListAttributeFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Attributes.ValueListAttributeFixture" methodName="Use_generic_list_of_string_interface_reference" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture.Using_wrong_case_with_default_fails" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" methodName="Using_wrong_case_with_default_fails" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ValueListAttributeParsingFixture.Value_list_attribute_isolates_non_option_values" ParentId="xunit:CommandLine.Tests.Unit.Parser.ValueListAttributeParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ValueListAttributeParsingFixture" methodName="Value_list_attribute_isolates_non_option_values" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ValueListAttributeParsingFixture.Value_list_with_max_elem_inside_bounds" ParentId="xunit:CommandLine.Tests.Unit.Parser.ValueListAttributeParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ValueListAttributeParsingFixture" methodName="Value_list_with_max_elem_inside_bounds" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ValueListAttributeParsingFixture.Value_list_with_max_elem_outside_bounds" ParentId="xunit:CommandLine.Tests.Unit.Parser.ValueListAttributeParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ValueListAttributeParsingFixture" methodName="Value_list_with_max_elem_outside_bounds" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ValueListAttributeParsingFixture.Value_list_with_max_elem_set_to_zero_failes" ParentId="xunit:CommandLine.Tests.Unit.Parser.ValueListAttributeParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ValueListAttributeParsingFixture" methodName="Value_list_with_max_elem_set_to_zero_failes" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ValueListAttributeParsingFixture.Value_list_with_max_elem_set_to_zero_succeeds" ParentId="xunit:CommandLine.Tests.Unit.Parser.ValueListAttributeParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ValueListAttributeParsingFixture" methodName="Value_list_with_max_elem_set_to_zero_succeeds" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ValueOptionAttributeParsingFixture.Value_option_attribute_isolates_non_option_values" ParentId="xunit:CommandLine.Tests.Unit.Parser.ValueOptionAttributeParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ValueOptionAttributeParsingFixture" methodName="Value_option_attribute_isolates_non_option_values" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ValueOptionAttributeParsingFixture.Value_option_attribute_values_are_not_mandatory" ParentId="xunit:CommandLine.Tests.Unit.Parser.ValueOptionAttributeParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ValueOptionAttributeParsingFixture" methodName="Value_option_attribute_values_are_not_mandatory" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ValueOptionAttributeParsingFixture.Value_option_takes_precedence_on_value_list_regardless_declaration_order" ParentId="xunit:CommandLine.Tests.Unit.Parser.ValueOptionAttributeParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ValueOptionAttributeParsingFixture" methodName="Value_option_takes_precedence_on_value_list_regardless_declaration_order" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Text.HelpTextFixture.When_help_text_is_longer_than_width_it_will_wrap_around_as_if_in_a_column" ParentId="xunit:CommandLine.Tests.Unit.Text.HelpTextFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Text.HelpTextFixture" methodName="When_help_text_is_longer_than_width_it_will_wrap_around_as_if_in_a_column" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture.Will_throw_exception_if_arguments_array_is_null" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" methodName="Will_throw_exception_if_arguments_array_is_null" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Text.CopyrightInfoFixture.Will_throw_exception_if_author_is_null" ParentId="xunit:CommandLine.Tests.Unit.Text.CopyrightInfoFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Text.CopyrightInfoFixture" methodName="Will_throw_exception_if_author_is_null" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Attributes.ValueListAttributeFixture.Will_throw_exception_if_concrete_type_is_incompatible" ParentId="xunit:CommandLine.Tests.Unit.Attributes.ValueListAttributeFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Attributes.ValueListAttributeFixture" methodName="Will_throw_exception_if_concrete_type_is_incompatible" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Attributes.ValueListAttributeFixture.Will_throw_exception_if_concrete_type_is_null" ParentId="xunit:CommandLine.Tests.Unit.Attributes.ValueListAttributeFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Attributes.ValueListAttributeFixture" methodName="Will_throw_exception_if_concrete_type_is_null" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Text.CopyrightInfoFixture.Will_throw_exception_if_no_years_are_supplied" ParentId="xunit:CommandLine.Tests.Unit.Text.CopyrightInfoFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Text.CopyrightInfoFixture" methodName="Will_throw_exception_if_no_years_are_supplied" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture.Will_throw_exception_if_option_array_attribute_bound_to_integer_with_long_name" ParentId="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" methodName="Will_throw_exception_if_option_array_attribute_bound_to_integer_with_long_name" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture.Will_throw_exception_if_option_array_attribute_bound_to_integer_with_short_name" ParentId="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" methodName="Will_throw_exception_if_option_array_attribute_bound_to_integer_with_short_name" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture.Will_throw_exception_if_option_array_attribute_bound_to_string_with_long_name" ParentId="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" methodName="Will_throw_exception_if_option_array_attribute_bound_to_string_with_long_name" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture.Will_throw_exception_if_option_array_attribute_bound_to_string_with_short_name" ParentId="xunit:CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.OptionArrayAttributeParsingFixture" methodName="Will_throw_exception_if_option_array_attribute_bound_to_string_with_short_name" skipReason="" /><UnitTestElement Provider="xUnit" Id="xunit:CommandLine.Tests.Unit.Parser.ParserFixture.Will_throw_exception_if_options_instance_is_null" ParentId="xunit:CommandLine.Tests.Unit.Parser.ParserFixture" type="XunitTestMethodElement" projectId="86E1AC34-ED2D-4E42-8B95-65208FEA36C2" typeName="CommandLine.Tests.Unit.Parser.ParserFixture" methodName="Will_throw_exception_if_options_instance_is_null" skipReason="" /></Elements></Session> - NotOverridden - NotOverridden \ No newline at end of file diff --git a/CommandLine.snk b/CommandLine.snk index 96087a73..6b0b6501 100644 Binary files a/CommandLine.snk and b/CommandLine.snk differ diff --git a/Directory.Build.props b/Directory.Build.props new file mode 100644 index 00000000..3db45ca4 --- /dev/null +++ b/Directory.Build.props @@ -0,0 +1,18 @@ + + + CS1591;CS0219;8002;NU5125 + $(MSBuildThisFileDirectory) + false + + + $(DefineConstants);NETFRAMEWORK + + + + + runtime; build; native; contentfiles; analyzers + all + + + + diff --git a/doc/LICENSE b/License.md similarity index 88% rename from doc/LICENSE rename to License.md index e166da25..ef77a61c 100644 --- a/doc/LICENSE +++ b/License.md @@ -1,9 +1,6 @@ -Command Line Parser Library +The MIT License (MIT) -Author: - Giacomo Stelluti Scala (gsscoder@gmail.com) - -Copyright (c) 2005 - 2013 Giacomo Stelluti Scala +Copyright (c) 2005 - 2015 Giacomo Stelluti Scala & Contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index d00d4a9a..79a16fa7 100644 --- a/README.md +++ b/README.md @@ -1,118 +1,351 @@ -Command Line Parser Library 1.9.71.2 stable for CLR. -=== -The Command Line Parser Library offers to CLR applications a clean and concise API for manipulating command line arguments and related tasks defining switches, options and verb commands. It allows you to display an help screen with an high degree of customization and a simple way to report syntax errors to the end user. Everything that is boring and repetitive to be programmed stands up on library shoulders, letting developers concentrate on core logic. -__This library provides _hassle free_ command line parsing with a constantly updated API since 2005.__ +[![Build status](https://ci.appveyor.com/api/projects/status/p61dj8udxs2aocmo/branch/master?svg=true)](https://ci.appveyor.com/project/commandlineparser/commandline/branch/master) +[![NuGet](https://img.shields.io/nuget/dt/commandlineparser.svg)](http://nuget.org/packages/commandlineparser) +[![NuGet](https://img.shields.io/nuget/v/commandlineparser.svg)](https://www.nuget.org/packages/CommandLineParser/) +[![NuGet](https://img.shields.io/nuget/vpre/commandlineparser.svg)](https://www.nuget.org/packages/CommandLineParser/) +[![Join the Gitter chat!](https://badges.gitter.im/gsscoder/commandline.svg)](https://gitter.im/gsscoder/commandline?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) + +# Command Line Parser Library for CLR and NetStandard + +**Note:** the API surface has changed since v1.9.x and earlier. If you are looking for documentation on v1.9.x, please see [stable-1.9.71.2](https://github.com/gsscoder/commandline/tree/stable-1.9.71.2) + +The Command Line Parser Library offers CLR applications a clean and concise API for manipulating command line arguments and related tasks, such as defining switches, options and verb commands. It allows you to display a help screen with a high degree of customization and a simple way to report syntax errors to the end user. -Compatibility: ---- - - .NET Framework 3.5+ - - Mono 2.1+ Profile - -At glance: ---- - - One line parsing using default singleton: ``CommandLine.Parser.Default.ParseArguments(...)``. - - One line help screen generator: ``HelpText.AutoBuild(...)``. - - Map command line arguments to ``IList``, arrays, enum or standard scalar types. - - __Plug-In friendly__ architecture as explained [here](https://github.com/gsscoder/commandline/wiki/Plug-in-Friendly-Architecture). - - Define [verb commands](https://github.com/gsscoder/commandline/wiki/Verb-Commands) as ``git commit -a``. - - Create parser instance using lambda expressions. - - Most of features applies with a [CoC](http://en.wikipedia.org/wiki/Convention_over_configuration) philosophy. - -To install: ---- - - NuGet way (latest stable): ``Install-Package CommandLineParser`` - - NuGet way (latest version): ``Install-Package CommandLineParser -pre`` - - XCOPY way: ``cp -r CommandLine/src/libcmdline To/Your/Project/Dir`` - -To build: ---- -You can use still use MonoDevelop or Visual Studio, but the project can aslo be built using Ruby [Rake](http://rake.rubyforge.org/) with a script that depends on [Albacore](https://github.com/derickbailey/Albacore). ``` -$ gem install albacore -$ git clone https://github.com/gsscoder/commandline.git CommandLine -$ cd CommandLine -$ rake +C:\Project> NuGet Install CommandLineParser ``` -To start: ---- - - [CSharp Template](https://github.com/gsscoder/commandline/blob/master/src/templates/CSharpTemplate/Program.cs) - - [VB.NET Template](https://github.com/gsscoder/commandline/blob/master/src/templates/VBNetTemplate/Program.vb) +# Nightly Build -Public API: ---- -Latest changes are recorded from Version 1.9.4.91, please refer to [this document](https://github.com/gsscoder/commandline/blob/master/doc/PublicAPI.md). +Nightly version of the CommandLineParser can be downloaded from github [Releases](https://github.com/commandlineparser/commandline/releases). -Verb Commands: ---- -Since introduction of verb commands is a very new feature, templates and sample application are not updated to illustrate it. Please refer this [wiki section](https://github.com/gsscoder/commandline/wiki/Verb-Commands) and unit tests code to learn how to [define](https://github.com/gsscoder/commandline/blob/master/src/tests/Mocks/OptionsWithVerbsHelp.cs), how to [respond](https://github.com/gsscoder/commandline/blob/master/src/tests/Parser/VerbsFixture.cs) and how they [relate to help subsystem](https://github.com/gsscoder/commandline/blob/master/src/tests/Text/VerbsHelpTextFixture.cs). Give a look also at this [blog article](http://gsscoder.blogspot.it/2013/01/command-line-parser-library-verb.html). +The Last new features and fixes, read [changelog](https://github.com/commandlineparser/commandline/blob/master/CHANGELOG.md) -Notes: ---- -The project is and well suited to be included in your application. If you don't merge it to your project tree, you must reference ``CommandLine.dll`` and import ``CommandLine`` and ``CommandLine.Text`` namespaces (or install via NuGet). The help text builder and its support types lives in ``CommandLine.Text`` namespace that is loosely coupled with the parser. However is good to know that ``HelpText`` class will avoid a lot of repetitive coding. -Define a class to receive parsed values: +_NOTE: Mentioned F# Support is provided via ```CommandLineParser.FSharp``` package with FSharp dependencies._ -```csharp -class Options { - [Option('r', "read", Required = true, - HelpText = "Input file to be processed.")] - public string InputFile { get; set; } - - // omitting long name, default --verbose - [Option(DefaultValue = true, - HelpText = "Prints all messages to standard output.")] +__This library provides _hassle free_ command line parsing with a constantly updated API since 2005.__ + +# At a glance: + +- Compatible with __.NET Framework 4.0+__, __Mono 2.1+ Profile__, __.NET Standard__ and __.NET Core__ +- Doesn't depend on other packages (No dependencies beyond standard base libraries) +- One line parsing using default singleton: `CommandLine.Parser.Default.ParseArguments(...)` and three overload methods. +- Automatic or one line help screen generator: `HelpText.AutoBuild(...)`. +- Supports `--help`, `--version`, `version` and `help [verb]` by default with customization. +- Map to sequences (via `IEnumerable` and similar) and scalar types, including Enums and `Nullable`. +- You can also map to every type with a constructor that accepts a string (like `System.Uri`) for reference and value types. +- Verbs can be array of types collected from Plugins or IoC container. +- Define [verb commands](https://github.com/commandlineparser/commandline/wiki/Verbs) similar to `git commit -a`. +- Support default verb. +- Support Mutable and Immutable types. +- Support HelpText localization. +- Support ordering of options in HelpText. +- Support [Mutually Exclusive Options](https://github.com/commandlineparser/commandline/wiki/Mutually-Exclusive-Options) and [Option groups](https://github.com/commandlineparser/commandline/wiki/Option-Groups). +- Support named and value options. +- Support Asynchronous programming with async and await. +- Unparsing support: `CommandLine.Parser.Default.FormatCommandLine(T options)`. +- CommandLineParser.FSharp package is F#-friendly with support for `option<'a>`, see [demo](https://github.com/commandlineparser/commandline/blob/master/demo/fsharp-demo.fsx). _NOTE: This is a separate NuGet package._ +- Include wiki documentation with lot of examples ready to run online. +- Support Source Link and symbolic nuget package snupkg. +- Tested in Windows, Linux Ubuntu 18.04 and Mac OS. +- Most of features applies with a [CoC](http://en.wikipedia.org/wiki/Convention_over_configuration) philosophy. +- C# demo: source [here](https://github.com/commandlineparser/commandline/tree/master/demo/ReadText.Demo). + +# Getting Started with the Command Line Parser Library + +You can utilize the parser library in several ways: + +- Install via NuGet/Paket: [https://www.nuget.org/packages/CommandLineParser/](https://www.nuget.org/packages/CommandLineParser/) +- Integrate directly into your project by copying the .cs files into your project. +- ILMerge during your build process. + +## Quick Start Examples + +1. Create a class to define valid options, and to receive the parsed options. +2. Call ParseArguments with the args string array. + +C# Quick Start: + +```cs +using System; +using CommandLine; + +namespace QuickStart +{ + class Program + { + public class Options + { + [Option('v', "verbose", Required = false, HelpText = "Set output to verbose messages.")] + public bool Verbose { get; set; } + } + + static void Main(string[] args) + { + Parser.Default.ParseArguments(args) + .WithParsed(o => + { + if (o.Verbose) + { + Console.WriteLine($"Verbose output enabled. Current Arguments: -v {o.Verbose}"); + Console.WriteLine("Quick Start Example! App is in Verbose mode!"); + } + else + { + Console.WriteLine($"Current Arguments: -v {o.Verbose}"); + Console.WriteLine("Quick Start Example!"); + } + }); + } + } +} +``` + +## C# Examples: + +
+ Click to expand! + +```cs + +class Options +{ + [Option('r', "read", Required = true, HelpText = "Input files to be processed.")] + public IEnumerable InputFiles { get; set; } + + // Omitting long name, defaults to name of property, ie "--verbose" + [Option( + Default = false, + HelpText = "Prints all messages to standard output.")] public bool Verbose { get; set; } + + [Option("stdin", + Default = false, + HelpText = "Read from stdin")] + public bool stdin { get; set; } - [ParserState] - public IParserState LastParserState { get; set; } + [Value(0, MetaName = "offset", HelpText = "File offset.")] + public long? Offset { get; set; } +} - [HelpOption] - public string GetUsage() { - return HelpText.AutoBuild(this, - (HelpText current) => HelpText.DefaultParsingErrorsHandler(this, current)); - } +static void Main(string[] args) +{ + CommandLine.Parser.Default.ParseArguments(args) + .WithParsed(RunOptions) + .WithNotParsed(HandleParseError); } +static void RunOptions(Options opts) +{ + //handle options +} +static void HandleParseError(IEnumerable errs) +{ + //handle errors +} + ``` -Consume them: +
+ +Demo to show IEnumerable options and other usage: [Online Demo](https://dotnetfiddle.net/wrcAxr) + +## F# Examples: + +
+ Click to expand! + +```fsharp + +type options = { + [] files : seq; + [] verbose : bool; + [] language : string; + [] offset : int64 option; +} + +let main argv = + let result = CommandLine.Parser.Default.ParseArguments(argv) + match result with + | :? Parsed as parsed -> run parsed.Value + | :? NotParsed as notParsed -> fail notParsed.Errors +``` +
+ +## VB.NET Example: + +
+ Click to expand! + +```vb + +Class Options + + Public Property InputFiles As IEnumerable(Of String) + + ' Omitting long name, defaults to name of property, ie "--verbose" + + Public Property Verbose As Boolean + + + Public Property Language As String + + + Public Property Offset As Long? +End Class + +Sub Main(ByVal args As String()) + CommandLine.Parser.Default.ParseArguments(Of Options)(args) _ + .WithParsed(Function(opts As Options) RunOptionsAndReturnExitCode(opts)) _ + .WithNotParsed(Function(errs As IEnumerable(Of [Error])) 1) +End Sub +``` +
+ +## For verbs: + +1. Create separate option classes for each verb. An options base class is supported. +2. Call ParseArguments with all the verb attribute decorated options classes. +3. Use MapResult to direct program flow to the verb that was parsed. + +### C# example: + + +
+ Click to expand! ```csharp -static void Main(string[] args) { - var options = new Options(); - if (CommandLine.Parser.Default.ParseArguments(args, options)) { - // Values are available here - if (options.Verbose) Console.WriteLine("Filename: {0}", options.InputFile); - } +[Verb("add", HelpText = "Add file contents to the index.")] +class AddOptions { + //normal options here +} +[Verb("commit", HelpText = "Record changes to the repository.")] +class CommitOptions { + //commit options here +} +[Verb("clone", HelpText = "Clone a repository into a new directory.")] +class CloneOptions { + //clone options here +} + +int Main(string[] args) { + return CommandLine.Parser.Default.ParseArguments(args) + .MapResult( + (AddOptions opts) => RunAddAndReturnExitCode(opts), + (CommitOptions opts) => RunCommitAndReturnExitCode(opts), + (CloneOptions opts) => RunCloneAndReturnExitCode(opts), + errs => 1); +} +``` +
+ +### VB.NET example: + + +
+ Click to expand! + +```vb + +Public Class AddOptions + 'Normal options here +End Class + +Public Class CommitOptions + 'Normal options here +End Class + +Public Class CloneOptions + 'Normal options here +End Class + +Function Main(ByVal args As String()) As Integer + Return CommandLine.Parser.Default.ParseArguments(Of AddOptions, CommitOptions, CloneOptions)(args) _ + .MapResult( + (Function(opts As AddOptions) RunAddAndReturnExitCode(opts)), + (Function(opts As CommitOptions) RunCommitAndReturnExitCode(opts)), + (Function(opts As CloneOptions) RunCloneAndReturnExitCode(opts)), + (Function(errs As IEnumerable(Of [Error])) 1) + ) +End Function +``` +
+ +### F# Example: + +
+ Click to expand! + +```fs +open CommandLine + +[] +type AddOptions = { + // normal options here +} +[] +type CommitOptions = { + // normal options here +} +[] +type CloneOptions = { + // normal options here } + +[] +let main args = + let result = Parser.Default.ParseArguments args + match result with + | :? CommandLine.Parsed as command -> + match command.Value with + | :? AddOptions as opts -> RunAddAndReturnExitCode opts + | :? CommitOptions as opts -> RunCommitAndReturnExitCode opts + | :? CloneOptions as opts -> RunCloneAndReturnExitCode opts + | :? CommandLine.NotParsed -> 1 ``` +
+ +# Release History + +See the [changelog](CHANGELOG.md) + +# Contributors +First off, _Thank you!_ All contributions are welcome. + +Please consider sticking with the GNU getopt standard for command line parsing. -Acknowledgements: ---- -Thanks to JetBrains for providing an open source license for [ReSharper](http://www.jetbrains.com/resharper/). +Additionally, for easiest diff compares, please follow the project's tabs settings. Utilizing the EditorConfig extension for Visual Studio/your favorite IDE is recommended. -Main Contributors (alphabetical order): +__And most importantly, please target the ```develop``` branch in your pull requests!__ + +## Main Contributors (alphabetical order): - Alexander Fast (@mizipzor) - Dan Nemec (@nemec) +- Eric Newton (@ericnewton76) - Kevin Moore (@gimmemoore) +- Moh-Hassan (@moh-hassan) - Steven Evans +- Thomas Démoulins (@Thilas) + +## Resources for newcomers: + +- [Wiki](https://github.com/commandlineparser/commandline/wiki) +- [GNU getopt](http://www.gnu.org/software/libc/manual/html_node/Getopt.html) + +# Contacts: -Resources for newcomers: ---- - - [CodePlex](http://commandline.codeplex.com) - - [Quickstart](https://github.com/gsscoder/commandline/wiki/Quickstart) - - [Wiki](https://github.com/gsscoder/commandline/wiki) - - [GNU getopt](http://www.gnu.org/software/libc/manual/html_node/Getopt.html) - -Latest Changes: ---- - - Promoted to stable. - - Implicit name is now available on ``OptionAttribute`` and ``OptionListAttribute``. - - Fixing version numeration error. - -Contacts: ---- -Giacomo Stelluti Scala - - gsscoder AT gmail DOT com +- Giacomo Stelluti Scala + - gsscoder AT gmail DOT com (_use this for everything that is not available via GitHub features_) + - GitHub: [gsscoder](https://github.com/gsscoder) - [Blog](http://gsscoder.blogspot.it) - [Twitter](http://twitter.com/gsscoder) +- Dan Nemec +- Eric Newton + - ericnewton76+commandlineparser AT gmail DOT com + - GitHub: [ericnewton76](https://github.com/ericnewton76) + - Blog: + - Twitter: [enorl76](http://twitter.com/enorl76) +- Moh-Hassan diff --git a/Rakefile.rb b/Rakefile.rb deleted file mode 100644 index 041de690..00000000 --- a/Rakefile.rb +++ /dev/null @@ -1,130 +0,0 @@ -PRODUCT = "Command Line Parser Library" -DESCRIPTION = "The Command Line Parser Library offers to CLR applications a clean and concise API for manipulating command line arguments and related tasks." -VERSION = "1.9.71.2" -INF_VERSION = "1.9.71-stable" -AUTHOR = "Giacomo Stelluti Scala" -COPYRIGHT = "Copyright (c) 2005 - 2013 " + AUTHOR -LICENSE_URL = "https://raw.github.com/gsscoder/commandline/master/doc/LICENSE" -PROJECT_URL = "https://github.com/gsscoder/commandline" - -require 'albacore' - -task :default => [:build, :test] - -if RUBY_VERSION =~ /^1\.8/ - class Dir - class << self - def exists? (path) - File.directory?(path) - end - alias_method :exist?, :exists? - end - end -end - -def is_nix - !RUBY_PLATFORM.match("linux|darwin").nil? -end - -def to_win_path(nix_path) - nix_path.gsub("/", "\\") -end - -def invoke_runtime(cmd) - command = cmd - if is_nix() - command = "mono --runtime=v4.0 #{cmd}" - end - command -end - -CONFIGURATION = "Release" -BUILD_DIR = File.expand_path("build") -OUTPUT_DIR = "#{BUILD_DIR}/out" -SOURCE_DIR = File.expand_path("src") -NUGET_DIR = File.expand_path("nuget") -LIB_DIR = "#{SOURCE_DIR}/libcmdline" -PJ_OUTPUT_DIR ="#{LIB_DIR}/bin/Release" -LIB_ASM = "CommandLine.dll" -LIB_XML = "CommandLine.xml" - -msbuild :build_msbuild do |b| - b.properties :configuration => CONFIGURATION, "OutputPath" => OUTPUT_DIR - b.targets :Build - b.solution = "CommandLine.sln" -end - -task :build_mdtool do - mdtool = "mdtool build -c:#{CONFIGURATION} CommandLine.sln" - sh "#{mdtool}" - FileUtils.mkdir_p "#{OUTPUT_DIR}" - FileUtils.cp_r Dir.glob("#{SOURCE_DIR}/tests/bin/#{CONFIGURATION}/*"), "#{OUTPUT_DIR}" -end - -#task :build35_mdtool do -# mdtool = "mdtool build -c:#{CONFIGURATION} src/libcmdline/CommandLine35.csproj" -# sh "#{mdtool}" -# FileUtils.mkdir_p "#{OUTPUT_DIR}/NET35" -# FileUtils.cp_r Dir.glob("#{SOURCE_DIR}/tests/bin/#{CONFIGURATION}/NET35/*"), "#{OUTPUT_DIR}/NET35" -#end - - msbuild :build35_msbuild do |b| - b.properties :configuration => CONFIGURATION, "OutputPath" => "#{OUTPUT_DIR}/NET35" - b.targets :Build - b.solution = "src/libcmdline/CommandLine35.csproj" -end - -task :build => :clean do |b| - build_task = is_nix() ? "build_mdtool" : "build_msbuild" - Rake::Task[build_task].invoke -end - -task :test => :build do - xunit = invoke_runtime("packages/xunit.runners.1.9.1/tools/xunit.console.clr4.exe") - sh "#{xunit} #{OUTPUT_DIR}/CommandLine.Tests.dll" -end - -assemblyinfo :assemblyinfo do |a| - a.product_name = PRODUCT - #a.description = DESCRIPTION - a.version = a.file_version = VERSION - a.copyright = COPYRIGHT - a.custom_attributes :AssemblyInformationalVersion => INF_VERSION, :NeutralResourcesLanguage => "en-US" - a.output_file = "src/SharedAssemblyInfo.cs" - a.namespaces "System.Resources" -end - -nuspec :nuget_nuspec do |nuspec| - nuspec.id = "CommandLineParser" - nuspec.version = INF_VERSION.end_with?("stable") ? VERSION[0..-3] : INF_VERSION - nuspec.authors = AUTHOR - nuspec.owners = AUTHOR - nuspec.description = DESCRIPTION - nuspec.title = PRODUCT - nuspec.projectUrl = PROJECT_URL - nuspec.licenseUrl = LICENSE_URL - nuspec.requireLicenseAcceptance = "false" - nuspec.copyright = COPYRIGHT - nuspec.tags = "command line argument option parser parsing library syntax shell" - nuspec.iconUrl = "https://github.com/gsscoder/commandline/raw/master/art/CommandLine.png" - - nuspec.file to_win_path("#{PJ_OUTPUT_DIR}/NET35/#{LIB_ASM}"), to_win_path("lib/net35/#{LIB_ASM}") - nuspec.file to_win_path("#{PJ_OUTPUT_DIR}/NET35/#{LIB_XML}"), to_win_path("lib/net35/#{LIB_XML}") - nuspec.file to_win_path("#{PJ_OUTPUT_DIR}/#{LIB_ASM}"), to_win_path("lib/net40/#{LIB_ASM}") - nuspec.file to_win_path("#{PJ_OUTPUT_DIR}/#{LIB_XML}"), to_win_path("lib/net40/#{LIB_XML}") - nuspec.file to_win_path("#{PJ_OUTPUT_DIR}/#{LIB_ASM}"), to_win_path("lib/net45/#{LIB_ASM}") - nuspec.file to_win_path("#{PJ_OUTPUT_DIR}/#{LIB_XML}"), to_win_path("lib/net45/#{LIB_XML}") - nuspec.file to_win_path("#{NUGET_DIR}/readme.txt"), "readme.txt" - - nuspec.output_file = "#{NUGET_DIR}/CommandLine.nuspec" -end - -task :clean do - FileUtils.rm_rf BUILD_DIR - FileUtils.rm_rf "src/libcmdline/bin" - FileUtils.rm_rf "src/libcmdline/obj" - FileUtils.rm_rf "src/tests/bin" - FileUtils.rm_rf "src/tests/obj" - FileUtils.rm_rf "src/demo/bin" - FileUtils.rm_rf "src/demo/obj" -end diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 00000000..d11d6abf --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,52 @@ +#version should be only changed with RELEASE eminent, see RELEASE.md + +version: 2.9.1-ci-{build} + +image: Visual Studio 2019 + +clone_depth: 1 +pull_requests: + do_not_increment_build_number: true + +init: + - ps: | + git config --global core.autocrlf input + + if ($env:APPVEYOR_REPO_TAG -eq "true") { + $ver = $env:APPVEYOR_REPO_TAG_NAME + if($ver.StartsWith("v") -eq $true) { $ver = $ver.Substring(1) } + Update-AppveyorBuild -Version $ver + } + +environment: + matrix: + - BUILD_TARGET: base + - BUILD_TARGET: fsharp + +build_script: +- cmd: dotnet build src/CommandLine/ -c Release --version-suffix %APPVEYOR_BUILD_VERSION% /p:BuildTarget=%BUILD_TARGET% + +test_script: +- cmd: dotnet test tests/CommandLine.Tests/ /p:BuildTarget=%BUILD_TARGET% + +after_test: +- cmd: dotnet pack src/CommandLine/ -c Release --version-suffix %APPVEYOR_BUILD_VERSION% /p:BuildTarget=%BUILD_TARGET% + +artifacts: +- path: 'src/CommandLine/bin/Release/*.nupkg' + name: NuGetPackages +- path: 'src/CommandLine/bin/Release/*.snupkg' + name: symbol + +on_failure: +- cmd: | + tree /f /a >files.lst + appveyor PushArtifact .\files.lst -DeploymentName "Failed Build File Listing" + +deploy: +- provider: NuGet + api_key: + secure: llMIgYMuLHh9thyKMEAmkWraTaA9Zvcm1F8/yRwm0HCiPIt/ehR/GI4kJKyMTPyf + artifact: /.*(\.|\.s)nupkg/ + on: + APPVEYOR_REPO_TAG: true diff --git a/art/CommandLine20.png b/art/CommandLine20.png new file mode 100644 index 00000000..f8b15f22 Binary files /dev/null and b/art/CommandLine20.png differ diff --git a/art/CommandLinePreRelNuGet.png b/art/CommandLinePreRelNuGet.png new file mode 100644 index 00000000..d8f5e6d5 Binary files /dev/null and b/art/CommandLinePreRelNuGet.png differ diff --git a/art/resharper-logo.png b/art/resharper-logo.png new file mode 100644 index 00000000..d135fb97 Binary files /dev/null and b/art/resharper-logo.png differ diff --git a/src/templates/CSharpTemplate/app.config b/demo/ReadText.Demo.VB/App.config similarity index 69% rename from src/templates/CSharpTemplate/app.config rename to demo/ReadText.Demo.VB/App.config index 767efb25..74ade9db 100644 --- a/src/templates/CSharpTemplate/app.config +++ b/demo/ReadText.Demo.VB/App.config @@ -1,6 +1,6 @@ - + - + diff --git a/src/templates/VBNetTemplate/My Project/Application.Designer.vb b/demo/ReadText.Demo.VB/My Project/Application.Designer.vb similarity index 91% rename from src/templates/VBNetTemplate/My Project/Application.Designer.vb rename to demo/ReadText.Demo.VB/My Project/Application.Designer.vb index 33ed7a9e..88dd01c7 100644 --- a/src/templates/VBNetTemplate/My Project/Application.Designer.vb +++ b/demo/ReadText.Demo.VB/My Project/Application.Designer.vb @@ -1,7 +1,7 @@ '------------------------------------------------------------------------------ ' ' This code was generated by a tool. -' Runtime Version:4.0.30319.18034 +' Runtime Version:4.0.30319.42000 ' ' Changes to this file may cause incorrect behavior and will be lost if ' the code is regenerated. diff --git a/src/templates/VBNetTemplate/My Project/Application.myapp b/demo/ReadText.Demo.VB/My Project/Application.myapp similarity index 100% rename from src/templates/VBNetTemplate/My Project/Application.myapp rename to demo/ReadText.Demo.VB/My Project/Application.myapp diff --git a/src/templates/VBNetTemplate/My Project/AssemblyInfo.vb b/demo/ReadText.Demo.VB/My Project/AssemblyInfo.vb similarity index 63% rename from src/templates/VBNetTemplate/My Project/AssemblyInfo.vb rename to demo/ReadText.Demo.VB/My Project/AssemblyInfo.vb index 9b3de0c2..f2e725d4 100644 --- a/src/templates/VBNetTemplate/My Project/AssemblyInfo.vb +++ b/demo/ReadText.Demo.VB/My Project/AssemblyInfo.vb @@ -8,17 +8,17 @@ Imports System.Runtime.InteropServices ' Review the values of the assembly attributes - - - - - - + + + + + + 'The following GUID is for the ID of the typelib if this project is exposed to COM - + ' Version information for an assembly consists of the following four values: ' @@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices ' by using the '*' as shown below: ' - - + + diff --git a/src/templates/VBNetTemplate/My Project/Resources.Designer.vb b/demo/ReadText.Demo.VB/My Project/Resources.Designer.vb similarity index 94% rename from src/templates/VBNetTemplate/My Project/Resources.Designer.vb rename to demo/ReadText.Demo.VB/My Project/Resources.Designer.vb index f12c6f85..8e2454d9 100644 --- a/src/templates/VBNetTemplate/My Project/Resources.Designer.vb +++ b/demo/ReadText.Demo.VB/My Project/Resources.Designer.vb @@ -1,7 +1,7 @@ '------------------------------------------------------------------------------ ' ' This code was generated by a tool. -' Runtime Version:4.0.30319.18034 +' Runtime Version:4.0.30319.42000 ' ' Changes to this file may cause incorrect behavior and will be lost if ' the code is regenerated. @@ -39,7 +39,7 @@ Namespace My.Resources Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager Get If Object.ReferenceEquals(resourceMan, Nothing) Then - Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("VBNetTemplate.Resources", GetType(Resources).Assembly) + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("ReadText.Demo.VB.Resources", GetType(Resources).Assembly) resourceMan = temp End If Return resourceMan diff --git a/src/templates/VBNetTemplate/My Project/Resources.resx b/demo/ReadText.Demo.VB/My Project/Resources.resx similarity index 100% rename from src/templates/VBNetTemplate/My Project/Resources.resx rename to demo/ReadText.Demo.VB/My Project/Resources.resx diff --git a/src/templates/VBNetTemplate/My Project/Settings.Designer.vb b/demo/ReadText.Demo.VB/My Project/Settings.Designer.vb similarity index 92% rename from src/templates/VBNetTemplate/My Project/Settings.Designer.vb rename to demo/ReadText.Demo.VB/My Project/Settings.Designer.vb index 50820d5c..f54db15b 100644 --- a/src/templates/VBNetTemplate/My Project/Settings.Designer.vb +++ b/demo/ReadText.Demo.VB/My Project/Settings.Designer.vb @@ -1,7 +1,7 @@ '------------------------------------------------------------------------------ ' ' This code was generated by a tool. -' Runtime Version:4.0.30319.18034 +' Runtime Version:4.0.30319.42000 ' ' Changes to this file may cause incorrect behavior and will be lost if ' the code is regenerated. @@ -15,7 +15,7 @@ Option Explicit On Namespace My _ Partial Friend NotInheritable Class MySettings Inherits Global.System.Configuration.ApplicationSettingsBase @@ -64,9 +64,9 @@ Namespace My Friend Module MySettingsProperty _ - Friend ReadOnly Property Settings() As Global.VBNetTemplate.My.MySettings + Friend ReadOnly Property Settings() As Global.ReadText.Demo.VB.My.MySettings Get - Return Global.VBNetTemplate.My.MySettings.Default + Return Global.ReadText.Demo.VB.My.MySettings.Default End Get End Property End Module diff --git a/src/templates/VBNetTemplate/My Project/Settings.settings b/demo/ReadText.Demo.VB/My Project/Settings.settings similarity index 100% rename from src/templates/VBNetTemplate/My Project/Settings.settings rename to demo/ReadText.Demo.VB/My Project/Settings.settings diff --git a/demo/ReadText.Demo.VB/My Project/app.manifest b/demo/ReadText.Demo.VB/My Project/app.manifest new file mode 100644 index 00000000..a6b46bb7 --- /dev/null +++ b/demo/ReadText.Demo.VB/My Project/app.manifest @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/demo/ReadText.Demo.VB/Options.vb b/demo/ReadText.Demo.VB/Options.vb new file mode 100644 index 00000000..3e492001 --- /dev/null +++ b/demo/ReadText.Demo.VB/Options.vb @@ -0,0 +1,54 @@ +Imports CommandLine +Imports CommandLine.Text + +Public Interface IOptions + + <[Option]("n"c, "lines", SetName:="bylines", [Default]:=5UI, HelpText:="Lines to be printed from the beginning or end of the file.")> + Property Lines As UInteger? + + <[Option]("c"c, "bytes", SetName:="bybytes", HelpText:="Bytes to be printed from the beginning or end of the file.")> + Property Bytes As UInteger? + + <[Option]("q"c, "quiet", HelpText:="Suppresses summary messages.")> + Property Quiet As Boolean + + <[Value](0, MetaName:="input file", Required:=True, HelpText:="Input file to be processed.")> + Property FileName As String + +End Interface + +<[Verb]("head", HelpText:="Displays first lines of a file.")> +Public Class HeadOptions + Implements IOptions + Public Property Lines As UInteger? Implements IOptions.Lines + + Public Property Bytes As UInteger? Implements IOptions.Bytes + + Public Property Quiet As Boolean Implements IOptions.Quiet + + Public Property FileName As String Implements IOptions.FileName + + + Public Shared ReadOnly Iterator Property IEnumerable() As IEnumerable(Of Example) + Get + Yield New Example("normal scenario", New HeadOptions With {.FileName = "file.bin"}) + Yield New Example("specify bytes", New HeadOptions With {.FileName = "file.bin", .Bytes = 100}) + Yield New Example("suppress summary", UnParserSettings.WithGroupSwitchesOnly(), New HeadOptions With {.FileName = "file.bin", .Quiet = True}) + Yield New Example("read more lines", New UnParserSettings() {UnParserSettings.WithGroupSwitchesOnly(), UnParserSettings.WithUseEqualTokenOnly()}, New HeadOptions With {.FileName = "file.bin", .Lines = 10}) + End Get + End Property + +End Class + +<[Verb]("tail", HelpText:="Displays last lines of a file.")> +Public Class TailOptions + Implements IOptions + Public Property Lines As UInteger? Implements IOptions.Lines + + Public Property Bytes As UInteger? Implements IOptions.Bytes + + Public Property Quiet As Boolean Implements IOptions.Quiet + + Public Property FileName As String Implements IOptions.FileName + +End Class diff --git a/demo/ReadText.Demo.VB/Program.vb b/demo/ReadText.Demo.VB/Program.vb new file mode 100644 index 00000000..4ddec61e --- /dev/null +++ b/demo/ReadText.Demo.VB/Program.vb @@ -0,0 +1,72 @@ +Imports System.IO +Imports System.Text +Imports CommandLine + +Module Program + + Function Main(ByVal sArgs() As String) As Integer + + Dim reader As Func(Of IOptions, String) = Function(opts) + Dim fromTop = opts.[GetType]() = GetType(HeadOptions) + Return If(opts.Lines.HasValue, ReadLines(opts.FileName, fromTop, CInt(opts.Lines)), ReadBytes(opts.FileName, fromTop, CInt(opts.Bytes))) + End Function + + Dim header As Func(Of IOptions, String) = Function(opts) + If opts.Quiet Then Return String.Empty + + Dim fromTop = opts.[GetType]() = GetType(HeadOptions) + Dim builder = New StringBuilder("Reading ") + builder = If(opts.Lines.HasValue, builder.Append(opts.Lines).Append(" lines"), builder.Append(opts.Bytes).Append(" bytes")) + builder = If(fromTop, builder.Append(" from top:"), builder.Append(" from bottom:")) + Return builder.ToString() + + End Function + + Dim printIfNotEmpty As Action(Of String) = Sub(text) + If text.Length = 0 Then Return + Console.WriteLine(text) + End Sub + + Dim result = Parser.Default.ParseArguments(Of HeadOptions, TailOptions)(sArgs) + + Dim texts = result.MapResult( + Function(opts As HeadOptions) Tuple.Create(header(opts), reader(opts)), + Function(opts As TailOptions) Tuple.Create(header(opts), reader(opts)), + Function() MakeError()) + + printIfNotEmpty(texts.Item1) + printIfNotEmpty(texts.Item2) + + Return If(texts.Equals(MakeError()), 1, 0) + + End Function + + Private Function ReadLines(fileName As String, fromTop As Boolean, count As Integer) As String + + Dim lines = File.ReadAllLines(fileName) + If (fromTop) Then + Return String.Join(Environment.NewLine, lines.Take(count)) + End If + + Return String.Join(Environment.NewLine, lines.Reverse().Take(count)) + + End Function + + Private Function ReadBytes(fileName As String, fromTop As Boolean, count As Integer) As String + + Dim bytes = File.ReadAllBytes(fileName) + If (fromTop) Then + Return Encoding.UTF8.GetString(bytes, 0, count) + End If + + Return Encoding.UTF8.GetString(bytes, bytes.Length - count, count) + + End Function + + Private Function MakeError() As Tuple(Of String, String) + + Return Tuple.Create(vbNullChar, vbNullChar) + + End Function + +End Module diff --git a/demo/ReadText.Demo.VB/ReadText.Demo.VB.sln b/demo/ReadText.Demo.VB/ReadText.Demo.VB.sln new file mode 100644 index 00000000..8b156856 --- /dev/null +++ b/demo/ReadText.Demo.VB/ReadText.Demo.VB.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ReadText.Demo.VB", "ReadText.Demo.VB.vbproj", "{298FBAFF-C828-4BF9-8E93-2BE925E9E223}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {298FBAFF-C828-4BF9-8E93-2BE925E9E223}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {298FBAFF-C828-4BF9-8E93-2BE925E9E223}.Debug|Any CPU.Build.0 = Debug|Any CPU + {298FBAFF-C828-4BF9-8E93-2BE925E9E223}.Release|Any CPU.ActiveCfg = Release|Any CPU + {298FBAFF-C828-4BF9-8E93-2BE925E9E223}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/src/templates/VBNetTemplate/VBNetTemplate.vbproj b/demo/ReadText.Demo.VB/ReadText.Demo.VB.vbproj similarity index 72% rename from src/templates/VBNetTemplate/VBNetTemplate.vbproj rename to demo/ReadText.Demo.VB/ReadText.Demo.VB.vbproj index d4596aba..29450891 100644 --- a/src/templates/VBNetTemplate/VBNetTemplate.vbproj +++ b/demo/ReadText.Demo.VB/ReadText.Demo.VB.vbproj @@ -1,23 +1,18 @@  - + + Debug - x86 - - - - - {52D2A833-C7BE-4B64-B85A-FEC2C1A21080} + AnyCPU + {298FBAFF-C828-4BF9-8E93-2BE925E9E223} Exe - Sub Main - VBNetTemplate - VBNetTemplate + ReadText.Demo.VB.Program + ReadText.Demo.VB + ReadText.Demo.VB 512 Console v4.0 - - - false + true publish\ true Disk @@ -30,27 +25,30 @@ true 0 1.0.0.%2a + false false true + - - x86 + + AnyCPU true full true true bin\Debug\ - VBNetTemplate.xml + ReadText.Demo.VB.xml 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + false - - x86 + + AnyCPU pdbonly false true true bin\Release\ - VBNetTemplate.xml + ReadText.Demo.VB.xml 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 @@ -69,16 +67,12 @@ My Project\app.manifest - - ..\..\libcmdline\bin\Release\CommandLine.dll + + packages\CommandLineParser.2.1.1-beta\lib\net40\CommandLine.dll + True - - - - - @@ -89,6 +83,7 @@ + @@ -108,7 +103,6 @@ Settings.settings True - @@ -119,7 +113,6 @@ - MyApplicationCodeGenerator @@ -130,31 +123,20 @@ My Settings.Designer.vb + + - + False - Microsoft .NET Framework 4 Client Profile %28x86 and x64%29 + Microsoft .NET Framework 4.5.2 %28x86 and x64%29 true - - False - .NET Framework 3.5 SP1 Client Profile - false - False .NET Framework 3.5 SP1 false - - False - Windows Installer 3.1 - true - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Čtení + + + řádků + + + bytů + + + od začátku: + + + ok konce: + + + Počet řádek zobrazených od začátku nebo konce souboru. + + + Počet bytů zobrazených od začátku nebo konce souboru. + + + Potlačit sumář. + + + Jméno vstupního souboru. + + + Zobrazit první řádky souboru. + + + normální scénář + + + specifikace počtu byte + + + potlačit sumář + + + přečíst více řádek + + + Zobrazit poslední řádky souboru. + + + CHYBY: + + + Povinné. + + + POUŽITÍ: + + + Zobrazit tuto nápovědu. + + + Zobrazit podrobnou nápovědu pro příkaz. + + + Zobrazit informaci o verzi. + + + Token '{0}' nebyl rozpoznán. + + + Přepínač '{0}' nemá hodnotu. + + + Neznámý přepínač '{0}' + + + Přepínač '{0}' je definován ve špatném formátu. + + + Hodnota nevázaná na přepínač je definována ve špatném formátu. + + + Příkaz '{0}' nebyl rozpoznán. + + + Chybí povinný přepínač '{0}'. + + + Chybí požadovaný přepínač, který není vázán na název možnosti. + + + Přepínače: {0} nejsou kompatibilní s {1}. + + + Nebyl vybrán příkaz. + + + Přepínač '{0}' je definován vícenásobně. + + + Přepínač sekvence '{0}' je definován méně nebo vícekrát než je povoleno. + + + Hodnota přepínače je definována méněkrát než je povoleno. + + + Chyba při nastavení hodnoty přepínače '{0}': {1} + + \ No newline at end of file diff --git a/demo/ReadText.LocalizedDemo/Properties/Resources.resx b/demo/ReadText.LocalizedDemo/Properties/Resources.resx new file mode 100644 index 00000000..b002fc43 --- /dev/null +++ b/demo/ReadText.LocalizedDemo/Properties/Resources.resx @@ -0,0 +1,225 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Reading + + + lines + + + bytes + + + from top: + + + from bottom: + + + Lines to be printed from the beginning or end of the file. + + + Bytes to be printed from the beginning or end of the file. + + + Suppresses summary messages. + + + Input file to be processed. + + + Displays first lines of a file. + + + normal scenario + + + specify bytes + + + suppress summary + + + read more lines + + + Displays last lines of a file. + + + Možnost '{0}' je definována ve špatném formátu. + + + A value not bound to option name is defined with a bad format. + + + Token '{0}' is not recognized. + + + Verb '{0}' is not recognized. + + + ERROR(S): + + + Display this help screen. + + + Display more information on a specific command. + + + Required option '{0}' is missing. + + + A required value not bound to option name is missing. + + + Option '{0}' has no value. + + + Options: {0} are not compatible with {1}. + + + No verb selected. + + + Option '{0}' is defined multiple times. + + + Required. + + + A sequence option '{0}' is defined with fewer or more items than required. + + + A sequence value not bound to option name is defined with fewer items than required. + + + Error setting value to option '{0}': {1} + + + Option '{0}' is unknown. + + + USAGE: + + + Display version information. + + \ No newline at end of file diff --git a/demo/ReadText.LocalizedDemo/Properties/launchSettings.json b/demo/ReadText.LocalizedDemo/Properties/launchSettings.json new file mode 100644 index 00000000..a5627a1b --- /dev/null +++ b/demo/ReadText.LocalizedDemo/Properties/launchSettings.json @@ -0,0 +1,8 @@ +{ + "profiles": { + "ReadText.LocalizedDemo": { + "commandName": "Project", + "commandLineArgs": "head" + } + } +} \ No newline at end of file diff --git a/demo/ReadText.LocalizedDemo/ReadText.LocalizedDemo.csproj b/demo/ReadText.LocalizedDemo/ReadText.LocalizedDemo.csproj new file mode 100644 index 00000000..57251e03 --- /dev/null +++ b/demo/ReadText.LocalizedDemo/ReadText.LocalizedDemo.csproj @@ -0,0 +1,23 @@ + + + Exe + net40;net45;net461;netcoreapp2.1;netcoreapp2.0 +false + + + + + + + True + True + Resources.resx + + + + + PublicResXFileCodeGenerator + Resources.Designer.cs + + + \ No newline at end of file diff --git a/demo/ReadText.LocalizedDemo/ReadText.LocalizedDemo.sln b/demo/ReadText.LocalizedDemo/ReadText.LocalizedDemo.sln new file mode 100644 index 00000000..e769b7da --- /dev/null +++ b/demo/ReadText.LocalizedDemo/ReadText.LocalizedDemo.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.28307.106 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ReadText.LocalizedDemo", "ReadText.LocalizedDemo.csproj", "{F9D3B288-1A73-4C91-8ED7-11ED1704B817}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CommandLine", "..\..\src\CommandLine\CommandLine.csproj", "{A03AADAC-F7E5-44A6-8BCC-492B1697CCC9}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F9D3B288-1A73-4C91-8ED7-11ED1704B817}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F9D3B288-1A73-4C91-8ED7-11ED1704B817}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F9D3B288-1A73-4C91-8ED7-11ED1704B817}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F9D3B288-1A73-4C91-8ED7-11ED1704B817}.Release|Any CPU.Build.0 = Release|Any CPU + {A03AADAC-F7E5-44A6-8BCC-492B1697CCC9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A03AADAC-F7E5-44A6-8BCC-492B1697CCC9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A03AADAC-F7E5-44A6-8BCC-492B1697CCC9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A03AADAC-F7E5-44A6-8BCC-492B1697CCC9}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {FF14CDF0-EF51-448B-918C-47CD369568DF} + EndGlobalSection +EndGlobal diff --git a/demo/ReadText.LocalizedDemo/packages.config b/demo/ReadText.LocalizedDemo/packages.config new file mode 100644 index 00000000..d34c1336 --- /dev/null +++ b/demo/ReadText.LocalizedDemo/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/demo/fsharp-demo.fsx b/demo/fsharp-demo.fsx new file mode 100644 index 00000000..8aff84e3 --- /dev/null +++ b/demo/fsharp-demo.fsx @@ -0,0 +1,39 @@ +#r "./../src/CommandLine/bin/Debug/CommandLine.dll" + +open CommandLine +open CommandLine.Text + +type options = { + [] stringValue : string; + [] intSequence : int seq; + [] boolValue : bool; + [] longValue : int64 option; } + with + [] + static member examples + with get() = seq { + yield Example("Supply some values", {stringValue = "hello"; boolValue = true; intSequence = seq {1..3}; longValue = Some 10L }) } + +let formatLong o = + match o with + | Some(v) -> string v + | _ -> "{None}" + +let formatInput (o : options) = + sprintf "--stringvalue: %s\n-i: %A\n-x: %b\nvalue: %s\n" o.stringValue o.intSequence o.boolValue (formatLong o.longValue) + +let inline (|Success|Help|Version|Fail|) (result : ParserResult<'a>) = + match result with + | :? Parsed<'a> as parsed -> Success(parsed.Value) + | :? NotParsed<'a> as notParsed when notParsed.Errors.IsHelp() -> Help + | :? NotParsed<'a> as notParsed when notParsed.Errors.IsVersion() -> Version + | :? NotParsed<'a> as notParsed -> Fail(notParsed.Errors) + | _ -> failwith "invalid parser result" + +let args = fsi.CommandLineArgs.[1..] +let result = Parser.Default.ParseArguments(args) + +match result with + | Success(opts) -> printf "%s" (formatInput opts) + | Fail(errs) -> printf "Invalid: %A, Errors: %u\n" args (Seq.length errs) + | Help | Version -> () diff --git a/doc/NUNIT-LICENSE b/doc/NUNIT-LICENSE deleted file mode 100644 index 66a5ebf2..00000000 --- a/doc/NUNIT-LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -Copyright 2002-2008 Charlie Poole -Copyright 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov -Copyright 2000-2002 Philip A. Craig - -This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment (see the following) in the product documentation is required. - -Portions Copyright 2002-2008 Charlie Poole or Copyright 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov or Copyright 2000-2002 Philip A. Craig - -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source distribution. diff --git a/doc/SHOULD-LICENSE b/doc/SHOULD-LICENSE deleted file mode 100644 index d45a7278..00000000 --- a/doc/SHOULD-LICENSE +++ /dev/null @@ -1,205 +0,0 @@ - - -
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
\ No newline at end of file diff --git a/doc/ChangeLog b/docs/ChangeLog similarity index 86% rename from doc/ChangeLog rename to docs/ChangeLog index 0233506c..9461ff65 100644 --- a/doc/ChangeLog +++ b/docs/ChangeLog @@ -1,15 +1,342 @@ -2013-02-27 Giacomo Stelluti Scala +2015-10-16 Giacomo Stelluti Scala + + * PR #255 fixes Issue #254 by @scadorel Merged. + +2015-09-22 Giacomo Stelluti Scala + + * Issue #241 (reported by @pvmraghunandan) Fixed. + +2015-09-13 Giacomo Stelluti Scala + + * Added properties test project using FsCheck. + +2015-09-07 Giacomo Stelluti Scala + + * Internal refactoring on OptionMapper. + +2015-09-03 Giacomo Stelluti Scala + + * Updated RailwaySharp source reference. + +2015-09-02 Giacomo Stelluti Scala + + * PR #231 (by @kshanafelt) Merged. + +2015-08-29 Giacomo Stelluti Scala + + * Internal refactoring. + +2015-08-27 Giacomo Stelluti Scala + + * PR #227 (by @cfeilen) Merged. + +2015-08-24 Giacomo Stelluti Scala + + * PR #227 (by @Thilas) Merged. + * Reverted back to Tuple<...> instead of TokePartitions type. + +2015-08-20 Giacomo Stelluti Scala + + * All ParserResult.Return renamed to MapResult. + +2015-08-19 Giacomo Stelluti Scala + + * Issue #225 (reported by @rmunn) Fixed. + * Issue #225/b (reported by @rmunn) Fixed. + +2015-08-15 Giacomo Stelluti Scala + + * Centralizing Tokenizer configuration. + +2015-08-14 Giacomo Stelluti Scala + + * Internal refactoring. + +2015-08-13 Giacomo Stelluti Scala + + * Replacing Either with Result. + +2015-08-10 Giacomo Stelluti Scala + + * Internal refactoring. + +2015-08-07 Giacomo Stelluti Scala + + * Renaming tests fakes. + * Issue #220 Implemented. + +2015-08-06 Giacomo Stelluti Scala + + * PR #216 (by @Thilas) Merged. + +2015-08-05 Giacomo Stelluti Scala + + * Issue #218 Fixed (IgnoreUnknownArguments). + +2015-08-03 Giacomo Stelluti Scala + + * Issue #65 (re) Fixed for 2.0.x library. + +2015-08-02 Giacomo Stelluti Scala + + * Changes in usage text handling. + * PR #215 (by @Thilas) Merged. + +2015-08-01 Giacomo Stelluti Scala + + * Fixing XML comments. + +2015-07-31 Giacomo Stelluti Scala + + * Issue #210 (reported by @mac2000) Implemented. + * Test refactorings. + +2015-07-30 Giacomo Stelluti Scala + + * Issue #208 Implemented (extended usage text support). + * Minor HelpText refactorings. + +2015-07-28 Giacomo Stelluti Scala + + * Internal refactorings. + +2015-07-27 Giacomo Stelluti Scala + + * Added FormatCommandLine() overload with settings. + +2015-07-26 Giacomo Stelluti Scala + + * ParserResult internally refactored, minor breaking changes to HelpText. + * Internal refactorings. + +2015-07-25 Giacomo Stelluti Scala + + * Adding unparse support. + * PR #207 Merged. + * Using new Paket-friendly CSharpx and RailwaySharp. + * Added F# option support to FormatCommandLine(). + +2015-07-23 Giacomo Stelluti Scala + + * Test project refactoring. + +2015-07-21 Giacomo Stelluti Scala + + * Internal refactorings (using CSharpx.EnumerableExtensions). + * PR #205 (by @forki) Merged. + * Internal refactorings. + * Refactoring with RailwaySharp.ErrorHandling. + +2015-07-20 Giacomo Stelluti Scala + + * Issue #203 Implemented + * Internal refactorings. + * Issue #204 (reported by @Kimi-Arthur) Fixed. + * TypeConverter refactored with CSharpx.Either. + +2015-07-19 Giacomo Stelluti Scala + + * Managing deps with Paket. + +2015-07-18 Giacomo Stelluti Scala + + * Issue #202 (reported by @StevenLiekens) Fixed. + * Internal refactorings in rule enforcement. + * Added a test for #202, method rewritten and (re)fixed. + * More internal refactorings in rule enforcement. + +2015-07-15 Giacomo Stelluti Scala + + * Reverting back suprflous check. + +2015-07-14 Giacomo Stelluti Scala + + * PR #197 (by @Thilas) Implemented. + +2015-07-13 Giacomo Stelluti Scala + + * Internal refactorings in CopyrighInfo, HeadingInfo. + +2015-07-12 Giacomo Stelluti Scala + + * Internal refactorings in HelpText. + +2015-07-10 Giacomo Stelluti Scala + + * Issue #191 (--version\version added to help screen) Fixed. + * Issue #162 (`ValueAttribute` handled in help screen) Implemented. + +2015-07-09 Giacomo Stelluti Scala + + * Issue #189 Implemented. + * Issue #190 Fixed/Implemented (--help/--version/version for verbs). + * Internal refactorings in InstanceChooser. + * Issue #188 Fixed. + +2015-07-08 Giacomo Stelluti Scala + + * Automatic --version handling. + * Added C# demo. + * Internal refactorings in HelpText. + +2015-07-07 Giacomo Stelluti Scala + + * Added WithParsed() for verbs. + * Added Return() for verbs. + +2015-07-06 Giacomo Stelluti Scala + + * Issue #183 Fixed by @Thilas. + * Issue #183 reported by @Thilas Fixed. + * Default '--help' command refactored. + +2015-07-05 Giacomo Stelluti Scala + + * Added Return(...) to ParserResult. + +2015-07-04 Giacomo Stelluti Scala + + * Issue #180 Implemented. + * Issue #181 Implemented. + +2015-07-03 Giacomo Stelluti Scala + + * Issue #179 Implemented. + +2015-07-02 Giacomo Stelluti Scala + + * PR #123 by @smbecker Merged. + * Fixes. + +2015-06-30 Giacomo Stelluti Scala + + * Internal refactorings. + * Support for immutable types. + * Fixes. + +2015-06-29 Giacomo Stelluti Scala + + * Issue #112 Fixed. + +2015-06-28 Giacomo Stelluti Scala + + * Internal refactorings. + +2015-06-27 Giacomo Stelluti Scala + + * Disallowed Min=Max=0 for sequences, raising exception. + * Issue #177 Fixed. + +2015-06-26 Giacomo Stelluti Scala + + * Added support for FSharpOption. + +2015-06-25 Giacomo Stelluti Scala + + * Issue #155 Fixed (thanks to @guyzeug). + +2015-06-24 Giacomo Stelluti Scala + + * PR #171 merged. + +2015-06-23 Giacomo Stelluti Scala + + * Issue #172 Fixed. + +2015-06-22 Giacomo Stelluti Scala + + * Fixing FAKE build script. + +2015-06-20 Giacomo Stelluti Scala + + * Internal refactorings. + * New tests added. + +2015-06-20 Giacomo Stelluti Scala + + * Removed reduntant internal params null checks. + +2015-06-19 Giacomo Stelluti Scala + + * Better GetHashCode() implementations. + +2015-06-19 Giacomo Stelluti Scala + + * Adding more tests for token partitioners. + * Fix in Sequence.Partition(). + * Sequence.Partition() rewritten. + * Refactoring for Increase Testability. + * Little change to allow .NET 4.5 build. + +2015-06-18 Giacomo Stelluti Scala + + * Important fix on scalar string value adjacent to string sequence (without constraints). + * Refactoring for Increase Testability. + +2015-06-17 Giacomo Stelluti Scala + + * Fixing Issue #164. + +2015-06-16 Giacomo Stelluti Scala + + * Increased test coverage using theories. + +2015-06-15 Giacomo Stelluti Scala + + * Fixing Issue #159. + * Fixing Issue #160. + * Fixing Issue #161. + +2015-06-13 Giacomo Stelluti Scala + + * Chaning Separator from string to char. + * Fixing Issue #157. + +2015-06-12 Giacomo Stelluti Scala + + * Issue #68, option list behaviour. + +2015-06-10 Giacomo Stelluti Scala + + * Pull request #154 merged. + +2015-06-07 Giacomo Stelluti Scala + + * Pull request #144 merged. + +2015-06-06 Giacomo Stelluti Scala + + * Pull request #119 merged. + +2015-06-05 Giacomo Stelluti Scala + + * Pull request #103 merged (solving conflicts). + +2015-06-04 Giacomo Stelluti Scala + + * Pull request #97 merged. + +2015-06-03 Giacomo Stelluti Scala + + * Pull request #87 merged. + * Pull request #95 merged. + +2013-04-26 Giacomo Stelluti Scala + + * Released pre-release of Version 2.0. + +2013-02-27 Giacomo Stelluti Scala * Implicit name is now available on OptionAttribute and OptionListAttribute (added tests). -2013-02-26 Giacomo Stelluti Scala +2013-02-26 Giacomo Stelluti Scala * Reduced mutability of ParserSettings, instance can be used once. * Internal refactoring. - some particular System.String extensions moved to ArgumentParser as made private. -2013-02-25 Giacomo Stelluti Scala +2013-02-25 Giacomo Stelluti Scala * Reverted same StyleCop default (see doc/Contribution). * tools/invariantstrtool.exe replaced by T4 template (project removed from GitHub). @@ -19,17 +346,17 @@ Parser(Action) new CommandLine.Parser ctor. * Second KISS, removed IParser. -2013-02-23 Giacomo Stelluti Scala +2013-02-23 Giacomo Stelluti Scala * When omitting longName default is property name (lower case) as issue #57. * ParserConfigurator made nested type of Parser. * ParserConfigurator::HelpWriter(TextWriter) renamed to ParserConfigurator::UseHelpWriter(...). -2013-02-22 Giacomo Stelluti Scala +2013-02-22 Giacomo Stelluti Scala * Reverting back genericity from IParser. -2013-02-21 Giacomo Stelluti Scala +2013-02-21 Giacomo Stelluti Scala * HelpText, internal refactoring to safely suppress a CodeAnalysis warning. * Namespace Core renamed Infrastructure. @@ -140,14 +467,14 @@ in every part of the project). * Removed conditional compylation symbol #UNIT_TESTS from OptionAttribute.cs. * Removed conditional compylation symbol #UNIT_TESTS from ArgumentParser.cs. - * Removed conditional compylation symbol #UNIT_TESTS from OptionInfo.cs. + * Removed conditional compylation symbol #UNIT_TESTS from OptionInfo.cs. * Used same key to sign both assemblies (main, tests). * Removed DebugTests compilation target (tied to #UNIT_TESTS symbol). * Added xunit.runners to solution. * Removed CommandLine.Dist.sln, xbuild replaced by mdtool. * Rakefile now build and test as whole. - * Version incremented to 1.9.4.205 beta. - + * Version incremented to 1.9.4.205 beta. + 2013-01-28 Giacomo Stelluti Scala * All name of test fixture methods changed to a new convention (e.g.: A_descriptive_assertion) @@ -357,7 +684,7 @@ - tests/AttributesFixture.cs * API change 02 (extension/non breaking): verbs - tests/Mocks/OptionsWithVerbs.cs added - - tests/Mocks/OptionsWithVerbsHelp.cs added + - tests/Mocks/OptionsWithVerbsHelp.cs added - tests/Parser/VerbsFixture.cs added - tests/Text/VerbsHelpTextFixture.cs added - CommandLine.cs @@ -371,14 +698,14 @@ -> VerbOptionAttribute added (inherits from OptionAttribute) -> HelpVerbOptionAttributed added (inherits from BaseOptionAttribute directly) - #Parser# - -> expanded CommandLineParser implementation + -> expanded CommandLineParser implementation - CommandLineText.cs - added a trivial optional parameter to HelpText::AutoBuild for supporting verbs * Comments: added missing comments to MultiLineTextAttribute type. * IArgumentEnumerator doesn't inherit anymore from IDisposable (it was only a legacy of old design). * Internal types moved to namespace CommandLine.Internal. * ParsingError made sealed. - * License year range updated in code license region/comment. + * License year range updated in code license region/comment. * Code formatting - privates (except ctor) moved at the end of types. - braces around allo blocks (also one line code blocks). @@ -387,7 +714,7 @@ - except for object initializers - some blank line removed for favor source inclusion. * Version incremented to 1.9.4.91 Beta. - + 2012-12-22 Giacomo Stelluti Scala * Extended use of Should.Fluent to whole test project. @@ -458,7 +785,7 @@ * Changed projects target to Mono 4.0 Profile. * Added tests ParseTwoUIntConsecutiveArray* to OptionArrayAttributeParsingFixture. - * Fixed the LongOptionParser type problem of parsing two consecutive arrays (issue from m1gu3l github user). + * Fixed the LongOptionParser type problem of parsing two consecutive arrays (issue from m1gu3l github user). 2012-06-18 Giacomo Stelluti Scala @@ -534,7 +861,7 @@ * Text/Tests/HelpTextFixture.cs (HelpTextFixture) Modified. Added tests from HelpText.AddDashesToOption. - + 2012-05-05 Giacomo Stelluti Scala ------------------------------------------------------------------------------------ @@ -562,14 +889,14 @@ Added. Class that records a parsing error. + Core/BadOptionInfo.cs (BadOptionInfo) - Added. This class is used as a light reference for bad options. + Added. This class is used as a light reference for bad options. + Utility/StringUtil.cs (StringUtil) Added. Basic string utility class. + Text/EnglishSentenceBuilder.cs (EnglishSentenceBuilder) Added. Used with StringBuilder for localize text. - + + Text/BaseSentenceBuilder.cs (BaseSentenceBuilder) Added. The base class for localized sentence building. @@ -584,13 +911,13 @@ * Parser/CommandLineParser.cs (CommandLineParser) Modified. Modified for [a]. - + * Core/OptionMap.cs (OptionMap) Modified. Modified for [a]. - + * Text/HelpText.cs (HelpText) Modified. Modified for [a]. - + * Text/TESTS/HelpTextFixture.cs (HelpTextFixture) Modified. Modified for [a]. @@ -664,7 +991,7 @@ * Text/TESTS/HelpTextFixture.cs (HelpTextFixture) Modified. Added test ::InstancingWithParameterlessConstructor - + 2010-03-18 Giacomo Stelluti Scala ----------------------------------------------------------------------------------- @@ -676,12 +1003,12 @@ Modified. Now you can customize options help text using the FormatOptionHelpText event as requested in #REQ0005 ([1] http://commandline.codeplex.com/WorkItem/View.aspx?WorkItemId=10426&ProjectName=commandline by fhaag). - + + FormatOptionHelpTextEventArgs.cs (FormatOptionHelpTextEventArgs) Added. See [1]. - + * HelpTextFixture.cs (HelpTextFixture) - Modified. See [1]. + Modified. See [1]. 2010-03-08 Giacomo Stelluti Scala @@ -689,7 +1016,7 @@ + file added; * file modified; - file deleted; ~ file renamed; > file moved { group start; } group end ----------------------------------------------------------------------------------- - + {* Parser/TESTS/CommandLineParserFixture.cs (CommandLineParserFixture) * Parser/TESTS/MutuallyExclusiveParsingFixture.cs (MutuallyExclusiveParsingFixture) * Parser/TESTS/NullableTypesParsingFixture.cs (NullableTypesParsingFixture) @@ -697,7 +1024,7 @@ All Modified. Refactoring toward code readability and maintainability. Introduced use of CommandLineParserBaseFixture::AssertParserSuccess(bool). Introduced use of CommandLineParserBaseFixture::AssertParserFailure(bool). - + {* Text/HelpText.cs (HelpText) *} Text/TESTS/HelpTextFixture.cs (HelpTextFixture) Patch 'fix_helptext_infinite_loop.patch' officially applied @@ -706,14 +1033,14 @@ * {all}.cs Modified header. Updated the range of years in copyright notice. - + * Core/IArgumentEnumerator.cs (IArgumentEnumerator) Modified. Redefined for mono compatibility. {* Core/StringArrayEnumerator.cs (StringArrayEnumerator) *} Core/OneCharStringEnumerator.cs (OneCharStringEnumerator) All Modified. See IArgumentEnumerator (Core/IArgumentEnumerator.cs). - + 2009-11-28 Giacomo Stelluti Scala --------------------------------------------------------------------------------------- @@ -723,23 +1050,23 @@ ~ file renamed > file moved --------------------------------------------------------------------------------------- - + + Tests/Mocks/SimpleOptionsWithBadOptionArray.cs (SimpleOptionsWithBadOptionArray) Added. Used in OptionArrayAttributeParsingFixture. - + * Core/OptionInfo.cs (OptionInfo) Modified. Modified ::SetValue(IList, object) method to handle exceptions correctly. * Core/ArgumentParser.cs (ArgumentParser) Modified. Added ::EnsureOptionArrayAttributeIsNotBoundToScalar(OptionInfo) method to prevent misuse of syntax defined by attributes. - + * Core/OptionGroupParser.cs (OptionGroupParser) Modified. Introduced use of ArgumentParser::EnsureOptionArrayAttributeIsNotBoundToScalar(...). - + * Core/LongOptionParser.cs (LongOptionParser) Modified. Introduced use of ArgumentParser::EnsureOptionArrayAttributeIsNotBoundToScalar(...). - + * Parser/Tests/OptionArrayAttributeParsingFixture.cs (OptionArrayAttributeParsingFixture) Modified. Added following test methods. ::PassingBadValueToAnIntegerArrayOptionFails() @@ -749,7 +1076,7 @@ ::WillThrowExceptionIfOptionArrayAttributeBoundToStringWithLongName() ::WillThrowExceptionIfOptionArrayAttributeBoundToIntegerWithShortName() ::WillThrowExceptionIfOptionArrayAttributeBoundToIntegerWithLongName() - + 2009-11-24 Giacomo Stelluti Scala --------------------------------------------------------------------------------------- @@ -759,7 +1086,7 @@ ~ file renamed > file moved --------------------------------------------------------------------------------------- - + + Core/TargetWrapper.cs (TargetWrapper) Added. Decouples the instance that will contain parsed values by the code that consumes it. @@ -770,24 +1097,24 @@ * Parser/CommandLineParser.cs (CommandLineParser) Modified. Try to use TargetWrapper instead of working directly with options instance. - + * Core/LongOptionParser.cs (LongOptionParser) Modified. Introduced the use of ArgumentParser::BooleanToParserState(...) and ArgumentParser::EnsureOptionAttributeIsArrayCompatible(...) for a cleaner code and improved maintainability. - + * Core/OptionGroupParser.cs (OptionGroupParser) Modified. Same changes of LongOptionParser. - + ~ Tests/MockUtil.cs (MockUtil) -> Tests/DebugStringUtil.cs (DebugStringUtil) Renamed. A correct name is the first step for refactoring a unit of code. - + * Core/Tests/ArgumentParserFixture.cs (ArgumentParserFixture) Modified. Test code simplified. - + * Attributes/Tests/HelpOptionAttributeFixture.cs (HelpOptionAttributeFixture) Modified. Minor refactoring. - + * Attributes/Tests/ValueListAttributeFixture.cs (ValueListAttributeFixture) Modified. Minor refactoring. @@ -796,49 +1123,49 @@ * IArgumentEnumerator.cs (IArgumentEnumerator) Modified. The interface now inherits from IEnumerator. Added ::MovePrevious() method to be implemented (for now only) by StringArrayEnumerator. - + * OneCharStringEnumerator.cs (OneCharStringEnumerator) Modified. See IArgumentEnumerator[.cs]. - + * StringArrayEnumerator.cs (StringArrayEnumerator) Modified. See IArgumentEnumerator[.cs]. - + * OptionMap.cs (OptionMap) Modified. - + * OptionListAttribute.cs (OptionListAttribute) Modified. AttributeUsage removed, it's inherited from Option[Attribute]. - + * OptionArrayAttribute.cs (OptionArrayAttribute) Added. This new attribute defines an option to store multiple values in an array. - + * OptionInfo.cs (OptionInfo) Modified. ::IsArray property added. ::IsAttributeArrayCompatible property added. ::SetValue(IList, object) method added to handle OptionArray[Attribute]. - + * SimpleOptionsWithArray.cs (SimpleOptionsWithArray) * SimpleOptionsWithArrayAndValueList.cs (SimpleOptionsWithArrayAndValueList) Added. - + * OptionArrayAttributeParsingFixture.cs (OptionArrayAttributeParsingFixture) Added. Unit tests for parsing with OptionArray[Attribute]. - + * ArgumentParser.cs (ArgumentParser) Modified. Added protected method ::GetNextInputValues(IArgumentEnumerator) for handle OptionArray[Attribute]. * ArgumentParserFixture.cs (ArgumentParserFixture) Added. - + * ParserException.cs -> CommandLineParserException.cs (CommandLineParserException) Renamed. CommandLineParserException is a name more consistent with other CommandLineParser* types than ParserException. - + * BaseFixture.cs (BaseFixture) Added. This is another step towards unit tests refactoring. * CommandLineParserBaseFixture.cs (CommandLineParserBaseFixture) - Modified. Now inherits from BaseFixture. + Modified. Now inherits from BaseFixture. 2009-11-16 Giacomo Stelluti Scala @@ -846,16 +1173,16 @@ Renamed. This interface is used to enumerate over a string vector (old StringEnumeratorEx) or a string item of this vector (old CharEnumeratorEx). I think that IArgumentEnumerator is a more meaningful name. - + * OptionGroupParser.cs (OptionGroupParser) Modified. Reference to IStringEnumerator changed to IArgumentEnumerator. Reference to CharEnumeratorEx changed to OneCharStringEnumerator. OptionMap referenced directly (IOptionMap interface currently removed). - + * LongOptionParser.cs (LongOptionParser) Modified. Reference to IStringEnumerator changed to IArgumentEnumerator. OptionMap referenced directly (IOptionMap interface currently removed). - + * StringEnumeratorEx.cs -> StringArrayEnumerator.cs (StringArrayEnumerator) Renamed. This isn't an extended version of CLR StringEnumerator. It's really a custom string array enumerator. So I decided to refactor it, starting from giving it a correct name. @@ -868,18 +1195,18 @@ Modified. Reference to IStringEnumerator changed to IArgumentEnumerator. Reference to StringEnumeratorEx changed to StringArrayEnumerator. OptionMap referenced directly (IOptionMap interface currently removed). - + * EnumeratorsFixture.cs (EnumeratorsFixture) Modified. Reference to IStringEnumerator changed to IArgumentEnumerator. Reference to CharEnumeratorEx changed to OneCharStringEnumerator. Reference to StringEnumeratorEx changed to StringArrayEnumerator. - + * IOptionMap.cs (IOptionMap) Removed. Why keep an internal interface inherited only from one concrete type? - + * OptionMap.cs (OptionMap) Modified. Inheritance from IOptionMap removed. - + * OptionInfo.cs (OptionInfo) Modified. OptionMap referenced directly (IOptionMap interface currently removed). ::IsDefined defined with automatic property syntax. @@ -887,35 +1214,35 @@ * ArgumentParser.cs (ArgumentParser) Modified. Reference to IStringEnumerator changed to IArgumentEnumerator. OptionMap referenced directly (IOptionMap interface currently removed). - + * OptionMapFixture.cs (OptionMapFixture) Modified. OptionMap referenced directly (IOptionMap interface currently removed). - + * BaseOptionAttribute.cs (BaseOptionAttribute) Modified. Where possible, automatic properties used. - + * OptionListAttribute.cs (OptionListAttribute) Modified. ::Separator defined with automatic property syntax. - + * ValueListAttribute.cs (ValueListAttribute) Modified. ::MaximumElements defined with automatic property syntax. - + * CommandLineParserSettings.cs (ValueListAttribute) Modified. Where possible, automatic properties used. - + 2009-11-12 Giacomo Stelluti Scala * Program.cs (SampleApp.Program) Modified. Minor internal refactoring. - + * HelpText.cs Modified. [Steven Evans ->] Added support for automatic text wrap. Updated the type XML comment. Added possibility to add an additional new line after description of an option (::AdditionalNewLineAfterOption). - - * HelpTextFixture.cs + + * HelpTextFixture.cs Modified. [Steven Evans ->] Added test code for new features of HelpText (see above). - + 2009-11-09 Giacomo Stelluti Scala * Mocks folder @@ -924,31 +1251,31 @@ * MockOptionsBase.cs (MockOptionsBase) Moved. This source file was moved and renamed to OptionsBase.cs (OptionsBase). - + * SimpleOptions.cs (SimpleOptions) Created. Refactoring of CommandLineParserFixture.MockOptions. - + * SimpleOptionsWithValueList.cs (SimpleOptions) Created. Refactoring of CommandLineParserFixture.MockOptionsExtended. - + * NumberSetOptions.cs (NumberSetOptions) Created. Refactoring of CommandLineParserFixture.MockNumericOptions. - + * BooleanSetOptions (BooleanSetOptions) Created. Refactoring of CommandLineParserFixture.MockBoolPrevalentOptions. - + * SimpleOptionsWithOptionList (SimpleOptionsWithOptionList) Created. Refactoring of CommandLineParserFixture.MockOptionsWithOptionList. - + * SimpleOptionsWithEnum (SimpleOptionsWithEnum) Created. Refactoring of CommandLineParserFixture.MockOptionsWithEnum. - + * MixedCaseOptions (MixedCaseOptions) Created. Refactoring of CommandLineParserFixture.MockOptionsCaseSensitive. - + * CommandLineParserFixture.Mocks.cs Removed. The partial CommandLineParserFixture in this code file is now empty. - + * CommandLineParserFixture.cs (CommandLineParserFixture) Modified. The type CommandLineParserFixture is no longer partial. @@ -957,13 +1284,13 @@ * SimpleOptionsWithHelpOption.cs (SimpleOptionsWithHelpOption) Created. Refactoring of CommandLineParserSettingsFixture.MockOptions. - + * OptionsWithDefaultSet.cs (OptionsWithDefaultSet) Created. Refactoring of MutuallyExclusiveParsingFixture.MockOptionsWithDefaultSet. - + * OptionsWithMultipleSet.cs (OptionsWithMultipleSet) Created. Refactoring of MutuallyExclusiveParsingFixture.MockColorOptions. - + * OptionsWithMultipleSetAndOneOption.cs (OptionsWithMultipleSetAndOneOption) Created. Refactoring of MutuallyExclusiveParsingFixture.MockExtendedColorOptions. @@ -974,15 +1301,15 @@ Modified. Nested type MockOptionsWithValueList removed and replaced with SimpleOptionsWithValueList. Nested type MockOptionsWithValueListMaxElemDefined removed and replaced with OptionsWithValueListMaximumThree. Nested type MockOptionsWithValueListMaxElemEqZero removed and replaced with OptionsWithValueListMaximumZero. - + * SimpleOptionsWithValueList.cs (SimpleOptionsWithValueList) OptionsWithValueListMaximumThree.cs (OptionsWithValueListMaximumThree) OptionsWithValueListMaximumZero.cs (OptionsWithValueListMaximumZero) Created. Compare above. - + * NAnt Script (../nant/default.build) Modified. Aligned to Visual Studio project. - + * Validator.cs (Validator) Renamed. In a near future I plan to use types with 'validator' semantic to enable validation of parsed values. So I've renamed this type (that validates methods arguments) with a more @@ -1004,18 +1331,18 @@ * AttributesFixture.cs Created. New tests for #DGN0002 (see [1]). - + * StringEnumeratorEx.cs (StringEnumeratorEx) Modified. ::GetRemainingFromNext() now throws a more correct System.NotSupportedException instead of System.NotImplementedException. - + * NullableTypesParsingFixture.cs (NullableTypesParsingFixture) Created. #REQ0003 ([2] http://commandline.codeplex.com/WorkItem/View.aspx?WorkItemId=7649 by jeffwilcox). - + * NullableTypesOptions.cs (NullableTypesOptions) Created. Mock object for NullableTypesParsingFixture. - + * OptionInfo.cs (OptionInfo) Modified. Added ::SetNullableValue(string, object) to handle nullable types; see [2]. ::SetValueScalar(string, object) marked private (not necessary to be public). @@ -1023,78 +1350,78 @@ * ReflectionUtil.cs (ReflectionUtil) Modified. Added method ::IsNullableType(Type); see [2]. - + * CommandLineParserFixture.cs (CommandLineParserFixture.cs) Modified. ::PassingNoValueToAIntegerTypeLongOptionFails corrected in ::PassingNoValueToAnIntegerTypeLongOptionFails. - + * config folder Created. This new subdirectory created inside {project-roo}/doc will host configuration related files. - + * net-3.5_fx-node.nant-conf Moved/Renamed. Moved to {project-roo}/doc/config and renamed as NAnt.exe.config.part. - + * CommandLine.sln Moved. The MS Visual C# 2008 EE solution file is now under {project-root} directory. This satisfy #REQ0004 ([3] http://commandline.codeplex.com/WorkItem/View.aspx?WorkItemId=9080 by x97mdr). - + * msvs2008 folder Removed. - + 2009-11-01 Giacomo Stelluti Scala * {all}.cs Modified. Code formatting lightly adjusted for readability and maintainability. - + * OptionInfo.cs (OptionInfo) [if|else] construct of ::SetValue(string, object) turned into [guard-clause|return]. - + * HelpText.cs (HelpText) [if|else] construct of ::GetLength(*) turned into [guard-clause|return]. - + * IncompatibleTypesException.cs (IncompatibleTypesException) Removed. It's no longer necessary. - + * ParserException.cs (ParserException) Moved. {project-root}/Exceptions/ParserException.cs was moved to {project-root}/Parser. - + * Exceptions folder Removed. - + * NAnt Script (../nant/default.build) Modified. Aligned to Visual Studio project. - + * Tests folder Created. This folder will contain reusable test code. - + * MockUtil.cs MockOptionsBase.cs Moved. Both files moved to {project-root}/Tests folder. - + * CommandLineParserBaseFixture.cs (CommandLineParserBaseFixture) Added. CommandLineParserBaseFixture will be the base class for testing CommandLineParser. - + * ValueListAttributeParsingFixture.cs (ValueListAttributeParsingFixture) Added. Groups tests for CommandLineParser type related to ValueList[Attribute]. These tests were first contained in CommandLineParserFixture. - + * CommandLineParserBaseFixture.cs (CommandLineParserBaseFixture) Modified. See ValueListAttributeParsingFixture[.cs] changes. - + * CommandLineParserFixture.Mocks.cs (types nested in CommandLineParserFixture) Modified. Added MockOptionsExtended type. - + * CommandLineLibrary.shfb - Removed. This file was converted to a newer version of SandCastle (sc 2.4.10520, hpfb 1.8.0.2 beta). - + Removed. This file was converted to a newer version of SandCastle (sc 2.4.10520, hpfb 1.8.0.2 beta). + * CommandLineLibrary.shfbproj Added. This is the new version of CommandLineLibrary.shfb (source for build CHM help file). - + 2009-09-16 Giacomo Stelluti Scala * Parser.cs (Parser) Removed. This type has been marked obsolete many release ago. - + * CommandLineParser.cs (CommandLineParser) Modified. Private method ParseArgumentList renamed to DoParseArguments. XML comments revised. @@ -1102,58 +1429,58 @@ CommandLineParserSettings::HelpWriter. Setting this property to null (or passing null to the overload of ParseArgurguments(...) that accepts helpWriter as argument) means that in case of fail (or help request) you don't want to display any help screen. - + * Parser folder Added. Contains ICommandLineParser.cs, CommandLineParser.cs, CommandLineParserSettings.cs - + * Tests folder Moved. {project-root}/Tests was moved inside of {project-root}/Parser. - + * ICommandLineParser.cs (ICommandLineParser) Modified. XML comments revised. - + * NAnt Script (../nant/default.build) Modified. Changed to reflect MS Visual C# 2008 EE project layout. The function 'path::combine(...)' is now used in a more extensive way. - + * Properties/ThisAssembly.cs Version defined '1.6 stable'. - + * PairT.cs Changed. This type has ben replaced (and adapted) with the version shipped with Common Utility Library (see [1] http://commonapi.codeplex.com/). - + * Util folder Renamed. Extended to 'Utility'. - + * CommandLineParserFixture.cs (CommandLineParserFixture) Modified. Added more tests for #BUG0003 (fixed in a previous release). Added more tests for #REQ0001 (implemented in a previous release). - + * CommandLineParserFixture.Mocks Modified. Added type MockNumericOptions. - + * ArgumentParser.cs (ArgumentParser) Modified. Now single dash '-' is allowed also as non-option value (you can capture it with ValueList[Attribute]). - + * LongOptionParser.cs (LongOptionParser) Modified. Removed commented code. - + * OptionMap.cs (OptionMap) Modified. Removed commented code. - + * SampleApp/ThisAssembly.cs (ThisAssembly) Added. Contains assembly's constants. - + * SampleApp/Program.cs Modified. It has been updated to be more readable. - + * CommandLineParserSettings.cs Modified. Removed default setting of HelpWriter property (internal get accessor). - + * CommandLineParserSettingsFixture.cs Added. Contains CommandLineParserSettings specific's tests. - + * doc folder (../doc) Modified. Added NUNIT-LICENCE, copied and renamed from {install-dir}/NUnit 2.4.8/license.txt. (I forgot to do this form earliest version!) @@ -1168,10 +1495,10 @@ Modified for #DGN0001 (see [3]). The refactoring of ParserSettings type name (to CommandLineParserSettings) has impacted some test(s). - + * LongOptionParser.cs (LongOptionParser) Modified. (#BUG0002) - + * ArgumentParser.cs (ArgumentParser) Modified. Added a guard clause like suggested by Rasqualtwilight in [1]; see IsInputValue(string) method. The method IsInputValue(...) was also modified in order to accept '-' (single dash) as option @@ -1185,7 +1512,7 @@ [3] http://commandline.codeplex.com/Thread/View.aspx?ThreadId=64678). This is done to decouple ParserSettings type from this interface and couple it with the main parser implementation (CommandLineParser). - + * CommandLineParser.cs (CommandLineParser) Modified. (#DGN0001) @@ -1195,24 +1522,24 @@ * HelpTextFixture.cs (HelpTextFixture) Modified. (#REQ0002) - + * CommandLineParserFixture.Mocks.cs (MockOptionsCaseSensitive) Modified. In order to fullfill design choice #DGN0001: moving the ParserSettings type from method to class constructor removes the obligation to have an HelpOption attribute (HelpOptionAttribute.cs) defined. - + * ParserSettings.cs (ParserSettings) Renamed to CommandLineParserSettings.cs: ParserSettings type renamed to CommandLineParserSettings. | \|/ - * CommandLineParserSettings.cs (CommandLineParserSettings) + * CommandLineParserSettings.cs (CommandLineParserSettings) Added standard copyright header. Added MutuallyExclusive boolean property to switch on/off parsing rule for options with - MutuallyExclusiveSet defined. + MutuallyExclusiveSet defined. Added more constructors. Modified for #REQ0003 (see [4]). - + * OptionAttribute.cs (OptionAttribute) Modified. The OptionAttribute is modified in order to add a "mutually exclusive" feature requested by ErikEJ (#REQ0003; see [4] http://commandline.codeplex.com/WorkItem/View.aspx?WorkItemId=7134). @@ -1225,12 +1552,12 @@ Modified. (#REQ0003) Added string property MutuallyExclusiveSet to handle the same property on OptionAttribute (see OptionAttribute.cs). - + * OptionMap.cs (OptionMap) Modified. Altered constructor. Changes made to OptionMap::EnforceRules(...) to handle #REQ0003 (see [4]); this doesn't affect public API, because OptionMap type is internal for library private use. - + * OptionMapFixture.cs (OptionMapFixture) Modified. Some changes made for #REQ0003 (see [4]). @@ -1240,26 +1567,26 @@ Modified. Added test code to implement 'case sensitive on/off switch' following user unruledboy request (#REQ0000) posted in project hosting web site (http://commandline.codeplex.com/Thread/View.aspx?ThreadId=44806). - + * ParserSettings.cs (ParserSettings) Added. This object configures aspects of parser's behavior. (#REQ0000) - + * ICommandLineParser.cs (ICommandLineParser) Modified. Added a ParseArguments(...) overload that accepts an instance of ParserSettings. (#REQ0000) - + * CommandLineParser.cs (CommandLineParser) Modified. Now implements the new method defined in ICommandLineParser. (#REQ0000) - + * ArgumentParser.cs (ArgumentParser) Modified. (#REQ0000) - + * OptionMap.cs (OptionMap) Modified. (#REQ0000) - + * OptionMapFixture.cs (OptionMapFixture) - Modified. Internal type OptionMap has a new public constructor (see OptionMap.cs). - + Modified. Internal type OptionMap has a new public constructor (see OptionMap.cs). + 2009-01-21 Giacomo Stelluti Scala * CommandLineParserFixture.cs (CommandLineParserFixture) @@ -1316,7 +1643,7 @@ Modfied * SampleApp/Program.cs Modified. - + 2008-12-20 Giacomo Stelluti Scala * Applied my latestì coding standard' about tabs to all sources (*.cs): @@ -1350,7 +1677,7 @@ Modified. * CharEnumerator.cs Modified. - + 2008-07-22 Giacomo Stelluti Scala * OptionListAttribute.cs @@ -1397,7 +1724,7 @@ Added. Decouples data previously handled by HelpText type. * Text/HelpText.cs Modified. Data previously handled by this type is now managed by HeadingInfo (HeadingInfo.cs). - + 2008-04-01 Giacomo Stelluti Scala * Documentation Comments added to following Sources: @@ -1414,9 +1741,9 @@ * ValueListAttribute.cs Updated. Two public members 'Type ValueListAttribute.ConcreteType { get; }' and 'IList ValueListAttribute.GetReference(object)'are now marked internal. - + 2007-10-04 Giacomo Stelluti Scala - + * HelpOptionAttributeFixture.cs Updated. Tests added. * ParserFixture.cs @@ -1499,7 +1826,7 @@ Dropped. * ArgumentParser.cs. Added. Replaces IPartialParser and Parser.CreateParser(string). - + 2007-07-10 Giacomo Stelluti Scala * Source files formatted following the Mono Coding Guidelines @@ -1528,7 +1855,7 @@ Refactored using generics. * IPartialParser.cs (old nested type Parser.IParser) Updated. Changed method signature. - + 2007-06-30 Giacomo Stelluti Scala * Project moved from www.gotdotnet.com to www.codeplex.com. @@ -1547,7 +1874,7 @@ 2005-05-31 Giacomo Stelluti Scala * New design. - + 2005-05-05 Giacomo Stelluti Scala * Initial Release. diff --git a/doc/Contributors b/docs/Contributors similarity index 66% rename from doc/Contributors rename to docs/Contributors index 87a87ef9..2fb508bc 100644 --- a/doc/Contributors +++ b/docs/Contributors @@ -1,6 +1,6 @@ Contributions Guidelines for Command Line Parser Library Giacomo Stelluti Scala (gsscoder@gmail.com) -Last Mod.: 2013-02-25 +Last Mod.: 2013-04-26 Tools: - MS FxCop (VSSTUDIO CodeAnalysis) @@ -24,45 +24,17 @@ Code Formatting longlongstuff4 < 0)) -> TOO INDENTATION! Coding Style -- Adhere to .NET Framework Coding Guidelines (http://msdn.microsoft.com/en-us/library/ms229042.aspx); -Exception from standard are like AspNetWebStack Coding Conventions (http://aspnetwebstack.codeplex.com/wikipage?title=CodingConventions); -- Use guard clause instead of nesting in too levels (with else clauses): -// OK -int Method(string arg1, string arg2, string arg3) -{ - if (arg1 == null) - { - return 0; - } - if (arg2 == arg3) - { - return 1; - } - return arg1 + arg2 + arg3; -} -// TOO NESTING! -int Method(string arg1, string arg2, string arg3) -{ - if (arg1 != null) - { - if (arg2 != arg3) - { - return arg1 + arg2 + arg3; - } - else - { - return 1; - } - } - else - { - return 0 - } -} +- Adhere to .NET Framework Coding Guidelines (http://msdn.microsoft.com/en-us/library/ms229042.aspx) for public types. +- Kernel of 2.0+ has been rewritten following Functional Programming principles (http://en.wikipedia.org/wiki/Functional_programming). +- A minor use of side-effects could be allowed if isolated to "out-side" world (e.g.: see Tokenizer type). Unit Tests Personally 99% of times I write the unit tests before the desidered modification (TDD). Anyway please submit changes along with at least one unit test (this is also useful to let me understand what the change impacts). +PR etiquette +A not discussed PULL REQUEST could lead only to extra work for project coordinator; +PR are well accepted, anyway they should be result of new or open discussions. + Breaking Changes Please discuss any important modification or something that breaks the Public API. diff --git a/doc/INFO b/docs/INFO similarity index 86% rename from doc/INFO rename to docs/INFO index 95a94c01..59de017c 100644 --- a/doc/INFO +++ b/docs/INFO @@ -1,8 +1,10 @@ Command Line Parser Library --------------------------------------------------------------------------------------------- +------------------------------------------------------------------------------------------- Project Author/Coordinator: Giacomo Stelluti Scala -Main Contributor(s): Steven Evans, Kevin Moore, Dan Nemec (nemec), Alexander Fast (mizipzor) --------------------------------------------------------------------------------------------- +Main Contributors: Steven Evans, Kevin Moore, Dan Nemec (nemec), Alexander Fast (mizipzor) +Others: Tom Glastonbury (tg73) +------------------------------------------------------------------------------------------- + Git home: https://github.com/gsscoder/commandline @@ -17,19 +19,10 @@ http://catb.org/~esr/writings/taoup/html/ch10s05.html. More info on: [QUICKSTART] http://commandline.codeplex.com/wikipage?title=Quickstart&referringTitle=Documentation [GUIDE] http://commandline.codeplex.com/documentation (*2) -[BLOG] http://gsscoder.blogspot.com/ - -Artifact regeneration: -rake strings -> src/libcmdline/Internal/SR.string.cs -rake assemblyinfo -> src/CommonAssemblyInfo.cs +[BLOG] http://gsscoder.github.com/ Build (requires Ruby): -gem install rake -gem install albacore -rake - -Unit Tests: -rake test +MonoDevelop or Visual Studio Documentation: From version 1.9.0.3 Beta CHM HelpFile was removed from {libroot}/doc. diff --git a/doc/PublicAPI.md b/docs/PublicAPI.md similarity index 100% rename from doc/PublicAPI.md rename to docs/PublicAPI.md diff --git a/docs/content/index.fsx b/docs/content/index.fsx new file mode 100644 index 00000000..c1446345 --- /dev/null +++ b/docs/content/index.fsx @@ -0,0 +1,75 @@ +(*** hide ***) +// This block of code is omitted in the generated HTML documentation. Use +// it to define helpers that you do not want to show in the documentation. +#I "../../build" +#r "CommandLine.dll" + +open System + +(** + +# Command Line Parser Library + +Terse syntax C# command line parser for .NET with F# support. + +
+
+
+
+ CommandLineParser can be installed from NuGet: +
PM> Install-Package CommandLineParser -Pre
+
+
+
+
+ +## Introduction + +The library parses command line arguments to a record decorated with attributes: +*) + +type options = { + [