Example #1
0
    def test_generate_bad(self):
        for (width, height) in (([], 1), (1, []), ([], [])):
            with self.assertRaises(TypeError):
                Field((width, height), 2)

        for bombs in (-10, 0, 9, 10):
            with self.assertRaises(ValueError):
                Field.generate((3, 3), bombs)
Example #2
0
    def test_neighbor(self):
        field = Field((3, 3), {(0, 0), (0, 1), (1, 0), (1, 1), (2, 2)})

        with self.assertRaises(ValueError):
            field.neighbor_bombs((1, 0, 1))

        for (c, cell) in ((3, (0, 0)), (4, (1, 1)), (2, (0, 2))):
            self.assertEqual(c, field.neighbor_bombs(cell))
Example #3
0
 def test_eq_operator(self):
     f1 = Field.generate((10, 10), 5)
     f2 = Field.generate((10, 10), 6)
     f3 = Field.generate((6, 6), 5)
     fx = []
     self.assertNotEqual(f1, f2)
     self.assertNotEqual(f2, f3)
     self.assertNotEqual(f3, fx)
     self.assertEqual(f1, f1)
Example #4
0
    def test_coords_check(self):
        field = Field((10, 7), {})

        self.assertFalse(field.check_coords((1, 0, 1)))

        for cell in ((5, 5), (0, 0), (0, 6), (9, 0), (9, 6)):
            self.assertTrue(field.check_coords(cell))

        for cell in ((-1, 4), (1, -4), (-1, -4), (10, 4), (1, 7), (10, 7)):
            self.assertFalse(field.check_coords(cell))
Example #5
0
    def test_add_score_bad(self):
        scoreboard = Scoreboard(self.fn)

        with self.assertRaises(TypeError):
            scoreboard.add_score([], "player", 100)

        with self.assertRaises(ValueError):
            scoreboard.add_score(Field((6, 6), ()), "player", 0)

        with self.assertRaises(ValueError):
            scoreboard.add_score(Field((6, 6), ()), "player", -100)
Example #6
0
    def test_neighbor_cells(self):
        field = Field((4, 4), {})

        with self.assertRaises(ValueError):
            set(field.neighbor_cells((1, 0, 1)))

        for (cell, ans) in (((0, 0), {(0, 1), (1, 0), (1, 1)}),
                            ((0, 1), {(0, 0), (0, 2), (1, 0), (1, 1), (1, 2)}),
                            ((1, 1), {(0, 0), (0, 1), (0, 2), (1, 0), (1, 2),
                                      (2, 0), (2, 1), (2, 2)})):
            self.assertSetEqual(ans, set(field.neighbor_cells(cell)))
Example #7
0
    def test_add_score(self):
        scoreboard = Scoreboard(self.fn)

        params = ((8, 8), 10)
        self.assertListEqual([], scoreboard.get_scores(*params))

        scoreboard.add_score(Field.generate(*params), "u1", 1500)
        scoreboard.add_score(Field.generate(*params), "u2", 400)
        scoreboard.add_score(Field.generate(*params), "u3", 5000)
        self.assertListEqual([("u2", 400.0), ("u1", 1500.0), ("u3", 5000.0)],
                             scoreboard.get_scores(*params))

        _ = Scoreboard(self.fn)
        self.assertEqual(3, len(scoreboard.get_scores(*params)))
Example #8
0
    def test_add_score(self):
        scoreboard = Scoreboard(self.fn)

        params = ((8, 8), 10)
        self.assertListEqual([], scoreboard.get_scores(*params))

        scoreboard.add_score(Field.generate(*params), "u1", 1500)
        scoreboard.add_score(Field.generate(*params), "u2", 400)
        scoreboard.add_score(Field.generate(*params), "u3", 5000)
        self.assertListEqual([("u2", 400.0), ("u1", 1500.0), ("u3", 5000.0)],
                             scoreboard.get_scores(*params))

        _ = Scoreboard(self.fn)
        self.assertEqual(3, len(scoreboard.get_scores(*params)))
Example #9
0
    def test_init_bad(self):
        for (width, height) in (([], 1), (1, []), ([], [])):
            with self.assertRaises(TypeError):
                Field((width, height), {})

        for (width, height) in ((0, 10), (-10, 10), (10, 0), (10, -10)):
            with self.assertRaises(ValueError):
                Field((width, height), {})

        for bombs in ({(4, 2)}, {(1, 1, 1)}):
            with self.assertRaises(ValueError):
                Field((3, 3), bombs)

        with self.assertRaises(ValueError):
            Field((2, 2, 2), {(0, 0)})
