Mercurial > repos > IBDev-IBBoard.WarFoundry.API.Tests
annotate API/Factories/Xml/WarFoundryXmlRaceFactoryTest.cs @ 43:00abd1c2f7d6
Re #268: Restructure stats for re-use
* Test new stat line behaviour
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Sun, 25 Apr 2010 15:10:30 +0000 |
parents | 82cd08385bfe |
children | 0de5d86bc1cb |
rev | line source |
---|---|
33
03a8ab5e90d6
Re #236: Race loading should fail cleanly if system doesn't exist
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
1 // This file (WarFoundryXmlRaceFactoryTest.cs) is a part of the IBBoard.WarFoundry.API.Tests project and is copyright 2009 IBBoard |
03a8ab5e90d6
Re #236: Race loading should fail cleanly if system doesn't exist
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
2 // |
03a8ab5e90d6
Re #236: Race loading should fail cleanly if system doesn't exist
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
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. |
03a8ab5e90d6
Re #236: Race loading should fail cleanly if system doesn't exist
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
4 |
03a8ab5e90d6
Re #236: Race loading should fail cleanly if system doesn't exist
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
5 using System; |
03a8ab5e90d6
Re #236: Race loading should fail cleanly if system doesn't exist
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
6 using System.Collections.Generic; |
03a8ab5e90d6
Re #236: Race loading should fail cleanly if system doesn't exist
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
7 using System.IO; |
03a8ab5e90d6
Re #236: Race loading should fail cleanly if system doesn't exist
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
8 using System.Xml; |
03a8ab5e90d6
Re #236: Race loading should fail cleanly if system doesn't exist
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
9 using NUnit.Framework; |
03a8ab5e90d6
Re #236: Race loading should fail cleanly if system doesn't exist
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
10 using IBBoard.WarFoundry.API.Objects; |
35
4302e6b2c5c1
Re #228: Crash with missing abilityID
IBBoard <dev@ibboard.co.uk>
parents:
33
diff
changeset
|
11 using IBBoard.WarFoundry.API.Objects.Mock; |
33
03a8ab5e90d6
Re #236: Race loading should fail cleanly if system doesn't exist
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
12 using IBBoard.IO; |
03a8ab5e90d6
Re #236: Race loading should fail cleanly if system doesn't exist
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
13 |
03a8ab5e90d6
Re #236: Race loading should fail cleanly if system doesn't exist
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
14 namespace IBBoard.WarFoundry.API.Factories.Xml |
03a8ab5e90d6
Re #236: Race loading should fail cleanly if system doesn't exist
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
15 { |
03a8ab5e90d6
Re #236: Race loading should fail cleanly if system doesn't exist
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
16 |
03a8ab5e90d6
Re #236: Race loading should fail cleanly if system doesn't exist
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
17 |
03a8ab5e90d6
Re #236: Race loading should fail cleanly if system doesn't exist
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
18 [TestFixture()] |
03a8ab5e90d6
Re #236: Race loading should fail cleanly if system doesn't exist
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
19 public class WarFoundryXmlRaceFactoryTest |
03a8ab5e90d6
Re #236: Race loading should fail cleanly if system doesn't exist
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
20 { |
43
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
21 [TearDown()] |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
22 public void AfterTestCleanup() |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
23 { |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
24 WarFoundryLoader.SetDefault(null); |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
25 } |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
26 |
33
03a8ab5e90d6
Re #236: Race loading should fail cleanly if system doesn't exist
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
27 [Test()] |
35
4302e6b2c5c1
Re #228: Crash with missing abilityID
IBBoard <dev@ibboard.co.uk>
parents:
33
diff
changeset
|
28 [ExpectedException(typeof(InvalidFileException), ExpectedMessage="Ability for Empire General with ID leaderOfMen did not exist in race definition")] |
43
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
29 public void TestCompleteLoadingOnRaceWithMissingAbilityIdErrors() |
33
03a8ab5e90d6
Re #236: Race loading should fail cleanly if system doesn't exist
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
30 { |
43
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
31 GameSystem system = SingleXmlObjectLoader.LoadGameSystemFromXML(WarFoundryXmlFactory.GetFactory(), new FileInfo("testdata/race-with-non-existant-ability.systemx")); |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
32 FixedGameSystemWarFoundryLoader fixedLoader = new FixedGameSystemWarFoundryLoader(system); |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
33 WarFoundryLoader.SetDefault(fixedLoader); |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
34 FileInfo raceFile = new FileInfo("testdata/race-with-non-existant-ability.racex"); |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
35 Race race = SingleXmlObjectLoader.LoadRaceFromXML(WarFoundryXmlFactory.GetFactory(), raceFile); |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
36 Category[] cats = race.Categories; |
33
03a8ab5e90d6
Re #236: Race loading should fail cleanly if system doesn't exist
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
37 } |
03a8ab5e90d6
Re #236: Race loading should fail cleanly if system doesn't exist
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
38 |
03a8ab5e90d6
Re #236: Race loading should fail cleanly if system doesn't exist
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
39 [Test()] |
35
4302e6b2c5c1
Re #228: Crash with missing abilityID
IBBoard <dev@ibboard.co.uk>
parents:
33
diff
changeset
|
40 [ExpectedException(typeof(InvalidFileException), ExpectedMessage="Referenced game system, 'nonexistant-system', did not exist")] |
43
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
41 public void TestCompleteLoadingOnRaceWithMissingGameSystemErrors() |
33
03a8ab5e90d6
Re #236: Race loading should fail cleanly if system doesn't exist
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
42 { |
03a8ab5e90d6
Re #236: Race loading should fail cleanly if system doesn't exist
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
43 ICollection<IWarFoundryObject> objs = WarFoundryXmlFactory.GetFactory().CreateObjectsFromFile(new FileInfo("testdata/race-with-non-existant-game-system.race")); |
03a8ab5e90d6
Re #236: Race loading should fail cleanly if system doesn't exist
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
44 Assert.AreEqual(1, objs.Count); |
03a8ab5e90d6
Re #236: Race loading should fail cleanly if system doesn't exist
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
45 IEnumerator<IWarFoundryObject> enumerator = objs.GetEnumerator(); |
03a8ab5e90d6
Re #236: Race loading should fail cleanly if system doesn't exist
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
46 enumerator.Reset(); |
03a8ab5e90d6
Re #236: Race loading should fail cleanly if system doesn't exist
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
47 enumerator.MoveNext(); |
03a8ab5e90d6
Re #236: Race loading should fail cleanly if system doesn't exist
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
48 Race race = (Race)enumerator.Current; |
03a8ab5e90d6
Re #236: Race loading should fail cleanly if system doesn't exist
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
49 Category[] cats = race.Categories; |
03a8ab5e90d6
Re #236: Race loading should fail cleanly if system doesn't exist
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
50 } |
43
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
51 |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
52 [Test()] |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
53 public void TestSingleUnitArmyLoadsSuccessfully() |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
54 { |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
55 GameSystem system = SingleXmlObjectLoader.LoadGameSystemFromXML(WarFoundryXmlFactory.GetFactory(), new FileInfo("testdata/default.systemx")); |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
56 FixedGameSystemWarFoundryLoader fixedLoader = new FixedGameSystemWarFoundryLoader(system); |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
57 WarFoundryLoader.SetDefault(fixedLoader); |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
58 FileInfo raceFile = new FileInfo("testdata/single-unit-race.racex"); |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
59 Race race = SingleXmlObjectLoader.LoadRaceFromXML(WarFoundryXmlFactory.GetFactory(), raceFile); |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
60 UnitType[] unitTypes = race.GetUnitTypes(race.GetCategory("cat1")); |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
61 Assert.That(unitTypes.Length == 1); |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
62 UnitType unitType = unitTypes[0]; |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
63 Stat[] stats = unitType.UnitStatsArray; |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
64 Assert.That(stats.Length == 9); |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
65 Assert.AreEqual("M", stats[0].ParentSlotName); |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
66 Assert.AreEqual("4", stats[0].SlotValueString); |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
67 Assert.AreEqual("Empire General", unitType.UnitStatsArrayWithName[0].SlotValueString); |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
68 } |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
69 |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
70 [Test()] |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
71 public void TestSingleUnitArmyWithMemberTypeReferenceLoadsSuccessfully() |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
72 { |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
73 GameSystem system = SingleXmlObjectLoader.LoadGameSystemFromXML(WarFoundryXmlFactory.GetFactory(), new FileInfo("testdata/default.systemx")); |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
74 FixedGameSystemWarFoundryLoader fixedLoader = new FixedGameSystemWarFoundryLoader(system); |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
75 WarFoundryLoader.SetDefault(fixedLoader); |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
76 FileInfo raceFile = new FileInfo("testdata/single-unit-type-referencing-race.racex"); |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
77 Race race = SingleXmlObjectLoader.LoadRaceFromXML(WarFoundryXmlFactory.GetFactory(), raceFile); |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
78 UnitType[] unitTypes = race.GetUnitTypes(race.GetCategory("cat1")); |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
79 Assert.That(unitTypes.Length == 1); |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
80 UnitType unitType = unitTypes[0]; |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
81 Stat[] stats = unitType.UnitStatsArray; |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
82 Assert.That(stats.Length == 9); |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
83 Assert.AreEqual("M", stats[0].ParentSlotName); |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
84 Assert.AreEqual("4", stats[0].SlotValueString); |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
85 Assert.AreEqual("General", unitType.UnitStatsArrayWithName[0].SlotValueString); |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
86 } |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
87 |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
88 [Test()] |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
89 public void TestSingleUnitArmyWithNoStatsReturnsUnitWithBlankStats() |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
90 { |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
91 GameSystem system = SingleXmlObjectLoader.LoadGameSystemFromXML(WarFoundryXmlFactory.GetFactory(), new FileInfo("testdata/default.systemx")); |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
92 FixedGameSystemWarFoundryLoader fixedLoader = new FixedGameSystemWarFoundryLoader(system); |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
93 WarFoundryLoader.SetDefault(fixedLoader); |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
94 FileInfo raceFile = new FileInfo("testdata/single-unit-no-stats-race.racex"); |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
95 Race race = SingleXmlObjectLoader.LoadRaceFromXML(WarFoundryXmlFactory.GetFactory(), raceFile); |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
96 UnitType[] unitTypes = race.GetUnitTypes(race.GetCategory("cat1")); |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
97 Assert.That(unitTypes.Length == 1); |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
98 UnitType unitType = unitTypes[0]; |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
99 Stat[] stats = unitType.UnitStatsArray; |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
100 Assert.That(stats.Length == race.GameSystem.StandardSystemStats.SlotCount); |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
101 |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
102 foreach (Stat stat in stats) |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
103 { |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
104 Assert.AreEqual("", stat.SlotValueString); |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
105 } |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
106 |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
107 Assert.AreEqual("Empire General", unitType.UnitStatsArrayWithName[0].SlotValueString); |
00abd1c2f7d6
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
108 } |
33
03a8ab5e90d6
Re #236: Race loading should fail cleanly if system doesn't exist
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
109 } |
03a8ab5e90d6
Re #236: Race loading should fail cleanly if system doesn't exist
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
110 } |