-
-
Notifications
You must be signed in to change notification settings - Fork 292
Expand file tree
/
Copy pathGuardAgainstOutOfRangeForEnumerableShort.cs
More file actions
135 lines (120 loc) · 5.87 KB
/
GuardAgainstOutOfRangeForEnumerableShort.cs
File metadata and controls
135 lines (120 loc) · 5.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
using System;
using System.Collections;
using System.Collections.Generic;
using Ardalis.GuardClauses;
using Xunit;
namespace GuardClauses.UnitTests
{
public class GuardAgainstOutOfRangeForEnumerableShort
{
[Theory]
[ClassData(typeof(CorrectClassData))]
public void DoesNothingGivenInRangeValue(IEnumerable<short> input, short rangeFrom, short rangeTo)
{
Guard.Against.OutOfRange(input, nameof(input), rangeFrom, rangeTo);
}
[Theory]
[ClassData(typeof(IncorrectClassData))]
public void ThrowsGivenOutOfRangeValue(IEnumerable<short> input, short rangeFrom, short rangeTo)
{
Assert.Throws<ArgumentOutOfRangeException>(() => Guard.Against.OutOfRange(input, nameof(input), rangeFrom, rangeTo));
}
[Theory]
[ClassData(typeof(IncorrectRangeClassData))]
public void ThrowsGivenInvalidArgumentValue(IEnumerable<short> input, short rangeFrom, short rangeTo)
{
Assert.Throws<ArgumentException>(() => Guard.Against.OutOfRange(input, nameof(input), rangeFrom, rangeTo));
}
[Theory]
[ClassData(typeof(CorrectClassData))]
public void ReturnsExpectedValueGivenInRangeValue(IEnumerable<short> input, short rangeFrom, short rangeTo)
{
var result = Guard.Against.OutOfRange(input, nameof(input), rangeFrom, rangeTo);
Assert.Equal(input, result);
}
[Theory]
[InlineData(null, "rangeFrom should be less or equal than rangeTo (Parameter 'parameterName')")]
[InlineData("Timespan range", "Timespan range (Parameter 'parameterName')")]
public void ErrorMessageMatchesExpectedWhenRangeIsInvalid(string customMessage, string expectedMessage)
{
var input = new short[] { 0, 1, 99 };
short rangeFrom = 2;
short rangeTo = 1;
var exception = Assert.Throws<ArgumentException>(() => Guard.Against.OutOfRange(input, "parameterName", rangeFrom, rangeTo, customMessage));
Assert.NotNull(exception);
Assert.NotNull(exception.Message);
Assert.Equal(expectedMessage, exception.Message);
}
[Theory]
[InlineData(null, null)]
[InlineData(null, "Please provide correct value")]
[InlineData("SomeParameter", null)]
[InlineData("SomeOtherParameter", "Value must be correct")]
public void ExceptionParamNameMatchesExpectedRangeIsInvalid(string expectedParamName, string customMessage)
{
var input = new short[] { 0, 1, 99 };
short rangeFrom = 2;
short rangeTo = 1;
var exception = Assert.Throws<ArgumentException>(() => Guard.Against.OutOfRange(input, expectedParamName, rangeFrom, rangeTo, customMessage));
Assert.NotNull(exception);
Assert.Equal(expectedParamName, exception.ParamName);
}
[Theory]
[InlineData(null, "Input parameterName had out of range item(s) (Parameter 'parameterName')")]
[InlineData("Timespan range", "Timespan range (Parameter 'parameterName')")]
public void ErrorMessageMatchesExpectedWhenInputIsInvalid(string customMessage, string expectedMessage)
{
var input = new short[] { 0, 1, 99 };
short rangeFrom = 0;
short rangeTo = 1;
var exception = Assert.Throws<ArgumentOutOfRangeException>(() => Guard.Against.OutOfRange(input, "parameterName", rangeFrom, rangeTo, customMessage));
Assert.NotNull(exception);
Assert.NotNull(exception.Message);
Assert.Equal(expectedMessage, exception.Message);
}
[Theory]
[InlineData(null, null)]
[InlineData(null, "Please provide correct value")]
[InlineData("SomeParameter", null)]
[InlineData("SomeOtherParameter", "Value must be correct")]
public void ExceptionParamNameMatchesExpectedInputIsInvalid(string expectedParamName, string customMessage)
{
var input = new short[] { 0, 1, 99 };
short rangeFrom = 0;
short rangeTo = 1;
var exception = Assert.Throws<ArgumentOutOfRangeException>(() => Guard.Against.OutOfRange(input, expectedParamName, rangeFrom, rangeTo, customMessage));
Assert.NotNull(exception);
Assert.Equal(expectedParamName, exception.ParamName);
}
public class CorrectClassData : IEnumerable<object[]>
{
public IEnumerator<object[]> GetEnumerator()
{
yield return new object[] { new List<short> { 10, 12, 15 }, 10, 20 };
yield return new object[] { new List<short> { 100, 200, 120, 180 }, 100, 200 };
yield return new object[] { new List<short> { 18, 128, 108 }, 0, 200 };
}
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}
public class IncorrectClassData : IEnumerable<object[]>
{
public IEnumerator<object[]> GetEnumerator()
{
yield return new object[] { new List<short> { 10, 12, 15 }, 10, 12 };
yield return new object[] { new List<short> { 100, 200, 120, 180 }, 100, 150 };
yield return new object[] { new List<short> { 15, 120, 158 }, 10, 110 };
}
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}
public class IncorrectRangeClassData : IEnumerable<object[]>
{
public IEnumerator<object[]> GetEnumerator()
{
yield return new object[] { new List<short> { 10, 12, 15 }, 10, 9 };
yield return new object[] { new List<short> { 100, 200, 120, 180 }, 200, 150 };
yield return new object[] { new List<short> { 52, 86, 250 }, 200, 100 };
}
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}
}
}