Example #10
0
    def test_neighbor_flags(self):
        state = GameState(Field((4, 4), {(0, 0)}))
        for cell in ((0, 0), (2, 0), (1, 2)):
            state.set_flag(cell)

        for (cell, ans) in (((0, 0), 0), ((1, 1), 3), ((1, 0), 2)):
            self.assertEqual(ans, state.neighbor_flags(cell))
Example #11
0
    def test_open_cell(self):
        field = Field((4, 3), {(0, 0), (2, 0)})

        state1 = GameState(field)

        self.assertTrue(state1.open_cell((10, 10)))
        self.assertEqual(GameState(field), state1)

        self.assertTrue(state1.open_cell((3, 2)))
        self.assertEqual(4, state1.unmarked_cells())
        self.assertSetEqual(
            {state1.get_state((x, y)) for x in (0, 1, 2, 3) for y in (1, 2)},
            {CellState.OPENED})

        self.assertFalse(state1.open_cell((0, 0)))
        self.assertEqual(4, state1.unmarked_cells())

        state2 = GameState(field)
        state2.set_flag((2, 2))
        self.assertTrue(state2.open_cell((3, 2)))
        self.assertEqual(8, state2.unmarked_cells())
        self.assertSetEqual(
            {state2.get_state((x, y)) for x in (2, 3) for y in (1, 2)},
            {CellState.OPENED, CellState.FLAG})

        self.assertTrue(state2.open_cell((2, 2)))
        self.assertEqual(8, state2.unmarked_cells())
Example #12
0
    def test_flags(self):
        def check_state(state, flags, unmarked, cells=()):
            self.assertEqual(flags, state.flags())
            self.assertEqual(unmarked, state.unmarked_cells())
            for cell in cells:
                self.assertEqual(cell[1], state.get_state(cell[0]))

        state = GameState(Field((5, 4), {(1, 0), (1, 2), (3, 2)}))
        check_state(state, 0, 20, [((2, 2), CellState.UNKNOWN)])

        self.assertFalse(state.unset_flag((2, 2)))
        check_state(state, 0, 20, [((2, 2), CellState.UNKNOWN)])

        self.assertTrue(state.set_flag((2, 2)))
        check_state(state, 1, 19, [((2, 2), CellState.FLAG)])
        self.assertFalse(state.set_flag((2, 2)))
        check_state(state, 1, 19, [((2, 2), CellState.FLAG)])

        self.assertTrue(state.unset_flag((2, 2)))
        check_state(state, 0, 20, [((2, 2), CellState.UNKNOWN)])

        self.assertFalse(state.set_flag((10, 10)))
        check_state(state, 0, 20)

        self.assertFalse(state.unset_flag((10, 10)))
        check_state(state, 0, 20)

        state.open_cell((4, 0))
        check_state(state, 0, 14)
        self.assertFalse(state.set_flag((4, 1)))
        check_state(state, 0, 14)
Example #13
0
 def test_save_and_load(self):
     field = Field((4, 4), {(0, 2), (3, 1), (1, 1), (2, 3), (0, 1), (1, 0)})
     state = GameState(field)
     state.open_cell((0, 0))
     for cell in ((1, 0), (0, 1), (1, 1)):
         state.set_flag(cell)
     self.assertEqual(state, GameState.fromstr(str(state), field))
Example #14
0
    def test_open_cell(self):
        callargs = []
        self.game.add_event_handler(EventTypes.CELL_CHANGED,
                                    lambda *args: callargs.append(args))

        self.game.open_cell((0, 0))
        self.assertListEqual([], callargs)

        with patch_field_generator(Field((4, 3), {(0, 0), (2, 0)})):
            self.game.new_game((4, 3), 2)

        self.game.open_cell((3, 2))
        self.assertEqual(8, len(callargs))
        self.assertSetEqual(
            {e[0]
             for e in callargs if e[1] == CellState.OPENED},
            {(x, y)
             for x in (0, 1, 2, 3) for y in (1, 2)})

        self.game.again()
        callargs = []
        self.game.open_cell(('3', '2'))
        self.assertEqual(8, len(callargs))

        self.assertFalse(self.game.is_win())
        self.game.open_cell((3, 2))
        self.assertEqual(8, len(callargs))
