コード例 #1
0
class One_player_game_in_setup(unittest.TestCase):
    def setUp(self):
        self.nick1 = "SomeOne"
        self.nick2 = "Another"
        self.output = MemoryStreamer()
        self.director = ShuntingDirector(self.output)
        self.director.parse(self.nick1, "Laten we Kijfhoek spelen.")

    def test_After_parsing_We_beginnen_Message_more_players_needed_appear(self):
        self.director.parse(self.nick1, "We beginnen maar snel!")
        self.assertTrue(self.output.match(["Sorry, voor Kijfhoek zijn minstens 2 spelers nodig"]))

    def test_After_parsing_Nick2_joins_nick1_Nick2_is_added_as_player(self):
        self.director.parse(self.nick2, "Ik doe mee met %s!" % self.nick1)
        self.assertTrue(self.nick2 in self.director._getGame(self.nick1).getPlayers())

    def test_After_parsing_Nick1_joins_nick1_Nick1_is_not_added_again(self):
        self.director.parse(self.nick1, "Ik doe mee met %s!" % self.nick1)
        self.assertEqual(self.director._getGame(self.nick1).getNumberOfPlayers(), 1)

    def test_After_pruning_with_empty_list_Game_is_ended(self):
        self.director.prune([])
        self.assertTrue(self.output.match(["OK, dan beëindigen we het spel."]))

    def test_After_pruning_with_list_with_just_nick2_Game_is_ended(self):
        self.director.prune([self.nick2])
        self.assertTrue(self.output.match(["OK, dan beëindigen we het spel."]))

    def test_After_pruning_with_list_with_just_nick1_and_nick2_Game_is_not_ended(self):
        self.director.prune([self.nick2, self.nick1])
        self.assertFalse(self.output.match(["OK, dan beëindigen we het spel."]))
