Example #1
0
 def testRemoveTraits(self):
     char = Character([human.BornNobility(), human.NobleCoeptir(), human.NobleArmiger(), human.NobleLPAnvil()])
     char.buy_trait(trait.CharacterTrait('Trait 1'))
     char.buy_trait(trait.IronTrained())
     self.assertEquals(char.trait_points(), 0)
     char.remove_trait(trait.IronTrained())
     self.assertEquals(char.trait_points(), 1)
     self.assertRaises(Exception, char.remove_trait, trait.CharacterTrait('Trait 2'))
     char.remove_trait(trait.CharacterTrait('Trait 1'))
     self.assertEquals(char.trait_points(), 2)
Example #2
0
class TraitTests(unittest.TestCase):
    def setUp(self):
        self.char =  Character([ Lifepath(born=True, years=1,trait_points=100)])
    def testDie(self):
        dietrait = DieTrait('Mark of Privilege', 3)
        self.assertEquals(dietrait.name, 'Mark of Privilege')
        self.assertEquals(dietrait.cost, 3)
        dietrait = DieTrait('Corvus and Crucis', 4)
        self.assertEquals(dietrait.name, 'Corvus and Crucis')
        self.assertEquals(dietrait.cost, 4)
    def testCallOn(self):
        cotrait = CallOnTrait('Follow the Money', 2)
        self.assertEquals(cotrait.name, 'Follow the Money')
        self.assertEquals(cotrait.cost, 2)
        cotrait = CallOnTrait('Forked Tongue',  3)
        self.assertEquals(cotrait.name, 'Forked Tongue')
        self.assertEquals(cotrait.cost, 3)
    def testChar(self):
        ctrait = CharacterTrait('Testing Fiend')
        ctrait2 = CharacterTrait('Testing Fiend')
        self.assertEquals(ctrait.name, 'Testing Fiend')
        self.assertEquals(ctrait.cost, 1)
        self.assertEquals(ctrait, ctrait2)
    def testISolzjah(self):
        # No Kerrn requirement?  Humans and Vaylen can take it?
        pass
    def testHumanOnlyTrait(self):
        human_only = [BrightMark(), Forged(), FuurBlood(), HammerLord(), Primarch()]
        pass
    def testRequiresBrightMarkTrait(self):
        """test if Gift of Ahmilahk and The Psychologists Code require the Bright Makr
        """
        req_bright_mark = [GiftOfAhmilahk(), ThePsychologistsCode()]
        for x in req_bright_mark:
            self.assertFalse(x.allowed(self.char))
            self.assertFalse(x in self.char.allowed_traits())
            self.char.buy_trait(BrightMark())
            self.assertTrue(x.allowed(self.char))
            self.assertTrue(x in self.char.allowed_traits())
            self.char.remove_trait(BrightMark())
    def testWarriorsCode(self):
        """test requirements for Warriors Code trait
        'Bright Mark required.  Alternately, the player may use the mule trait,but he must also take a Branded Character Trait.  The circle brands him as one of their own'
        Bright mark OR (Mule AND Branded?)  Is branded free?  I will guess no
        """
        self.assertFalse(WarriorsCode().allowed(self.char))
        self.assertFalse(WarriorsCode() in self.char.allowed_traits())
        self.char.buy_trait(BrightMark())
        self.assertTrue(WarriorsCode().allowed(self.char))
        self.assertTrue(WarriorsCode() in self.char.allowed_traits())
        self.char.remove_trait(BrightMark())
        self.assertFalse(WarriorsCode().allowed(self.char))
        self.assertFalse(WarriorsCode() in self.char.allowed_traits())
        self.char.buy_trait(Mule())
        self.assertFalse(WarriorsCode().allowed(self.char))
        self.assertFalse(WarriorsCode() in self.char.allowed_traits())
        self.char.buy_trait(Branded())
        self.assertTrue(WarriorsCode().allowed(self.char))
        self.assertTrue(WarriorsCode() in self.char.allowed_traits())
    def testAnvilLord(self):
        """test requirements for Anvil Lord Trait
        'if not gained as an lp trait, the character must be born to rule or have the magnate lifepath'
        ie: requires magnate, born to rule, or anvil lord
        """
        for test_name in ['Magnate', 'Born to Rule', 'Anvil Lord']:
            self.assertFalse(AnvilLord().allowed(self.char))
            self.assertFalse(AnvilLord() in self.char.allowed_traits())
            self.char.add_path( Lifepath(test_name))
            self.assertTrue(AnvilLord().allowed(self.char))
            self.assertTrue(AnvilLord() in self.char.allowed_traits())
            self.char.remove_path()
            
    def testAnvilTrained(self):
        """test requirements for Anvil Trained trait: may not be taken by mukhadish
        i.e., only human, kern or vaylen
        """
        pass
    
    def testArbiter(self):
        """test requirements for Arbiter Trait
        Archcotare or Cult Leader LP
        """
        for test_name in ['Archcotare', 'Cult Leader']:
            self.assertFalse(Arbiter().allowed(self.char))
            self.assertFalse(Arbiter() in self.char.allowed_traits())
            self.char.add_path(Lifepath(test_name))
            self.assertTrue(Arbiter().allowed(self.char))
            self.assertTrue(Arbiter() in self.char.allowed_traits())
            self.char.remove_path()
            
    def testRequiresBornToRule(self):
        """Test requirements for Bastard and Your Eminence/Grace/Lordship/Majesty: Born to Rule Lifepath
        """
        req_born_to_rule = [Bastard(), YourEminence(), YourGrace(), YourLordship(), YourMajesty()]
        for x in req_born_to_rule:
            self.assertFalse(x.allowed(self.char))
            self.assertFalse(x in self.char.allowed_traits())
            self.char.remove_path()
            self.char.add_path( Lifepath(name='Born to Rule', born=True, trait_points=100))
            self.assertTrue(x.allowed(self.char))
            self.assertTrue(x in self.char.allowed_traits())
            self.char.remove_path()
            self.char.add_path( Lifepath(born=True, trait_points=100))
    def testBornOnTheWheel(self):
        """test requirements for Born on the Wheel trait: Born on the Wheel LP only
        """
        self.assertFalse(BornOnTheWheel().allowed(self.char))
        self.assertFalse(BornOnTheWheel() in self.char.allowed_traits())
        self.char.add_path(Lifepath(name='Born on the Wheel'))
        self.assertTrue(BornOnTheWheel().allowed(self.char))
        self.assertTrue(BornOnTheWheel() in self.char.allowed_traits())
    def testCitizenOfTheCommune(self):
        """test requirements for Citizen of the Commune trait: Born Citizen LP only
        """
        self.assertFalse(CitizenOfTheCommune().allowed(self.char))
        self.assertFalse(CitizenOfTheCommune() in self.char.allowed_traits())
        self.char.remove_path()
        self.char.add_path( Lifepath(name='Born Citizen', born=True, trait_points=100))
        self.assertTrue(CitizenOfTheCommune().allowed(self.char))
        self.assertTrue(CitizenOfTheCommune() in self.char.allowed_traits())
    def testCodebreaker(self):
        """test requirements for Codebreaker trait: Psychologist-type characters only
        """
        
        pass
    def testContender(self):
        """test requirements for Contender trait: Mark of Privilege Trait
        """
        self.assertFalse(Contender().allowed(self.char))
        self.assertFalse(Contender() in self.char.allowed_traits())
        self.char.buy_trait(MarkOfPrivilege())
        self.assertTrue(Contender().allowed(self.char))
        self.assertTrue(Contender() in self.char.allowed_traits())
    def testCorvusAndCrucis(self):
        #Characters with a human body
        #ie: humans, and vaylen in the human or infiltrator settings
        pass
    def testCotarFomas(self):
        """test requirements for Cotar Fomas trait: cotar fomas lp only
        """
        self.assertFalse(CotarFomas().allowed(self.char))
        self.assertFalse(CotarFomas() in self.char.allowed_traits())
        self.char.add_path( Lifepath(name='Cotar Fomas'))
        self.assertTrue(CotarFomas().allowed(self.char))
        self.assertTrue(CotarFomas() in self.char.allowed_traits())
    def testDevotedToFire(self):
        """test requirements for Devoted to Fire trait: Devoted to Fire LP only
        What?!  But why is it listed in the Sodalis-Brother LP?
        """
        self.assertFalse(DevotedToFire().allowed(self.char))
        self.assertFalse(DevotedToFire() in self.char.allowed_traits())
        self.char.add_path( Lifepath(name='Devoted to Fire'))
        self.assertTrue(DevotedToFire().allowed(self.char))
        self.assertTrue(DevotedToFire() in self.char.allowed_traits())
    def testDregutai(self):
        """test requirements for Dregutai trait: Dregus LP only
        """
        self.assertFalse(Dregutai().allowed(self.char))
        self.assertFalse(Dregutai() in self.char.allowed_traits())
        self.char.add_path( Lifepath(name='Dregus'))
        self.assertTrue(Dregutai().allowed(self.char))
        self.assertTrue(Dregutai() in self.char.allowed_traits())
    def testEducated(self):
        """test requirements for Educated trait: Human and Vaylen only
        #any vaylen setting?  It seems like more of a human or makara caste thing
        """
        h = Human([Lifepath(born=True, trait_points=100)])
        self.assertTrue(Educated().allowed(h))
        self.assertTrue(Educated() in h.allowed_traits())
    def testEmperorsSteward(self):
        """test requirements of Emperor's Steward Trait:Lord Steward LP
        """
        self.assertFalse(EmperorsSteward().allowed(self.char))
        self.assertFalse(EmperorsSteward() in self.char.allowed_traits())
        self.char.add_path(Lifepath(name='Lord Steward'))
        self.assertTrue(EmperorsSteward().allowed(self.char))
        self.assertTrue(EmperorsSteward() in self.char.allowed_traits())
    def testFamily(self):
        #Kerrn Diazspherah, Human, Mukhadish Underworld setting and Vaylen setting characters only
        #any human?  the human stock?
        pass
    def testGarbo(self):
        #Human or Human-bodied Vaylen only
        #Ie, human stock, or lifepath in human caste or invader settings?  any or ends in?
        pass
    def testRequiresCorvusAndCrucis(self):
        """test requirements for Iron Trained and Wigged trait: Corvus and Crucis trait
        """
        for x in [IronTrained(), Wigged()]:
            self.assertFalse(x.allowed(self.char))
            self.assertFalse(x in self.char.allowed_traits())
            self.char.buy_trait(CorvusAndCrucis())
            self.assertTrue(x.allowed(self.char))
            self.assertTrue(x in self.char.allowed_traits())
            self.char.remove_trait(CorvusAndCrucis())
    def testKeeperOfTheFire(self):
        """test requirements for Keeper of the Fire Trait: Keeper of the Fire LP only
        No such lifepath.  I assume they mean Cotar
        """
        self.assertFalse(KeeperOfTheFire().allowed(self.char))
        self.assertFalse(KeeperOfTheFire() in self.char.allowed_traits())
        self.char.add_path(Lifepath(name='Cotar'))
        self.assertTrue(KeeperOfTheFire().allowed(self.char))
        self.assertTrue(KeeperOfTheFire() in self.char.allowed_traits())
    def testKravMagahTrained(self):
        #Human, Vaylen and Mukhadish characters may only take this if there are no Kerrn player characters in their group
        # So Kerrn can take it without restriction.  Maybe a notice otherwise?
        pass
    def testMarkOfPrivilege(self):
        """test requirements for Mark of Privilege trait: Born to Rule, Vaylen Captain and Vaylen Command LPs only
        """
        self.assertFalse(MarkOfPrivilege().allowed(self.char))
        self.assertFalse(MarkOfPrivilege() in self.char.allowed_traits())
        self.char.add_path(Lifepath(name='Born to Rule'))
        self.assertTrue(MarkOfPrivilege().allowed(self.char))
        self.assertTrue(MarkOfPrivilege() in self.char.allowed_traits())
    def testMetropolitan(self):
        """test requirements for Metropolitan and Word is Law traits: Cotar Antistes LP only
        """
        self.assertFalse(Metropolitan().allowed(self.char))
        self.assertFalse(Metropolitan() in self.char.allowed_traits())
        self.assertFalse(WordIsLaw().allowed(self.char))
        self.assertFalse(WordIsLaw() in self.char.allowed_traits())
        self.char.add_path( Lifepath(name='Cotar Antistes'))
        self.assertTrue(Metropolitan().allowed(self.char))
        self.assertTrue(Metropolitan() in self.char.allowed_traits())
        self.assertTrue(WordIsLaw().allowed(self.char))
        self.assertTrue(WordIsLaw() in self.char.allowed_traits())
        
    def testOfficer(self):
        """test requirements for Officer trait: Hammer Captain and Vaylen Captain LPs only
        """
        self.assertFalse(Officer().allowed(self.char))
        self.assertFalse(Officer() in self.char.allowed_traits())
        self.char.add_path( Lifepath(name='Hammer Captain'))
        self.assertTrue(Officer().allowed(self.char))
        self.assertTrue(Officer() in self.char.allowed_traits())
        
    def testOwnerAboard(self):
        #The character must purchase a ship as part of his starting resources and must begin with Resources 7 or higher
        pass
    def testPublicServant(self):
        """test requirements for public servant:Civilian Commune or Merchant League Only
        taken once, or "ends with"?
        """
        self.assertFalse(PublicServant().allowed(self.char))
        self.assertFalse(PublicServant() in self.char.allowed_traits())
        self.char.add_path(CommuneLifepath())
        self.assertTrue(PublicServant().allowed(self.char))
        self.assertTrue(PublicServant() in self.char.allowed_traits())
        self.char.remove_path()
        self.assertFalse(PublicServant().allowed(self.char))
        self.assertFalse(PublicServant() in self.char.allowed_traits())
        self.char.add_path(MerchantLeagueLifepath())
        self.assertTrue(PublicServant().allowed(self.char))
        self.assertTrue(PublicServant() in self.char.allowed_traits())
    def testSenator(self):
        """test requirements for Senator trait: Legislative [Official] LP only
        """
        self.assertFalse(Senator().allowed(self.char))
        self.assertFalse(Senator() in self.char.allowed_traits())
        self.char.add_path(Lifepath(name='Legislative Official'))
        self.assertTrue(Senator().allowed(self.char))
        self.assertTrue(Senator() in self.char.allowed_traits())
    def testSlaggah(self):
        """test requirements for Slaggah trait: only for characters with the Artillery or Strategy skills
        Not sure if that's a real requirement
        """
        pass
    def testTough(self):
        """round up calculations for mortal wound
        """
        self.char.buy_power()
        self.char.buy_forte()
        self.assertEquals(self.char.mortal_wound(), 'H7')
        self.assertEquals(self.char.maimed_wound(), 'H5')
        self.char.buy_forte()
        self.assertEquals(self.char.mortal_wound(), 'H7')
        self.assertEquals(self.char.maimed_wound(), 'H5')
        self.char.buy_trait(Tough())
        self.assertEquals(self.char.mortal_wound(), 'H8')
        self.assertEquals(self.char.maimed_wound(), 'H6')
        self.char.buy_forte()
    def testVig(self):
        """test requirements for Vig Trait: Outcast and Criminal LPs only
        """
        self.assertFalse(Vig().allowed(self.char))
        self.assertFalse(Vig() in self.char.allowed_traits())
        self.char.add_path(OutcastLifepath())
        self.assertTrue(Vig().allowed(self.char))
        self.assertTrue(Vig() in self.char.allowed_traits())