Esempio n. 1
0
    def test_map_define(self):
        ''' Test the creation of a new map from a simple MDF.'''

        mdf = MDF(ENG, FRA)([
            (ENG, EDI, LON),
            (FRA, BRE, PAR),
            ([ENG, FRA], BEL, HOL),
            (UNO, SPA, NWY),
        ], [ECH, NTH, PIC])(
            (EDI, [AMY, LON], [FLT, NTH]),
            (LON, [AMY, EDI], [FLT, NTH, ECH]),
            (BRE, [AMY, PAR, PIC, SPA], [FLT, ECH, PIC, (SPA, NCS)]),
            (PAR, [AMY, PAR, SPA, PIC]),
            (BEL, [AMY, PIC, HOL], [FLT, NTH, ECH, PIC, HOL]),
            (HOL, [AMY, BEL], [FLT, NTH]),
            (SPA, [AMY, PAR, BRE], [(FLT, NCS), BRE]),
            (NWY, [AMY], [FLT, NTH]),
            (ECH, [FLT, NTH, BRE, LON, BEL, PIC]),
            (NTH, [FLT, ECH, BEL, HOL, LON, NWY, EDI]),
            (PIC, [AMY, BRE, PAR, BEL], [FLT, ECH, BRE, BEL]),
        )

        self.failIf(Validator().validate_server_message(mdf),
                    'Invalid MDF message')
        m = Map(Variant('simplified'))
        self.failIf(m.valid, 'Map valid before MDF')
        result = m.define(mdf)
        self.failIf(result, result)
Esempio n. 2
0
    def test_missing_UNO(self):
        # Map can define maps with no non-home center clause in the MDF.
        variant = load_variant(
            """
            [homes]
            ONE=AAA
            TWO=BBB
            TRE=CCC
            [borders]
            AAA=AMY BBB CCC DDD
            BBB=AMY AAA CCC DDD
            CCC=AMY AAA BBB DDD
            DDD=AMY AAA BBB CCC
        """
        )

        ONE = variant.rep["ONE"]
        TWO = variant.rep["TWO"]
        TRE = variant.rep["TRE"]
        AAA = variant.rep["AAA"]
        BBB = variant.rep["BBB"]
        CCC = variant.rep["CCC"]
        DDD = variant.rep["DDD"]
        mdf = MDF(ONE, TWO, TRE)(([ONE, AAA], [TWO, BBB], [TRE, CCC]), [DDD])(
            (AAA, [AMY, BBB, CCC, DDD]),
            (BBB, [AMY, AAA, CCC, DDD]),
            (CCC, [AMY, AAA, BBB, DDD]),
            (DDD, [AMY, AAA, BBB, CCC]),
        )

        game_map = Map(variant)
        msg = game_map.define(mdf)
        self.failIf(msg, msg)
Esempio n. 3
0
 def test_province_names(self):
     variant = load_variant('''
         [provinces]
         TWO=Somewhere
         [homes]
         ONE=
         [borders]
         TWO=AMY TRE
         TRE=AMY TWO
     ''')
     board = Map(variant)
     province = board.spaces[variant.rep["TWO"]]
     self.failUnlessEqual(province.name, "Somewhere")
Esempio n. 4
0
 def test_power_names(self):
     variant = load_variant('''
         [powers]
         ONE=Somebody,Someone's
         [homes]
         ONE=
         [borders]
         TWO=AMY TRE
         TRE=AMY TWO
     ''')
     board = Map(variant)
     power = board.powers[variant.rep["ONE"]]
     self.failUnlessEqual(power.name, "Somebody")
Esempio n. 5
0
 def collect_orders(self, now, sco, country):
     orders = OrderSet()
     datc = DatcOptions()
     board = Map(self.variant)
     if sco:
         board.handle_SCO(sco)
     if now:
         board.handle_NOW(now)
     power = board.powers[country]
     phase = board.current_turn.phase()
     self.start_game(now, sco, country)
     for msg in self.replies:
         if msg[0] is SUB:
             for item in msg.fold()[1:]:
                 order = createUnitOrder(item, power, board, datc)
                 note = order.order_note(power, phase, orders)
                 self.failUnlessEqual(note, MBV)
                 orders.add(order, country)
         elif msg[0] is NOT and msg[2] is SUB:
             # Todo: Handle partial unsubmittals correctly.
             orders = OrderSet()
     return phase, power, orders