Example #15
0
 def test_init_state(self):
     field = Field((2, 2), {(0, 0), (1, 1)})
     state = GameState(field)
     self.assertEqual(0, state.flags())
     self.assertEqual(4, state.unmarked_cells())
     for cell in ((0, 0), (1, 0), (0, 1), (1, 1)):
         self.assertEqual(CellState.UNKNOWN, state.get_state(cell))
     self.assertFalse(state.check_win())
Example #16
0
 def test_checkparams(self):
     self.assertFalse(Field.check_params((10, 10), 0)[0])
     self.assertFalse(Field.check_params((10, 10), 200)[0])
     self.assertFalse(Field.check_params((3, 3, 3), 100)[0])
     self.assertFalse(Field.check_params((10,), 5)[0])
     self.assertTrue(Field.check_params((10, 10), 8)[0])
     self.assertTrue(Field.check_params((3, 3, 3), 10)[0])
Example #17
0
    def test_eq_operator(self):
        field = Field((3, 3), {(0, 1), (1, 0), (1, 1)})
        state0 = GameState(field)
        state1 = GameState(field)
        self.assertEqual(state0, state1)

        state0.set_flag((1, 1))
        self.assertNotEqual(state0, state1)
        state0.unset_flag((1, 1))
        self.assertEqual(state0, state1)

        state2 = GameState(field)
        state2.open_cell((0, 0))
        self.assertNotEqual(state1, state2)

        state3 = GameState(field)
        state3.open_cell((2, 2))
        self.assertNotEqual(state1, state3)

        self.assertNotEqual(state0, [])
        self.assertNotEqual(GameState(Field.generate((2, 2), 1)),
                            GameState(Field.generate((2, 2), 2)))
Example #18
0
    def test_neighbors(self):
        self.assertIsNone(self.game.get_neighbors((0, 0)))

        with patch_field_generator(Field((3, 3), {(0, 0), (2, 0)})):
            self.game.new_game((3, 3), 2)

        self.game.open_cell((2, 2))
        self.assertListEqual(
            [1, 2, 1], [self.game.get_neighbors((x, 1)) for x in (0, 1, 2)])
        self.assertListEqual(
            [1, 2, 1], [self.game.get_neighbors((x, '1')) for x in (0, 1, 2)])
        self.assertListEqual(
            [0, 0, 0], [self.game.get_neighbors((x, 2)) for x in (0, 1, 2)])
Example #19
0
    def test_handler_remove(self):
        state = GameState(Field.generate((2, 2), 2))

        callargs = []
        handler = lambda *args: callargs.append(args)

        state.add_cell_handler(handler)
        state.set_flag((0, 0))
        self.assertEqual(1, len(callargs))

        state.remove_cell_handler(handler)
        state.set_flag((1, 1))
        self.assertEqual(1, len(callargs))
Example #20
0
    def test_handler_open(self):
        state = GameState(Field((3, 3), {(1, 0)}))
        callargs = []
        state.add_cell_handler(lambda *args: callargs.append(args))

        state.open_cell((0, 0))
        self.assertEqual(1, len(callargs))
        self.assertEqual(((0, 0), CellState.OPENED), callargs[-1])

        state.open_cell((2, 2))
        self.assertEqual(7, len(callargs))
        self.assertSetEqual(
            {((x, y), CellState.OPENED) for x in (0, 1, 2) for y in (1, 2)},
            set(callargs[1:]))
Example #21
0
    def test_init_field(self):
        field = Field((3, "4"), {(0, 0), (2, 3), (0, 2)})
        self.assertEqual(3, field.bombs())
        self.assertTupleEqual((3, 4), field.size())
        for cell in ((0, 0), (2, 3), (0, 2)):
            self.assertTrue(field.check_bomb(cell))

        for cell in ((1, 1), (0, 1), (2, 2)):
            self.assertFalse(field.check_bomb(cell))
Example #22
0
    def test_handler_flag(self):
        state = GameState(Field.generate((5, 5), 8))
        callargs = []
        state.add_cell_handler(lambda *args: callargs.append(args))

        state.set_flag((2, 4))
        self.assertEqual(1, len(callargs))
        self.assertEqual(((2, 4), CellState.FLAG), callargs[-1])

        state.set_flag((2, 4))
        self.assertEqual(1, len(callargs))

        state.unset_flag((2, 4))
        self.assertEqual(2, len(callargs))
        self.assertEqual(((2, 4), CellState.UNKNOWN), callargs[-1])
