Files
python/exercises/minesweeper/minesweeper_test.py
Sean 16ba6f52d1 minesweeper: update tests to version 1.1.0 (#1062)
* minesweeper: update tests to version 1.1.0

Add missing test version comment.
Add ordered tests with names matching canonical data descriptions.
Disable empty board tests which are incompatible with board class.
Move selected old tests to additional tests section.
Convert no row/column tests to expect validation to raise ValueError.
Closes #998

* minesweeper: update test data to canonical format 1.0.0

Update test data to borderless format which matches canonical data format.
Change board verification to not test for borders and default example to
properly return a completely empty board and account for new index when there
is no border.
2017-11-13 13:36:02 +00:00

153 lines
3.5 KiB
Python

""" 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.
"""
import unittest
from minesweeper import board
# Tests adapted from `problem-specifications//canonical-data.json` @ v1.0.0
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)
def test_mine_surrounded_by_spaces(self):
inp = [" ",
" * ",
" "]
out = ["111",
"1*1",
"111"]
self.assertEqual(board(inp), out)
def test_space_surrounded_by_mines(self):
inp = ["***",
"* *",
"***"]
out = ["***",
"*8*",
"***"]
self.assertEqual(board(inp), out)
def test_horizontal_line(self):
inp = [" * * "]
out = ["1*2*1"]
self.assertEqual(board(inp), out)
def test_horizontal_line_mines_at_edges(self):
inp = ["* *"]
out = ["*1 1*"]
self.assertEqual(board(inp), out)
def test_vertical_line(self):
inp = [" ",
"*",
" ",
"*",
" "]
out = ["1",
"*",
"2",
"*",
"1"]
self.assertEqual(board(inp), out)
def test_vertical_line_mines_at_edges(self):
inp = ["*",
" ",
" ",
" ",
"*"]
out = ["*",
"1",
" ",
"1",
"*"]
self.assertEqual(board(inp), out)
def test_cross(self):
inp = [" * ",
" * ",
"*****",
" * ",
" * "]
out = [" 2*2 ",
"25*52",
"*****",
"25*52",
" 2*2 "]
self.assertEqual(board(inp), out)
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
def test_board9(self):
inp = [" ",
" * ",
" ",
" ",
" * "]
out = [" 111",
" 1*1",
" 111",
"111 ",
"1*1 "]
self.assertEqual(board(inp), out)
def test_different_len(self):
inp = [" ",
"* ",
" "]
with self.assertRaises(ValueError):
board(inp)
def test_invalid_char(self):
inp = ["X * "]
with self.assertRaises(ValueError):
board(inp)
if __name__ == '__main__':
unittest.main()