comparison API/Objects/Requirement/RaceRequiresNoMoreThanNUnitsRequirementTest.cs @ 216:442bcf7306b9

Re #379: Fix validation of requirements to check for unit * Add tests for max limit on units in army * Re-add code for unit type requirement checking with min/max limits
author IBBoard <dev@ibboard.co.uk>
date Sun, 04 Mar 2012 21:12:44 +0000
parents
children 9bf34e88da89
comparison
equal deleted inserted replaced
215:7e7296c0ae1f 216:442bcf7306b9
1 // This file (RaceRequiresNoMoreThanNUnitsRequirementTest.cs) is a part of the IBBoard.WarFoundry.API.Tests project and is copyright 2011 IBBoard
2 //
3 // The file and the library/program it is in are licensed and distributed, without warranty, under the GNU Affero GPL license, either version 3 of the License or (at your option) any later version. Please see COPYING for more information and the full license.
4 using System;
5 using NUnit.Framework;
6 using IBBoard.WarFoundry.API.Objects.Mock;
7 using NUnit.Framework.SyntaxHelpers;
8
9 namespace IBBoard.WarFoundry.API.Objects.Requirement
10 {
11 [TestFixture()]
12 public class RaceRequiresNoMoreThanNUnitsRequirementTest : AbstractUnitRequirementTest<Race>
13 {
14 private MockRace mockRace;
15 private UnitType unitType1;
16 private UnitType unitType2;
17 private UnitType unitType3;
18
19 [TestFixtureSetUp()]
20 public void SetupRace()
21 {
22 mockRace = new MockRace();
23 unitType1 = new MockUnitType("type1", "Unit Type 1");
24 mockRace.AddUnitType(unitType1);
25 unitType2 = new MockUnitType("type2", "Unit Type 2");
26 mockRace.AddUnitType(unitType2);
27 unitType3 = new MockUnitType("type3", "Unit Type 3");
28 mockRace.AddUnitType(unitType3);
29 }
30
31 [Test()]
32 public void TestAddingUnitTypeWithNoUnitAndOneUnitTypeRequired()
33 {
34 Army army = new Army(mockRace, "Test", 1000);
35 RaceRequiresNoMoreThanNUnitsRequirement req = new RaceRequiresNoMoreThanNUnitsRequirement(mockRace);
36 req.AddUnitTypeRequirement(unitType2);
37 Assert_That__FailsAdding(req, unitType2, army, "Army cannot contain more than: 0 × " + unitType2.Name + " (would have 1).");
38 }
39
40 [Test()]
41 public void TestAddingUnitTypeWithOneUnitAndOneUnitTypeRequired()
42 {
43 Army army = new Army(mockRace, "Test", 1000);
44 AddUnitOfTypeToArmy(unitType2, army);
45 RaceRequiresNoMoreThanNUnitsRequirement req = new RaceRequiresNoMoreThanNUnitsRequirement(mockRace);
46 req.AddUnitTypeRequirement(unitType2);
47 Assert_That__FailsAdding(req, unitType2, army, "Army cannot contain more than: 0 × " + unitType2.Name + " (would have 2).");
48 }
49
50 [Test()]
51 public void TestAddingUnitTypeWithNoUnitsAndTwoUnitTypesRequiredFails()
52 {
53 Army army = new Army(mockRace, "Test", 1000);
54 RaceRequiresNoMoreThanNUnitsRequirement req = new RaceRequiresNoMoreThanNUnitsRequirement(mockRace);
55 req.AddUnitTypeRequirement(unitType2);
56 req.AddUnitTypeRequirement(unitType3);
57 Assert_That__FailsAdding(req, unitType2, army, "Army cannot contain more than: 0 × " + unitType2.Name + " (would have 1).");
58 Assert_That__FailsAdding(req, unitType3, army, "Army cannot contain more than: 0 × " + unitType3.Name + " (would have 1).");
59 }
60
61 [Test()]
62 public void TestAddingUnitTypeWithOneUnitAndTwoUnitTypesRequired()
63 {
64 Army army = new Army(mockRace, "Test", 1000);
65 AddUnitOfTypeToArmy(unitType2, army);
66 RaceRequiresNoMoreThanNUnitsRequirement req = new RaceRequiresNoMoreThanNUnitsRequirement(mockRace);
67 req.AddUnitTypeRequirement(unitType2);
68 req.AddUnitTypeRequirement(unitType3);
69 Assert_That__FailsAdding(req, unitType2, army, "Army cannot contain more than: 0 × " + unitType2.Name + " (would have 2).");
70 }
71
72 [Test()]
73 public void TestAddingUnitTypeWithOtherOneUnitAndTwoUnitTypesRequired()
74 {
75 Army army = new Army(mockRace, "Test", 1000);
76 AddUnitOfTypeToArmy(unitType3, army);
77 RaceRequiresNoMoreThanNUnitsRequirement req = new RaceRequiresNoMoreThanNUnitsRequirement(mockRace);
78 req.AddUnitTypeRequirement(unitType2);
79 req.AddUnitTypeRequirement(unitType3);
80 Assert_That__FailsAdding(req, unitType2, army, "Army cannot contain more than: 0 × " + unitType2.Name + " (would have 1); 0 × " + unitType3.Name + " (would have 1).");
81 }
82
83 [Test()]
84 public void TestAddingOtherUnitTypeWithOneUnitAndTwoUnitTypesRequired()
85 {
86 Army army = new Army(mockRace, "Test", 1000);
87 AddUnitOfTypeToArmy(unitType2, army);
88 RaceRequiresNoMoreThanNUnitsRequirement req = new RaceRequiresNoMoreThanNUnitsRequirement(mockRace);
89 req.AddUnitTypeRequirement(unitType2);
90 req.AddUnitTypeRequirement(unitType3);
91 Assert_That__FailsAdding(req, unitType3, army, "Army cannot contain more than: 0 × " + unitType2.Name + " (would have 1); 0 × " + unitType3.Name + " (would have 1).");
92 }
93
94 [Test()]
95 public void TestAddingOtherUnitTypeWithOtherOneUnitAndTwoUnitTypesRequired()
96 {
97 Army army = new Army(mockRace, "Test", 1000);
98 AddUnitOfTypeToArmy(unitType3, army);
99 RaceRequiresNoMoreThanNUnitsRequirement req = new RaceRequiresNoMoreThanNUnitsRequirement(mockRace);
100 req.AddUnitTypeRequirement(unitType2);
101 req.AddUnitTypeRequirement(unitType3);
102 Assert_That__FailsAdding(req, unitType3, army, "Army cannot contain more than: 0 × " + unitType3.Name + " (would have 2).");
103 }
104
105 [Test()]
106 public void TestAddingUnitTypeWithBothUnitsAndTwoUnitTypesRequired()
107 {
108 Army army = new Army(mockRace, "Test", 1000);
109 AddUnitOfTypeToArmy(unitType2, army);
110 AddUnitOfTypeToArmy(unitType3, army);
111 RaceRequiresNoMoreThanNUnitsRequirement req = new RaceRequiresNoMoreThanNUnitsRequirement(mockRace);
112 req.AddUnitTypeRequirement(unitType2);
113 req.AddUnitTypeRequirement(unitType3);
114 Assert_That__FailsAdding(req, unitType2, army, "Army cannot contain more than: 0 × " + unitType2.Name + " (would have 2); 0 × " + unitType3.Name + " (would have 1).");
115 Assert_That__FailsAdding(req, unitType3, army, "Army cannot contain more than: 0 × " + unitType2.Name + " (would have 1); 0 × " + unitType3.Name + " (would have 2).");
116 }
117
118 [Test()]
119 public void TestAddingUnitTypeWithOneUnitAndTwoOfOneUnitTypeRequired()
120 {
121 Army army = new Army(mockRace, "Test", 1000);
122 AddUnitOfTypeToArmy(unitType2, army);
123 RaceRequiresNoMoreThanNUnitsRequirement req = new RaceRequiresNoMoreThanNUnitsRequirement(mockRace);
124 req.AddUnitTypeRequirement(unitType2, 2);
125 Assert_That__PassesAdding(req, unitType2, army);
126 }
127
128 [Test()]
129 public void TestAddingUnrelatedUnitTypeValidatesAsNotApplicable()
130 {
131 Army army = new Army(mockRace, "Test", 1000);
132 RaceRequiresNoMoreThanNUnitsRequirement req = new RaceRequiresNoMoreThanNUnitsRequirement(mockRace);
133 req.AddUnitTypeRequirement(unitType2, 2);
134 Assert_That__AddingNotApplicable(req, unitType1, army);
135 }
136
137 [Test()]
138 public void TestAddingUnrelatedUnitTypeValidatesAsNotApplicableWhenRequirementsNotMet()
139 {
140 Army army = new Army(mockRace, "Test", 1000);
141 RaceRequiresNoMoreThanNUnitsRequirement req = new RaceRequiresNoMoreThanNUnitsRequirement(mockRace);
142 req.AddUnitTypeRequirement(unitType2, 2);
143 Assert_That__AddingNotApplicable(req, unitType1, army);
144 }
145
146 [Test()]
147 public void TestAddingUnitTypeWithTwoUnitsAndTwoOfOneUnitTypeRequired()
148 {
149 Army army = new Army(mockRace, "Test", 1000);
150 AddUnitOfTypeToArmy(unitType2, army);
151 AddUnitOfTypeToArmy(unitType2, army);
152 RaceRequiresNoMoreThanNUnitsRequirement req = new RaceRequiresNoMoreThanNUnitsRequirement(mockRace);
153 req.AddUnitTypeRequirement(unitType2, 2);
154 Assert_That__FailsAdding(req, unitType2, army, "Army cannot contain more than: 2 × " + unitType2.Name + " (would have 3).");
155 }
156
157 [Test()]
158 public void TestAddingUnitTypeRequirementWithNoNumberDefaultsToHavingZero()
159 {
160 Army army = new Army(mockRace, "Test", 1000);
161 RaceRequiresNoMoreThanNUnitsRequirement req = new RaceRequiresNoMoreThanNUnitsRequirement(mockRace);
162 req.AddUnitTypeRequirement(unitType2);
163 Assert_That__FailsAdding(req, unitType2, army, "Army cannot contain more than: 0 × " + unitType2.Name + " (would have 1).");
164 }
165
166 [Test()]
167 public void TestAddingUnitTypeMakesRequirementFail()
168 {
169 Army army = new Army(mockRace, "Test", 1000);
170 RaceRequiresNoMoreThanNUnitsRequirement req = new RaceRequiresNoMoreThanNUnitsRequirement(mockRace);
171 req.AddUnitTypeRequirement(unitType2, 1);
172 Assert_That__PassesAdding(req, unitType2, army);
173 AddUnitOfTypeToArmy(unitType2, army);
174 Assert_That__FailsAdding(req, unitType2, army, "Army cannot contain more than: 1 × " + unitType2.Name + " (would have 2).");
175 }
176
177 [Test()]
178 public void TestValidatingWithNoUnitsAndOneUnitTypeRequired()
179 {
180 Army army = new Army(mockRace, "Test", 1000);
181 RaceRequiresNoMoreThanNUnitsRequirement req = new RaceRequiresNoMoreThanNUnitsRequirement(mockRace);
182 req.AddUnitTypeRequirement(unitType2);
183 Assert_That__ValidationPasses(req, army);
184 }
185
186 [Test()]
187 public void TestValidatingWithOneUnitAndOneUnitTypeRequired()
188 {
189 Army army = new Army(mockRace, "Test", 1000);
190 AddUnitOfTypeToArmy(unitType2, army);
191 RaceRequiresNoMoreThanNUnitsRequirement req = new RaceRequiresNoMoreThanNUnitsRequirement(mockRace);
192 req.AddUnitTypeRequirement(unitType2);
193 Assert_That__ValidationFails(req, army, "Army cannot contain more than: 0 × " + unitType2.Name + " (have 1).");
194 }
195
196 [Test()]
197 public void TestValidatingWithNoUnitsAndTwoUnitTypesRequired()
198 {
199 Army army = new Army(mockRace, "Test", 1000);
200 RaceRequiresNoMoreThanNUnitsRequirement req = new RaceRequiresNoMoreThanNUnitsRequirement(mockRace);
201 req.AddUnitTypeRequirement(unitType2);
202 req.AddUnitTypeRequirement(unitType3);
203 Assert_That__ValidationPasses(req, army);
204 }
205
206 [Test()]
207 public void TestValidatingWithOneUnitAndTwoUnitTypesRequired()
208 {
209 Army army = new Army(mockRace, "Test", 1000);
210 AddUnitOfTypeToArmy(unitType2, army);
211 RaceRequiresNoMoreThanNUnitsRequirement req = new RaceRequiresNoMoreThanNUnitsRequirement(mockRace);
212 req.AddUnitTypeRequirement(unitType2);
213 req.AddUnitTypeRequirement(unitType3);
214 Assert_That__ValidationFails(req, army, "Army cannot contain more than: 0 × " + unitType2.Name + " (have 1).");
215 }
216
217 [Test()]
218 public void TestValidatingWithOtherOneUnitAndTwoUnitTypesRequired()
219 {
220 Army army = new Army(mockRace, "Test", 1000);
221 AddUnitOfTypeToArmy(unitType3, army);
222 RaceRequiresNoMoreThanNUnitsRequirement req = new RaceRequiresNoMoreThanNUnitsRequirement(mockRace);
223 req.AddUnitTypeRequirement(unitType2);
224 req.AddUnitTypeRequirement(unitType3);
225 AddUnitOfTypeToArmy(unitType1, army);
226 Assert_That__ValidationFails(req, army, "Army cannot contain more than: 0 × " + unitType3.Name + " (have 1).");
227 }
228
229 [Test()]
230 public void TestValidatingWithBothUnitsAndTwoUnitTypesRequired()
231 {
232 Army army = new Army(mockRace, "Test", 1000);
233 AddUnitOfTypeToArmy(unitType2, army);
234 AddUnitOfTypeToArmy(unitType3, army);
235 RaceRequiresNoMoreThanNUnitsRequirement req = new RaceRequiresNoMoreThanNUnitsRequirement(mockRace);
236 req.AddUnitTypeRequirement(unitType2);
237 req.AddUnitTypeRequirement(unitType3);
238 Assert_That__ValidationFails(req, army, "Army cannot contain more than: 0 × " + unitType2.Name + " (have 1); 0 × " + unitType3.Name + " (have 1).");
239 }
240
241 [Test()]
242 public void TestValidatingWithBothUnitsUnderLimitAndTwoUnitTypesRequired()
243 {
244 Army army = new Army(mockRace, "Test", 1000);
245 AddUnitOfTypeToArmy(unitType2, army);
246 AddUnitOfTypeToArmy(unitType3, army);
247 RaceRequiresNoMoreThanNUnitsRequirement req = new RaceRequiresNoMoreThanNUnitsRequirement(mockRace);
248 req.AddUnitTypeRequirement(unitType2, 1);
249 req.AddUnitTypeRequirement(unitType3, 1);
250 Assert_That__ValidationPasses(req, army);
251 }
252
253 [Test()]
254 public void TestValidatingWithOneUnitAndTwoOfOneUnitTypeRequired()
255 {
256 Army army = new Army(mockRace, "Test", 1000);
257 AddUnitOfTypeToArmy(unitType2, army);
258 RaceRequiresNoMoreThanNUnitsRequirement req = new RaceRequiresNoMoreThanNUnitsRequirement(mockRace);
259 req.AddUnitTypeRequirement(unitType2, 2);
260 Assert_That__ValidationPasses(req, army);
261 }
262
263 [Test()]
264 public void TestValidatingWithUnrelatedUnitTypeValidatesAsPass()
265 {
266 Army army = new Army(mockRace, "Test", 1000);
267 AddUnitOfTypeToArmy(unitType3, army);
268 RaceRequiresNoMoreThanNUnitsRequirement req = new RaceRequiresNoMoreThanNUnitsRequirement(mockRace);
269 req.AddUnitTypeRequirement(unitType2, 2);
270 Assert_That__ValidationPasses(req, army);
271 }
272
273 [Test()]
274 public void TestValidatingWithTwoUnitsAndTwoOfOneUnitTypeRequired()
275 {
276 Army army = new Army(mockRace, "Test", 1000);
277 AddUnitOfTypeToArmy(unitType2, army);
278 AddUnitOfTypeToArmy(unitType2, army);
279 RaceRequiresNoMoreThanNUnitsRequirement req = new RaceRequiresNoMoreThanNUnitsRequirement(mockRace);
280 req.AddUnitTypeRequirement(unitType2, 2);
281 Assert_That__ValidationPasses(req, army);
282 }
283
284 [Test()]
285 public void TestValidatingRequirementWithNoNumberDefaultsToHavingZero()
286 {
287 Army army = new Army(mockRace, "Test", 1000);
288 AddUnitOfTypeToArmy(unitType2, army);
289 RaceRequiresNoMoreThanNUnitsRequirement req = new RaceRequiresNoMoreThanNUnitsRequirement(mockRace);
290 req.AddUnitTypeRequirement(unitType2);
291 Assert_That__ValidationFails(req, army, "Army cannot contain more than: 0 × " + unitType2.Name + " (have 1).");
292 }
293
294 [Test()]
295 public void TestAddingUnitTypeMakesRequirementFailValidating()
296 {
297 Army army = new Army(mockRace, "Test", 1000);
298 AddUnitOfTypeToArmy(unitType2, army);
299 RaceRequiresNoMoreThanNUnitsRequirement req = new RaceRequiresNoMoreThanNUnitsRequirement(mockRace);
300 req.AddUnitTypeRequirement(unitType2, 1);
301 Assert_That__ValidationPasses(req, army);
302 AddUnitOfTypeToArmy(unitType2, army);
303 Assert_That__ValidationFails(req, army, "Army cannot contain more than: 1 × " + unitType2.Name + " (have 2).");
304 }
305 }
306 }
307