示例#1
0
        public void BasicYamlConfiguration()
        {
            var yaml = @"
name: Bite
attack-type: Melee
damage: 
  name: Bite Damage
  dice: 1d4
attack-bonus:
  name: Bite Attack Bonus
  base-value: 0";

            var bite = new Bite(yaml.ParseYaml());

            Assert.Equal("Bite", bite.Name);
            Assert.Equal(AttackTypes.Melee, bite.AttackType);
            Assert.Equal("1d4", bite.Damage.ToString());
            Assert.Equal("Bite +0 (1d4)", bite.DisplayString());

            var bob = CharacterTestTemplates.AverageBob();

            bob.Add(bite);
            Assert.NotNull(bob.FindStat("Bite Attack Bonus"));
            Assert.NotNull(bob.FindStat("Bite Damage"));
        }
示例#2
0
        public PurchaseMeleeWeaponTests()
        {
            var weapons = new List <Weapon> ();
            var wpn1    = new Weapon("Mace", 0f, "1d6",
                                     DamageTypes.Bludgeoning, 20, 2, 0,
                                     WeaponType.OneHanded, WeaponGroup.Hammers,
                                     WeaponTrainingLevel.Simple);

            wpn1.Value = 3000;
            var wpn2 = new Weapon("Bow", 0, "1d6",
                                  DamageTypes.Piercing, 20, 2, 0,
                                  WeaponType.Ranged, WeaponGroup.Bows,
                                  WeaponTrainingLevel.Martial);
            var wpn3 = new Weapon("Never Pick", 0, "1d6",
                                  DamageTypes.Piercing, 20, 2, 0,
                                  WeaponType.Ranged, WeaponGroup.Bows,
                                  WeaponTrainingLevel.Exotic);

            weapons.Add(wpn1);
            weapons.Add(wpn2);
            weapons.Add(wpn3);
            shop    = new WeaponShop(weapons);
            subject = new PurchaseMeleeWeapon(shop);

            var proficiencies = new string[] { "simple" };

            character = CharacterTestTemplates.AverageBob();
            character.Inventory.CoinPurse.SetValue(30000);
            character.Offense.AddWeaponProficiencies(proficiencies);
        }
示例#3
0
        public void CanGetTheCharacterSheet()
        {
            var bob     = CharacterTestTemplates.AverageBob();
            var context = new CharacterContext(bob);

            Assert.Equal(bob, context.GetValue <CharacterSheet>("charactersheet"));
        }
示例#4
0
        public void ConvertsDamageBasedOnCharacterSize()
        {
            var bob = CharacterTestTemplates.AverageBob();

            bob.Size.SetSize(CharacterSize.Small, 4, 120);

            var yaml = @"
name: Bite
attack-type: Melee
damage: 
  name: Bite Damage
  dice: 1d4
attack-bonus:
  name: Bite Attack Bonus
  base-value: 0";
            var bite = new Bite(yaml.ParseYaml());

            bob.Add(bite);

            var modYaml = @"
name: Bite Damage";
            var sizeMod = new ConvertDamageDiceOnSizeModifier(modYaml.ParseYaml());

            bob.Add(sizeMod);

            Assert.Equal("1d3", bite.Damage.ToString());
        }
示例#5
0
        public void HasAttributesLoadedThatSpecifySpecialAbilities()
        {
            var c = CharacterTestTemplates.AverageBob();

            c.Add(dwarf);
            AssertCharacter.ContainsFeature("Darkvision", c);
        }
示例#6
0
        public void AddsToTheLanguageList()
        {
            var bob = CharacterTestTemplates.AverageBob();

            bob.Add(new TongueOfSunAndMoon());
            Assert.Contains("Tongue of Sun and Moon", bob.Languages.Select(x => x.Name));
        }
示例#7
0
        public void SometimesWantToDoForEveryFourInStatAddTwoSomewhereElse()
        {
            var character = CharacterTestTemplates.AverageBob();
            var yaml      = @"---
name: power attack
modifier: base attack bonus
modifier-type: circumstance
every: 4
add: 2";
            var statMod   = new StatisticStatModifier(yaml.ParseYaml());

            character.Add(statMod);
            Assert.Equal(0, statMod.Modifier);
            character.Offense.BaseAttackBonus.SetValue(3);
            Assert.Equal(0, statMod.Modifier);
            character.Offense.BaseAttackBonus.SetValue(4);
            Assert.Equal(2, statMod.Modifier);
            character.Offense.BaseAttackBonus.SetValue(7);
            Assert.Equal(2, statMod.Modifier);
            character.Offense.BaseAttackBonus.SetValue(8);
            Assert.Equal(4, statMod.Modifier);
            character.Offense.BaseAttackBonus.SetValue(11);
            Assert.Equal(4, statMod.Modifier);
            character.Offense.BaseAttackBonus.SetValue(12);
            Assert.Equal(6, statMod.Modifier);
        }