Esempio n. 6
0
 def test_island_Pale(self):
     "Check that Map can handle island provinces."
     variant = load_variant('''
         [borders]
         ONE=AMY, FLT TWO, FLT TRE
         TWO=FLT TRE, FLT ONE
         TRE=FLT TWO, FLT ONE
     ''')
     game_map = Map(variant)
     prov = variant.rep['ONE']
     self.failUnless(prov.category_name().split()[0] == 'Coastal')
     coast = game_map.coasts[(AMY, prov, None)]
     self.failUnless(coast.is_valid())
     self.failUnless(coast.province.is_valid())
Esempio n. 7
0
    def test_missing_homes(self):
        # Map can define maps with no home center entry for one of the powers.
        variant = load_variant(
            """
            [homes]
            ONE=AAA
            TWO=BBB
            TRE=
            UNO=CCC
            [borders]
            AAA=AMY BBB CCC DDD
            BBB=AMY AAA CCC DDD
            CCC=AMY AAA BBB DDD
            DDD=AMY AAA BBB CCC
        """
        )

        ONE = variant.rep["ONE"]
        TWO = variant.rep["TWO"]
        TRE = variant.rep["TRE"]
        AAA = variant.rep["AAA"]
        BBB = variant.rep["BBB"]
        CCC = variant.rep["CCC"]
        DDD = variant.rep["DDD"]
        mdf = MDF(ONE, TWO, TRE)(([ONE, AAA], [TWO, BBB], [UNO, CCC]), [DDD])(
            (AAA, [AMY, BBB, CCC, DDD]),
            (BBB, [AMY, AAA, CCC, DDD]),
            (CCC, [AMY, AAA, BBB, DDD]),
            (DDD, [AMY, AAA, BBB, CCC]),
        )

        game_map = Map(variant)
        msg = game_map.define(mdf)
        self.failIf(msg, msg)
        self.assertContains(game_map.powers, TRE)
        self.failUnlessEqual(game_map.powers[TRE].homes, [])
Esempio n. 8
0
    def test_map_define(self):
        """ Test the creation of a new map from a simple MDF."""

        mdf = MDF(ENG, FRA)(
            [(ENG, EDI, LON), (FRA, BRE, PAR), ([ENG, FRA], BEL, HOL), (UNO, SPA, NWY)], [ECH, NTH, PIC]
        )(
            (EDI, [AMY, LON], [FLT, NTH]),
            (LON, [AMY, EDI], [FLT, NTH, ECH]),
            (BRE, [AMY, PAR, PIC, SPA], [FLT, ECH, PIC, (SPA, NCS)]),
            (PAR, [AMY, PAR, SPA, PIC]),
            (BEL, [AMY, PIC, HOL], [FLT, NTH, ECH, PIC, HOL]),
            (HOL, [AMY, BEL], [FLT, NTH]),
            (SPA, [AMY, PAR, BRE], [(FLT, NCS), BRE]),
            (NWY, [AMY], [FLT, NTH]),
            (ECH, [FLT, NTH, BRE, LON, BEL, PIC]),
            (NTH, [FLT, ECH, BEL, HOL, LON, NWY, EDI]),
            (PIC, [AMY, BRE, PAR, BEL], [FLT, ECH, BRE, BEL]),
        )

        self.failIf(Validator().validate_server_message(mdf), "Invalid MDF message")
        m = Map(Variant("simplified"))
        self.failIf(m.valid, "Map valid before MDF")
        result = m.define(mdf)
        self.failIf(result, result)
Esempio n. 9
0
 def test_complete_waives(self):
     board = Map(standard)
     board.handle_NOW(NOW(WIN, 1901)(RUS, AMY, MOS))
     orders = OrderSet()
     orders.complete_set(board)
     self.failUnlessEqual(len(orders), 21)
