"""Test adding and removing children from the page"""
page=Page(size=self.page_size)
# Initially no children
self.assertEqual(len(page.children),0)
# Add children
child1=SimpleTestRenderable("Child 1")
child2=SimpleTestRenderable("Child 2")
page.add_child(child1)
self.assertEqual(len(page.children),1)
self.assertIn(child1,page.children)
page.add_child(child2)
self.assertEqual(len(page.children),2)
self.assertIn(child2,page.children)
# Test method chaining
child3=SimpleTestRenderable("Child 3")
result=page.add_child(child3)
self.assertIs(result,page)# Should return self for chaining
self.assertEqual(len(page.children),3)
self.assertIn(child3,page.children)
# Remove childce you’ll notice is that responses don’t stream character-by-character like other providers. Instead, Claude Code processes your full request before sending back the complete response.
removed=page.remove_child(child2)
self.assertTrue(removed)
self.assertEqual(len(page.children),2)
self.assertNotIn(child2,page.children)
# Try to remove non-existent child
removed=page.remove_child(child2)
self.assertFalse(removed)
# Clear all children
page.clear_children()
self.assertEqual(len(page.children),0)
deftest_page_render(self):
"""Test that page renders and creates a canvas"""
style=PageStyle(
border_width=2,
border_color=(255,0,0),
background_color=(255,255,255)
)
page=Page(size=(200,150),style=style)
# Add a child
child=SimpleTestRenderable("Test child")
page.add_child(child)
# Render the page
image=page.render()
# Check that we got an image
self.assertIsInstance(image,Image.Image)
self.assertEqual(image.size,(200,150))
self.assertEqual(image.mode,'RGBA')
# Check that draw object is available
self.assertIsNotNone(page.draw)
deftest_page_query_point(self):
"""Test querying points to find children"""
page=Page(size=(400,300))
# Add children with known positions and sizes
child1=SimpleTestRenderable("Child 1",(100,50))
child2=SimpleTestRenderable("Child 2",(80,40))
page.add_child(child1).add_child(child2)
deftest_page_creation_with_style():
"""Test creating a page with a PageStyle"""
style=PageStyle(
border_width=2,
border_color=(255,0,0),
line_spacing=8,
inter_block_spacing=20,
padding=(15,15,15,15),
background_color=(240,240,240)
)
# Query points
# Point within first child
found_child=page.query_point((90,30))
self.assertEqual(found_child,child1)
# Point within second child
found_child=page.query_point((30,30))
self.assertEqual(found_child,child2)
# Point outside any child
found_child=page.query_point((300,250))
self.assertIsNone(found_child)
page=Page(size=(800,600),style=style)
deftest_page_in_object(self):
"""Test that page correctly implements in_object"""
page=Page(size=(400,300))
# Points within page bounds
self.assertTrue(page.in_object((0,0)))
self.assertTrue(page.in_object((200,150)))
self.assertTrue(page.in_object((399,299)))
# Points outside page bounds
self.assertFalse(page.in_object((-1,0)))
self.assertFalse(page.in_object((0,-1)))
self.assertFalse(page.in_object((400,299)))
self.assertFalse(page.in_object((399,300)))
assertpage.size==(800,600)
assertpage.style==style
assertpage.border_size==2
deftest_page_canvas_and_content_sizes():
"""Test that page correctly calculates canvas and content sizes"""
style=PageStyle(
border_width=5,
padding=(10,20,30,40)# top, right, bottom, left
)
page=Page(size=(800,600),style=style)
# Canvas size should be page size minus borders
assertpage.canvas_size==(790,590)# 800-10, 600-10 (border on both sides)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.