コード例 #2
0
class Just_started_2_player_game(unittest.TestCase):
    def setUp(self):
        self.output = MemoryStreamer()
        self.director = ShuntingDirector(self.output)
        self.nick1 = "Hans"
        self.director.parse(self.nick1, "Laten we Kijfhoek spelen.")
        self.nick2 = "David"
        self.director.parse(self.nick2, "Ik doe mee met %s!" % self.nick1)
        self.director.parse(self.nick1, "We beginnen.")

    def test_After_player1_says_verwijder_wagon_3_New_cards_are_privatly_told_to_player2_only_and_its_player2s_turn(self):
        self.director.parse(self.nick1, "Verwijder wagon 3.")
        self.assertFalse(self.output.privateMatch(self.nick1, ["Het opstelterrein van %s bevat de wagons: " % self.nick1]))
        self.assertTrue(self.output.privateMatch(self.nick2, ["Het opstelterrein van %s bevat de wagons: " % self.nick1, "Het opstelterrein van %s bevat de wagons: " % self.nick1]))
        self.assertTrue(self.output.match(["De beurt is aan %s." % self.nick2]))

    def test_After_player1_says_verwijder_3de_Its_player2s_turn(self):
        self.director.parse(self.nick1, "Verwijder 3de.")
        self.assertTrue(self.output.match(["De beurt is aan %s." % self.nick2]))

    def test_After_player1_says_verwijder_1_en_3_Command_is_discarded(self):
        self.director.parse(self.nick1, "Verwijder wagon 1 en 3.")
        self.assertFalse(self.output.match(["De beurt is aan %s." % self.nick2]))

    def test_After_setting_kennis_and_playing_card_Kennis_is_removed(self):
        self.director._knowledge[self.nick1][0] = "B1"
        self.director.parse(self.nick1, "Koppel 1")
        self.director.parse(self.nick1, "Kennis?")
        self.assertFalse(self.output.match([".*%s: B1  " % self.nick1]))

    def test_After_setting_kennis_and_discarding_card_Kennis_is_removed(self):
        self.director._knowledge[self.nick1][0] = "B1"
        self.director.parse(self.nick1, "Verwijder 1")
        self.director.parse(self.nick1, "Kennis?")
        self.assertFalse(self.output.match([".*%s: B1  " % self.nick1]))

    def test_After_player1_says_Orden_wagons_54321_His_cards_are_secretly_told_to_player2_and_its_still_player1s_turn(self):
        self.director.parse(self.nick1, "Orden wagons 54321")
        self.assertTrue(self.output.privateMatch(self.nick2, ["Het opstelterrein van %s bevat de wagons: " % self.nick1, "Het opstelterrein van %s bevat de wagons: " % self.nick1]))
        self.assertTrue(self.output.match(["De beurt is aan %s." % self.nick1]))

    def test_After_player1_says_Orden_54xxx_His_cards_reordered_and_are_secretly_told_to_player2_and_its_still_player1s_turn(self):
        originalOrder = self.director._getGame(self.nick1).getHandCards(self.nick1)
        self.director.parse(self.nick1, "Orden kaarten 54321")
        newOrder = self.director._getGame(self.nick1).getHandCards(self.nick1)
        self.assertNotEqual(originalOrder, newOrder)
        self.assertTrue(self.output.privateMatch(self.nick2, ["Het opstelterrein van %s bevat de wagons: " % self.nick1, "Het opstelterrein van %s bevat de wagons: " % self.nick1]))
        self.director.parse(self.nick1, "Orden kaarten 54321")
        newOrder = self.director._getGame(self.nick1).getHandCards(self.nick1)
        self.assertEqual(originalOrder, newOrder)
        self.director.parse(self.nick1, "Orden kaarten 45...")
        newOrder = self.director._getGame(self.nick1).getHandCards(self.nick1)
        self.assertNotEqual(originalOrder, newOrder)
        self.assertTrue(self.output.privateMatch(self.nick2, ["Het opstelterrein van %s bevat de wagons: " % self.nick1, "Het opstelterrein van %s bevat de wagons: " % self.nick1]))
        self.director.parse(self.nick1, "Orden kaarten 345..")
        newOrder = self.director._getGame(self.nick1).getHandCards(self.nick1)
        self.assertEqual(originalOrder, newOrder)
        self.assertFalse(self.output.match(["De beurt is aan %s." % self.nick2]))

    def test_After_player1_says_Orden_wagons_44123_He_is_told_to_give_legal_ordering(self):
        self.director.parse(self.nick1, "Orden wagons 44321")
        self.assertTrue(self.output.match(["De opgegeven ordening klopt niet"]))

    def test_After_player1_says_Heuvel_wagon_5_Train_or_the_zijspoor_is_updated_and_His_hand_is_shown_to_others_and_it_is_told_who_is_next(self):
        self.director.parse(self.nick1, "Heuvel wagon 5")
        trainUpdate = self.output.match(["Trein [ROGBP][a-z]+ heeft 1 wagon."])
        extraLocomotivesUpdate = self.output.match(["Het zijspoor kan nog maar 1 foute wagon opvangen"])
        self.assertTrue(trainUpdate != extraLocomotivesUpdate)
        self.assertTrue(self.output.privateMatch(self.nick2, ["Het opstelterrein van %s bevat de wagons: " % self.nick1, "Het opstelterrein van %s bevat de wagons: " % self.nick1]))
        self.assertTrue(self.output.match(["De beurt is aan %s." % self.nick2]))

    def test_After_player1_says_Hint_David_Blauw_Player2_is_hinted_and_and_it_is_told_who_is_next(self):
        self.director.parse(self.nick1, "Hint David: Blauw")
        hintCount = 0
        if self.output.match(["%s heeft geen B-en" % self.nick2]):
            hintCount += 1
        if self.output.match(["Wagon [1-5] van %s is een B." % self.nick2]):
            hintCount += 1
        if self.output.match(["De wagons [1-5](, [1-5])* en [1-5] van %s zijn B-en." % self.nick2]):
            hintCount += 1
        self.assertEqual(hintCount, 1)
        self.assertTrue(self.output.match(["De beurt is aan %s." % self.nick2]))

    def test_After_requesting_kennis_Kennis_appears(self):
        self.director.parse(self.nick1, "kennis?")
        self.assertTrue(self.output.match(["Kennis:"]))

    def test_After_player1_says_Hint_Oranje_aan_David_Hints_left_become_7(self):
        self.director.parse(self.nick1, "Hint Oranje aan David")
        self.assertTrue(self.output.match(["Er mogen nog 7 hints"]))

    def test_After_player1_says_Hint_unknown_3_It_is_ignored(self):
        self.director.parse(self.nick1, "Hint Blauw aan unknown")
        self.assertFalse(self.output.match(["De beurt is aan %s." % self.nick2]))

    def test_After_player1_says_Hint_blauw_aan_player2_Its_players2_turn(self):
        self.director.parse(self.nick1, "Hint Blauw aan %s" % self.nick2)
        self.assertTrue(self.output.match(["De beurt is aan %s." % self.nick2]))

    def test_After_hinting_for_the_9th_time_It_is_told_there_aro_no_hints_left(self):
        self.director.parse(self.nick1, "Hint Blauw aan %s" % self.nick2)
        self.director.parse(self.nick2, "Hint Blauw aan %s" % self.nick1)
        self.director.parse(self.nick1, "Hint Blauw aan %s" % self.nick2)
        self.director.parse(self.nick2, "Hint Blauw aan %s" % self.nick1)
        self.director.parse(self.nick1, "Hint Blauw aan %s" % self.nick2)
        self.director.parse(self.nick2, "Hint Blauw aan %s" % self.nick1)
        self.director.parse(self.nick1, "Hint Blauw aan %s" % self.nick2)
        self.director.parse(self.nick2, "Hint Blauw aan %s" % self.nick1)
        self.assertFalse(self.output.match(["Jammer %s, maar er mogen nu geen hints meer gegegeven worden." % self.nick1]))
        self.director.parse(self.nick1, "Hint Blauw aan %s" % self.nick2)
        self.assertTrue(self.output.match(["Jammer %s, maar er mogen nu geen hints meer gegegeven worden." % self.nick1]))

    def test_After_player1_says_Hint_David_3_Player_is_hinted_and_it_is_told_who_is_next(self):
        self.director.parse(self.nick1, "Hint speler David het prachtige getal van de eenheid: 3")
        hintCount = 0
        if self.output.match(["%s heeft geen 3-en." % self.nick2]):
            hintCount += 1
        if self.output.match(["Wagon [1-5] van %s is een 3." % self.nick2]):
            hintCount += 1
        if self.output.match(["De wagons [1-5](, [1-5])* en [1-5] van %s zijn 3-en." % self.nick2]):
            hintCount += 1
        self.assertEqual(hintCount, 1)
        self.assertTrue(self.output.match(["De beurt is aan %s." % self.nick2]))

    def test_After_player1_says_Hint_player1_Player_is_told_that_is_not_allowed(self):
        self.director.parse(self.nick1, "Hint speler %s 3" % self.nick1)
        self.assertTrue(self.output.match([".*jezelf hinten is niet toegestaan"]))

    def test_After_request_for_rules_Rules_appear(self):
        self.director.parse(self.nick2, "Wat zijn de spelregels?")
        self.assertTrue(self.output.match(["De spelregels zijn"]))

    def test_After_request_for_help_Help_appears(self):
        self.director.parse(self.nick2, "HELP!!!!!")
        self.assertTrue(self.output.match(["De beurt is aan",
                                        "In je beurt heb je drie mogelijkheden:"]))

    def test_After_request_for_number_of_hints_Hints_left_appear(self):
        self.director.parse(self.nick2, "Hoeveel hints hebben we nog?")
        self.assertTrue(self.output.match(["Er mogen nog 8 hints gegeven worden."]))

    def test_After_request_for_room_on_zijspoor_Zijspoor_room_appears(self):
        self.director.parse(self.nick2, "Hoeveel plekken op het zijspoor hebben we nog?")
        self.assertTrue(self.output.match(["Het zijspoor kan nog 2 foute wagons opvangen"]))

    def test_After_request_for_waiting_track_Number_of_wagons_appear(self):
        self.director.parse(self.nick2, "Hoeveel wagons staan er nog op het wachtspoor?")
        self.assertTrue(self.output.match(["Op het wachtspoor staan nog 40 wagons gereed om te verwerken."]))

    def test_After_request_for_trains_Trains_appear(self):
        self.director.parse(self.nick2, "Hoe staan onze treinen er voor?")
        self.assertTrue(self.output.match(["Trein Rood heeft nog geen enkele wagon."]))
        self.assertTrue(self.output.match(["Trein Blauw heeft nog geen enkele wagon."]))

    def test_After_request_for_yards_Yards_of_players_appear_in_private(self):
        self.director.parse(self.nick1, "Wat staat er op de opstelterreinen?")
        self.assertTrue(self.output.privateMatch(self.nick1, [" *%s: " % self.nick2]))
        self.assertFalse(self.output.privateMatch(self.nick1, [" *%s: " % self.nick1]))
        self.assertFalse(self.output.privateMatch(self.nick2, [" *%s: " % self.nick1]))
        self.assertFalse(self.output.privateMatch(self.nick2, [" *%s: " % self.nick2]))

    def test_After_playing_lots_of_wrong_cards_Game_is_over_and_score_appears(self):
        for i in range(5):
            self.director.parse(self.nick1, "Heuvel 1")
            self.director.parse(self.nick2, "Heuvel 1")
        self.assertTrue(self.output.match(["Het spel is afgelopen."]))
        self.assertTrue(self.output.match(["Jullie hebben in totaal [1-9]?[0-9] wagons correct opgesteld."]))

    def test_After_player1_say_stop_Games_is_still_there(self):
        self.director.parse(self.nick1, "Ik stop er mee!")
        self.director._getGame(self.nick1)

    def test_After_player1_and_player2_says_stop_Stopping_is_confirmed_and_game_is_gone(self):
        self.director.parse(self.nick1, "Ik stop")
        self.director.parse(self.nick2, "Ik ga ook stoppen.")
        self.assertTrue(self.output.match(["OK, iedereen wil het spelletje stoppen"]))
        self.assertEquals(self.director._getGame(self.nick1), None)

    def test_After_player2_and_player1_says_stop_Stopping_is_confirmed_and_game_is_gone(self):
        self.director.parse(self.nick1, "Ik stop")
        self.director.parse(self.nick2, "Ik ga ook stoppen.")
        self.assertTrue(self.output.match(["OK, iedereen wil het spelletje stoppen"]))
        self.assertEquals(self.director._getGame(self.nick1), None)

    def test_After_pruning_with_empty_list_Game_is_ended(self):
        self.director.prune([])
        self.assertTrue(self.output.match(["OK, iedereen wil het spelletje stoppen"]))

    def test_After_pruning_with_empty_list_Score_appears(self):
        self.director.prune([])
        self.assertTrue(self.output.match(["Jullie hebben in totaal [1-9]?[0-9] wagons correct opgesteld."]))