Example #23
0
    def test_handler_load(self):
        field = Field((3, 3), {(1, 0)})
        state = GameState(field)
        state.set_flag((0, 0))
        state.open_cell((2, 2))

        callargs = []
        loaded = GameState.fromstr(str(state), field,
                                   lambda *args: callargs.append(args))

        self.assertEqual(7, len(callargs))
        self.assertSetEqual(
            {((x, y), CellState.OPENED) for x in (0, 1, 2) for y in (1, 2)} |
            {((0, 0), CellState.FLAG)},
            set(callargs))
Example #24
0
    def test_lose(self):
        field = Field((3, 3), {(0, 0), (2, 0)})
        with patch_field_generator(field):
            self.game.new_game((3, 3), 2)

        callargs = []
        self.game.add_event_handler(EventTypes.PLAYER_LOSE,
                                    lambda *args: callargs.append(args))

        self.game.open_cell((1, 2))
        self.assertFalse(self.game.is_lose())
        self.assertListEqual([], callargs)

        self.game.open_cell((0, 0))
        self.assertTrue(self.game.is_lose())
        self.assertTrue(self.game.saved())
        self.assertListEqual([(field, (0, 0))], callargs)
Example #25
0
    def test_state(self):
        self.assertIsNone(self.game.get_state())

        with patch_field_generator(Field((2, 2), {(0, 0)})):
            self.game.new_game((2, 2), 1)

        callargs = []
        self.game.add_event_handler(EventTypes.CELL_CHANGED,
                                    lambda *args: callargs.append(args))

        self.game.open_cell((1, 1))
        state = self.game.get_state()
        self.assertEqual(CellState.OPENED, state.get_state((1, 1)))

        self.assertEqual(1, len(callargs))
        state.open_cell((1, 0))
        self.assertEqual(1, len(callargs))
        state.set_flag((0, 0))
        self.assertEqual(0, self.game.flags())
Example #26
0
    def test_save_load(self):
        with tempfile.NamedTemporaryFile(delete=False) as f:
            name = f.name

        try:
            with patch_field_generator(Field((4, 3), {(0, 0), (3, 1)})):
                self.game.new_game((4, 3), 2)

            self.game.open_cell((0, 2))
            self.game.invert_flag((0, 0))
            self.game.invert_flag((1, 0))
            time.sleep(0.3)
            self.game.undo()
            self.assertFalse(self.game.saved())
            self.game.save_game(name)
            self.assertTrue(self.game.saved())
            self.game.new_game((5, 5), 10)

            callargs = []
            for evt_type in (EventTypes.NEW_GAME, EventTypes.CELL_CHANGED):
                self.game.add_event_handler(
                    evt_type, lambda *args: callargs.append(args))

            self.game.load_game(name)
            self.assertEqual(((4, 3), 2), callargs[0])
            self.assertSetEqual(
                {(0, 0)}, {x[0]
                           for x in callargs if x[1] == CellState.FLAG})
            self.assertSetEqual(
                {(x, y)
                 for x in (0, 1, 2) for y in (1, 2)},
                {x[0]
                 for x in callargs if x[1] == CellState.OPENED})
            self.assertSetEqual(
                {(1, 0), (2, 0), (3, 0), (3, 1), (3, 2)},
                {x[0]
                 for x in callargs if x[1] == CellState.UNKNOWN})
            self.assertGreaterEqual(self.game.get_time(), 30)
            self.assertTrue(self.game.can_undo())
        finally:
            if os.path.exists(name):
                os.remove(name)
Example #27
0
    def test_clone(self):
        calls = 0

        def handler(*args):
            nonlocal calls
            calls += 1

        state = GameState(Field.generate((10, 15), 21))
        state.add_cell_handler(handler)

        state2 = copy.copy(state)
        self.assertEqual(state, state2)
        state2.set_flag((0, 0))
        self.assertNotEqual(state, state2)
        self.assertEqual(1, calls)
        state2.remove_cell_handler(handler)
        state2.set_flag((1, 0))
        self.assertEqual(1, calls)
        state.set_flag((5, 0))
        self.assertEqual(2, calls)
