void test(const char *name, css_node_t *style, css_node_t *expected_layout) { layoutNode(style, CSS_UNDEFINED); if (!are_layout_equal(style, expected_layout)) { printf("%sF%s", "\x1B[31m", "\x1B[0m"); add_failed_test(name, style, expected_layout); } else { printf("%s.%s", "\x1B[32m", "\x1B[0m"); free_css_node(style); free_css_node(expected_layout); } }
static bool are_layout_equal(css_node_t *a, css_node_t *b) { if (!eq(a->layout.dimensions[CSS_WIDTH], b->layout.dimensions[CSS_WIDTH]) || !eq(a->layout.dimensions[CSS_HEIGHT], b->layout.dimensions[CSS_HEIGHT]) || !eq(a->layout.position[CSS_TOP], b->layout.position[CSS_TOP]) || !eq(a->layout.position[CSS_LEFT], b->layout.position[CSS_LEFT]) || !eq(a->children_count, b->children_count)) { return false; } for (int i = 0; i < a->children_count; ++i) { if (!are_layout_equal(a->get_child(a->context, i), b->get_child(b->context, i))) { return false; } } return true; }
bool test(css_node_t *style, css_node_t *expected_layout) { layoutNode(style, CSS_UNDEFINED, CSS_UNDEFINED, (css_direction_t)-1); return are_layout_equal(style, expected_layout); }