示例#8
0
        public void SelectsTenSkillsForClassSkills()
        {
            //Add twelve skills
            var skills = new Skill[] {
                new Skill("Skill 1", AbilityScoreTypes.Strength, false),
                new Skill("Skill 2", AbilityScoreTypes.Strength, false),
                new Skill("Skill 3", AbilityScoreTypes.Strength, false),
                new Skill("Skill 4", AbilityScoreTypes.Strength, false),
                new Skill("Skill 5", AbilityScoreTypes.Strength, false),
                new Skill("Skill 6", AbilityScoreTypes.Strength, false),
                new Skill("Skill 7", AbilityScoreTypes.Strength, false),
                new Skill("Skill 9", AbilityScoreTypes.Strength, false),
                new Skill("Skill 10", AbilityScoreTypes.Strength, false),
                new Skill("Skill 11", AbilityScoreTypes.Strength, false),
                new Skill("Skill 12", AbilityScoreTypes.Strength, false)
            };
            var character = CharacterTestTemplates.AverageBob();

            character.SkillRanks.FillSkills(skills);

            var subject = new ExpertCustomSteps();

            subject.Execute(character.Components);
            Assert.Equal(character.SkillRanks.GetClassSkills().Count(), 10);
        }
示例#9
0
        public void AuraOfCourageEnablesImmunityToFear()
        {
            var character = CharacterTestTemplates.AverageBob();

            character.Add(new AuraOfCourage());
            AssertCharacter.IsImmuneTo("Fear", character);
        }
示例#10
0
        public void AddingToCharacterGrantsNewClassSkill()
        {
            var character = CharacterTestTemplates.AverageBob().WithSkills(new string[] { "Knowledge Dungeoneering" });

            character.Add(aberrant);
            Assert.True(character.SkillRanks.GetSkill("Knowledge Dungeoneering").ClassSkill);
        }
示例#11
0
        public void MeleeAttackUsesTheBaseAttackBonusForTheCharacterAsABase()
        {
            var bob        = CharacterTestTemplates.AverageBob();
            var calculator = bob.Get <MeleeAttackBonus>();

            bob.Offense.BaseAttackBonus.SetValue(10);
            Assert.Equal(10, calculator.TotalValue);
        }
示例#12
0
        public void SupportsParentNames()
        {
            var bob     = CharacterTestTemplates.AverageBob();
            var context = new CharacterContext(bob);

            Assert.Equal("Bob's Father", context.GetValue <string>("character-father-name"));
            Assert.Equal("Bob's Mother", context.GetValue <string>("character-mother-name"));
        }
示例#13
0
        public void SupportsPronounsForCharacter()
        {
            var bob     = CharacterTestTemplates.AverageBob();
            var context = new CharacterContext(bob);

            Assert.Equal("he", context.GetValue <string>("pronoun"));
            Assert.Equal("his", context.GetValue <string>("possessivepronoun"));
        }
示例#14
0
        public void EnergyResistanceOverTenThousandIsEqualToImmunity()
        {
            var dr        = new EnergyResistance(10000, "fire");
            var character = CharacterTestTemplates.AverageBob();

            character.Defense.AddDamageResistance(dr);
            AssertCharacter.IsImmuneTo("fire", character);
        }
示例#15
0
        public void AssignsBloodlineToCharacter()
        {
            var selector  = new SelectBloodline();
            var character = CharacterTestTemplates.AverageBob().WithSkills();

            selector.ExecuteStep(character);
            Assert.NotNull(character.Get <Bloodline>());
        }
示例#16
0
        public void AbilityIsNotQualifiedIfNotExceedingScore()
        {
            var pre = new AbilityPrerequisite(AbilityScoreTypes.Intelligence, 13);
            var c   = CharacterTestTemplates.AverageBob();

            c.AbilityScores.SetScore(AbilityScoreTypes.Intelligence, 11);
            Assert.False(pre.IsQualified(c.Components));
        }
示例#17
0
        public void LevelsCanModifyStats()
        {
            var level     = new Level(fighter);
            var character = CharacterTestTemplates.AverageBob();

            character.Add(level);
            AssertCharacter.HasWillSave(1, "fear", character);
        }
