using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Xunit;
using d20_SRD_Spell_Lists.Models;
using System.Xml.Linq;
using System.IO;
using System.Xml.Serialization;
using System.Xml;
namespace d20_SRD_Spell_Lists_Tests {
public class CharacterTests {
private string charFile;
public CharacterTests() {
charFile = "AppData/TestCharacter.xml";
string defaultCharSpells = "ThomasinaClericDummy Character SpellA short description.";
using (StreamWriter outfile = new StreamWriter(charFile)) {
outfile.Write(defaultCharSpells);
}
}
[Fact]
public void loadingValidCharacterShouldResultInOneCharacterSpell() {
Character c;
XmlSerializer ser = new XmlSerializer(typeof(Character));
using (FileStream f = new FileStream(charFile, FileMode.Open)) {
c = (Character)ser.Deserialize(f);
}
Assert.Equal(1, c.Spells.Count);
}
[Fact]
public void loadingValidCharacterShouldLoadAName() {
Character c;
XmlSerializer ser = new XmlSerializer(typeof(Character));
using (FileStream f = new FileStream(charFile, FileMode.Open)) {
c = (Character)ser.Deserialize(f);
}
Assert.Equal("Thomasina", c.Name);
}
[Fact]
public void loadingValidCharacterShouldLoadAClass() {
Character c;
XmlSerializer ser = new XmlSerializer(typeof(Character));
using (FileStream f = new FileStream(charFile, FileMode.Open)) {
c = (Character)ser.Deserialize(f);
}
Assert.Equal("Cleric", c.CharacterClass.ToString());
}
[Fact]
public void useCorrectAttributeModifiers() {
Character c = new Character();
c.SpellCastingAttribute = 8;
Assert.Equal(-1, c.SpellCastingAttributeMod);
c.SpellCastingAttribute = 9;
Assert.Equal(-1, c.SpellCastingAttributeMod);
c.SpellCastingAttribute = 10;
Assert.Equal(0, c.SpellCastingAttributeMod);
c.SpellCastingAttribute = 11;
Assert.Equal(0, c.SpellCastingAttributeMod);
c.SpellCastingAttribute = 22;
Assert.Equal(6, c.SpellCastingAttributeMod);
c.SpellCastingAttribute = 17;
Assert.Equal(3, c.SpellCastingAttributeMod);
}
[Fact]
public void useCorrectBardSpellCastingAttribute() {
Character c = new Character();
c.CharacterClass = Character.SpellCastingClasses.Bard;
Assert.Equal("Charisma", c.SpellCastingAttributeName);
}
[Fact]
public void useCorrectClericSpellCastingAttribute() {
Character c = new Character();
c.CharacterClass = Character.SpellCastingClasses.Cleric;
Assert.Equal("Wisdom", c.SpellCastingAttributeName);
}
[Fact]
public void useCorrectDruidSpellCastingAttribute() {
Character c = new Character();
c.CharacterClass = Character.SpellCastingClasses.Druid;
Assert.Equal("Wisdom", c.SpellCastingAttributeName);
}
[Fact]
public void useCorrectPaladinSpellCastingAttribute() {
Character c = new Character();
c.CharacterClass = Character.SpellCastingClasses.Paladin;
Assert.Equal("Wisdom", c.SpellCastingAttributeName);
}
[Fact]
public void useCorrectRangerSpellCastingAttribute() {
Character c = new Character();
c.CharacterClass = Character.SpellCastingClasses.Ranger;
Assert.Equal("Wisdom", c.SpellCastingAttributeName);
}
[Fact]
public void useCorrectSorcererSpellCastingAttribute() {
Character c = new Character();
c.CharacterClass = Character.SpellCastingClasses.Sorcerer;
Assert.Equal("Charisma", c.SpellCastingAttributeName);
}
[Fact]
public void useCorrectWizardSpellCastingAttribute() {
Character c = new Character();
c.CharacterClass = Character.SpellCastingClasses.Wizard;
Assert.Equal("Intelligence", c.SpellCastingAttributeName);
}
[Fact]
public void useCorrectBonusSpells() {
Character c = new Character();
Assert.Equal(10, c.BonusSpells.Length);
c.SpellCastingAttribute = 17;
c.CharacterClass = Character.SpellCastingClasses.Wizard;
Assert.Equal(0, c.BonusSpells[0]);
Assert.Equal(1, c.BonusSpells[1]);
Assert.Equal(1, c.BonusSpells[3]);
Assert.Equal(0, c.BonusSpells[4]);
c.SpellCastingAttribute = 13;
c.CharacterClass = Character.SpellCastingClasses.Bard;
Assert.Equal(0, c.BonusSpells[0]);
Assert.Equal(1, c.BonusSpells[1]);
Assert.Equal(0, c.BonusSpells[2]);
Assert.Equal(0, c.BonusSpells[4]);
c.SpellCastingAttribute = 22;
c.CharacterClass = Character.SpellCastingClasses.Cleric;
Assert.Equal(0, c.BonusSpells[0]);
Assert.Equal(2, c.BonusSpells[1]);
Assert.Equal(2, c.BonusSpells[2]);
Assert.Equal(1, c.BonusSpells[4]);
Assert.Equal(1, c.BonusSpells[6]);
Assert.Equal(0, c.BonusSpells[7]);
}
[Fact]
public void addingClassSpellsShouldAddClassSpells() {
Character c = new Character();
c.CharacterClass = Character.SpellCastingClasses.Cleric;
c.addAllClassSpells();
Assert.Equal(237, c.Spells.Count);
}
}
}