Skip to content

Commit 2ab1a0b

Browse files
committed
- Fixed Issue VerbalExpressions#22
- added test to make sure an ArgumentOutOfRangeException is thrown when the params [] has a length bigger then 3
1 parent 6da7614 commit 2ab1a0b

File tree

2 files changed

+128
-116
lines changed

2 files changed

+128
-116
lines changed

VerbalExpressions/VerbalExpressions.cs

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,8 @@ public VerbalExpressions AnythingBut(string value, bool sanitize = true)
185185
return Add(value, false);
186186
}
187187

188-
public VerbalExpressions Something() {
188+
public VerbalExpressions Something()
189+
{
189190
return Add("(.+)", false);
190191
}
191192

@@ -252,38 +253,39 @@ public VerbalExpressions Range(params object[] arguments)
252253
throw new ArgumentNullException("arguments");
253254
}
254255

255-
if (arguments.Length == 1)
256+
if (arguments.Length == 1 || arguments.Length > 3)
256257
{
257258
throw new ArgumentOutOfRangeException("arguments");
258259
}
259260

260261
string[] sanitizedStrings = arguments.Select(argument =>
262+
{
263+
if (object.ReferenceEquals(argument, null))
261264
{
262-
if (object.ReferenceEquals(argument, null))
263-
{
264-
return string.Empty;
265-
}
266-
267-
string casted = argument.ToString();
268-
if (string.IsNullOrEmpty(casted))
269-
{
270-
return string.Empty;
271-
}
272-
else
273-
{
274-
return Sanitize(casted);
275-
}
276-
})
277-
.Where(sanitizedString => !string.IsNullOrEmpty(sanitizedString))
278-
.OrderBy(s => s)
279-
.ToArray();
265+
return string.Empty;
266+
}
267+
268+
string casted = argument.ToString();
269+
if (string.IsNullOrEmpty(casted))
270+
{
271+
return string.Empty;
272+
}
273+
else
274+
{
275+
return Sanitize(casted);
276+
}
277+
})
278+
.Where(sanitizedString =>
279+
!string.IsNullOrEmpty(sanitizedString))
280+
.OrderBy(s => s)
281+
.ToArray();
280282

281283
if (!sanitizedStrings.Any())
282284
{
283285
return this;
284286
}
285287

286-
bool hasOddNumberOfParams = (sanitizedStrings.Length%2) > 0;
288+
bool hasOddNumberOfParams = (sanitizedStrings.Length % 2) > 0;
287289

288290
StringBuilder sb = new StringBuilder("[");
289291
for (int _from = 0; _from < sanitizedStrings.Length; _from += 2)
@@ -361,8 +363,8 @@ public VerbalExpressions AddModifier(char modifier)
361363
_modifiers |= RegexOptions.Multiline;
362364
break;
363365
case 's':
364-
_modifiers |= RegexOptions.Singleline;
365-
break;
366+
_modifiers |= RegexOptions.Singleline;
367+
break;
366368
}
367369

368370
return this;

VerbalExpressionsUnitTests/RangeTests.cs

Lines changed: 103 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -2,96 +2,106 @@
22
using CSharpVerbalExpressions;
33
using NUnit.Framework;
44

