PageRenderTime 46ms CodeModel.GetById 20ms RepoModel.GetById 1ms app.codeStats 0ms

/src/tests/Parser/VerbsFixture.cs

https://github.com/sflanker/commandline
C# | 173 lines | 110 code | 34 blank | 29 comment | 0 complexity | 3ed8d941ee648031013e17621d116040 MD5 | raw file
Possible License(s): Apache-2.0
  1. #region License
  2. //
  3. // Command Line Library: VerbsFixture.cs
  4. //
  5. // Author:
  6. // Giacomo Stelluti Scala (gsscoder@gmail.com)
  7. //
  8. // Copyright (C) 2005 - 2013 Giacomo Stelluti Scala
  9. //
  10. // Permission is hereby granted, free of charge, to any person obtaining a copy
  11. // of this software and associated documentation files (the "Software"), to deal
  12. // in the Software without restriction, including without limitation the rights
  13. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  14. // copies of the Software, and to permit persons to whom the Software is
  15. // furnished to do so, subject to the following conditions:
  16. //
  17. // The above copyright notice and this permission notice shall be included in
  18. // all copies or substantial portions of the Software.
  19. //
  20. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  21. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  22. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  23. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  24. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  25. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  26. // THE SOFTWARE.
  27. //
  28. #endregion
  29. #region Using Directives
  30. using System;
  31. using System.IO;
  32. using Xunit;
  33. using FluentAssertions;
  34. using CommandLine.Tests.Mocks;
  35. #endregion
  36. namespace CommandLine.Tests
  37. {
  38. public class VerbsFixture : ParserBaseFixture
  39. {
  40. [Fact]
  41. public void Parse_verbs_create_instance()
  42. {
  43. var options = new OptionsWithVerbs();
  44. options.AddVerb.Should().BeNull();
  45. var parser = new Parser();
  46. var result = parser.ParseArguments(new string[] {"add", "-p", "untracked.bin"} , options);
  47. result.Should().BeTrue();
  48. parser.WasVerbOptionInvoked("add").Should().BeTrue();
  49. parser.WasVerbOptionInvoked("commit").Should().BeFalse();
  50. parser.WasVerbOptionInvoked("clone").Should().BeFalse();
  51. // Parser has built instance for us
  52. options.AddVerb.Should().NotBeNull();
  53. options.AddVerb.CreationProof.Should().NotHaveValue();
  54. options.AddVerb.Patch.Should().BeTrue();
  55. options.AddVerb.FileName[0].Should().Be("untracked.bin");
  56. }
  57. [Fact]
  58. public void Parse_verbs_using_instance()
  59. {
  60. var proof = new Random().Next(int.MaxValue);
  61. var options = new OptionsWithVerbs();
  62. options.CommitVerb.Should().NotBeNull();
  63. options.CommitVerb.CreationProof = proof;
  64. var parser = new Parser();
  65. var result = parser.ParseArguments(new string[] { "commit", "--amend" }, options);
  66. result.Should().BeTrue();
  67. parser.WasVerbOptionInvoked("add").Should().BeFalse();
  68. parser.WasVerbOptionInvoked("commit").Should().BeTrue();
  69. parser.WasVerbOptionInvoked("clone").Should().BeFalse();
  70. // Check if the instance is the one provider by us (not by the parser)
  71. options.CommitVerb.CreationProof.Should().Be(proof);
  72. options.CommitVerb.Amend.Should().BeTrue();
  73. }
  74. [Fact]
  75. public void Failed_parsing_prints_help_index()
  76. {
  77. var options = new OptionsWithVerbs();
  78. var testWriter = new StringWriter();
  79. var parser = new Parser();
  80. var result = parser.ParseArguments(new string[] {}, options, testWriter);
  81. result.Should().BeFalse();
  82. parser.WasVerbOptionInvoked("add").Should().BeFalse();
  83. parser.WasVerbOptionInvoked("commit").Should().BeFalse();
  84. parser.WasVerbOptionInvoked("clone").Should().BeFalse();
  85. var helpText = testWriter.ToString();
  86. helpText.Should().Be("verbs help index");
  87. }
  88. [Fact]
  89. public void Failed_verb_parsing_prints_particular_help_screen()
  90. {
  91. var options = new OptionsWithVerbs();
  92. var testWriter = new StringWriter();
  93. var parser = new Parser();
  94. var result = parser.ParseArguments(new string[] {"clone", "--no_hardlinks"}, options, testWriter);
  95. result.Should().BeFalse();
  96. parser.WasVerbOptionInvoked("add").Should().BeFalse();
  97. parser.WasVerbOptionInvoked("commit").Should().BeFalse();
  98. // The following returns true because also if the parser fail 'clone' was invoked.
  99. parser.WasVerbOptionInvoked("clone").Should().BeTrue();
  100. var helpText = testWriter.ToString();
  101. helpText.Should().Be("help for: clone");
  102. }
  103. [Fact]
  104. public void Was_verb_option_invoked_returns_false_with_empty_arguments()
  105. {
  106. var options = new OptionsWithVerbs();
  107. var parser = new Parser();
  108. var result = parser.ParseArguments(new string[] {}, options);
  109. result.Should().BeFalse();
  110. parser.WasVerbOptionInvoked("add").Should().BeFalse();
  111. parser.WasVerbOptionInvoked("commit").Should().BeFalse();
  112. parser.WasVerbOptionInvoked("clone").Should().BeFalse();
  113. }
  114. [Fact]
  115. public void Was_verb_option_invoked_returns_false_with_null_or_empty_verb()
  116. {
  117. var options = new OptionsWithVerbs();
  118. var parser = new Parser();
  119. var result = parser.ParseArguments(new string[] {"commit", "--amend"}, options);
  120. result.Should().BeTrue();
  121. parser.WasVerbOptionInvoked(null).Should().BeFalse();
  122. parser.WasVerbOptionInvoked("").Should().BeFalse();
  123. }
  124. [Fact]
  125. public void Was_verb_option_invoked_returns_false_with_ordinary_options()
  126. {
  127. var options = new OptionsWithVerbs();
  128. var parser = new Parser();
  129. var result = parser.ParseArguments(new string[] {"commit", "--amend"}, options);
  130. result.Should().BeTrue();
  131. parser.WasVerbOptionInvoked("--commit").Should().BeFalse();
  132. parser.WasVerbOptionInvoked("-commit").Should().BeFalse(); // <- pure fantasy
  133. parser.WasVerbOptionInvoked("-c").Should().BeFalse();
  134. parser.WasVerbOptionInvoked("---commit").Should().BeFalse(); // <- pure fantasy
  135. parser.WasVerbOptionInvoked("--amend").Should().BeFalse();
  136. parser.WasVerbOptionInvoked("-a").Should().BeFalse();
  137. }
  138. }
  139. }