Example #28
0
    def test_win(self):
        state = GameState(Field((4, 3), {(0, 0), (2, 0)}))
        self.assertFalse(state.check_win())

        state.set_flag((0, 0))
        state.set_flag((2, 0))
        self.assertFalse(state.check_win())
        state.unset_flag((0, 0))
        state.unset_flag((2, 0))

        state.open_cell((2, 2))
        self.assertFalse(state.check_win())

        state.set_flag((0, 0))
        state.open_cell((1, 0))
        state.open_cell((3, 0))
        self.assertFalse(state.check_win())

        state.set_flag((2, 0))
        self.assertTrue(state.check_win())
Example #29
0
    def test_time(self):
        with self.subTest('flags'):
            self.game.new_game((3, 3), 2)

            self.assertEqual(0, self.game.get_time())
            time.sleep(0.1)
            self.assertEqual(0, self.game.get_time())

            self.game.invert_flag((0, 0))
            time.sleep(0.1)
            self.assertGreaterEqual(self.game.get_time(), 10)

        with self.subTest('open'):
            with patch_field_generator(Field((3, 3), {(0, 0), (2, 0)})):
                self.game.new_game((3, 3), 2)

            self.assertEqual(0, self.game.get_time())
            self.game.open_cell((2, 2))
            time.sleep(0.2)
            self.assertGreaterEqual(self.game.get_time(), 20)

        with self.subTest('load'):
            self.game.again()
            self.game.open_cell((2, 2))
            time.sleep(0.15)

            try:
                with tempfile.NamedTemporaryFile(delete=False) as f:
                    name = f.name

                self.game.save_game(name)

                self.game.new_game((10, 10), 10)
                self.game.load_game(name)

                self.assertGreaterEqual(self.game.get_time(), 15)
                time.sleep(0.1)
                self.assertGreaterEqual(self.game.get_time(), 25)
            finally:
                if os.path.exists(name):
                    os.remove(name)
Example #30
0
    def test_again(self):
        with patch_field_generator(Field((2, 2), {(0, 0)})):
            self.game.new_game((2, 2), 1)

        self.game.invert_flag((0, 0))
        self.assertEqual(1, self.game.flags())
        self.game.again()
        self.assertEqual(0, self.game.flags())

        for coords in ((0, 1), (1, 0), (1, 1)):
            self.game.open_cell(coords)
        self.assertFalse(self.game.is_win())
        self.game.invert_flag((0, 0))
        self.assertTrue(self.game.is_win())
        self.game.again()
        self.assertFalse(self.game.is_win())

        self.assertFalse(self.game.is_lose())
        self.game.open_cell((0, 0))
        self.assertTrue(self.game.is_lose())
        self.game.again()
        self.assertFalse(self.game.is_lose())
Example #31
0
    def test_flags(self):
        callargs = []
        self.game.add_event_handler(EventTypes.CELL_CHANGED,
                                    lambda *args: callargs.append(args))

        self.game.invert_flag((0, 0))
        self.assertListEqual([], callargs)

        with patch_field_generator(Field((4, 3), {(0, 0), (2, 0)})):
            self.game.new_game((4, 3), 2)

        self.game.invert_flag((0, 2))
        self.assertListEqual([((0, 2), CellState.FLAG)], callargs)
        self.game.open_cell((3, 2))
        self.assertEqual(8, len(callargs))

        self.game.invert_flag(('0', '2'))
        self.assertEqual(((0, 2), CellState.UNKNOWN), callargs[-1])

        self.game.invert_flag((0, 0))
        self.assertFalse(self.game.is_lose())
        self.game.open_cell((0, 0))
        self.assertFalse(self.game.is_lose())
Example #32
0
 def test_load_bad(self):
     with self.assertRaises(ValueError):
         Field.fromstr('2;2;1,x,1')
Example #33
0
 def test_handler_bad(self):
     state = GameState(Field.generate((2, 2), 1))
     with self.assertRaises(TypeError):
         state.add_cell_handler([])
Example #34
0
 def test_save_and_load(self):
     field = Field.generate((10, 10), 15)
     self.assertEqual(field, Field.fromstr(str(field)))
Example #35
0
 def test_generate(self):
     field = Field.generate(('5', '7'), '10')
     self.assertEqual((5, 7), field.size())
     self.assertEqual(10, field.bombs())