Beispiel #1
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())
Beispiel #2
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)
Beispiel #3
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))
Beispiel #4
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:]))
Beispiel #5
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))
Beispiel #6
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())
Beispiel #7
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)))