Files
python/exercises/minesweeper/minesweeper_test.py

163 lines
3.8 KiB
Python
Raw Normal View History

""" Tests for the minesweeper exercise
Implementation note:
The board function must validate its input and raise a
ValueError with a meaningfull error message if the
input turns out to be malformed.
"""
2014-03-28 22:19:26 -03:00
import unittest
from minesweeper import board
# Tests adapted from `problem-specifications//canonical-data.json` @ v1.1.0
2014-03-28 22:19:26 -03:00
class MinesweeperTest(unittest.TestCase):
def test_no_rows(self):
self.assertEqual(board([]), [])
def test_no_columns(self):
self.assertEqual(board([""]), [""])
def test_no_mines(self):
inp = [" ",
" ",
" "]
out = [" ",
" ",
" "]
self.assertEqual(board(inp), out)
def test_board_with_only_mines(self):
inp = ["***",
"***",
"***"]
out = ["***",
"***",
"***"]
self.assertEqual(board(inp), out)
2014-03-28 22:19:26 -03:00
def test_mine_surrounded_by_spaces(self):
inp = [" ",
" * ",
" "]
out = ["111",
"1*1",
"111"]
self.assertEqual(board(inp), out)
2014-03-28 22:19:26 -03:00
def test_space_surrounded_by_mines(self):
inp = ["***",
"* *",
"***"]
out = ["***",
"*8*",
"***"]
self.assertEqual(board(inp), out)
2014-03-28 22:19:26 -03:00
def test_horizontal_line(self):
inp = [" * * "]
out = ["1*2*1"]
self.assertEqual(board(inp), out)
2014-03-28 22:19:26 -03:00
def test_horizontal_line_mines_at_edges(self):
inp = ["* *"]
out = ["*1 1*"]
self.assertEqual(board(inp), out)
2014-03-28 22:19:26 -03:00
def test_vertical_line(self):
inp = [" ",
"*",
" ",
"*",
" "]
out = ["1",
"*",
"2",
"*",
"1"]
self.assertEqual(board(inp), out)
2014-03-28 22:19:26 -03:00
def test_vertical_line_mines_at_edges(self):
inp = ["*",
" ",
" ",
" ",
"*"]
out = ["*",
"1",
" ",
"1",
"*"]
self.assertEqual(board(inp), out)
2014-03-28 22:19:26 -03:00
def test_cross(self):
inp = [" * ",
" * ",
"*****",
" * ",
" * "]
out = [" 2*2 ",
"25*52",
"*****",
"25*52",
" 2*2 "]
self.assertEqual(board(inp), out)
2014-03-28 22:19:26 -03:00
def test_large_board(self):
inp = [" * * ",
" * ",
" * ",
" * *",
" * * ",
" "]
out = ["1*22*1",
"12*322",
" 123*2",
"112*4*",
"1*22*2",
"111111"]
self.assertEqual(board(inp), out)
# Additional test for this track
2014-03-28 22:19:26 -03:00
def test_board9(self):
inp = [" ",
" * ",
" ",
" ",
" * "]
out = [" 111",
" 1*1",
" 111",
"111 ",
"1*1 "]
self.assertEqual(board(inp), out)
2014-03-28 22:19:26 -03:00
def test_different_len(self):
inp = [" ",
"* ",
" "]
with self.assertRaisesWithMessage(ValueError):
board(inp)
2014-03-28 22:19:26 -03:00
def test_invalid_char(self):
inp = ["X * "]
with self.assertRaisesWithMessage(ValueError):
board(inp)
2014-03-28 22:19:26 -03:00
# Utility functions
def setUp(self):
try:
self.assertRaisesRegex
except AttributeError:
self.assertRaisesRegex = self.assertRaisesRegexp
def assertRaisesWithMessage(self, exception):
return self.assertRaisesRegex(exception, r".+")
2014-03-28 22:19:26 -03:00
if __name__ == '__main__':
unittest.main()