def test_override_bounds_copy(): # Get the bounds of a Paper, modify them, then set them back changed. paper = Paper() paper.override_bounds(0, 0, 1, 1) bounds = paper.bounds() bounds.right = 5 assert_equal(paper.bounds(), Bounds(0, 0, 1, 1)) paper.override_bounds(bounds) assert_equal(paper.bounds(), Bounds(0, 0, 5, 1)) # This works on non-overridden Papers as well. paper = Paper() p = Pen() p.fill_mode() p.move_to((0.5, 0.5)) p.circle(0.5) bounds = p.paper.bounds() bounds.right = 5 assert_equal(p.paper.bounds(), Bounds(0, 0, 1, 1)) p.paper.override_bounds(bounds) assert_equal(p.paper.bounds(), Bounds(0, 0, 5, 1))
def test_mirror_bounds(): paper = Paper() paper.override_bounds(0, 0, 1, 1) paper.mirror_x(2) assert_equal(paper.bounds(), Bounds(3, 0, 4, 1)) paper.mirror_y(-1) assert_equal(paper.bounds(), Bounds(3, -3, 4, -2))
def test_bounds_union(): assert_equal( Bounds.union_all([ Bounds(-2, -3, 1, 2), Bounds(0, 0, 3, 4), ]), Bounds(-2, -3, 3, 4) )
def test_degenerate(): assert_raises( ValueError, lambda: Bounds(3, 0, 2, 0) ) assert_raises( ValueError, lambda: Bounds(0, 3, 0, 2) )
def test_copy_override_bounds(): paper1 = Paper() paper1.override_bounds(0, 0, 1, 1) paper2 = paper1.copy() assert_equal( paper2.bounds(), Bounds(0, 0, 1, 1), )
def test_draw_bounds(): p = Pen() p.fill_mode() Bounds(-2, -3, 1, 2).draw(p) assert_path_data( p, 0, 'M-2,3 L1,3 L1,-2 L-2,-2 L-2,3 z' )
def test_square_bounds(): p = Pen() p.fill_mode() p.move_to((1, 1)) p.square(4) assert_equal( p.paper.bounds(), Bounds(-1, -1, 3, 3) )
def test_circle_bounds(): p = Pen() p.fill_mode() p.move_to((1, 1)) p.circle(1.5) assert_equal( p.paper.bounds(), Bounds(-0.5, -0.5, 2.5, 2.5) )
def test_line_segment_bounds(): # Fill mode segment. p = Pen() p.fill_mode() p.move_to((1, 0)) p.line_to((2, 3)) line = p.last_segment() assert_equal( line.bounds(), Bounds(1, 0, 2, 3) ) # Stroke mode segment. p = Pen() p.stroke_mode(sqrt2) p.move_to((0, 0)) p.line_to((5, 5)) line = p.last_segment() assert_equal( line.bounds(), Bounds(-0.5, -0.5, 5.5, 5.5) )
def test_translate_override_bounds(): # Translate a paper that has overridden bounds. The bounds update as well. paper = Paper() paper.override_bounds(0, 0, 1, 1) paper.translate((3, 4)) assert_equal(paper.bounds(), Bounds(3, 4, 4, 5)) # When bounds=False is passed, then the bounds do not update. paper = Paper() paper.override_bounds(0, 0, 1, 1) paper.translate((3, 4), bounds=False) assert_equal(paper.bounds(), Bounds(0, 0, 1, 1)) # This also works if the bounds are not overridden. p = Pen() p.fill_mode() p.move_to((0.5, 0.5)) p.circle(0.5) assert_equal(p.paper.bounds(), Bounds(0, 0, 1, 1)) p.paper.translate((3, 4), bounds=False) assert_equal(p.paper.bounds(), Bounds(0, 0, 1, 1)) assert_equal(p.last_path().bounds(), Bounds(3, 4, 4, 5))
def test_iter(): bounds = Bounds(1, 2, 3, 4) assert_equal( tuple(bounds), (1, 2, 3, 4), )
def test_repr(): assert_equal( repr(Bounds(-2, -3, 1, 2)), 'Bounds(-2, -3, 1, 2)', )
def test_arc_segment_bounds(): # Arc which occupies its entire circle. p = Pen() p.fill_mode() p.move_to((1, 0)) p.turn_to(90) p.arc_left(359, 1) arc = p.last_segment() assert_equal( arc.bounds(), Bounds(-1, -1, 1, 1) ) # Arc which pushes the boundary only with the endpoints. p = Pen() p.fill_mode() p.move_to((0, 0)) p.turn_to(30) p.move_forward(1) p.turn_left(90) p.arc_left(30, center=(0, 0)) arc = p.last_segment() assert_equal( arc.bounds(), Bounds(0.5, 0.5, sqrt3 / 2, sqrt3 / 2) ) # Arc which pushes the boundary with the middle in one spot. p = Pen() p.fill_mode() p.move_to((0, 0)) p.turn_to(-45) p.move_forward(1) p.turn_left(90) p.arc_left(90, center=(0, 0)) arc = p.last_segment() assert_equal( arc.bounds(), Bounds(sqrt2 / 2, -sqrt2 / 2, 1, sqrt2 / 2) ) # Arc which goes right. p = Pen() p.fill_mode() p.move_to((0, 0)) p.turn_to(45) p.arc_right(90, 3) arc = p.last_segment() assert_equal( arc.bounds(), Bounds(0, 0, 3 * sqrt2, 3 - 1.5 * sqrt2) ) # Arc which pushes the boundary with the middle in two spots. p = Pen() p.fill_mode() p.move_to((0, 0)) p.turn_to(-45) p.move_forward(1) p.turn_left(90) p.arc_left(180, center=(0, 0)) arc = p.last_segment() assert_equal( arc.bounds(), Bounds(-sqrt2 / 2, -sqrt2 / 2, 1, 1) ) # Half circle, right side p = Pen() p.fill_mode() p.move_to((0, 0)) p.turn_to(0) p.arc_right(180, 5) arc = p.last_segment() assert_equal( arc.bounds(), Bounds(0, -10, 5, 0) ) # Thick circle, p = Pen() p.stroke_mode(1.0) p.move_to((0, 0)) p.turn_to(0) p.move_forward(5) p.turn_left(90) p.arc_left(180, 5, start_slant=45) arc = p.last_segment() assert_equal( arc.bounds(), Bounds(-5.5, -0.5314980314970469, 5.5, 5.5) )
def test_merge_bounds(): def draw(): p = Pen() p.fill_mode() p.move_to((0, 0)) p.circle(2) paper1 = p.paper p = Pen() p.fill_mode() p.move_to((3, 0)) p.circle(1) paper2 = p.paper return paper1, paper2 # Empty papers, no overridden bounds. paper1 = Paper() paper2 = Paper() paper1.merge(paper2) assert_raises(ValueError, lambda: paper1.bounds()) # Empty papers with overridden bounds on both sides. paper1 = Paper() paper1.override_bounds(0, 0, 1, 1) paper2 = Paper() paper2.override_bounds(1, 0, 2, 1) paper1.merge(paper2) assert_equal(paper1.bounds(), Bounds(0, 0, 2, 1)) # No bounds overriding or merging. paper1, paper2 = draw() assert_equal(paper1.bounds(), Bounds(-2, -2, 2, 2)) assert_equal(paper2.bounds(), Bounds(2, -1, 4, 1)) # Merge with no overriding. paper1, paper2 = draw() paper1.merge(paper2) assert_equal(paper1.bounds(), Bounds(-2, -2, 4, 2)) # Override the top one. paper1, paper2 = draw() paper2.override_bounds(-1, -1, 1, 1) paper1.merge(paper2) assert_equal(paper1.bounds(), Bounds(-2, -2, 2, 2)) # Override the bottom one. paper1, paper2 = draw() bounds = paper1.bounds() bounds.top = 10 paper1.override_bounds(bounds) paper1.merge(paper2) assert_equal(paper1.bounds(), Bounds(-2, -2, 4, 10)) # Empty bounds on bottom page. paper1, paper2 = draw() paper1.override_bounds(-1, -1, 1, 1) paper3 = Paper() paper3.merge(paper1) assert_equal(paper3.bounds(), Bounds(-1, -1, 1, 1)) # Empty bounds on top page. paper1, paper2 = draw() paper3 = Paper() paper1.override_bounds(-1, -1, 1, 1) paper1.merge(paper3) assert_equal(paper1.bounds(), Bounds(-1, -1, 1, 1))