Esempio n. 10
0
 def test_infinite_convoy(self):
     # Originally notices in the Americas4 variant.
     variant = load_variant('''
         [borders]
         ALA=AMY NCA NWT, FLT BEA BER GOA NCA NPO NWT
         ORE=AMY CAL NCA, FLT CAL GOA NCA NPO
         NWT=AMY ALA NCA, FLT ALA ARC BEA HUD LAB
         CAL=AMY ORE, FLT GSC NPO ORE
         NCA=AMY ALA NWT ORE, FLT ALA GOA ORE
         ACH=FLT ECB MAO SAR
         AGU=FLT CGU HUM SPO
         ARC=FLT BEA LAB NAO NWT
         APP=FLT FST GOM
         BBL=FLT BGR RLP SAO
         BEA=FLT ALA ARC BER NWT
         BER=FLT ALA BEA NPO
         BGR=FLT BBL DRA SAO
         BTR=FLT NAO NTH SAR STH
         CGU=FLT AGU DRA SPO
         CHG=FLT GFO GOG GOP MPO
         COB=FLT GBA MAO SAO
         COM=FLT GOT MPO SOC
         COP=FLT GOG HUM SPO
         CPO=FLT MPO NPO SPO
         DRA=FLT BGR CGU SAO SPO
         ECB=FLT ACH GOU GOV NCB SAR WCB
         FST=FLT APP GOM SCH
         GBA=FLT COB PBA SAO
         GOA=FLT ALA NCA NPO ORE
         GOC=FLT GOM
         GFO=FLT CHG GOT MPO
         GOG=FLT CHG COP GOP SPO
         GOH=FLT WCB
         GOM=FLT APP FST GOC SOY
         GOP=FLT CHG GOG
         GOS=FLT LAB NAO
         GOT=FLT COM GFO MPO
         GOU=FLT ECB GOV MOS WCB
         GOV=FLT ECB GOU
         GSC=FLT CAL MPO NPO
         GSE=FLT MAO MBA
         HUD=FLT LAB NWT
         HUM=FLT AGU COP SPO
         LAB=FLT ARC GOS HUD NAO NWT
         MAO=FLT ACH COB GSE MBA NAO SAO SAR
         MAS=FLT NAO NTH
         MBA=FLT GSE MAO
         MOS=FLT GOU WCB
         MPO=FLT CHG COM CPO GFO GOT GSC NPO SOC SPO
         NAO=FLT ARC BTR GOS LAB MAO MAS NTH SAR
         NCB=FLT ECB SCH SOY WCB
         NTH=FLT BTR MAS NAO STH
         NPO=FLT ALA BER CAL CPO GOA GSC MPO ORE
         PBA=FLT GBA RLP SAO
         RLP=FLT BBL PBA SAO
         SAO=FLT BBL BGR COB DRA GBA MAO PBA RLP
         SAR=FLT ACH BTR ECB MAO NAO SCH STH
         SCH=FLT FST NCB SAR STH
         STH=FLT BTR NTH SAR SCH
         SOC=FLT COM MPO
         SOY=FLT GOM NCB WCB
         SPO=FLT AGU CGU COP CPO DRA GOG HUM MPO
         WCB=FLT ECB GOH GOU MOS NCB SOY
     ''')
     board = Map(variant)
     Alaska = board.spaces[variant.rep['ALA']]
     Oregon = board.coasts[(AMY, variant.rep['ORE'], None)]
     start = time.time()
     results = Oregon.convoy_routes(Alaska, board)
     finish = time.time()
     self.failUnlessEqual(results, [])
     self.failUnless(finish - start < 1, "convoy_routes() took too long.")
Esempio n. 11
0
 def test_cache_mdf(self):
     opts = Variant('testing')
     Map(opts).handle_MDF(standard.mdf())
     new_map = Map(opts)
     self.failUnless(new_map.valid)
