Пример #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);
        }