BadScript 2
Loading...
Searching...
No Matches
GetoptTokenizerTests.cs
Go to the documentation of this file.
1// Copyright 2005-2015 Giacomo Stelluti Scala & Contributors. All rights reserved. See License.md in the project root for license information.
2
3using System;
4using System.Collections.Generic;
5using System.Linq;
6using Xunit;
7using FluentAssertions;
8using CSharpx;
11
13{
15 {
16 [Fact]
18 {
19 // Fixture setup
20 var expectedTokens = new[] { Token.Name("i"), Token.Value("10"), Token.Name("string-seq"),
21 Token.Value("aaa"), Token.Value("bb"), Token.Value("cccc"), Token.Name("switch") };
22 var specs = new[] { new OptionSpecification(string.Empty, "string-seq",
23 false, string.Empty, Maybe.Nothing<int>(), Maybe.Nothing<int>(), ',', null, string.Empty, string.Empty, new List<string>(), typeof(IEnumerable<string>), TargetType.Sequence, string.Empty)};
24
25 // Exercize system
26 var result =
28 Result.Succeed(
29 Enumerable.Empty<Token>().Concat(new[] { Token.Name("i"), Token.Value("10"),
30 Token.Name("string-seq"), Token.Value("aaa,bb,cccc"), Token.Name("switch") }),
31 Enumerable.Empty<Error>()),
32 optionName => NameLookup.HavingSeparator(optionName, specs, StringComparer.Ordinal));
33 // Verify outcome
34 ((Ok<IEnumerable<Token>, Error>)result).Success.Should().BeEquivalentTo(expectedTokens);
35
36 // Teardown
37 }
38
39 [Fact]
41 {
42 // Fixture setup
43 var expectedTokens = new[] { Token.Name("x"), Token.Name("string-seq"),
44 Token.Value("aaa"), Token.Value("bb"), Token.Value("cccc"), Token.Name("switch") };
45 var specs = new[] { new OptionSpecification(string.Empty, "string-seq",
46 false, string.Empty, Maybe.Nothing<int>(), Maybe.Nothing<int>(), ',', null, string.Empty, string.Empty, new List<string>(), typeof(IEnumerable<string>), TargetType.Sequence, string.Empty)};
47
48 // Exercize system
49 var result =
51 Result.Succeed(
52 Enumerable.Empty<Token>().Concat(new[] { Token.Name("x"),
53 Token.Name("string-seq"), Token.Value("aaa,bb,cccc"), Token.Name("switch") }),
54 Enumerable.Empty<Error>()),
55 optionName => NameLookup.HavingSeparator(optionName, specs, StringComparer.Ordinal));
56
57 // Verify outcome
58 ((Ok<IEnumerable<Token>, Error>)result).Success.Should().BeEquivalentTo(expectedTokens);
59
60 // Teardown
61 }
62
63 [Fact]
65 {
71 var args = new[] { "--connectionString=Server=localhost;Data Source=(LocalDB)\v12.0;Initial Catalog=temp;" };
72
73 var result = GetoptTokenizer.Tokenize(args, name => NameLookupResult.OtherOptionFound);
74
75 var tokens = result.SucceededWith();
76
77 Assert.NotNull(tokens);
78 Assert.Equal(2, tokens.Count());
79 Assert.Equal("connectionString", tokens.First().Text);
80 Assert.Equal("Server=localhost;Data Source=(LocalDB)\v12.0;Initial Catalog=temp;", tokens.Last().Text);
81 }
82
83 [Fact]
85 {
86 var args = new[] { "--option1 = fail", "--option2= succeed" };
87
88 var result = GetoptTokenizer.Tokenize(args, name => NameLookupResult.OtherOptionFound);
89
90 var errors = result.SuccessMessages().ToArray();
91
92 Assert.NotNull(errors);
93 Assert.Single(errors);
94 Assert.Equal(ErrorType.BadFormatTokenError, errors.First().Tag);
95
96 var tokens = result.SucceededWith().ToArray();
97 Assert.NotNull(tokens);
98 Assert.Equal(2, tokens.Count());
99 Assert.Equal(TokenType.Name, tokens.First().Tag);
100 Assert.Equal(TokenType.Value, tokens.Last().Tag);
101 Assert.Equal("option2", tokens.First().Text);
102 Assert.Equal(" succeed", tokens.Last().Text);
103 }
104
105
106 [Theory]
107 [InlineData(new[] { "-a", "-" }, 2,"a","-")]
108 [InlineData(new[] { "--file", "-" }, 2,"file","-")]
109 [InlineData(new[] { "-f-" }, 2,"f", "-")]
110 [InlineData(new[] { "--file=-" }, 2, "file", "-")]
111 [InlineData(new[] { "-a", "--" }, 2, "a", "--")]
112 public void Single_dash_as_a_value(string[] args, int countExcepted,string first,string last)
113 {
114 //Arrange
115 //Act
116 var result = GetoptTokenizer.Tokenize(args, name => NameLookupResult.OtherOptionFound);
117 var tokens = result.SucceededWith().ToList();
118 //Assert
119 tokens.Should().NotBeNull();
120 tokens.Count.Should().Be(countExcepted);
121 tokens.First().Text.Should().Be(first);
122 tokens.Last().Text.Should().Be(last);
123 }
124 }
125
126}
The Maybe type models an optional value. A value of type Maybe a either contains a value of type a (r...
Definition Maybe.cs:33
static Result< IEnumerable< Token >, Error > Tokenize(IEnumerable< string > arguments, Func< string, NameLookupResult > nameLookup)
static Result< IEnumerable< Token >, Error > ExplodeOptionList(Result< IEnumerable< Token >, Error > tokenizerResult, Func< string, Maybe< char > > optionSequenceWithSeparatorLookup)
static Maybe< char > HavingSeparator(string name, IEnumerable< OptionSpecification > specifications, StringComparer comparer)
Definition NameLookup.cs:37
static Token Value(string text)
Definition Token.cs:30
static Token Name(string text)
Definition Token.cs:25
Base type of all errors.
Definition Error.cs:110
void Single_dash_as_a_value(string[] args, int countExcepted, string first, string last)
Represents the result of a successful computation.
Represents the result of a computation.
ErrorType
Discriminator enumeration of CommandLine.Error derivates.
Definition Error.cs:13