def test_canvas_undo_bucket_fill(): canvas = Canvas(10, 10) line = Line(Point(0, 2), Point(9, 2)) canvas.draw_line(line) expected_cells_after_undo = deepcopy(canvas.cells) canvas.bucket_fill(Point(0, 0), 'o') canvas.undo() assert canvas.cells == expected_cells_after_undo
def test_canvas_delete_colour(): width, height = 10, 10 canvas = Canvas(width, height) line = Line(Point(0, 1), Point(9, 1)) canvas.draw_line(line) expected_cells_after_delete = deepcopy(canvas.cells) canvas.bucket_fill(Point(0, 0), 'o') canvas.delete(Point(0, 0)) assert canvas.cells == expected_cells_after_delete
def test_canvas_bucket_fill_shape(): width, height = 10, 10 canvas = Canvas(width, height) line = Line(Point(0, 1), Point(9, 1)) canvas.draw_line(line) canvas.bucket_fill(Point(0, 1), 'o') #line has been filled for point in line.get_points(): assert canvas.cells[point.x][point.y] == (CanvasCellContentType.Line, 'o') #rest have not been filled for x in range(width): for y in range(height): if Point(x, y) not in line.get_points(): assert canvas.cells[x][y] == (CanvasCellContentType.Empty, ' ')
class TestCanvas(unittest.TestCase): def setUp(self): self.canvas = Canvas(4, 3) def test_init_canvas(self): self.assertEqual(self.canvas.width, 4) self.assertEqual(self.canvas.height, 3) self.assertEqual( self.canvas.canvas, [[' ', ' ', ' ', ' '], [' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ']]) def test_draw_line(self): self.canvas.draw_line(2, 1, 2, 3) self.assertEqual( self.canvas.canvas, [[' ', 'x', ' ', ' '], [' ', 'x', ' ', ' '], [' ', 'x', ' ', ' ']]) def test_draw_rectangle(self): self.canvas.draw_rectangle(2, 1, 4, 3) self.assertEqual( self.canvas.canvas, [[' ', 'x', 'x', 'x'], [' ', 'x', ' ', 'x'], [' ', 'x', 'x', 'x']]) def test_bucket_fill(self): self.canvas.draw_rectangle(2, 1, 4, 3) self.canvas.bucket_fill(1, 1, 'o') self.assertEqual( self.canvas.canvas, [['o', 'x', 'x', 'x'], ['o', 'x', ' ', 'x'], ['o', 'x', 'x', 'x']]) def test_canvas_to_str(self): self.canvas.draw_rectangle(2, 1, 4, 3) self.canvas.bucket_fill(1, 1, 'o') self.assertEqual(str(self.canvas), '------\n|oxxx|\n|ox x|\n|oxxx|\n------') def test_draw_line_error(self): self.assertRaises(DrawError, self.canvas.draw_line, 20, 1, 3, 3) self.assertRaises(DrawError, self.canvas.draw_line, 2, 1, 3, 3) def test_draw_rectangle_error(self): self.assertRaises(DrawError, self.canvas.draw_rectangle, 20, 1, 3, 3) self.assertRaises(DrawError, self.canvas.draw_rectangle, 3, 3, 1, 1) def test_draw_bucket_fill_error(self): self.assertRaises(DrawError, self.canvas.bucket_fill, -2, 1, 'q') self.assertRaises(TypeError, self.canvas.bucket_fill, 3, 3, 2)
def test_canvas_bucket_fill_area(): width, height = 10, 10 canvas = Canvas(width, height) line = Line(Point(0, 2), Point(9, 2)) canvas.draw_line(line) canvas.bucket_fill(Point(0, 0), 'o') #top area have been filled for x in range(width): assert (canvas.cells[x][0] == (CanvasCellContentType.Empty, 'o') and canvas.cells[x][1] == (CanvasCellContentType.Empty, 'o')) #bottom area have not been filled for y in range(3, height): assert canvas.cells[x][y] == (CanvasCellContentType.Empty, ' ') #line have not been filled for point in line.get_points(): assert canvas.cells[point.x][point.y] == (CanvasCellContentType.Line, 'x')
def test_canvas_str(): expected_canvas_str = (" ----- " "\n" "| |" "\n" "|xxxxx|" "\n" "|ooooo|" "\n" "|xxxxx|" "\n" "| |" "\n" " ----- ") canvas = Canvas(5, 5) canvas.draw_line(Line(Point(0, 1), Point(4, 1))) canvas.draw_line(Line(Point(0, 3), Point(4, 3))) canvas.bucket_fill(Point(2, 2), 'o') assert str(canvas) == expected_canvas_str
def test_canvas_bucket_fill_fails_when_target_out_of_bounds(): canvas = Canvas(50, 50) target = Point(100, 25) with pytest.raises(OutOfCanvasBoundError): canvas.bucket_fill(target, 'o')