void AbsoluteLayout::onDraw(Canvas *c) {
	// draw all views in this ViewGroup
	std::list<View*>* views = this->getViews();
	for(std::list<View*>::iterator it = views->begin(); it != views->end(); it++) {
		// create canvas for view
		Canvas canvas_view((*it)->getPreferredWidth(), (*it)->getPreferredHeight());

		// render the view
		(*it)->onDraw(&canvas_view);

		// draw view's canvas on this layout's canvas
		c->drawCanvas(&canvas_view, (*it)->getPosX(), (*it)->getPosY());
	}
}
TEST(container_view_test, drawing_a_container_with_views_draws_the_views)
{
    terminalpp::ui::models::default_image_model model00;
    terminalpp::ui::models::default_image_model model10;
    terminalpp::ui::models::default_image_model model20;
    terminalpp::ui::models::default_image_model model01;
    terminalpp::ui::models::default_image_model model11;
    terminalpp::ui::models::default_image_model model21;

    model00.set_content({{'0'}});
    model10.set_content({{'1'}});
    model20.set_content({{'2'}});
    model01.set_content({{'3'}});
    model11.set_content({{'4'}});
    model21.set_content({{'5'}});
    
    terminalpp::ui::models::container_model container_model{
        terminalpp::ui::models::default_container_model{}};
        
    container_model.set_layout(terminalpp::ui::layouts::grid_layout({3, 2}));
    container_model.add(terminalpp::ui::views::image_view{model00}, {});
    container_model.add(terminalpp::ui::views::image_view{model10}, {});
    container_model.add(terminalpp::ui::views::image_view{model20}, {});
    container_model.add(terminalpp::ui::views::image_view{model01}, {});
    container_model.add(terminalpp::ui::views::image_view{model11}, {});
    container_model.add(terminalpp::ui::views::image_view{model21}, {});

   terminalpp::ui::views::container_view container_view{
       container_model};

    terminalpp::ui::view view{container_view};
    view.set_size({3, 2});
    
    terminalpp::canvas canvas({3, 2});
    terminalpp::canvas_view canvas_view(canvas);
    
    terminalpp::ui::draw_context dc{
        terminalpp::ui::views::default_draw_context{canvas_view}};
        
    view.draw(dc, {{}, canvas.size()});
    
    ASSERT_EQ(terminalpp::element{'0'}, canvas[0][0]);
    ASSERT_EQ(terminalpp::element{'1'}, canvas[1][0]);
    ASSERT_EQ(terminalpp::element{'2'}, canvas[2][0]);
    ASSERT_EQ(terminalpp::element{'3'}, canvas[0][1]);
    ASSERT_EQ(terminalpp::element{'4'}, canvas[1][1]);
    ASSERT_EQ(terminalpp::element{'5'}, canvas[2][1]);
}
TEST(container_view_test, drawing_a_container_with_no_views_draws_nothing)
{
    terminalpp::ui::view view{
        terminalpp::ui::views::container_view{}};
        
    view.set_size({3, 2});
    
    terminalpp::canvas canvas({3, 2});
    terminalpp::canvas_view canvas_view(canvas);
    
    terminalpp::ui::draw_context dc{
        terminalpp::ui::views::default_draw_context{canvas_view}};
        
    view.draw(dc, {{}, canvas.size()});
    
    auto blank_element = terminalpp::element();
    ASSERT_EQ(blank_element, canvas[0][0]);
    ASSERT_EQ(blank_element, canvas[1][0]);
    ASSERT_EQ(blank_element, canvas[2][0]);
    ASSERT_EQ(blank_element, canvas[0][1]);
    ASSERT_EQ(blank_element, canvas[1][1]);
    ASSERT_EQ(blank_element, canvas[2][1]);
}