treebase_node_appendchild(&box->base, &child->base);
}
+LOCAL W cssrendering_basebox_insertbefore(cssrendering_basebox_t *box, cssrendering_basebox_t *child, cssrendering_basebox_t *ref)
+{
+ return treebase_node_insertbefore(&box->base, &child->base, (ref != NULL) ? &ref->base : NULL);
+}
+
+LOCAL cssrendering_basebox_t* cssrendering_basebox_getparent(cssrendering_basebox_t *box)
+{
+ return (cssrendering_basebox_t*)treebase_node_getparent(&box->base);
+}
+
+LOCAL W cssrendering_basebox_removechild(cssrendering_basebox_t *box, cssrendering_basebox_t *child)
+{
+ cssrendering_basebox_t *parent;
+
+ parent = cssrendering_basebox_getparent(child);
+ if (parent != box) {
+ return -1; /* TODO */
+ }
+ treebase_node_remove(&child->base);
+
+ return 0;
+}
+
+LOCAL cssrendering_basebox_t* cssrendering_basebox_getfirstchild(cssrendering_basebox_t *box)
+{
+ return (cssrendering_basebox_t*)treebase_node_getfirstchild(&box->base);
+}
+
+LOCAL cssrendering_basebox_t* cssrendering_basebox_getnextsibling(cssrendering_basebox_t *box)
+{
+ return (cssrendering_basebox_t*)treebase_node_getnextsibling(&box->base);
+}
+
LOCAL VOID cssrendering_basebox_setuserdata(cssrendering_basebox_t *box, VP data)
{
box->userdata = data;
/* cssrendering_linebox */
+EXPORT cssrendering_linebox_t* cssrendering_linebox_getnextsibling(cssrendering_linebox_t *box)
+{
+ return (cssrendering_linebox_t*)cssrendering_basebox_getnextsibling(&box->base);
+}
+
EXPORT VOID cssrendering_linebox_setuserdata(cssrendering_linebox_t *box, VP data)
{
cssrendering_basebox_setuserdata(&box->base, data);
cssrendering_basebox_appendchild(&box->base, &child->base);
}
+EXPORT W cssrendering_anonymousbox_insertbefore(cssrendering_anonymousbox_t *box, cssrendering_linebox_t *child, cssrendering_linebox_t *ref)
+{
+ return cssrendering_basebox_insertbefore(&box->base, &child->base, (ref != NULL) ? &ref->base : NULL);
+}
+
+EXPORT W cssrendering_anonymousbox_removechild(cssrendering_anonymousbox_t *box, cssrendering_linebox_t *child)
+{
+ return cssrendering_basebox_removechild(&box->base, &child->base);
+}
+
+EXPORT cssrendering_linebox_t* cssrendering_anonymousbox_getfirstchild(cssrendering_anonymousbox_t *box)
+{
+ return (cssrendering_linebox_t*)cssrendering_basebox_getfirstchild(&box->base);
+}
+
EXPORT VOID cssrendering_anonymousbox_setuserdata(cssrendering_anonymousbox_t *box, VP data)
{
cssrendering_basebox_setuserdata(&box->base, data);
/*
* test_cssrendering_box.c
*
- * Copyright (c) 2013 project bchan
+ * Copyright (c) 2013-2014 project bchan
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
return result;
}
+LOCAL UNITTEST_RESULT test_cssrendering_anonymousbox_appendchild2()
+{
+ cssrendering_anonymousbox_t anon;
+ cssrendering_linebox_t *line, line0, line1, line2;
+ UNITTEST_RESULT result = UNITTEST_RESULT_PASS;
+
+ cssrendering_anonymousbox_initialize(&anon);
+ cssrendering_linebox_initialize(&line0);
+ cssrendering_linebox_initialize(&line1);
+ cssrendering_linebox_initialize(&line2);
+
+ anon.base.content_edge = (cssmetric_rectangle_t){{0, 0, 100, 100}};
+ cssrendering_anonymousbox_appendchild(&anon, &line0);
+ cssrendering_anonymousbox_appendchild(&anon, &line1);
+ cssrendering_anonymousbox_appendchild(&anon, &line2);
+
+ line = cssrendering_anonymousbox_getfirstchild(&anon);
+ if (line != &line0) {
+ result = UNITTEST_RESULT_FAIL;
+ }
+ line = cssrendering_linebox_getnextsibling(&line0);
+ if (line != &line1) {
+ result = UNITTEST_RESULT_FAIL;
+ }
+ line = cssrendering_linebox_getnextsibling(&line1);
+ if (line != &line2) {
+ result = UNITTEST_RESULT_FAIL;
+ }
+ line = cssrendering_linebox_getnextsibling(&line2);
+ if (line != NULL) {
+ result = UNITTEST_RESULT_FAIL;
+ }
+
+ cssrendering_linebox_finalize(&line2);
+ cssrendering_linebox_finalize(&line1);
+ cssrendering_linebox_finalize(&line0);
+ cssrendering_anonymousbox_finalize(&anon);
+
+ return result;
+}
+
+LOCAL UNITTEST_RESULT test_cssrendering_anonymousbox_insertbefore1()
+{
+ cssrendering_anonymousbox_t anon;
+ cssrendering_linebox_t *line, line0, line1, line2;
+ UNITTEST_RESULT result = UNITTEST_RESULT_PASS;
+
+ cssrendering_anonymousbox_initialize(&anon);
+ cssrendering_linebox_initialize(&line0);
+ cssrendering_linebox_initialize(&line1);
+ cssrendering_linebox_initialize(&line2);
+
+ anon.base.content_edge = (cssmetric_rectangle_t){{0, 0, 100, 100}};
+ cssrendering_anonymousbox_insertbefore(&anon, &line0, NULL);
+ cssrendering_anonymousbox_insertbefore(&anon, &line1, &line0);
+ cssrendering_anonymousbox_insertbefore(&anon, &line2, NULL);
+
+ line = cssrendering_anonymousbox_getfirstchild(&anon);
+ if (line != &line1) {
+ result = UNITTEST_RESULT_FAIL;
+ }
+ line = cssrendering_linebox_getnextsibling(&line1);
+ if (line != &line0) {
+ result = UNITTEST_RESULT_FAIL;
+ }
+ line = cssrendering_linebox_getnextsibling(&line0);
+ if (line != &line2) {
+ result = UNITTEST_RESULT_FAIL;
+ }
+ line = cssrendering_linebox_getnextsibling(&line2);
+ if (line != NULL) {
+ result = UNITTEST_RESULT_FAIL;
+ }
+
+ cssrendering_linebox_finalize(&line2);
+ cssrendering_linebox_finalize(&line1);
+ cssrendering_linebox_finalize(&line0);
+ cssrendering_anonymousbox_finalize(&anon);
+
+ return result;
+}
+
+LOCAL UNITTEST_RESULT test_cssrendering_anonymousbox_removechild1()
+{
+ cssrendering_anonymousbox_t anon;
+ cssrendering_linebox_t *line, line0, line1, line2;
+ UNITTEST_RESULT result = UNITTEST_RESULT_PASS;
+
+ cssrendering_anonymousbox_initialize(&anon);
+ cssrendering_linebox_initialize(&line0);
+ cssrendering_linebox_initialize(&line1);
+ cssrendering_linebox_initialize(&line2);
+
+ anon.base.content_edge = (cssmetric_rectangle_t){{0, 0, 100, 100}};
+ cssrendering_anonymousbox_appendchild(&anon, &line0);
+ cssrendering_anonymousbox_appendchild(&anon, &line1);
+ cssrendering_anonymousbox_appendchild(&anon, &line2);
+ cssrendering_anonymousbox_removechild(&anon, &line1);
+
+ line = cssrendering_anonymousbox_getfirstchild(&anon);
+ if (line != &line0) {
+ result = UNITTEST_RESULT_FAIL;
+ }
+ line = cssrendering_linebox_getnextsibling(&line0);
+ if (line != &line2) {
+ result = UNITTEST_RESULT_FAIL;
+ }
+ line = cssrendering_linebox_getnextsibling(&line2);
+ if (line != NULL) {
+ result = UNITTEST_RESULT_FAIL;
+ }
+
+ line = cssrendering_linebox_getnextsibling(&line1);
+ if (line != NULL) {
+ result = UNITTEST_RESULT_FAIL;
+ }
+
+ cssrendering_linebox_finalize(&line2);
+ cssrendering_linebox_finalize(&line1);
+ cssrendering_linebox_finalize(&line0);
+ cssrendering_anonymousbox_finalize(&anon);
+
+ return result;
+}
+
EXPORT VOID test_cssrendering_box_main(unittest_driver_t *driver)
{
UNITTEST_DRIVER_REGIST(driver, test_cssrendering_drawtraversal_1);
UNITTEST_DRIVER_REGIST(driver, test_cssrendering_blockbox_appendchild1);
UNITTEST_DRIVER_REGIST(driver, test_cssrendering_blockbox_appendchild2);
UNITTEST_DRIVER_REGIST(driver, test_cssrendering_anonymousbox_appendchild1);
+ UNITTEST_DRIVER_REGIST(driver, test_cssrendering_anonymousbox_appendchild2);
+ UNITTEST_DRIVER_REGIST(driver, test_cssrendering_anonymousbox_insertbefore1);
+ UNITTEST_DRIVER_REGIST(driver, test_cssrendering_anonymousbox_removechild1);
}