def test_points_on_pickup(self):
        """
        Test that a ship can collect points
        """
        ship = AIShip_SetList("Winner", self.game.world.mid_point(-100), self.game, [
                "IdleCommand(self, 2.0)",
                "ThrustCommand(self, 'B', 3.0)",
            ])

        self.game.world.append(Bauble(self.game.world.mid_point(-50), 1))

        self.game.world.append(Bauble(self.game.world.mid_point(50), 3))

        time.sleep(5)

        self.assertEqual(ship.player.score, 1, "Player didn't earn point")

        time.sleep(6)

        self.assertEqual(ship.player.score, 1 + 3, "Player didn't earn point gold")

        time.sleep(0.5)
        # move to golden bauble position
        bauble = self.game._HungryHungryBaublesGame__baubles[ship.player.netid]
        ship.body.position = bauble.body.position

        time.sleep(0.5)

        self.assertEqual(ship.player.score, 1 + 3 * 2 + self.cfg.getint("HungryHungryBaubles", "bauble_points_extra"), "Player didn't earn golden bauble points")

        time.sleep(0.5)

        self.assertNotIn(bauble, self.game.world, "Golden Bauble wasn't removed")
        self.assertEqual(len(self.game.world), 4, "Baubles not respawned")
    def test_running_network_tournament(self):
        ships = []
        numships = 8
        groups = self.cfg.getint("Tournament", "groups")

        for x in xrange(numships):
            ships.append(AIShip_Network_Harness("Move", self.__target_ship))
            self.assertTrue(
                ships[-1].connect(self.cfg.getint("Server", "port")),
                "Ship " + repr(x) + " Didn't connect to server.")
            time.sleep(0.2)
            self.assertTrue(ships[-1].isconnected(),
                            "Target Client not connected to server.")

        for x in xrange(groups + 1):
            self.assertEqual(len(self.game.world), 0,
                             "Objects in World before round")
            self.assertFalse(self.game.round_get_has_started(),
                             "Game Timer Running")

            self.game.round_start()

            time.sleep(2.0)

            if x == groups:
                self.assertEqual(len(self.game.world), 26,
                                 "Found more than 4 ships + baubles in world")

                for player in self.game._tmanager._finalgroup:
                    self.assertTrue(player.object in self.game.world,
                                    "Player's Ship not in final tournament")
                    self.assertLess(
                        player.score, 1,
                        "Players shouldn't have score entering final round")

            for i in xrange(x + 2):
                self.game.world.append(
                    Bauble(
                        intpos(self.game.game_get_current_player_list()[
                            i % 2].object.body.position), 1))
                time.sleep(0.5)

            self.assertTrue(self.game.round_get_has_started(),
                            "Game Timer NOT Running")

            time.sleep(7.5)

            leader = None
            for player in self.game.game_get_current_leader_list():
                print player.name, player.score
                if leader == None:
                    leader = player
                #self.assertGreater(player.score, 10, "Each player should have scored")

            time.sleep(23)

            self.assertFalse(self.game.round_get_has_started(),
                             "Game Timer Running After")

            # Round should end
            self.assertEqual(len(self.game.world), 0,
                             "Objects in World after round")

            # No player should have died
            self.assertEqual(
                self.game.game_get_current_player_list()[0].deaths, 0,
                "Player died")
            self.assertEqual(
                self.game.game_get_current_player_list()[1].deaths, 0,
                "Player died")

            # the leader should still have points
            self.assertGreater(leader.score, 0,
                               "Leader should have scored points")

            if x < groups:
                self.assertEqual(len(self.game._tmanager._finalgroup), x + 1,
                                 "Ship not added to final group")
                self.assertIn(leader, self.game._tmanager._finalgroup,
                              "Correct player not added to final group")
            else:
                # final round
                self.assertIsNotNone(self.game._tmanager._finalwinner,
                                     "Final Winner not marked")
                self.assertEqual(self.game._tmanager._finalwinner, leader,
                                 "Incorrect leader chosen")
                pass
            #eif
        #next round

        time.sleep(3)

        self._endServer()
    def test_full_wild_tournment_with_ties(self):
        """
        Test we take ties to the final round. Out of 8, will have 4 + wildcard + a tie for 6 out of 8...
        """
        ships = []
        numships = 8
        groups = self.cfg.getint("Tournament", "groups")

        for x in xrange(numships):
            ships.append(AIShip_SetList("Move", self.game.world.mid_point(-500 + x * 100, -500 + x * 100), self.game, [
                "IdleCommand(self, random.randint(1, 5))",
            ]))

        for x in xrange(groups + 1):
            self.assertEqual(len(self.game.world), 0, "Objects in World before round")
            self.assertFalse(self.game.round_get_has_started(), "Game Timer Running")

            self.game.round_start()

            time.sleep(2.0)

            if x == groups:
                # Final Round
                self.assertEqual(len(self.game.world), 12, "Found more than 6 ships + baubles in world")

                for player in self.game._tmanager._finalgroup:
                    self.assertTrue(player.object in self.game.world, "Player's Ship not in final tournament")
                    self.assertLess(player.score, 1, "Players shouldn't have score entering final round")

            for i in xrange(x + 2):
                self.game.world.append(Bauble(intpos(self.game.game_get_current_player_list()[i % 2].object.body.position), 1))
                time.sleep(0.5)

            self.assertTrue(self.game.round_get_has_started(), "Game Timer NOT Running")

            time.sleep(7.5)

            leader = None
            for player in self.game.game_get_current_leader_list():
                print player.name, player.score
                if leader == None:
                    leader = player
                #self.assertGreater(player.score, 10, "Each player should have scored")

            time.sleep(7)

            self.assertFalse(self.game.round_get_has_started(), "Game Timer Running After")

            # Round should end
            self.assertEqual(len(self.game.world), 0, "Objects in World after round")

            # No player should have died
            self.assertEqual(self.game.game_get_current_player_list()[0].deaths, 0, "Player died")
            self.assertEqual(self.game.game_get_current_player_list()[1].deaths, 0, "Player died")

            # the leader should still have points
            self.assertGreater(leader.score, 0, "Leader should have scored points")

            if x < groups:
                self.assertEqual(len(self.game._tmanager._finalgroup), x+1, "Ship not added to final group")
                self.assertIn(leader, self.game._tmanager._finalgroup, "Correct player not added to final group")
            else:
                # final round
                self.assertIsNotNone(self.game._tmanager._finalwinners, "Final Winner not marked")
                self.assertIn(leader, self.game._tmanager._finalwinners, "Incorrect leader chosen")
                pass
            #eif
        #next round

        time.sleep(3)