示例#18
0
        public void AddsDiceStatisticForHealingDice()
        {
            var character = CharacterTestTemplates.AverageBob();
            var lay       = new LayOnHands();

            character.Add(lay);
            Assert.NotNull(character.FindStat("Lay On Hands Dice"));
        }
示例#19
0
        public void CreatesAStatForTrackingUsesPerDay()
        {
            var character = CharacterTestTemplates.AverageBob();
            var lay       = new LayOnHands();

            character.Add(lay);
            Assert.NotNull(character.FindStat(lay.UsesPerDayStatName()));
        }
示例#20
0
        public void AddsWeaponCriticalDamageModifierToOffenseStats()
        {
            var character = CharacterTestTemplates.AverageBob();
            var offStats  = character.Get <OffenseStats>();
            var master    = new WeaponMastery();

            character.Add(master);
            Assert.Contains(master.WeaponCriticalDamageBonus, offStats.WeaponModifiers);
        }
示例#21
0
        public void UsesBaseAttackBonusAsAFoundation()
        {
            var bob         = CharacterTestTemplates.AverageBob();
            var rangeAttack = bob.Get <RangeAttackBonus>();

            Assert.Equal(0, rangeAttack.TotalValue);
            bob.Offense.BaseAttackBonus.SetValue(10);
            Assert.Equal(10, rangeAttack.TotalValue);
        }
示例#22
0
        public void IgnoringPrerequisitesStillRequiresUniqueFeats()
        {
            var feat      = Feat.Named("Testing");
            var copy      = feat.Copy();
            var character = CharacterTestTemplates.AverageBob();

            character.Add(feat);
            Assert.False(copy.IsQualifiedIgnorePrerequisites(character));
        }
示例#23
0
        public void SizeModifiesAttackBonus()
        {
            var bob         = CharacterTestTemplates.AverageBob();
            var rangeAttack = bob.Get <RangeAttackBonus>();

            Assert.Equal(0, rangeAttack.TotalValue);
            bob.Size.SetSize(CharacterSize.Small, 10, 10);
            Assert.Equal(1, rangeAttack.TotalValue);
        }
示例#24
0
        public void DexterityModifiesAttackBonus()
        {
            var bob   = CharacterTestTemplates.AverageBob();
            var range = bob.Get <RangeAttackBonus>();

            Assert.Equal(0, range.TotalValue);
            bob.AbilityScores.SetScore(AbilityScoreTypes.Dexterity, 8);
            Assert.Equal(-1, range.TotalValue);
        }
示例#25
0
        public void EnablesImmunityToDisease()
        {
            var character = CharacterTestTemplates.AverageBob();

            character.Add(new DivineHealth());
            var defense = character.Get <DefenseStats>();

            AssertCharacter.IsImmuneTo("Disease", character);
        }
示例#26
0
        public void IfNoAppropriateItemsAreFoundAssignNothing()
        {
            var action    = new PurchaseMeleeWeapon(shop);
            var character = CharacterTestTemplates.AverageBob();

            //With no specification nothing should match
            action.ExecuteStep(character);
            Assert.Empty(character.Inventory.Weapons);
        }
示例#27
0
        public void ChecksAgainstCharactersToDetermineIfHasEnoughAttackBonus()
        {
            var bob    = CharacterTestTemplates.AverageBob();
            var prereq = new BaseAttackBonusPrerequisite("2");

            Assert.False(prereq.IsQualified(bob.Components));
            bob.Offense.BaseAttackBonus.SetValue(2);
            Assert.True(prereq.IsQualified(bob.Components));
        }
示例#28
0
        public void SelectsASingleSimpleWeaponProficiency()
        {
            var character = CharacterTestTemplates.AverageBob();

            var subject = new CommonerCustomSteps();

            subject.Execute(character.Components);
            Assert.Equal(character.Offense.WeaponProficiencies.Count(), 1);
        }
示例#29
0
        public void IgnorePrerequisitesIfTokenSaysSo()
        {
            Assert.True(cleave.Prerequisites.Count > 0);
            var bob = CharacterTestTemplates.AverageBob();

            bob.Add(new FeatToken(new string[] { "cleave" }, true));
            selector.ExecuteStep(bob);
            Assert.Contains(cleave, bob.Feats);
        }
示例#30
0
        public void IfCharacterDoesNotHaveFavoriteColorsJustUseBlack()
        {
            var bob = CharacterTestTemplates.AverageBob();

            SelectCharacterFavoriteColors.CreateAndRegister();
            var handleBarsTemplate = Handlebars.Compile("{{choose-favorite-color}}");
            var result             = handleBarsTemplate(new CharacterContext(bob).CreateObject());

            Assert.Equal("black", result);
        }