コード例 #1
0
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
コード例 #2
0
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
コード例 #3
0
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, ' ')
コード例 #4
0
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)
コード例 #5
0
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')
コード例 #6
0
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
コード例 #7
0
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')