-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathIfConditionTests.cs
More file actions
150 lines (123 loc) · 4.45 KB
/
IfConditionTests.cs
File metadata and controls
150 lines (123 loc) · 4.45 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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
using ObjectSemantics.NET.Tests.MoqModels;
using System.Collections.Generic;
using Xunit;
namespace ObjectSemantics.NET.Tests
{
public class IfConditionTests
{
[Theory]
[InlineData(40, "Adult")]
[InlineData(18, "Adult")]
[InlineData(0, "Minor")]
[InlineData(-7, "Minor")]
public void Should_Render_If_GreaterOrEqual_Condition_Block(int age, string expected)
{
Person person = new Person
{
Age = age
};
string template = @"{{ #if(Age >= 18) }}Adult{{ #else }}Minor{{ #endif }}";
string result = person.Map(template);
Assert.Equal(expected, result);
}
[Theory]
[InlineData(40, "Adult 40")]
[InlineData(18, "Adult 18")]
[InlineData(0, "Minor 0")]
[InlineData(-7, "Minor -7")]
public void Should_Resolve_Variables_Inside_If_Condition(int age, string expected)
{
Person person = new Person
{
Age = age
};
string template = @"{{ #if( Age > 17 ) }}Adult {{Age}}{{ #else }}Minor {{Age}}{{ #endif }}";
var result = person.Map(template);
Assert.Equal(expected, result);
}
[Theory]
[InlineData(40, "")]
[InlineData(18, "")]
[InlineData(0, "NoDrinkingBeer")]
[InlineData(-7, "NoDrinkingBeer")]
public void Should_Render_If_Block_Without_Else_When_True(int age, string expected)
{
Person person = new Person
{
Age = age
};
string template = @"{{ #if(Age < 18) }}NoDrinkingBeer{{ #endif }}";
string result = person.Map(template);
Assert.Equal(expected, result);
}
[Fact]
public void Should_Evaluate_Enumerable_Count_Inside_If_Block()
{
Person person = new Person
{
MyCars = new List<Car>
{
new Car { Make = "BMW" },
new Car { Make = "Rolls-Royce" }
}
};
string template = @"{{ #if(MyCars == 2) }}Has 2 Cars{{ #endif }}";
string result = person.Map(template);
Assert.Equal("Has 2 Cars", result);
}
[Fact]
public void Should_Evaluate_Empty_Enumerable_As_Zero()
{
Person person = new Person
{
MyCars = null
};
string template = @"{{ #if(MyCars == 0) }}Zero Cars{{ #endif }}";
string result = person.Map(template);
Assert.Equal("Zero Cars", result);
}
[Theory]
[InlineData("John DoeX2", "Yes")]
[InlineData("John Doe", "No")]
[InlineData("Doe", "No")]
[InlineData("John ", "No")]
public void Should_Evaluate_String_Conditions_If_Blocks(string name, string expected)
{
Person person = new Person
{
Name = name
};
string template = @"{{ #if(Name == John DoeX2) }}Yes{{ #else }}No{{ #endif }}";
string result = person.Map(template);
Assert.Equal(expected, result);
}
[Theory]
[InlineData(40, "[Adult]|[CanTakeAlcohol]")]
[InlineData(18, "[Adult]|[CanTakeAlcohol]")]
[InlineData(0, "[Minor]|[NoAlcohol]")]
[InlineData(-7, "[Minor]|[NoAlcohol]")]
public void Should_Render_Multiple_If_Condition_Statements(int age, string expected)
{
Person person = new Person
{
Age = age
};
string template = @"{{ #if(Age >= 18) }}[Adult]{{ #else }}[Minor]{{ #endif }}|{{ #if(Age < 18) }}[NoAlcohol]{{ #else }}[CanTakeAlcohol]{{ #endif }}";
string result = person.Map(template);
Assert.Equal(expected, result);
}
[Theory]
[InlineData(@"{{#if(MyCars==0)}}Zero Cars{{#else}}Hmmm!{{#endif}}")]
[InlineData(@"{{# if (MyCars==0)}}Zero Cars{{ # else }}Hmmm!{{ # endif}}")]
[InlineData(@"{{ #if(MyCars==0) }}Zero Cars{{ #endif }}")]
public void Should_Evaluate_If_Having_Spaces_Before_And_After_Parentheses(string template)
{
Person person = new Person
{
MyCars = null
};
string result = person.Map(template);
Assert.Equal("Zero Cars", result);
}
}
}