5-
namespace VerbalExpressionsUnitTests
6-
{
7-
[TestFixture]
8-
public class RangeTests
9-
{
10-
[Test]
11-
public void Range_WhenOddNumberOfItemsInArray_ShouldAppendLastElementWithOrClause()
12-
{
13-
//Arrange
14-
var verbEx = VerbalExpressions.DefaultExpression;
15-
string text = "abcd7sdadqascdaswde";
16-
object[] range = new object[3] { 1, 6, 7 };
17-
18-
//Act
19-
verbEx.Range(range);
20-
//Assert
21-
Assert.IsTrue(verbEx.IsMatch(text));
22-
}
23-
24-
[Test]
25-
public void Range_WhenOddNumberOfItemsInArray_ShouldAppendWithPipe()
26-
{
27-
//Arrange
28-
var verbEx = VerbalExpressions.DefaultExpression;
29-
object[] range = new object[3] { 1, 6, 7 };
30-
string expectedExpression = "[1-6]|7";
31-
32-
//Act
33-
verbEx.Range(range);
34-
35-
//Assert
36-
Assert.AreEqual(expectedExpression, verbEx.ToString());
37-
}
38-
39-
[Test]
40-
[ExpectedException(typeof(ArgumentNullException))]
41-
public void Range_WhenNullParameterPassed_ShouldThrowArgumentNullException()
42-
{
43-
//Arrange
44-
var verbEx = VerbalExpressions.DefaultExpression;
45-
object[] value = null;
46-
47-
//Act
48-
//Assert
49-
verbEx.Range(value);
50-
}
51-
52-
[Test]
53-
[ExpectedException(typeof(ArgumentOutOfRangeException))]
54-
public void Range_WhenArrayParameterHasOnlyOneValue_ShouldThrowArgumentOutOfRangeException()
55-
{
56-
//Arrange
57-
var verbEx = VerbalExpressions.DefaultExpression;
58-
object[] value = new object[1] { 0 };
59-
60-
//Act
61-
//Assert
62-
verbEx.Range(value);
63-
}
64-
65-
[Test]
66-
public void Range_WhenArrayParameterHasValuesInReverseOrder_ReturnsCorrectResultForCorrectOrder()
67-
{
68-
//Arrange
69-
var verbEx = VerbalExpressions.DefaultExpression;
70-
object[] inversedOrderArray = new object[2] { 9, 2 };
71-
verbEx.Range(inversedOrderArray);
72-
string lookupString = "testing 8 another test";
73-
74-
//Act
75-
bool isMatch = verbEx.IsMatch(lookupString);
76-
77-
//Assert
78-
Assert.IsTrue(isMatch);
79-
}
80-
81-
[Test]
82-
public void Range_WhenArrayContainsNullParameter_ItIsIgnoredAndRemovedFromList()
83-
{
84-
//Arrange
85-
var verbEx = VerbalExpressions.DefaultExpression;
86-
object[] inversedOrderArray = new object[4] { 1, null, null, 7 };
87-
verbEx.Range(inversedOrderArray);
88-
string lookupString = "testing 5 testing";
89-
90-
//Act
91-
bool isMatch = verbEx.IsMatch(lookupString);
92-
93-
//Assert
94-
Assert.IsTrue(isMatch);
95-
}
96-
}
97-
}
5+
namespace VerbalExpressionsUnitTests
6+
{
7+
[TestFixture]
8+
public class RangeTests
9+
{
10+
[Test]
11+
[ExpectedException(typeof(ArgumentOutOfRangeException))]
12+
public void Range_WhenTooManyItemsInArray_ShouldThrowArgumentOutOfRangeException()
13+
{
14+
var verbEx = VerbalExpressions.DefaultExpression;
15+
object[] range = new object[4] { 1, 6, 7, 12 };
16+
17+
verbEx.Range(range);
18+
}
19+
20+
[Test]
21+
public void Range_WhenOddNumberOfItemsInArray_ShouldAppendLastElementWithOrClause()
22+
{
23+
//Arrange
24+
var verbEx = VerbalExpressions.DefaultExpression;
25+
string text = "abcd7sdadqascdaswde";
26+
object[] range = new object[3] { 1, 6, 7 };
27+
28+
//Act
29+
verbEx.Range(range);
30+
//Assert
31+
Assert.IsTrue(verbEx.IsMatch(text));
32+
}
33+
34+
[Test]
35+
public void Range_WhenOddNumberOfItemsInArray_ShouldAppendWithPipe()
36+
{
37+
//Arrange
38+
var verbEx = VerbalExpressions.DefaultExpression;
39+
object[] range = new object[3] { 1, 6, 7 };
40+
string expectedExpression = "[1-6]|7";
41+
42+
//Act
43+
verbEx.Range(range);
44+
45+
//Assert
46+
Assert.AreEqual(expectedExpression, verbEx.ToString());
47+
}
48+
49+
[Test]
50+
[ExpectedException(typeof(ArgumentNullException))]
51+
public void Range_WhenNullParameterPassed_ShouldThrowArgumentNullException()
52+
{
53+
//Arrange
54+
var verbEx = VerbalExpressions.DefaultExpression;
55+
object[] value = null;
56+
57+
//Act
58+
//Assert
59+
verbEx.Range(value);
60+
}
61+
62+
[Test]
63+
[ExpectedException(typeof(ArgumentOutOfRangeException))]
64+
public void Range_WhenArrayParameterHasOnlyOneValue_ShouldThrowArgumentOutOfRangeException()
65+
{
66+
//Arrange
67+
var verbEx = VerbalExpressions.DefaultExpression;
68+
object[] value = new object[1] { 0 };
69+
70+
//Act
71+
//Assert
72+
verbEx.Range(value);
73+
}
74+
75+
[Test]
76+
public void Range_WhenArrayParameterHasValuesInReverseOrder_ReturnsCorrectResultForCorrectOrder()
77+
{
78+
//Arrange
79+
var verbEx = VerbalExpressions.DefaultExpression;
80+
object[] inversedOrderArray = new object[2] { 9, 2 };
81+
verbEx.Range(inversedOrderArray);
82+
string lookupString = "testing 8 another test";
83+
84+
//Act
85+
bool isMatch = verbEx.IsMatch(lookupString);
86+
87+
//Assert
88+
Assert.IsTrue(isMatch);
89+
}
90+
91+
[Test]
92+
public void Range_WhenArrayContainsNullParameter_ItIsIgnoredAndRemovedFromList()
93+
{
94+
//Arrange
95+
var verbEx = VerbalExpressions.DefaultExpression;
96+
object[] inversedOrderArray = new object[4] { 1, null, null, 7 };
97+
verbEx.Range(inversedOrderArray);
98+
string lookupString = "testing 5 testing";
99+
100+
//Act
101+
bool isMatch = verbEx.IsMatch(lookupString);
102+
103+
//Assert
104+
Assert.IsTrue(isMatch);
105+
}
106+
}
107+
}

0 commit comments

Comments
 (0)