Esempio n. 12
0
 def test_empty_UNO(self):
     ''' Test whether Map can define maps with no non-home supply centers.'''
     # Almost Standard...
     mdf = '''
         MDF (AUS ENG FRA GER ITA RUS TUR)
         (((AUS bud tri vie)(ENG edi lon lvp)(FRA bre mar par)
           (GER ber kie mun)(ITA nap rom ven)(RUS mos sev stp war)
           (TUR ank con smy bel bul den gre hol nwy por rum ser spa swe tun)
           (UNO))
          (alb apu arm boh bur cly fin gal gas lvn naf pic pie pru ruh sil syr
           tus tyr ukr wal yor adr aeg bal bar bla gob eas ech hel ion iri gol
           mao nao nth nwg ska tys wes))
         ((adr(FLT alb apu ven tri ion))
          (aeg(FLT gre (bul scs) con smy eas ion))
          (alb(AMY tri gre ser)(FLT adr tri gre ion))
          (ank(AMY arm con smy)(FLT bla arm con))
          (apu(AMY ven nap rom)(FLT ven adr ion nap))
          (arm(AMY smy syr ank sev)(FLT ank sev bla))
          (bal(FLT lvn pru ber kie den swe gob))
          (bar(FLT nwg (stp ncs) nwy))
          (bel(AMY hol pic ruh bur)(FLT ech nth hol pic))
          (ber(AMY kie pru sil mun)(FLT kie bal pru))
          (bla(FLT rum sev arm ank con (bul ecs)))
          (boh(AMY mun sil gal vie tyr))
          (gob(FLT swe fin (stp scs) lvn bal))
          (bre(AMY pic gas par)(FLT mao ech pic gas))
          (bud(AMY vie gal rum ser tri))
          (bul((FLT ECS) con bla rum)(AMY gre con ser rum)((FLT SCS) gre aeg con))
          (bur(AMY mar gas par pic bel ruh mun))
          (cly(AMY edi lvp)(FLT edi lvp nao nwg))
          (con(AMY bul ank smy)(FLT (bul scs) (bul ecs) bla ank smy aeg))
          (den(AMY swe kie)(FLT hel nth swe bal kie ska))
          (eas(FLT syr smy aeg ion))
          (edi(AMY lvp yor cly)(FLT nth nwg cly yor))
          (ech(FLT mao iri wal lon nth bel pic bre))
          (fin(AMY swe stp nwy)(FLT swe (stp scs) gob))
          (gal(AMY war ukr rum bud vie boh sil))
          (gas(AMY par bur mar spa bre)(FLT (spa ncs) mao bre))
          (gre(AMY bul alb ser)(FLT (bul scs) aeg ion alb))
          (hel(FLT nth den kie hol))
          (hol(AMY bel kie ruh)(FLT bel nth hel kie))
          (ion(FLT tun tys nap apu adr alb gre aeg eas))
          (iri(FLT nao lvp wal ech mao))
          (kie(AMY hol den ber mun ruh)(FLT hol hel den bal ber))
          (lon(AMY yor wal)(FLT yor nth ech wal))
          (lvn(AMY pru stp mos war)(FLT pru bal gob (stp scs)))
          (lvp(AMY wal edi yor cly)(FLT wal iri nao cly))
          (gol(FLT (spa scs) mar pie tus tys wes))
          (mao(FLT nao iri ech bre gas (spa ncs) por (spa scs) naf wes))
          (mar(AMY spa pie gas bur)(FLT (spa scs) gol pie))
          (mos(AMY stp lvn war ukr sev))
          (mun(AMY bur ruh kie ber sil boh tyr))
          (naf(AMY tun)(FLT mao wes tun))
          (nao(FLT nwg lvp iri mao cly))
          (nap(AMY rom apu)(FLT rom tys ion apu))
          (nwy(AMY fin stp swe)(FLT ska nth nwg bar (stp ncs) swe))
          (nth(FLT yor edi nwg nwy ska den hel hol bel ech lon))
          (nwg(FLT nao bar nwy nth cly edi))
          (par(AMY bre pic bur gas))
          (pic(AMY bur par bre bel)(FLT bre ech bel))
          (pie(AMY mar tus ven tyr)(FLT mar gol tus))
          (por(AMY spa)(FLT mao (spa ncs) (spa scs)))
          (pru(AMY war sil ber lvn)(FLT ber bal lvn))
          (rom(AMY tus nap ven apu)(FLT tus tys nap))
          (ruh(AMY bur bel hol kie mun))
          (rum(AMY ser bud gal ukr sev bul)(FLT sev bla (bul ecs)))
          (ser(AMY tri bud rum bul gre alb))
          (sev(AMY ukr mos rum arm)(FLT rum bla arm))
          (sil(AMY mun ber pru war gal boh))
          (ska(FLT nth nwy den swe))
          (smy(AMY syr con ank arm)(FLT syr eas aeg con))
          (spa(AMY gas por mar)((FLT NCS) gas mao por)((FLT SCS) por wes gol mar mao))
          (stp(AMY fin lvn nwy mos)((FLT NCS) bar nwy)((FLT SCS) fin lvn gob))
          (swe(AMY fin den nwy)(FLT fin gob bal den ska nwy))
          (syr(AMY smy arm)(FLT eas smy))
          (tri(AMY tyr vie bud ser alb ven)(FLT alb adr ven))
          (tun(AMY naf)(FLT naf wes tys ion))
          (tus(AMY rom pie ven)(FLT rom tys gol pie))
          (tyr(AMY mun boh vie tri ven pie))
          (tys(FLT wes gol tus rom nap ion tun))
          (ukr(AMY rum gal war mos sev))
          (ven(AMY tyr tus rom pie apu tri)(FLT apu adr tri))
          (vie(AMY tyr boh gal bud tri))
          (wal(AMY lvp lon yor)(FLT lvp iri ech lon))
          (war(AMY sil pru lvn mos ukr gal))
          (wes(FLT mao (spa scs) gol tys tun naf))
          (yor(AMY edi lon lvp wal)(FLT edi nth lon))
         )
     '''#'''
     options = Variant("testing")
     mdf = options.rep.translate(mdf)
     game_map = Map(options)
     msg = game_map.define(mdf)
     self.failIf(msg, msg)