diff options
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | include/dom/dom.h | 2 | ||||
-rw-r--r-- | include/dom/html/html_table_element.h | 123 | ||||
-rw-r--r-- | include/dom/html/html_tablerow_element.h | 62 | ||||
-rw-r--r-- | include/dom/html/html_tablesection_element.h | 4 | ||||
-rw-r--r-- | src/html/Makefile | 6 | ||||
-rw-r--r-- | src/html/TODO | 4 | ||||
-rw-r--r-- | src/html/html_collection.c | 2 | ||||
-rw-r--r-- | src/html/html_document.c | 10 | ||||
-rw-r--r-- | src/html/html_document_strings.h | 5 | ||||
-rw-r--r-- | src/html/html_table_element.c | 740 | ||||
-rw-r--r-- | src/html/html_table_element.h | 56 | ||||
-rw-r--r-- | src/html/html_tablecell_element.c | 19 | ||||
-rw-r--r-- | src/html/html_tablerow_element.c | 368 | ||||
-rw-r--r-- | src/html/html_tablerow_element.h | 46 | ||||
-rw-r--r-- | src/html/html_tablesection_element.c | 77 | ||||
-rw-r--r-- | src/html/html_tablesection_element.h | 2 | ||||
-rw-r--r-- | test/DOMTSHandler.pm | 91 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLCollection04.xml.kfail | 59 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLCollection05.xml.kfail (renamed from test/testcases/tests/level1/html/HTMLCollection02.xml.kfail) | 29 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLCollection09.xml.kfail (renamed from test/testcases/tests/level1/html/HTMLCollection01.xml.notimpl) | 16 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLCollection12.xml.kfail (renamed from test/testcases/tests/level1/html/HTMLCollection03.xml.kfail) | 21 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLTableElement01.xml (renamed from test/testcases/tests/level1/html/HTMLTableElement01.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLTableElement02.xml (renamed from test/testcases/tests/level1/html/HTMLTableElement02.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLTableElement03.xml (renamed from test/testcases/tests/level1/html/HTMLTableElement03.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLTableElement04.xml (renamed from test/testcases/tests/level1/html/HTMLTableElement04.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLTableElement05.xml (renamed from test/testcases/tests/level1/html/HTMLTableElement05.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLTableElement06.xml (renamed from test/testcases/tests/level1/html/HTMLTableElement06.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLTableElement07.xml (renamed from test/testcases/tests/level1/html/HTMLTableElement07.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLTableElement08.xml (renamed from test/testcases/tests/level1/html/HTMLTableElement08.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLTableElement09.xml (renamed from test/testcases/tests/level1/html/HTMLTableElement09.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLTableElement10.xml (renamed from test/testcases/tests/level1/html/HTMLTableElement10.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLTableElement11.xml (renamed from test/testcases/tests/level1/html/HTMLTableElement11.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLTableElement12.xml (renamed from test/testcases/tests/level1/html/HTMLTableElement12.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLTableElement13.xml (renamed from test/testcases/tests/level1/html/HTMLTableElement13.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLTableElement14.xml (renamed from test/testcases/tests/level1/html/HTMLTableElement14.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLTableElement15.xml (renamed from test/testcases/tests/level1/html/HTMLTableElement15.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLTableElement16.xml (renamed from test/testcases/tests/level1/html/HTMLTableElement16.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLTableElement17.xml (renamed from test/testcases/tests/level1/html/HTMLTableElement17.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLTableElement18.xml (renamed from test/testcases/tests/level1/html/HTMLTableElement18.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLTableElement19.xml (renamed from test/testcases/tests/level1/html/HTMLTableElement19.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLTableElement20.xml (renamed from test/testcases/tests/level1/html/HTMLTableElement20.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLTableElement21.xml.kfail | 4 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLTableElement22.xml (renamed from test/testcases/tests/level1/html/HTMLTableElement22.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLTableElement23.xml (renamed from test/testcases/tests/level1/html/HTMLTableElement23.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLTableElement24.xml.kfail | 4 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLTableElement25.xml (renamed from test/testcases/tests/level1/html/HTMLTableElement25.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLTableElement26.xml (renamed from test/testcases/tests/level1/html/HTMLTableElement26.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLTableElement27.xml (renamed from test/testcases/tests/level1/html/HTMLTableElement27.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLTableRowElement01.xml (renamed from test/testcases/tests/level1/html/HTMLTableRowElement01.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLTableRowElement02.xml (renamed from test/testcases/tests/level1/html/HTMLTableRowElement02.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLTableRowElement03.xml (renamed from test/testcases/tests/level1/html/HTMLTableRowElement03.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLTableRowElement04.xml (renamed from test/testcases/tests/level1/html/HTMLTableRowElement04.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLTableRowElement06.xml (renamed from test/testcases/tests/level1/html/HTMLTableRowElement06.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLTableRowElement07.xml (renamed from test/testcases/tests/level1/html/HTMLTableRowElement07.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLTableRowElement08.xml (renamed from test/testcases/tests/level1/html/HTMLTableRowElement08.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLTableRowElement09.xml (renamed from test/testcases/tests/level1/html/HTMLTableRowElement09.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLTableRowElement10.xml (renamed from test/testcases/tests/level1/html/HTMLTableRowElement10.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/anchor01.xml (renamed from test/testcases/tests/level1/html/anchor01.xml.notimpl) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/anchor02.xml (renamed from test/testcases/tests/level1/html/anchor02.xml.notimpl) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/anchor03.xml (renamed from test/testcases/tests/level1/html/anchor03.xml.notimpl) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/anchor04.xml.kfail (renamed from test/testcases/tests/level1/html/anchor04.xml.notimpl) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/anchor05.xml (renamed from test/testcases/tests/level1/html/anchor05.xml.notimpl) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/anchor06.xml (renamed from test/testcases/tests/level1/html/anchor06.xml.notimpl) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/dlist01.xml (renamed from test/testcases/tests/level1/html/dlist01.xml.notimpl) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table01.xml (renamed from test/testcases/tests/level1/html/table01.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table02.xml (renamed from test/testcases/tests/level1/html/table02.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table03.xml (renamed from test/testcases/tests/level1/html/table03.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table04.xml (renamed from test/testcases/tests/level1/html/table04.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table08.xml (renamed from test/testcases/tests/level1/html/table08.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table09.xml (renamed from test/testcases/tests/level1/html/table09.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table10.xml (renamed from test/testcases/tests/level1/html/table10.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table12.xml (renamed from test/testcases/tests/level1/html/table12.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table17.xml (renamed from test/testcases/tests/level1/html/table17.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table18.xml (renamed from test/testcases/tests/level1/html/table18.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table19.xml (renamed from test/testcases/tests/level1/html/table19.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table20.xml (renamed from test/testcases/tests/level1/html/table20.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table21.xml (renamed from test/testcases/tests/level1/html/table21.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table22.xml (renamed from test/testcases/tests/level1/html/table22.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table23.xml (renamed from test/testcases/tests/level1/html/table23.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table24.xml (renamed from test/testcases/tests/level1/html/table24.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table25.xml (renamed from test/testcases/tests/level1/html/table25.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table26.xml (renamed from test/testcases/tests/level1/html/table26.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table27.xml (renamed from test/testcases/tests/level1/html/table27.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table28.xml (renamed from test/testcases/tests/level1/html/table28.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table29.xml (renamed from test/testcases/tests/level1/html/table29.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table30.xml (renamed from test/testcases/tests/level1/html/table30.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table31.xml (renamed from test/testcases/tests/level1/html/table31.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table32.xml (renamed from test/testcases/tests/level1/html/table32.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table33.xml (renamed from test/testcases/tests/level1/html/table33.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table34.xml (renamed from test/testcases/tests/level1/html/table34.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table35.xml (renamed from test/testcases/tests/level1/html/table35.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table36.xml (renamed from test/testcases/tests/level1/html/table36.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table37.xml (renamed from test/testcases/tests/level1/html/table37.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table38.xml (renamed from test/testcases/tests/level1/html/table38.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table39.xml (renamed from test/testcases/tests/level1/html/table39.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table40.xml (renamed from test/testcases/tests/level1/html/table40.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table41.xml (renamed from test/testcases/tests/level1/html/table41.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table42.xml (renamed from test/testcases/tests/level1/html/table42.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table43.xml (renamed from test/testcases/tests/level1/html/table43.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table44.xml (renamed from test/testcases/tests/level1/html/table44.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table45.xml (renamed from test/testcases/tests/level1/html/table45.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table46.xml (renamed from test/testcases/tests/level1/html/table46.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table47.xml (renamed from test/testcases/tests/level1/html/table47.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table48.xml (renamed from test/testcases/tests/level1/html/table48.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table49.xml (renamed from test/testcases/tests/level1/html/table49.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table50.xml (renamed from test/testcases/tests/level1/html/table50.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table51.xml (renamed from test/testcases/tests/level1/html/table51.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table52.xml (renamed from test/testcases/tests/level1/html/table52.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/table53.xml (renamed from test/testcases/tests/level1/html/table53.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level2/html/HTMLTableElement34.xml (renamed from test/testcases/tests/level2/html/HTMLTableElement34.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level2/html/HTMLTableElement35.xml (renamed from test/testcases/tests/level2/html/HTMLTableElement35.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level2/html/HTMLTableElement36.xml (renamed from test/testcases/tests/level2/html/HTMLTableElement36.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level2/html/HTMLTableElement37.xml (renamed from test/testcases/tests/level2/html/HTMLTableElement37.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level2/html/HTMLTableElement38.xml (renamed from test/testcases/tests/level2/html/HTMLTableElement38.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level2/html/HTMLTableElement39.xml.kfail | 5 | ||||
-rw-r--r-- | test/testcases/tests/level2/html/HTMLTableRowElement15.xml (renamed from test/testcases/tests/level2/html/HTMLTableRowElement15.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level2/html/HTMLTableRowElement16.xml (renamed from test/testcases/tests/level2/html/HTMLTableRowElement16.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level2/html/HTMLTableRowElement17.xml (renamed from test/testcases/tests/level2/html/HTMLTableRowElement17.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level2/html/HTMLTableRowElement18.xml (renamed from test/testcases/tests/level2/html/HTMLTableRowElement18.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level2/html/HTMLTableRowElement19.xml (renamed from test/testcases/tests/level2/html/HTMLTableRowElement19.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level2/html/HTMLTableSectionElement30.xml.kfail | 55 | ||||
-rw-r--r-- | test/testcases/tests/level2/html/HTMLTableSectionElement31.xml.kfail | 53 | ||||
-rw-r--r-- | test/testcases/tests/level2/html/files/table.html | 78 | ||||
-rw-r--r-- | test/testcases/tests/level2/html/files/table.xhtml | 81 | ||||
-rw-r--r-- | test/testcases/tests/level2/html/files/table.xml | 81 | ||||
-rw-r--r-- | test/testcases/tests/level2/html/files/table1.html | 12 | ||||
-rw-r--r-- | test/testcases/tests/level2/html/files/table1.xhtml | 15 | ||||
-rw-r--r-- | test/testcases/tests/level2/html/files/table1.xml | 15 | ||||
-rw-r--r-- | test/testcases/tests/level2/html/files/tablerow.html | 59 | ||||
-rw-r--r-- | test/testcases/tests/level2/html/files/tablerow.xhtml | 62 | ||||
-rw-r--r-- | test/testcases/tests/level2/html/files/tablerow.xml | 62 | ||||
-rw-r--r-- | test/testutils/domtsasserts.c | 4 |
133 files changed, 2210 insertions, 124 deletions
@@ -127,6 +127,8 @@ INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_tablecaption_element.h INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_tablecell_element.h INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_tablecol_element.h INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_tablesection_element.h +INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_table_element.h +INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_tablerow_element.h INSTALL_ITEMS := $(INSTALL_ITEMS) /$(LIBDIR)/pkgconfig:lib$(COMPONENT).pc.in INSTALL_ITEMS := $(INSTALL_ITEMS) /$(LIBDIR):$(OUTPUT) diff --git a/include/dom/dom.h b/include/dom/dom.h index 071ca2c..fb39388 100644 --- a/include/dom/dom.h +++ b/include/dom/dom.h @@ -86,6 +86,8 @@ #include <dom/html/html_tablecell_element.h> #include <dom/html/html_tablecol_element.h> #include <dom/html/html_tablesection_element.h> +#include <dom/html/html_table_element.h> +#include <dom/html/html_tablerow_element.h> /* DOM Events header */ #include <dom/events/events.h> diff --git a/include/dom/html/html_table_element.h b/include/dom/html/html_table_element.h index 2e182d5..6fcd7ed 100644 --- a/include/dom/html/html_table_element.h +++ b/include/dom/html/html_table_element.h @@ -3,5 +3,128 @@ * Licensed under the MIT License, * http://www.opensource.org/licenses/mit-license.php * Copyright 2009 Bo Yang <struggleyb.nku@gmail.com> + * Copyright 2014 Rupinder Singh Khokhar <rsk1coder99@gmail.com> */ +#ifndef dom_html_table_element_h_ +#define dom_html_table_element_h_ + +#include <stdbool.h> +#include <dom/core/exceptions.h> +#include <dom/core/string.h> + +#include<dom/html/html_element.h> +#include<dom/html/html_tablecaption_element.h> +#include<dom/html/html_tablesection_element.h> +#include<dom/html/html_tablerow_element.h> + +typedef struct dom_html_table_element dom_html_table_element; + +dom_exception dom_html_table_element_get_caption( + dom_html_table_element *element, dom_html_table_caption_element **caption); + +dom_exception dom_html_table_element_set_caption( + dom_html_table_element *element, dom_html_table_caption_element *caption); + +dom_exception dom_html_table_element_get_t_head( + dom_html_table_element *element, dom_html_table_section_element **t_head); + +dom_exception dom_html_table_element_set_t_head( + dom_html_table_element *element, dom_html_table_section_element *t_head); + +dom_exception dom_html_table_element_get_t_foot( + dom_html_table_element *element, dom_html_table_section_element **t_foot); + +dom_exception dom_html_table_element_set_t_foot( + dom_html_table_element *element, dom_html_table_section_element *t_foot); + +dom_exception dom_html_table_element_get_rows( + dom_html_table_element *element, dom_html_collection **rows); + +dom_exception dom_html_table_element_get_t_bodies( + dom_html_table_element *element, dom_html_collection **t_bodies); + +dom_exception dom_html_table_element_get_align( + dom_html_table_element *table, dom_string **align); + +dom_exception dom_html_table_element_set_align( + dom_html_table_element *table, dom_string *align); + +dom_exception dom_html_table_element_get_bg_color( + dom_html_table_element *table, dom_string **bg_color); + +dom_exception dom_html_table_element_set_bg_color( + dom_html_table_element *table, dom_string *bg_color); + +dom_exception dom_html_table_element_get_border( + dom_html_table_element *table, dom_string **border); + +dom_exception dom_html_table_element_set_border( + dom_html_table_element *table, dom_string *border); + +dom_exception dom_html_table_element_get_cell_padding( + dom_html_table_element *table, dom_string **cell_padding); + +dom_exception dom_html_table_element_set_cell_padding( + dom_html_table_element *table, dom_string *cell_padding); + +dom_exception dom_html_table_element_get_cell_spacing( + dom_html_table_element *table, dom_string **cell_spacing); + +dom_exception dom_html_table_element_set_cell_spacing( + dom_html_table_element *table, dom_string *cell_spacing); + +dom_exception dom_html_table_element_get_frame( + dom_html_table_element *table, dom_string **frame); + +dom_exception dom_html_table_element_set_frame( + dom_html_table_element *table, dom_string *frame); + +dom_exception dom_html_table_element_get_rules( + dom_html_table_element *table, dom_string **rules); + +dom_exception dom_html_table_element_set_rules( + dom_html_table_element *table, dom_string *rules); + +dom_exception dom_html_table_element_get_summary( + dom_html_table_element *table, dom_string **summary); + +dom_exception dom_html_table_element_set_summary( + dom_html_table_element *table, dom_string *summary); + +dom_exception dom_html_table_element_get_width( + dom_html_table_element *table, dom_string **width); + +dom_exception dom_html_table_element_set_width( + dom_html_table_element *table, dom_string *width); + +dom_exception dom_html_table_element_create_caption( + dom_html_table_element *element, + dom_html_element **caption); + +dom_exception dom_html_table_element_delete_caption( + dom_html_table_element *element); + +dom_exception dom_html_table_element_create_t_head( + dom_html_table_element *element, + dom_html_element **t_head); + +dom_exception dom_html_table_element_delete_t_head( + dom_html_table_element *element); + +dom_exception dom_html_table_element_create_t_foot( + dom_html_table_element *element, + dom_html_element **t_foot); + +dom_exception dom_html_table_element_delete_t_foot( + dom_html_table_element *element); + +dom_exception dom_html_table_element_insert_row( + dom_html_table_element *element, + int32_t index, dom_html_element **row); + +dom_exception dom_html_table_element_delete_row( + dom_html_table_element *element, + int32_t index); + +#endif diff --git a/include/dom/html/html_tablerow_element.h b/include/dom/html/html_tablerow_element.h index 2e182d5..897e243 100644 --- a/include/dom/html/html_tablerow_element.h +++ b/include/dom/html/html_tablerow_element.h @@ -3,5 +3,67 @@ * Licensed under the MIT License, * http://www.opensource.org/licenses/mit-license.php * Copyright 2009 Bo Yang <struggleyb.nku@gmail.com> + * Copyright 2014 Rupinder Singh Khokhar <rsk1coder99@gmail.com> */ +#ifndef dom_html_table_row_element_h_ +#define dom_html_table_row_element_h_ + +#include <stdbool.h> +#include <dom/core/exceptions.h> +#include <dom/core/string.h> + +#include<dom/html/html_element.h> +#include<dom/html/html_collection.h> + +typedef struct dom_html_table_row_element dom_html_table_row_element; + +dom_exception dom_html_table_row_element_get_align( + dom_html_table_row_element *table, dom_string **align); + +dom_exception dom_html_table_row_element_set_align( + dom_html_table_row_element *table, dom_string *align); + +dom_exception dom_html_table_row_element_get_bg_color( + dom_html_table_row_element *table, dom_string **bg_color); + +dom_exception dom_html_table_row_element_set_bg_color( + dom_html_table_row_element *table, dom_string *bg_color); + +dom_exception dom_html_table_row_element_get_ch( + dom_html_table_row_element *table, dom_string **ch); + +dom_exception dom_html_table_row_element_set_ch( + dom_html_table_row_element *table, dom_string *ch); + +dom_exception dom_html_table_row_element_get_ch_off( + dom_html_table_row_element *table, dom_string **ch_off); + +dom_exception dom_html_table_row_element_set_ch_off( + dom_html_table_row_element *table, dom_string *ch_off); + +dom_exception dom_html_table_row_element_get_v_align( + dom_html_table_row_element *table, dom_string **v_align); + +dom_exception dom_html_table_row_element_set_v_align( + dom_html_table_row_element *table, dom_string *v_align); + +dom_exception dom_html_table_row_element_get_row_index( + dom_html_table_row_element *table, int32_t *index); + +dom_exception dom_html_table_row_element_get_section_row_index( + dom_html_table_row_element *table_row, int32_t *section_row_index); + +dom_exception dom_html_table_row_element_get_cells( + dom_html_table_row_element *element, + dom_html_collection **cells); + +dom_exception dom_html_table_row_element_delete_cell( + dom_html_table_row_element *element, + int32_t index); + +dom_exception dom_html_table_row_element_insert_cell( + dom_html_table_row_element *element, + int32_t index, dom_html_element **cell); + +#endif diff --git a/include/dom/html/html_tablesection_element.h b/include/dom/html/html_tablesection_element.h index e3b0065..bceec18 100644 --- a/include/dom/html/html_tablesection_element.h +++ b/include/dom/html/html_tablesection_element.h @@ -16,6 +16,8 @@ #include <dom/html/html_collection.h> #include <dom/html/html_element.h> +#include <dom/html/html_tablerow_element.h> + typedef struct dom_html_table_section_element dom_html_table_section_element; dom_exception dom_html_table_section_element_get_align( @@ -47,7 +49,7 @@ dom_exception dom_html_table_section_element_get_rows( dom_exception dom_html_table_section_element_insert_row( dom_html_table_section_element *element, - int32_t index, dom_html_element **newRow); + int32_t index, dom_html_element **new_row); dom_exception dom_html_table_section_element_delete_row( dom_html_table_section_element *element, diff --git a/src/html/Makefile b/src/html/Makefile index 8fc029d..8c20362 100644 --- a/src/html/Makefile +++ b/src/html/Makefile @@ -16,11 +16,11 @@ DIR_SOURCES := \ html_basefont_element.c html_image_element.c html_object_element.c \ html_param_element.c html_applet_element.c html_area_element.c \ html_map_element.c html_script_element.c html_tablecaption_element.c \ - html_tablecell_element.c html_tablecol_element.c html_tablesection_element.c + html_tablecell_element.c html_tablecol_element.c html_tablesection_element.c \ + html_table_element.c html_tablerow_element.c UNINMPLEMENTED_SOURCES := \ - html_table_element.c \ - html_tablerow_element.c html_frameset_element.c \ + html_frameset_element.c \ html_frame_element.c html_iframe_element.c include $(NSBUILD)/Makefile.subdir diff --git a/src/html/TODO b/src/html/TODO index 50e905c..0a75535 100644 --- a/src/html/TODO +++ b/src/html/TODO @@ -46,11 +46,11 @@ HTMLAppletElement html_applet_element DONE HTMLMapElement html_map_element DONE HTMLAreaElement html_area_element DONE HTMLScriptElement html_script_element DONE -HTMLTableElement html_table_element MISSING +HTMLTableElement html_table_element DONE HTMLTableCaptionElement html_tablecaption_element DONE HTMLTableColElement html_tablecol_element DONE HTMLTableSectionElement html_tablesection_element DONE -HTMLTableRowElement html_tablerow_element MISSING +HTMLTableRowElement html_tablerow_element DONE HTMLTableCellElement html_tablecell_element DONE HTMLFrameSetElement html_frameset_element MISSING HTMLFrameElement html_frame_element MISSING diff --git a/src/html/html_collection.c b/src/html/html_collection.c index fb801d9..2b4d8aa 100644 --- a/src/html/html_collection.c +++ b/src/html/html_collection.c @@ -132,7 +132,7 @@ dom_exception dom_html_collection_get_length(dom_html_collection *col, /* No children and siblings */ struct dom_node_internal *parent = node->parent; - while (parent != col->root && + while (node != col->root && node == parent->last_child) { node = parent; parent = parent->parent; diff --git a/src/html/html_document.c b/src/html/html_document.c index 692dd98..25abca3 100644 --- a/src/html/html_document.c +++ b/src/html/html_document.c @@ -54,6 +54,8 @@ #include "html/html_tablecell_element.h" #include "html/html_tablecol_element.h" #include "html/html_tablesection_element.h" +#include "html/html_table_element.h" +#include "html/html_tablerow_element.h" #include "core/attr.h" #include "core/string.h" @@ -350,9 +352,15 @@ _dom_html_document_create_element_internal(dom_html_document *html, (dom_html_table_col_element **) result); } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_THEAD])|| dom_string_caseless_isequal(tag_name, html->memoised[hds_TBODY])|| - dom_string_caseless_isequal(tag_name, html->memoised[hds_TBODY])) { + dom_string_caseless_isequal(tag_name, html->memoised[hds_TFOOT])) { exc = _dom_html_table_section_element_create(html, tag_name, namespace, prefix, (dom_html_table_section_element **) result); + } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_TABLE])) { + exc = _dom_html_table_element_create(html, namespace, prefix, + (dom_html_table_element **) result); + } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_TD])) { + exc = _dom_html_table_row_element_create(html, namespace, prefix, + (dom_html_table_row_element **) result); } else { exc = _dom_html_element_create(html, tag_name, namespace, prefix, result); diff --git a/src/html/html_document_strings.h b/src/html/html_document_strings.h index 38b0004..8ded892 100644 --- a/src/html/html_document_strings.h +++ b/src/html/html_document_strings.h @@ -102,6 +102,9 @@ HTML_DOCUMENT_STRINGS_ACTION1(abbr) HTML_DOCUMENT_STRINGS_ACTION1(axis) HTML_DOCUMENT_STRINGS_ACTION1(headers) HTML_DOCUMENT_STRINGS_ACTION1(scope) +HTML_DOCUMENT_STRINGS_ACTION1(frame) +HTML_DOCUMENT_STRINGS_ACTION1(rules) +HTML_DOCUMENT_STRINGS_ACTION1(summary) HTML_DOCUMENT_STRINGS_ACTION(tab_index,tabindex) HTML_DOCUMENT_STRINGS_ACTION(html_for,for) HTML_DOCUMENT_STRINGS_ACTION(date_time,datetime) @@ -112,6 +115,8 @@ HTML_DOCUMENT_STRINGS_ACTION(value_type,valuetype) HTML_DOCUMENT_STRINGS_ACTION(v_align,valign) HTML_DOCUMENT_STRINGS_ACTION(ch,char) HTML_DOCUMENT_STRINGS_ACTION(ch_off,charoff) +HTML_DOCUMENT_STRINGS_ACTION(cell_padding,cellpadding) +HTML_DOCUMENT_STRINGS_ACTION(cell_spacing,cellspacing) /* HTML_DOCUMENT_STRINGS_ACTION1(type) */ HTML_DOCUMENT_STRINGS_ACTION(use_map,usemap) /* HTML_DOCUMENT_STRINGS_ACTION1(value) */ diff --git a/src/html/html_table_element.c b/src/html/html_table_element.c index 2e182d5..0f27fd3 100644 --- a/src/html/html_table_element.c +++ b/src/html/html_table_element.c @@ -3,5 +3,745 @@ * Licensed under the MIT License, * http://www.opensource.org/licenses/mit-license.php * Copyright 2009 Bo Yang <struggleyb.nku@gmail.com> + * Copyright 2014 Rupinder Singh Khokhar<rsk1coder99@gmail.com> */ +#include <assert.h> +#include <stdlib.h> + +#include <dom/html/html_table_element.h> + +#include "html/html_document.h" +#include "html/html_table_element.h" +#include "html/html_tablecaption_element.h" +#include "html/html_tablesection_element.h" +#include "html/html_tablerow_element.h" +#include "html/html_collection.h" + +#include "core/node.h" +#include "core/attr.h" +#include "utils/utils.h" + +static struct dom_element_protected_vtable _protect_vtable = { + { + DOM_NODE_PROTECT_VTABLE_HTML_TABLE_ELEMENT + }, + DOM_HTML_TABLE_ELEMENT_PROTECT_VTABLE +}; + +/** + * Create a dom_html_table_element object + * + * \param doc The document object + * \param ele The returned element object + * \return DOM_NO_ERR on success, appropriate dom_exception on failure. + */ +dom_exception _dom_html_table_element_create(struct dom_html_document *doc, + dom_string *namespace, dom_string *prefix, + struct dom_html_table_element **ele) +{ + struct dom_node_internal *node; + + *ele = malloc(sizeof(dom_html_table_element)); + if (*ele == NULL) + return DOM_NO_MEM_ERR; + + /* Set up vtables */ + node = (struct dom_node_internal *) *ele; + node->base.vtable = &_dom_html_element_vtable; + node->vtable = &_protect_vtable; + + return _dom_html_table_element_initialise(doc, namespace, prefix, *ele); +} + +/** + * Initialise a dom_html_table_element object + * + * \param doc The document object + * \param ele The dom_html_table_element object + * \return DOM_NO_ERR on success, appropriate dom_exception on failure. + */ +dom_exception _dom_html_table_element_initialise(struct dom_html_document *doc, + dom_string *namespace, dom_string *prefix, + struct dom_html_table_element *ele) +{ + ele->caption = NULL; + ele->t_head = NULL; + ele->t_foot = NULL; + return _dom_html_element_initialise(doc, &ele->base, + doc->memoised[hds_TABLE], + namespace, prefix); +} + +/** + * Finalise a dom_html_table_element object + * + * \param ele The dom_html_table_element object + */ +void _dom_html_table_element_finalise(struct dom_html_table_element *ele) +{ + _dom_html_element_finalise(&ele->base); +} + +/** + * Destroy a dom_html_table_element object + * + * \param ele The dom_html_table_element object + */ +void _dom_html_table_element_destroy(struct dom_html_table_element *ele) +{ + _dom_html_table_element_finalise(ele); + free(ele); +} + +/*------------------------------------------------------------------------*/ +/* The protected virtual functions */ + +/* The virtual function used to parse attribute value, see src/core/element.c + * for detail */ +dom_exception _dom_html_table_element_parse_attribute(dom_element *ele, + dom_string *name, dom_string *value, + dom_string **parsed) +{ + UNUSED(ele); + UNUSED(name); + + dom_string_ref(value); + *parsed = value; + + return DOM_NO_ERR; +} + +/* The virtual destroy function, see src/core/node.c for detail */ +void _dom_virtual_html_table_element_destroy(dom_node_internal *node) +{ + _dom_html_table_element_destroy((struct dom_html_table_element *) node); +} + +/* The virtual copy function, see src/core/node.c for detail */ +dom_exception _dom_html_table_element_copy(dom_node_internal *old, + dom_node_internal **copy) +{ + return _dom_html_element_copy(old, copy); +} + +/*-----------------------------------------------------------------------*/ +/* API functions */ + +#define SIMPLE_GET(attr) \ + dom_exception dom_html_table_element_get_##attr( \ + dom_html_table_element *element, \ + dom_string **attr) \ +{ \ + dom_exception ret; \ + dom_string *_memo_##attr; \ + \ + _memo_##attr = \ + ((struct dom_html_document *) \ + ((struct dom_node_internal *)element)->owner)-> \ + memoised[hds_##attr]; \ + \ + ret = dom_element_get_attribute(element, _memo_##attr, attr); \ + \ + return ret; \ +} +#define SIMPLE_SET(attr) \ + dom_exception dom_html_table_element_set_##attr( \ + dom_html_table_element *element, \ + dom_string *attr) \ +{ \ + dom_exception ret; \ + dom_string *_memo_##attr; \ + \ + _memo_##attr = \ + ((struct dom_html_document *) \ + ((struct dom_node_internal *)element)->owner)-> \ + memoised[hds_##attr]; \ + \ + ret = dom_element_set_attribute(element, _memo_##attr, attr); \ + \ + return ret; \ +} + +#define SIMPLE_GET_SET(attr) SIMPLE_GET(attr) SIMPLE_SET(attr) +SIMPLE_GET_SET(align); +SIMPLE_GET_SET(bg_color); +SIMPLE_GET_SET(border); +SIMPLE_GET_SET(cell_padding); +SIMPLE_GET_SET(cell_spacing); +SIMPLE_GET_SET(frame); +SIMPLE_GET_SET(rules); +SIMPLE_GET_SET(summary); +SIMPLE_GET_SET(width); + +/** + * Get the caption Attribute + * + * \param table The dom_html_table_element object + */ +dom_exception dom_html_table_element_get_caption( + dom_html_table_element *table, dom_html_table_caption_element **caption) +{ + dom_node_internal *node_tmp = ((dom_node_internal *)table); + dom_html_document *doc = (dom_html_document *)(node_tmp->owner); + + if(table->caption == NULL) { + for (node_tmp = node_tmp->first_child; node_tmp != NULL; node_tmp = node_tmp->next) { + if((node_tmp->type == DOM_ELEMENT_NODE) && + dom_string_caseless_isequal(doc->memoised[hds_CAPTION],node_tmp->name)) { + break; + } + } + table->caption = (dom_html_table_caption_element *)node_tmp; + } + *caption = (table->caption); + return DOM_NO_ERR; +} + +/** + * Set the caption Attribute + * + * \param table The dom_html_table_element object + * \param table The dom_html_table_element object + */ +dom_exception dom_html_table_element_set_caption( + dom_html_table_element *table, dom_html_table_caption_element *caption) +{ + dom_node_internal *check_node = ((dom_node_internal *)caption); + dom_html_document *doc = (dom_html_document *)(((dom_node_internal *)table)->owner); + if(check_node == NULL) { + return DOM_HIERARCHY_REQUEST_ERR; + } + if(!dom_string_caseless_isequal(doc->memoised[hds_CAPTION],check_node->name)) { + return DOM_HIERARCHY_REQUEST_ERR; + } + table->caption = caption; + return DOM_NO_ERR; +} + +/** + * Get the t_head Attribute + * + * \param table The dom_html_table_element object + */ +dom_exception dom_html_table_element_get_t_head( + dom_html_table_element *table, dom_html_table_section_element **t_head) +{ + dom_node_internal *node_tmp = ((dom_node_internal *)table); + dom_html_document *doc = (dom_html_document *)(node_tmp->owner); + + if(table->t_head == NULL) { + for (node_tmp = node_tmp->first_child; node_tmp != NULL; node_tmp = node_tmp->next) { + if((node_tmp->type == DOM_ELEMENT_NODE) && + dom_string_caseless_isequal(doc->memoised[hds_THEAD],node_tmp->name)) { + break; + } + } + table->t_head = (dom_html_table_section_element *)node_tmp; + } + *t_head = table->t_head; + return DOM_NO_ERR; +} + +/** + * Set the t_head Attribute + * + * \param table The dom_html_table_element object + * \param table The dom_html_table_element object + */ +dom_exception dom_html_table_element_set_t_head( + dom_html_table_element *table, dom_html_table_section_element *t_head) +{ + dom_node_internal *check_node = ((dom_node_internal *)t_head); + dom_html_document *doc = (dom_html_document *)(((dom_node_internal *)table)->owner); + if(check_node == NULL) { + return DOM_HIERARCHY_REQUEST_ERR; + } + if(!dom_string_caseless_isequal(doc->memoised[hds_CAPTION],check_node->name)) { + return DOM_HIERARCHY_REQUEST_ERR; + } + table->t_head = t_head; + return DOM_NO_ERR; +} + +/** + * Get the t_foot Attribute + * + * \param table The dom_html_table_element object + */ +dom_exception dom_html_table_element_get_t_foot( + dom_html_table_element *table, dom_html_table_section_element **t_foot) +{ + dom_node_internal *node_tmp = ((dom_node_internal *)table); + dom_html_document *doc = (dom_html_document *)(node_tmp->owner); + + if(table->t_foot == NULL) { + for (node_tmp = node_tmp->first_child; node_tmp != NULL; node_tmp = node_tmp->next) { + if((node_tmp->type == DOM_ELEMENT_NODE) && + dom_string_caseless_isequal(doc->memoised[hds_TFOOT],node_tmp->name)) { + break; + } + } + table->t_foot = (dom_html_table_section_element *)node_tmp; + } + *t_foot = (table->t_foot); + return DOM_NO_ERR; +} + +/** + * Set the t_foot Attribute + * + * \param table The dom_html_table_element object + */ +dom_exception dom_html_table_element_set_t_foot( + dom_html_table_element *table, dom_html_table_section_element *t_foot) +{ + dom_node_internal *check_node = ((dom_node_internal *)t_foot); /*< temporary node to check for raised exceptions */ + dom_html_document *doc = (dom_html_document *)(((dom_node_internal *)table)->owner); + if(check_node == NULL) { + return DOM_HIERARCHY_REQUEST_ERR; + } + if(!dom_string_caseless_isequal(doc->memoised[hds_TFOOT],check_node->name)) { + return DOM_HIERARCHY_REQUEST_ERR; + } + table->t_foot = t_foot; + return DOM_NO_ERR; +} + +/** + * Callback for creating the rows collection + * + * \param node The dom_html_table_element object + * \param ctx The dom_html_document object (void *) + * \return DOM_NO_ERR on success, appropriate dom_exception on failure. + */ +bool table_rows_callback(struct dom_node_internal *node, void *ctx) +{ + if(node->type == DOM_ELEMENT_NODE && + dom_string_caseless_isequal(node->name, + ((dom_html_document *)ctx)->memoised[hds_TR])) { + return true; + } + return false; +} + +/** + * Get the rows collection + * + * \param element The dom_html_table_element object + * \param rows The Status + * \return DOM_NO_ERR on success, appropriate dom_exception on failure. + */ +dom_exception dom_html_table_element_get_rows( + dom_html_table_element *element, + dom_html_collection **rows) +{ + dom_html_document *doc = (dom_html_document *) ((dom_node_internal *) element)->owner; + return _dom_html_collection_create(doc, (dom_node_internal *)element, + table_rows_callback, (void *)doc, rows); +} + +/** + * Callback for creating the tbodies collection + * + * \param node The dom_html_table_element object + * \param ctx The dom_html_document object (void *) + * \return DOM_NO_ERR on success, appropriate dom_exception on failure. + */ +bool table_t_bodies_callback(struct dom_node_internal *node, void *ctx) +{ + if(node->type == DOM_ELEMENT_NODE && + dom_string_caseless_isequal(node->name, + ((dom_html_document *)ctx)->memoised[hds_TBODY])) { + return true; + } + return false; +} + +/** + * Get the tBodies collection + * + * \param element The dom_html_table_element object + * \param t_bodies The Status + * \return DOM_NO_ERR on success, appropriate dom_exception on failure. + */ +dom_exception dom_html_table_element_get_t_bodies( + dom_html_table_element *element, + dom_html_collection **t_bodies) +{ + dom_html_document *doc = (dom_html_document *) ((dom_node_internal *) element)->owner; + return _dom_html_collection_create(doc, (dom_node_internal *)element, + table_t_bodies_callback, (void *)doc, t_bodies); +} + +/** + * Get or Create the table caption + * + * \param element The dom_html_table_element object + * \param caption The Status + * \return DOM_NO_ERR on success, appropriate dom_exception on failure. + */ +dom_exception dom_html_table_element_create_caption( + dom_html_table_element *element, + dom_html_element **caption) +{ + dom_exception exp; + if((exp = dom_html_table_element_get_caption(element, + (dom_html_table_caption_element **)caption)) != DOM_NO_ERR) { + return exp; + } + if((*caption) == NULL) { + dom_html_document *doc = (dom_html_document *) + ((dom_node_internal *) element)->owner; + exp = _dom_html_table_caption_element_create(doc, + ((dom_node_internal *)element)->namespace, + ((dom_node_internal *)element)->prefix, + (dom_html_table_caption_element **)caption); + if(exp != DOM_NO_ERR) { + return exp; + } + _dom_node_append_child((dom_node_internal *)element, + (dom_node_internal *)*caption, + (dom_node_internal **)caption); + element->caption = (dom_html_table_caption_element *)*caption; + + } + return DOM_NO_ERR; +} + +/** + * Delete the table caption, if one exists + * + * \param element The dom_html_table_element object + * \return DOM_NO_ERR on success, appropriate dom_exception on failure. + */ +dom_exception dom_html_table_element_delete_caption( + dom_html_table_element *element) +{ + dom_html_table_caption_element *caption; + dom_html_table_element_get_caption(element, &caption); + _dom_node_remove_child((dom_node_internal *)element, + (dom_node_internal *)caption, + (dom_node_internal **)&caption); + element->caption = NULL; + return DOM_NO_ERR; +} + +/** + * Get or Create the table Foot + * + * \param element The dom_html_table_element object + * \param t_foot The Status + * \return DOM_NO_ERR on success, appropriate dom_exception on failure. + */ +dom_exception dom_html_table_element_create_t_foot( + dom_html_table_element *element, + dom_html_element **t_foot) +{ + dom_exception exp; + exp = dom_html_table_element_get_t_foot(element, + (dom_html_table_section_element **)t_foot); + if(exp !=DOM_NO_ERR) { + return exp; + } + if((*t_foot) == NULL) { + dom_html_document *doc = (dom_html_document *) + ((dom_node_internal *) element)->owner; + exp = _dom_html_table_section_element_create(doc, + doc->memoised[hds_TFOOT], + ((dom_node_internal *)element)->namespace, + ((dom_node_internal *)element)->prefix, + (dom_html_table_section_element **)t_foot); + if(exp != DOM_NO_ERR) { + return exp; + } + _dom_node_append_child((dom_node_internal *)element, + (dom_node_internal *)*t_foot, + (dom_node_internal **)t_foot); + element->t_foot = (dom_html_table_section_element *)*t_foot; + + } + return DOM_NO_ERR; +} + +/** + * Delete the table Foot, if one exists + * + * \param element The dom_html_table_element object + * \return DOM_NO_ERR on success, appropriate dom_exception on failure. + */ +dom_exception dom_html_table_element_delete_t_foot( + dom_html_table_element *element) +{ + dom_html_table_section_element *t_foot; + dom_html_table_element_get_t_foot(element, &t_foot); + _dom_node_remove_child((dom_node_internal *)element, + (dom_node_internal *)t_foot, + (dom_node_internal **)&t_foot); + element->t_foot = NULL; + return DOM_NO_ERR; +} + +/** + * Get or Create the table Head + * + * \param element The dom_html_table_element object + * \param t_head The Status + * \return DOM_NO_ERR on success, appropriate dom_exception on failure. + */ +dom_exception dom_html_table_element_create_t_head( + dom_html_table_element *element, + dom_html_element **t_head) +{ + dom_html_table_element_get_t_head(element, + (dom_html_table_section_element **)t_head); + if((*t_head) == NULL) { + dom_exception exp; + dom_html_document *doc = (dom_html_document *) + ((dom_node_internal *) element)->owner; + exp = _dom_html_table_section_element_create(doc, + doc->memoised[hds_THEAD], + ((dom_node_internal *)element)->namespace, + ((dom_node_internal *)element)->prefix, + (dom_html_table_section_element **)t_head); + if(exp != DOM_NO_ERR) { + return exp; + } + _dom_node_append_child((dom_node_internal *)element, + (dom_node_internal *)*t_head, + (dom_node_internal **)t_head); + element->t_head = (dom_html_table_section_element *)*t_head; + + } + return DOM_NO_ERR; +} + +/** + * Delete the table Head, if one exists + * + * \param element The dom_html_table_element object + * \return DOM_NO_ERR on success, appropriate dom_exception on failure. + */ +dom_exception dom_html_table_element_delete_t_head( + dom_html_table_element *element) +{ + dom_html_table_section_element *t_head; + dom_html_table_element_get_t_head(element, &t_head); + _dom_node_remove_child((dom_node_internal *)element, + (dom_node_internal *)t_head, + (dom_node_internal **)&t_head); + element->t_head = NULL; + return DOM_NO_ERR; +} + +/** + * Get or Create the table Body + * + * \param element The dom_html_table_element object + * \param t_head The Status + * \return DOM_NO_ERR on success, appropriate dom_exception on failure. + */ +dom_exception dom_html_table_element_create_t_body( + dom_html_table_element *element, + dom_html_table_section_element **t_body) +{ + dom_html_collection *t_bodies; + uint32_t len; + dom_html_table_element_get_t_bodies(element, + &t_bodies); + dom_html_collection_get_length(t_bodies, + &len); + + if(len == 0) { + dom_exception exp; + dom_html_document *doc = (dom_html_document *) + ((dom_node_internal *) element)->owner; + exp = _dom_html_table_section_element_create(doc, + doc->memoised[hds_TBODY], + ((dom_node_internal *)element)->namespace, + ((dom_node_internal *)element)->prefix, + t_body); + if(exp != DOM_NO_ERR) { + return exp; + } + return _dom_node_append_child((dom_node_internal *)element, + (dom_node_internal *)*t_body, + (dom_node_internal **)t_body); + + } else { + return dom_html_collection_item(t_bodies, + 0, (dom_node **)t_body); + } + return DOM_NO_ERR; +} +/** + * Insert a new Row into the table + * + * \param element The dom_html_table_element object + * \param index The Index to insert the Row + * \return DOM_NO_ERR on success, appropriate dom_exception on failure. + */ +dom_exception dom_html_table_element_insert_row( + dom_html_table_element *element, + int32_t index, + dom_html_element **row) +{ + dom_exception exp; + dom_html_collection* rows; + uint32_t len; + dom_html_document *doc = (dom_html_document *) + ((dom_node_internal *) element)->owner; + + exp = dom_html_table_element_get_rows(element, + &rows); + if(exp != DOM_NO_ERR) { + return exp; + } + exp = dom_html_collection_get_length(rows, + &len); + + exp = _dom_html_table_row_element_create(doc, + ((dom_node_internal *)element)->namespace, + ((dom_node_internal *)element)->prefix, + (dom_html_table_row_element **)row); + if(exp != DOM_NO_ERR) { + return exp; + } + + if(index > (int32_t)len || index < -1) { + return DOM_INDEX_SIZE_ERR; + } else if(len == 0) { + dom_html_table_section_element *new_body; + exp = dom_html_table_element_create_t_body(element, + &new_body); + if(exp != DOM_NO_ERR) { + return exp; + } + + return _dom_node_append_child((dom_node_internal *)new_body, + (dom_node_internal *)*row, + (dom_node_internal **)row); + + } else { + if(index ==-1) { + index = (int32_t)len; + } + + dom_html_collection* rows; + dom_html_table_section_element *t_head; + dom_html_table_section_element *t_foot; + uint32_t window_len = 0, section_len; + + dom_html_table_element_get_t_head(element, &t_head); + dom_html_table_section_element_get_rows(t_head, &rows); + dom_html_collection_get_length(rows, §ion_len); + + if(window_len + section_len > (uint32_t)index || + window_len + section_len == len) { + return dom_html_table_section_element_insert_row(t_head, + index-window_len, row); + } + + window_len += section_len; + + dom_node_internal *n = (dom_node_internal *)element; + + for (n = n->first_child; n != NULL; n = n->next) { + if((n->type == DOM_ELEMENT_NODE) && + dom_string_caseless_isequal(doc->memoised[hds_TBODY],n->name)) { + + dom_html_table_section_element_get_rows((dom_html_table_section_element *)n, &rows); + dom_html_collection_get_length(rows, §ion_len); + + if(window_len + section_len > (uint32_t)index || + window_len + section_len == len) { + return dom_html_table_section_element_insert_row( + (dom_html_table_section_element *)n, + index-window_len, row); + } + + window_len += section_len; + } + } + dom_html_table_element_get_t_foot(element, &t_foot); + dom_html_table_section_element_get_rows(t_foot, &rows); + dom_html_collection_get_length(rows, §ion_len); + if(window_len + section_len > (uint32_t)index || + window_len +section_len == len) { + return dom_html_table_section_element_insert_row(t_foot, + index-window_len, row); + } + return DOM_INDEX_SIZE_ERR; + } +} +/** + * Delete the table Head, if one exists + * + * \param element The dom_html_table_element object + * \return DOM_NO_ERR on success, appropriate dom_exception on failure. + */ +dom_exception dom_html_table_element_delete_row( + dom_html_table_element *element, + int32_t index) +{ + dom_exception exp; + dom_html_collection* rows; + uint32_t len; + dom_html_document *doc = (dom_html_document *) + ((dom_node_internal *) element)->owner; + + exp = dom_html_table_element_get_rows(element, + &rows); + if(exp != DOM_NO_ERR) { + return exp; + } + exp = dom_html_collection_get_length(rows, + &len); + + if(exp != DOM_NO_ERR) { + return exp; + } + + if(index >= (int32_t)len || index < -1 || len ==0) { + return DOM_INDEX_SIZE_ERR; + } else { + if(index ==-1) { + index = (int32_t)len-1; + } + dom_html_collection* rows; + dom_html_table_section_element *t_head; + dom_html_table_section_element *t_foot; + uint32_t window_len = 0, section_len; + dom_html_table_element_get_t_head(element, &t_head); + dom_html_table_section_element_get_rows(t_head, &rows); + dom_html_collection_get_length(rows, §ion_len); + if(window_len + section_len > (uint32_t)index) { + return dom_html_table_section_element_delete_row(t_head, + index-window_len); + } + window_len += section_len; + dom_node_internal *n = (dom_node_internal *)element; + for (n = n->first_child; n != NULL; n = n->next) { + if((n->type == DOM_ELEMENT_NODE) && + dom_string_caseless_isequal(doc->memoised[hds_TBODY],n->name)) { + dom_html_table_section_element_get_rows((dom_html_table_section_element *)n, &rows); + dom_html_collection_get_length(rows, §ion_len); + if(window_len + section_len > (uint32_t)index) { + return dom_html_table_section_element_delete_row( + (dom_html_table_section_element *)n, + index-window_len); + } + window_len += section_len; + } + } + exp = dom_html_table_element_get_t_foot(element, &t_foot); + dom_html_table_section_element_get_rows(t_foot, &rows); + dom_html_collection_get_length(rows, §ion_len); + if(window_len + section_len > (uint32_t)index) { + return dom_html_table_section_element_delete_row(t_foot, + index-window_len); + } + return DOM_INDEX_SIZE_ERR; + } + +} diff --git a/src/html/html_table_element.h b/src/html/html_table_element.h index 2e182d5..caabbe8 100644 --- a/src/html/html_table_element.h +++ b/src/html/html_table_element.h @@ -3,5 +3,61 @@ * Licensed under the MIT License, * http://www.opensource.org/licenses/mit-license.php * Copyright 2009 Bo Yang <struggleyb.nku@gmail.com> + * Copyright 2014 Rupinder Singh Khokhar <rsk1coder99@gmail.com> */ +#ifndef dom_internal_html_table_element_h_ +#define dom_internal_html_table_element_h_ + +#include <dom/html/html_table_element.h> +#include "html/html_element.h" + +struct dom_html_table_element { + struct dom_html_element base; + /**< The base class */ + dom_html_table_caption_element* caption; + /**< The caption associated with the table*/ + dom_html_table_section_element* t_head; + /**< The thead element associated with the table*/ + dom_html_table_section_element* t_foot; + /**< The tfoot element associated with the table*/ +}; + +/* Create a dom_html_table_element object */ +dom_exception _dom_html_table_element_create(struct dom_html_document *doc, + dom_string *namespace, dom_string *prefix, + struct dom_html_table_element **ele); + +/* Initialise a dom_html_table_element object */ +dom_exception _dom_html_table_element_initialise(struct dom_html_document *doc, + dom_string *namespace, dom_string *prefix, + struct dom_html_table_element *ele); + +/* Finalise a dom_html_table_element object */ +void _dom_html_table_element_finalise(struct dom_html_table_element *ele); + +/* Destroy a dom_html_table_element object */ +void _dom_html_table_element_destroy(struct dom_html_table_element *ele); + +/* The protected virtual functions */ +dom_exception _dom_html_table_element_parse_attribute(dom_element *ele, + dom_string *name, dom_string *value, + dom_string **parsed); +void _dom_virtual_html_table_element_destroy(dom_node_internal *node); +dom_exception _dom_html_table_element_copy(dom_node_internal *old, + dom_node_internal **copy); + +#define DOM_HTML_TABLE_ELEMENT_PROTECT_VTABLE \ + _dom_html_table_element_parse_attribute + +#define DOM_NODE_PROTECT_VTABLE_HTML_TABLE_ELEMENT \ + _dom_virtual_html_table_element_destroy, \ + _dom_html_table_element_copy + +#endif + +bool table_rows_callback(struct dom_node_internal *node, void *ctx); +bool table_t_bodies_callback(struct dom_node_internal *node, void *ctx); +dom_exception dom_html_table_element_create_t_body( + dom_html_table_element *element, + dom_html_table_section_element **t_body); diff --git a/src/html/html_tablecell_element.c b/src/html/html_tablecell_element.c index f8eaf01..cc596c1 100644 --- a/src/html/html_tablecell_element.c +++ b/src/html/html_tablecell_element.c @@ -191,6 +191,7 @@ dom_exception dom_html_table_cell_element_get_cell_index( } n = n->parent; } + dom_node_internal *root = n; while(n != NULL) { if(n == (dom_node_internal *)table_cell) { break; @@ -207,18 +208,16 @@ dom_exception dom_html_table_cell_element_get_cell_index( } else { /* No children and siblings */ struct dom_node_internal *parent = n->parent; - - while (parent !=NULL) { - if(n == parent->last_child) { - n = parent; - parent = parent->parent; - } else { - break; - } - + while (n == parent->last_child && + n != root) { + n = parent; + parent = parent->parent; } - if(parent == NULL) { + + if(n == root) { n = NULL; + } else { + n = n->next; } } } diff --git a/src/html/html_tablerow_element.c b/src/html/html_tablerow_element.c index 2e182d5..fb3e27b 100644 --- a/src/html/html_tablerow_element.c +++ b/src/html/html_tablerow_element.c @@ -3,5 +3,373 @@ * Licensed under the MIT License, * http://www.opensource.org/licenses/mit-license.php * Copyright 2009 Bo Yang <struggleyb.nku@gmail.com> + * Copyright 2014 Rupinder Singh Khokhar <rsk1coder99@gmail.com> */ +#include <assert.h> +#include <stdlib.h> + +#include <dom/html/html_tablerow_element.h> +#include <dom/html/html_table_element.h> + +#include "html/html_document.h" +#include "html/html_tablerow_element.h" +#include "html/html_collection.h" + +#include "core/node.h" +#include "core/attr.h" +#include "utils/utils.h" + +static struct dom_element_protected_vtable _protect_vtable = { + { + DOM_NODE_PROTECT_VTABLE_HTML_TABLE_ROW_ELEMENT + }, + DOM_HTML_TABLE_ROW_ELEMENT_PROTECT_VTABLE +}; + +/** + * Create a dom_html_table_row_element table_row + * + * \param doc The document table_row + * \param ele The returned element table_row + * \return DOM_NO_ERR on success, appropriate dom_exception on failure. + */ +dom_exception _dom_html_table_row_element_create(struct dom_html_document *doc, + dom_string *namespace, dom_string *prefix, + struct dom_html_table_row_element **ele) +{ + struct dom_node_internal *node; + + *ele = malloc(sizeof(dom_html_table_row_element)); + if (*ele == NULL) + return DOM_NO_MEM_ERR; + + /* Set up vtables */ + node = (struct dom_node_internal *) *ele; + node->base.vtable = &_dom_html_element_vtable; + node->vtable = &_protect_vtable; + + return _dom_html_table_row_element_initialise(doc, namespace, prefix, *ele); +} + +/** + * Initialise a dom_html_table_row_element table_row + * + * \param doc The document table_row + * \param ele The dom_html_table_row_element table_row + * \return DOM_NO_ERR on success, appropriate dom_exception on failure. + */ +dom_exception _dom_html_table_row_element_initialise(struct dom_html_document *doc, + dom_string *namespace, dom_string *prefix, + struct dom_html_table_row_element *ele) +{ + return _dom_html_element_initialise(doc, &ele->base, + doc->memoised[hds_TR], + namespace, prefix); +} + +/** + * Finalise a dom_html_table_row_element table_row + * + * \param ele The dom_html_table_row_element table_row + */ +void _dom_html_table_row_element_finalise(struct dom_html_table_row_element *ele) +{ + _dom_html_element_finalise(&ele->base); +} + +/** + * Destroy a dom_html_table_row_element table_row + * + * \param ele The dom_html_table_row_element table_row + */ +void _dom_html_table_row_element_destroy(struct dom_html_table_row_element *ele) +{ + _dom_html_table_row_element_finalise(ele); + free(ele); +} + +/*------------------------------------------------------------------------*/ +/* The protected virtual functions */ + +/* The virtual function used to parse attribute value, see src/core/element.c + * for detail */ +dom_exception _dom_html_table_row_element_parse_attribute(dom_element *ele, + dom_string *name, dom_string *value, + dom_string **parsed) +{ + UNUSED(ele); + UNUSED(name); + + dom_string_ref(value); + *parsed = value; + + return DOM_NO_ERR; +} + +/* The virtual destroy function, see src/core/node.c for detail */ +void _dom_virtual_html_table_row_element_destroy(dom_node_internal *node) +{ + _dom_html_table_row_element_destroy((struct dom_html_table_row_element *) node); +} + +/* The virtual copy function, see src/core/node.c for detail */ +dom_exception _dom_html_table_row_element_copy(dom_node_internal *old, + dom_node_internal **copy) +{ + return _dom_html_element_copy(old, copy); +} + +/*-----------------------------------------------------------------------*/ +/* API functions */ + +#define SIMPLE_GET(attr) \ + dom_exception dom_html_table_row_element_get_##attr( \ + dom_html_table_row_element *element, \ + dom_string **attr) \ +{ \ + dom_exception ret; \ + dom_string *_memo_##attr; \ + \ + _memo_##attr = \ + ((struct dom_html_document *) \ + ((struct dom_node_internal *)element)->owner)->\ + memoised[hds_##attr]; \ + \ + ret = dom_element_get_attribute(element, _memo_##attr, attr); \ + \ + return ret; \ +} +#define SIMPLE_SET(attr) \ + dom_exception dom_html_table_row_element_set_##attr( \ + dom_html_table_row_element *element, \ + dom_string *attr) \ +{ \ + dom_exception ret; \ + dom_string *_memo_##attr; \ + \ + _memo_##attr = \ + ((struct dom_html_document *) \ + ((struct dom_node_internal *)element)->owner)->\ + memoised[hds_##attr]; \ + \ + ret = dom_element_set_attribute(element, _memo_##attr, attr); \ + \ + return ret; \ +} + +#define SIMPLE_GET_SET(attr) SIMPLE_GET(attr) SIMPLE_SET(attr) + +SIMPLE_GET_SET(align); +SIMPLE_GET_SET(bg_color); +SIMPLE_GET_SET(ch); +SIMPLE_GET_SET(ch_off); +SIMPLE_GET_SET(v_align); + +/** + * Get the index of the Row in logical order + * + * \param element The dom_html_table_row_element object + * \param index The Status + * \return DOM_NO_ERR on success, appropriate dom_exception on failure. + */ +dom_exception dom_html_table_row_element_get_row_index( + dom_html_table_row_element *table_row, int32_t *row_index) +{ + dom_node_internal *n = ((dom_node_internal *)table_row)->parent; + dom_node_internal *parent = n; + dom_html_document *doc = (dom_html_document *) ((dom_node_internal *) table_row)->owner; + uint32_t count = 0; + for(n = n->first_child; n != (dom_node_internal *)table_row; + n = n->next) { + if(n->type == DOM_ELEMENT_NODE && + dom_string_caseless_isequal(n->name,doc->memoised[hds_TR])) { + count += 1; + } + } + + if(dom_string_caseless_isequal((parent->parent)->name, doc->memoised[hds_TABLE]) && + dom_string_caseless_isequal(parent->name, doc->memoised[hds_THEAD]) + ) { + *row_index = count; + }else if(dom_string_caseless_isequal((parent->parent)->name, doc->memoised[hds_TABLE]) && + (dom_string_caseless_isequal(parent->name, doc->memoised[hds_TBODY]) || + dom_string_caseless_isequal(parent->name, doc->memoised[hds_TFOOT]))) { + uint32_t len; + n = parent->parent; + dom_html_table_section_element *t_head; + dom_html_collection *rows; + dom_html_table_element_get_t_head( + (dom_html_table_element *)(parent->parent), + &t_head); + dom_html_table_section_element_get_rows(t_head, + &rows); + dom_html_collection_get_length(rows, + &len); + count += len; + for(n = n->first_child;n != parent && n != NULL; + n = n->next) { + if(dom_string_caseless_isequal(n->name, doc->memoised[hds_TBODY])) { + dom_html_table_section_element_get_rows( + (dom_html_table_section_element *)n, + &rows); + dom_html_collection_get_length(rows, &len); + count += len; + } + } + *row_index = (int32_t)count; + + } else { + return DOM_HIERARCHY_REQUEST_ERR; + } + return DOM_NO_ERR; +} + +/** + * Get the index of a row within its Section + * + * \param element The dom_html_table_row_element object + * \param index The Status + * \return DOM_NO_ERR on success, appropriate dom_exception on failure. + */ +dom_exception dom_html_table_row_element_get_section_row_index( + dom_html_table_row_element *table_row, int32_t *section_row_index) +{ + dom_node_internal *n = ((dom_node_internal *)table_row)->parent; + dom_html_document *doc = (dom_html_document *) ((dom_node_internal *) table_row)->owner; + int32_t count = 0; + for(n = n->first_child; n != (dom_node_internal *)table_row; + n = n->next) { + if(n->type == DOM_ELEMENT_NODE && + dom_string_caseless_isequal(n->name, doc->memoised[hds_TR])) { + count += 1; + } + } + *section_row_index = count; + return DOM_NO_ERR; +} + +/** + * Callback for creating the Cells collection + * + * \param node The dom_node_internal object + * \param ctx The dom_html_document object (void *) + * \return DOM_NO_ERR on success, appropriate dom_exception on failure. + */ +bool table_cells_callback(struct dom_node_internal *node, void *ctx) +{ + if(node->type == DOM_ELEMENT_NODE && + dom_string_caseless_isequal(node->name, + ((dom_html_document *)ctx)->memoised[hds_TD])) { + return true; + } + return false; +} + +/** + * Get the Cells collection + * + * \param element The dom_html_table_element object + * \param t_bodies The Status + * \return DOM_NO_ERR on success, appropriate dom_exception on failure. + */ +dom_exception dom_html_table_row_element_get_cells( + dom_html_table_row_element *element, + dom_html_collection **cells) +{ + dom_html_document *doc = (dom_html_document *) ((dom_node_internal *) element)->owner; + return _dom_html_collection_create(doc, (dom_node_internal *)element, + table_cells_callback, (void *)doc, cells); +} + +/** + * Insert Cell before the given Index + * + * \param element The dom_html_table_row_element object + * \param index The Index of the Cell node to be inserted + * \return DOM_NO_ERR on success, appropriate dom_exception on failure. + */ +dom_exception dom_html_table_row_element_insert_cell( + dom_html_table_row_element *element, + int32_t index, dom_html_element **cell) { + dom_html_document *doc = (dom_html_document *) ((dom_node_internal *) element)->owner; + + dom_node *node; /*< The node at the (index)th position*/ + + dom_html_collection *cells; /*< The collection of cells in input table_row_element*/ + uint32_t len; /*< The size of the cell collection */ + dom_exception exp; /*< Variable for getting the exceptions*/ + exp = _dom_html_element_create(doc, doc->memoised[hds_TD], + ((dom_node_internal *)element)->namespace, + ((dom_node_internal *)element)->prefix, + cell); + if(exp != DOM_NO_ERR) + return exp; + + exp = dom_html_table_row_element_get_cells(element, &cells); + if(exp != DOM_NO_ERR) + return exp; + + exp = dom_html_collection_get_length(cells, &len); + if(exp != DOM_NO_ERR) + return exp; + + if(index < -1 || index > (int32_t)len) { + /* Check for index validity */ + return DOM_INDEX_SIZE_ERR; + } else if(index == -1 || index == (int32_t)len) { + return _dom_node_append_child((dom_node_internal *)element, + (dom_node_internal *)*cell, + (dom_node_internal **)cell); + } else { + dom_html_collection_item(cells, + index, &node); + return _dom_node_insert_before((dom_node_internal *)element, + (dom_node_internal *)*cell, (dom_node_internal *)node, + (dom_node_internal **)cell); + } +} + +/** + * Delete Cell at given Index + * + * \param element The dom_html_table_row_element object + * \param index The Index of the Cell node to be deleted + * \return DOM_NO_ERR on success, appropriate dom_exception on failure. + */ +dom_exception dom_html_table_row_element_delete_cell( + dom_html_table_row_element *element, + int32_t index) { + dom_node *node; /*< The node at the (index)th position*/ + + dom_html_collection *cells; /*< The collection of rows in input table_row_element*/ + uint32_t len; /*< The size of the row collection */ + + dom_exception exp; /*< Temporary variable to store & check the exceptions*/ + + exp = dom_html_table_row_element_get_cells(element, &cells); + if(exp != DOM_NO_ERR) { + return exp; + } + + exp = dom_html_collection_get_length(cells, &len); + if(exp != DOM_NO_ERR) { + return exp; + } + + if(index < -1 || index >= (int32_t)len || len ==0) { + /* Check for index validity */ + return DOM_INDEX_SIZE_ERR; + } else if(index == -1) { + exp = dom_html_collection_item(cells, + len-1, &node); + } else { + exp = dom_html_collection_item(cells, + index, &node); + } + return _dom_node_remove_child((dom_node_internal *)element, + (dom_node_internal *)node, + (dom_node_internal **)&node); + +} + diff --git a/src/html/html_tablerow_element.h b/src/html/html_tablerow_element.h index 2e182d5..2401790 100644 --- a/src/html/html_tablerow_element.h +++ b/src/html/html_tablerow_element.h @@ -3,5 +3,51 @@ * Licensed under the MIT License, * http://www.opensource.org/licenses/mit-license.php * Copyright 2009 Bo Yang <struggleyb.nku@gmail.com> + * Copyright 2014 Rupinder Singh Khokhar <rsk1coder99@gmail.com> */ +#ifndef dom_internal_html_table_row_element_h_ +#define dom_internal_html_table_row_element_h_ + +#include <dom/html/html_tablerow_element.h> +#include "html/html_element.h" + +struct dom_html_table_row_element { + struct dom_html_element base; + /**< The base class */ +}; + +/* Create a dom_html_table_row_element object */ +dom_exception _dom_html_table_row_element_create(struct dom_html_document *doc, + dom_string *namespace, dom_string *prefix, + struct dom_html_table_row_element **ele); + +/* Initialise a dom_html_table_row_element object */ +dom_exception _dom_html_table_row_element_initialise(struct dom_html_document *doc, + dom_string *namespace, dom_string *prefix, + struct dom_html_table_row_element *ele); + +/* Finalise a dom_html_table_row_element object */ +void _dom_html_table_row_element_finalise(struct dom_html_table_row_element *ele); + +/* Destroy a dom_html_table_row_element object */ +void _dom_html_table_row_element_destroy(struct dom_html_table_row_element *ele); + +/* The protected virtual functions */ +dom_exception _dom_html_table_row_element_parse_attribute(dom_element *ele, + dom_string *name, dom_string *value, + dom_string **parsed); +void _dom_virtual_html_table_row_element_destroy(dom_node_internal *node); +dom_exception _dom_html_table_row_element_copy(dom_node_internal *old, + dom_node_internal **copy); + +#define DOM_HTML_TABLE_ROW_ELEMENT_PROTECT_VTABLE \ + _dom_html_table_row_element_parse_attribute + +#define DOM_NODE_PROTECT_VTABLE_HTML_TABLE_ROW_ELEMENT \ + _dom_virtual_html_table_row_element_destroy, \ + _dom_html_table_row_element_copy + +#endif +bool table_cells_callback(struct dom_node_internal *node, void *ctx); + diff --git a/src/html/html_tablesection_element.c b/src/html/html_tablesection_element.c index 7468d01..b35cfb4 100644 --- a/src/html/html_tablesection_element.c +++ b/src/html/html_tablesection_element.c @@ -12,6 +12,7 @@ #include "html/html_document.h" #include "html/html_tablesection_element.h" +#include "html/html_tablerow_element.h" #include "html/html_collection.h" #include "html/html_element.h" @@ -169,8 +170,7 @@ bool table_section_callback(struct dom_node_internal *node, void *ctx) { if(node->type == DOM_ELEMENT_NODE && dom_string_caseless_isequal(node->name, - ((dom_html_document *)ctx)->memoised[hds_TR])) - { + ((dom_html_document *)ctx)->memoised[hds_TR])) { return true; } return false; @@ -179,7 +179,7 @@ bool table_section_callback(struct dom_node_internal *node, void *ctx) /** * Get the rows collection * - * \param element The dom_html_section_element object + * \param element The dom_html_table_section_element object * \param rows The Status * \return DOM_NO_ERR on success, appropriate dom_exception on failure. */ @@ -188,21 +188,20 @@ dom_exception dom_html_table_section_element_get_rows( dom_html_collection **rows) { dom_html_document *doc = (dom_html_document *) ((dom_node_internal *) element)->owner; - _dom_html_collection_create(doc, (dom_node_internal *)element, + return _dom_html_collection_create(doc, (dom_node_internal *)element, table_section_callback, (void *)doc, rows); - return DOM_NO_ERR; } /** * Insert Row before the given Index * - * \param element The dom_html_section_element object + * \param element The dom_html_table_section_element object * \param index The Index of the Row node to be inserted * \return DOM_NO_ERR on success, appropriate dom_exception on failure. */ dom_exception dom_html_table_section_element_insert_row( dom_html_table_section_element *element, - int32_t index, dom_html_element **newRow) { + int32_t index, dom_html_element **new_row) { dom_html_document *doc = (dom_html_document *) ((dom_node_internal *) element)->owner; dom_node *node; /*< The node at the (index)th position*/ @@ -210,10 +209,10 @@ dom_exception dom_html_table_section_element_insert_row( dom_html_collection *rows; /*< The collection of rows in input table_section_element*/ uint32_t len; /*< The size of the row collection */ dom_exception exp; /*< Variable for getting the exceptions*/ - exp = _dom_html_element_create(doc, doc->memoised[hds_TR], + exp = _dom_html_table_row_element_create(doc, ((dom_node_internal *)element)->namespace, ((dom_node_internal *)element)->prefix, - newRow); + (dom_html_table_row_element **)new_row); if(exp != DOM_NO_ERR) return exp; @@ -225,47 +224,26 @@ dom_exception dom_html_table_section_element_insert_row( if(exp != DOM_NO_ERR) return exp; - if(index < -1 || (uint32_t)index > len) { + if(index < -1 || index > (int32_t)len) { /* Check for index validity */ return DOM_INDEX_SIZE_ERR; - } else if((index == -1 || (uint32_t)index == len) - &&len != 0) { - dom_html_collection_item(rows, - len-1, &node); - - dom_node_internal *internal_node = (dom_node_internal *)node; /*< The dom_node_internal row object at the (len-1)th position*/ - - ((dom_node_internal *) *newRow)->next = internal_node->next; - ((dom_node_internal *) *newRow)->previous = internal_node; - internal_node->next = (dom_node_internal *)*newRow; - } else if(len != 0) { + } else if(index == -1 || index == (int32_t)len) { + return _dom_node_append_child((dom_node_internal *)element, + (dom_node_internal *)*new_row, + (dom_node_internal **)new_row); + } else { dom_html_collection_item(rows, index, &node); - - dom_node_internal *internal_node = (dom_node_internal *)node; /*< The dom_node_internal row object at the (index)th position*/ - - ((dom_node_internal *) *newRow)->next = internal_node; - ((dom_node_internal *) *newRow)->previous = internal_node->previous; - if(internal_node->previous != NULL) { - (internal_node->previous)->next = (dom_node_internal *)*newRow; - internal_node->previous = (dom_node_internal *)*newRow; - } + return _dom_node_insert_before((dom_node_internal *)element, + (dom_node_internal *)*new_row, (dom_node_internal *)node, + (dom_node_internal **)new_row); } - - /*Adjust parent's pointers*/ - ((dom_node_internal *) *newRow)->parent = (dom_node_internal *)element; - if(index == 0) - ((dom_node_internal *)element)->first_child = (dom_node_internal *)*newRow; - if((uint32_t)index == len) - ((dom_node_internal *)element)->last_child = (dom_node_internal *)*newRow; - - return DOM_NO_ERR; } /** * Delete Row at given Index * - * \param element The dom_html_section_element object + * \param element The dom_html_table_section_element object * \param index The Index of the Row node to be deleted * \return DOM_NO_ERR on success, appropriate dom_exception on failure. */ @@ -289,7 +267,7 @@ dom_exception dom_html_table_section_element_delete_row( return exp; } - if(index < -1 || (uint32_t)index >= len) { + if(index < -1 || index >= (int32_t)len) { /* Check for index validity */ return DOM_INDEX_SIZE_ERR; } else if(index == -1) { @@ -299,20 +277,9 @@ dom_exception dom_html_table_section_element_delete_row( exp = dom_html_collection_item(rows, index, &node); } - if(exp != DOM_NO_ERR) - return exp; - - dom_node_internal *internal_node = (dom_node_internal *)node; - - /*Fixing the sibling pointers*/ - if(internal_node->previous != NULL) { - (internal_node->previous)->next = internal_node->next; - } - if(internal_node->next != NULL) { - (internal_node->next)->previous = internal_node->previous; - } - - _dom_html_element_destroy(internal_node); + exp = _dom_node_remove_child((dom_node_internal *)element, + (dom_node_internal *)node, + (dom_node_internal **)&node); return DOM_NO_ERR; } diff --git a/src/html/html_tablesection_element.h b/src/html/html_tablesection_element.h index fcab1cb..387882a 100644 --- a/src/html/html_tablesection_element.h +++ b/src/html/html_tablesection_element.h @@ -10,8 +10,8 @@ #define dom_internal_html_table_section_element_h_ #include <dom/html/html_tablesection_element.h> -#include "html/html_element.h" +#include "html/html_element.h" struct dom_html_table_section_element { struct dom_html_element base; diff --git a/test/DOMTSHandler.pm b/test/DOMTSHandler.pm index 78d5e7e..8953047 100644 --- a/test/DOMTSHandler.pm +++ b/test/DOMTSHandler.pm @@ -44,6 +44,10 @@ our %special_type = ( CDATASection => "dom_cdata_section *", HTMLAnchorElement => "dom_html_anchor_element *", HTMLElement => "dom_html_element *", + HTMLTableCaptionElement => "dom_html_table_caption_element *", + HTMLTableSectionElement => "dom_html_table_section_element *", + HTMLTableElement => "dom_html_table_element *", + HTMLTableRowElement => "dom_html_table_row_element *", ); our %special_prefix = ( DOMString => "dom_string", @@ -57,6 +61,20 @@ our %special_prefix = ( HTMLHRElement => "dom_html_hr_element", HTMLBRElement => "dom_html_br_element", HTMLLIElement => "dom_html_li_element", + HTMLTableCaptionElement => "dom_html_table_caption_element", + HTMLTableSectionElement => "dom_html_table_section_element", + HTMLIsIndexElement => "dom_html_isindex_element", + caption => "dom_html_table_caption_element *", + section => "dom_html_table_section_element *", + createCaption => "dom_html_element *", + createTHead => "dom_html_element *", + createTFoot => "dom_html_element *", + deleteCaption => "dom_html_element *", + deleteTHead => "dom_html_element *", + deleteTFoot => "dom_html_element *", + insertRow => "dom_html_element *", + deleteRow => "dom_html_element *", + form => "dom_html_form_element *", ); our %unref_prefix = ( @@ -164,10 +182,14 @@ sub new { # The name of the current List/Collection list_name => "", # The number of items of the current List/Collection + list_last_name => [], + # The number of items of the current List/Collection list_num => 0, # Whether List/Collection has members list_hasmem => 0, # The type of the current List/Collection + member_list_declared => 0, + # The type of the current List/Collection list_type => "", # Whether we are in exception assertion exception => 0, @@ -389,6 +411,7 @@ int main(int argc, char **argv) perror("chdir (\\"$self->{chdir})\\""); return 1; } + int list_temp[100], count = -1; __EOF__ } @@ -442,7 +465,6 @@ sub generate_list { # Yes, we are in List/Collection declaration # Firstly, enclose the Array declaration print "};\n"; - # Now, we should create the list * for the List/Collection # Note, we should deal with "int" or "string" type with different params. if ($self->{"list_type"} eq "char *") { @@ -450,18 +472,37 @@ sub generate_list { } if ($self->{"list_type"} eq "int *") { print $self->{"list_name"}." = list_new(INT);\n"; + while(defined ($x = pop @{$self->{"list_last_name"}})) { + print $x." = list_new(INT);\n"; + } } + while(defined($x = pop(@{$self->{"list_last_name"}}))) { + print $x." = list_new(DOM_STRING);\n"; + } + $self->{"member_list_declared"} = 1; if ($self->{"list_type"} eq "") { die "A List/Collection has children member but no type is impossible!"; } - for (my $i = 0; $i < $self->{"list_num"}; $i++) { - # Use *(char **) to convert char *[] to char * - print "list_add(".$self->{"list_name"}.", *(char **)(".$self->{"list_name"}."Array + $i));\n"; + if ($self->{"list_type"} eq "int *") { + + for (my $i = 0; $i < $self->{"list_num"}; $i++) { + # Use *(char **) to convert char *[] to char * + print "list_add(".$self->{"list_name"}.", (int *)(".$self->{"list_name"}."Array) + $i);\n"; + } + } else { + for (my $i = 0; $i < $self->{"list_num"}; $i++) { + # Use *(char **) to convert char *[] to char * + print "list_add(".$self->{"list_name"}.", *(char **)(".$self->{"list_name"}."Array + $i));\n"; + } } } else { if ($self->{"list_name"} ne "") { #TODO: generally, we set the list type as dom_string, but it may be dom_node - print $self->{"list_name"}." = list_new(DOM_STRING);\n"; + if( $self->{"member_list_declared"} eq 1) { + print $self->{"list_name"}." = list_new(DOM_STRING);\n"; + } else { + push(@{$self->{"list_last_name"}}, $self->{"list_name"}); + } $self->{"list_type"} = "DOMString"; } } @@ -553,14 +594,19 @@ sub generate_framework_statement { if (exists $ats->{"obj"}) { $obj = $ats->{"obj"}; } else { - $obj = $ats->{"item"} + $obj = $ats->{"item"}; } - + if (not $self->{"var"}->{$col} =~ /^(List|Collection)/) { die "Append data to some non-list type!"; } - - print "list_add($col, $obj);\n"; + $type = $self->{"var"}->{$obj}; + if ($type eq "int") { + print "\nlist_temp[++count] =$obj;\n"; + print "list_add($col, &list_temp[count]);\n\n"; + } else { + print "list_add($col, $obj);\n"; + } } case [qw(plus subtract mult divide)] { @@ -681,6 +727,8 @@ sub generate_method { $method = to_cmethod($ats{'interface'}, $en); my $cast = to_attribute_cast($ats{'interface'}); + my $get_attribute = $node->getAttribute("name"); + my $cast_get_attribute = to_get_attribute_cast($get_attribute); my $ns = $dd->find("parameters/param", $node); my $params = "${cast}$ats{'obj'}"; for ($count = 1; $count <= $ns->size; $count++) { @@ -746,7 +794,7 @@ sub generate_method { # Indicate that we have created a temp node $temp_node = 1; } else { - $params = $params.", (void *) \&$ats{'var'}"; + $params = $params.", $cast_get_attribute\&$ats{'var'}"; $unref = $self->param_unref($ats{'var'}); } } @@ -808,6 +856,8 @@ sub generate_attribute_fetcher { my $fetcher = to_attribute_fetcher($ats{'interface'}, "$en"); my $cast = to_attribute_cast($ats{'interface'}); + my $get_attribute = $node->getAttribute("name"); + my $cast_get_attribute = to_get_attribute_cast($get_attribute); my $unref = 0; my $temp_node = 0; # Deal with the situation like @@ -833,7 +883,7 @@ sub generate_attribute_fetcher { $temp_node = 1; } else { $unref = $self->param_unref($ats{'var'}); - print "\texp = $fetcher(${cast}$ats{'obj'}, \&$ats{'var'});\n"; + print "\texp = $fetcher(${cast}$ats{'obj'}, ${cast_get_attribute}\&$ats{'var'});\n"; } @@ -1424,7 +1474,26 @@ sub get_prefix { } return $prefix; } +sub to_get_attribute_cast { + my $type = shift; + my $ret = get_get_attribute_prefix($type); + if($ret eq "") { + return $ret; + } + $ret =~ s/h_t_m_l/html/; + return "(${ret} *)"; +} +sub get_get_attribute_prefix { + my $type = shift; + + if (exists $special_prefix{$type}) { + $prefix = $special_prefix{$type}; + } else { + $prefix = ""; + } + return $prefix; +} # This function remain unsed sub get_suffix { my $type = shift; diff --git a/test/testcases/tests/level1/html/HTMLCollection04.xml.kfail b/test/testcases/tests/level1/html/HTMLCollection04.xml.kfail new file mode 100644 index 0000000..5d78405 --- /dev/null +++ b/test/testcases/tests/level1/html/HTMLCollection04.xml.kfail @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8"?> +<?xml-stylesheet href="test-to-html.xml" type="text/xml"?> + +<!-- + +Copyright (c) 2001 World Wide Web Consortium, +(Massachusetts Institute of Technology, Institut National de +Recherche en Informatique et en Automatique, Keio University). All +Rights Reserved. This program is distributed under the W3C's Software +Intellectual Property License. This program is distributed in the +hope that it will be useful, but WITHOUT ANY WARRANTY; without even +the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. + +See W3C License http://www.w3.org/Consortium/Legal/ for more details. + +--> +<!DOCTYPE test SYSTEM "dom1.dtd"> +<test xmlns="http://www.w3.org/2001/DOM-Test-Suite/Level-1" name="HTMLCollection04"> +<metadata> +<title>HTMLCollection04</title> +<creator>NIST</creator> +<description> + HTMLCollections are live, they are automatically updated when the + underlying document is changed. + + Create a HTMLCollection object by invoking the rows attribute of the + first TABLE element and examine its length, then add a new row and + re-examine the length. +</description> +<contributor>Rick Rivello</contributor> +<date qualifier="created">2002-05-01</date> +<subject resource="http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-html#ID-40057551"/> +</metadata> +<var name="nodeList" type="NodeList"/> +<var name="testNode" type="Node"/> +<var name="rowLength1" type="int"/> +<var name="rowLength2" type="int"/> +<var name="rowsnodeList" type="HTMLCollection"/> +<var name="newRow" type="HTMLElement"/> +<var name="vrowindex" type="int" /> +<var name="doc" type="Document"/> +<var name="result" type="List"/> +<var name="expectedResult" type="List"> +<member>4</member> +<member>5</member> +</var> +<load var="doc" href="collection" willBeModified="true"/> +<getElementsByTagName interface="Document" obj="doc" var="nodeList" tagname='"table"'/> +<assertSize collection="nodeList" size="1" id="Asize"/> +<item interface="NodeList" obj="nodeList" var="testNode" index="0"/> +<rows interface="HTMLTableElement" obj="testNode" var="rowsnodeList"/> +<length interface="HTMLCollection" obj="rowsnodeList" var="rowLength1"/> +<append collection="result" item="rowLength1"/> +<insertRow interface="HTMLTableElement" obj="testNode" var="newRow" index="4"/> +<length interface="HTMLCollection" obj="rowsnodeList" var="rowLength2"/> +<append collection="result" item="rowLength2"/> +<assertEquals actual="result" expected="expectedResult" id="rowIndexLink" ignoreCase="false"/> +</test> diff --git a/test/testcases/tests/level1/html/HTMLCollection02.xml.kfail b/test/testcases/tests/level1/html/HTMLCollection05.xml.kfail index 521d5ae..ffb7d13 100644 --- a/test/testcases/tests/level1/html/HTMLCollection02.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLCollection05.xml.kfail @@ -16,34 +16,31 @@ See W3C License http://www.w3.org/Consortium/Legal/ for more details. --> <!DOCTYPE test SYSTEM "dom1.dtd"> -<test xmlns="http://www.w3.org/2001/DOM-Test-Suite/Level-1" name="HTMLCollection02"> +<test xmlns="http://www.w3.org/2001/DOM-Test-Suite/Level-1" name="HTMLCollection05"> <metadata> -<title>HTMLCollection02</title> +<title>HTMLCollection05</title> <creator>NIST</creator> <description> - An individual node may be accessed by either ordinal index, the node's - name or id attributes. (Test node name). + The length attribute specifies the length or size of the list. - Retrieve the first FORM element and create a HTMLCollection by invoking - the elements attribute. The first SELECT element is further retrieved - using the elements name attribute. + Retrieve the first TABLE element and create a HTMLCollection by invoking + the "rows" attribute. Retrieve the length attribute of the HTMLCollection + object. </description> <contributor>Rick Rivello</contributor> <date qualifier="created">2002-05-01</date> -<subject resource="http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-html#ID-76728479"/> +<subject resource="http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-html#ID-40057551"/> </metadata> <var name="nodeList" type="NodeList"/> <var name="testNode" type="Node"/> -<var name="formNode" type="Node"/> -<var name="formsnodeList" type="HTMLCollection"/> -<var name="vname" type="DOMString" /> +<var name="rowsnodeList" type="HTMLCollection"/> +<var name="rowLength" type="int" /> <var name="doc" type="Document"/> <load var="doc" href="collection" willBeModified="false"/> -<getElementsByTagName interface="Document" obj="doc" var="nodeList" tagname='"form"'/> +<getElementsByTagName interface="Document" obj="doc" var="nodeList" tagname='"table"'/> <assertSize collection="nodeList" size="1" id="Asize"/> <item interface="NodeList" obj="nodeList" var="testNode" index="0"/> -<elements interface="HTMLFormElement" obj="testNode" var="formsnodeList"/> -<namedItem obj="formsnodeList" var="formNode" name='"select1"'/> -<nodeName obj="formNode" var="vname"/> -<assertEquals actual="vname" expected='"SELECT"' id="nameIndexLink" ignoreCase="auto"/> +<rows interface="HTMLTableElement" obj="testNode" var="rowsnodeList"/> +<length interface="HTMLCollection" obj="rowsnodeList" var="rowLength"/> +<assertEquals actual="rowLength" expected="4" id="rowIndexLink" ignoreCase="false"/> </test> diff --git a/test/testcases/tests/level1/html/HTMLCollection01.xml.notimpl b/test/testcases/tests/level1/html/HTMLCollection09.xml.kfail index fd2cfe4..f81e7af 100644 --- a/test/testcases/tests/level1/html/HTMLCollection01.xml.notimpl +++ b/test/testcases/tests/level1/html/HTMLCollection09.xml.kfail @@ -16,17 +16,16 @@ See W3C License http://www.w3.org/Consortium/Legal/ for more details. --> <!DOCTYPE test SYSTEM "dom1.dtd"> -<test xmlns="http://www.w3.org/2001/DOM-Test-Suite/Level-1" name="HTMLCollection01"> +<test xmlns="http://www.w3.org/2001/DOM-Test-Suite/Level-1" name="HTMLCollection09"> <metadata> -<title>HTMLCollection01</title> +<title>HTMLCollection09</title> <creator>NIST</creator> <description> - An individual node may be accessed by either ordinal index, the node's - name or id attributes. (Test ordinal index). + The item(index) method returns null if the index is out of range. Retrieve the first TABLE element and create a HTMLCollection by invoking - the "rows" attribute. The item located at ordinal index 0 is further - retrieved and its "rowIndex" attribute is examined. + the "rows" attribute. Invoke the item(index) method with an index + of 5. This index is out of range and should return null. </description> <contributor>Rick Rivello</contributor> <date qualifier="created">2002-05-01</date> @@ -43,7 +42,6 @@ See W3C License http://www.w3.org/Consortium/Legal/ for more details. <assertSize collection="nodeList" size="1" id="Asize"/> <item interface="NodeList" obj="nodeList" var="testNode" index="0"/> <rows interface="HTMLTableElement" obj="testNode" var="rowsnodeList"/> -<item interface="HTMLCollection" obj="rowsnodeList" var="rowNode" index="0"/> -<rowIndex interface="HTMLTableRowElement" obj="rowNode" var="vrowindex"/> -<assertEquals actual="vrowindex" expected="0" id="rowIndexLink" ignoreCase="false"/> +<item interface="HTMLCollection" obj="rowsnodeList" var="rowNode" index="5"/> +<assertNull actual="rowNode" id="rowIndexLink"/> </test> diff --git a/test/testcases/tests/level1/html/HTMLCollection03.xml.kfail b/test/testcases/tests/level1/html/HTMLCollection12.xml.kfail index 36d489e..d7feb3d 100644 --- a/test/testcases/tests/level1/html/HTMLCollection03.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLCollection12.xml.kfail @@ -16,17 +16,20 @@ See W3C License http://www.w3.org/Consortium/Legal/ for more details. --> <!DOCTYPE test SYSTEM "dom1.dtd"> -<test xmlns="http://www.w3.org/2001/DOM-Test-Suite/Level-1" name="HTMLCollection03"> +<test xmlns="http://www.w3.org/2001/DOM-Test-Suite/Level-1" name="HTMLCollection12"> <metadata> -<title>HTMLCollection03</title> +<title>HTMLCollection12</title> <creator>NIST</creator> <description> - An individual node may be accessed by either ordinal index, the node's - name or id attributes. (Test id attribute). + The namedItem(name) method retrieves a node using a name. It first + searches for a node with a matching id attribute. If it doesn't find + one, it then searches for a Node with a matching name attribute, but only + on those elements that are allowed a name attribute. If there isn't + a matching node the method returns null. Retrieve the first FORM element and create a HTMLCollection by invoking - the "element" attribute. The first SELECT element is further retrieved - using the elements id. + the elements attribute. The method returns null since there is not a + match of the name or id attribute. </description> <contributor>Rick Rivello</contributor> <date qualifier="created">2002-05-01</date> @@ -36,14 +39,12 @@ See W3C License http://www.w3.org/Consortium/Legal/ for more details. <var name="testNode" type="Node"/> <var name="formNode" type="Node"/> <var name="formsnodeList" type="HTMLCollection"/> -<var name="vname" type="DOMString" /> <var name="doc" type="Document"/> <load var="doc" href="collection" willBeModified="false"/> <getElementsByTagName interface="Document" obj="doc" var="nodeList" tagname='"form"'/> <assertSize collection="nodeList" size="1" id="Asize"/> <item interface="NodeList" obj="nodeList" var="testNode" index="0"/> <elements interface="HTMLFormElement" obj="testNode" var="formsnodeList"/> -<namedItem obj="formsnodeList" var="formNode" name='"selectId"'/> -<nodeName obj="formNode" var="vname"/> -<assertEquals actual="vname" expected='"select"' id="nameIndexLink" ignoreCase="auto"/> +<namedItem obj="formsnodeList" var="formNode" name='"select9"'/> +<assertNull actual="formNode" id="nameIndexLink" /> </test> diff --git a/test/testcases/tests/level1/html/HTMLTableElement01.xml.kfail b/test/testcases/tests/level1/html/HTMLTableElement01.xml index 7135fd7..7135fd7 100644 --- a/test/testcases/tests/level1/html/HTMLTableElement01.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLTableElement01.xml diff --git a/test/testcases/tests/level1/html/HTMLTableElement02.xml.kfail b/test/testcases/tests/level1/html/HTMLTableElement02.xml index fb9fa8f..fb9fa8f 100644 --- a/test/testcases/tests/level1/html/HTMLTableElement02.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLTableElement02.xml diff --git a/test/testcases/tests/level1/html/HTMLTableElement03.xml.kfail b/test/testcases/tests/level1/html/HTMLTableElement03.xml index 0b59fe6..0b59fe6 100644 --- a/test/testcases/tests/level1/html/HTMLTableElement03.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLTableElement03.xml diff --git a/test/testcases/tests/level1/html/HTMLTableElement04.xml.kfail b/test/testcases/tests/level1/html/HTMLTableElement04.xml index 1e254b3..1e254b3 100644 --- a/test/testcases/tests/level1/html/HTMLTableElement04.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLTableElement04.xml diff --git a/test/testcases/tests/level1/html/HTMLTableElement05.xml.kfail b/test/testcases/tests/level1/html/HTMLTableElement05.xml index 15de11c..15de11c 100644 --- a/test/testcases/tests/level1/html/HTMLTableElement05.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLTableElement05.xml diff --git a/test/testcases/tests/level1/html/HTMLTableElement06.xml.kfail b/test/testcases/tests/level1/html/HTMLTableElement06.xml index e18b8f8..e18b8f8 100644 --- a/test/testcases/tests/level1/html/HTMLTableElement06.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLTableElement06.xml diff --git a/test/testcases/tests/level1/html/HTMLTableElement07.xml.kfail b/test/testcases/tests/level1/html/HTMLTableElement07.xml index 44be1c3..44be1c3 100644 --- a/test/testcases/tests/level1/html/HTMLTableElement07.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLTableElement07.xml diff --git a/test/testcases/tests/level1/html/HTMLTableElement08.xml.kfail b/test/testcases/tests/level1/html/HTMLTableElement08.xml index 1a744b1..1a744b1 100644 --- a/test/testcases/tests/level1/html/HTMLTableElement08.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLTableElement08.xml diff --git a/test/testcases/tests/level1/html/HTMLTableElement09.xml.kfail b/test/testcases/tests/level1/html/HTMLTableElement09.xml index a0aecf3..a0aecf3 100644 --- a/test/testcases/tests/level1/html/HTMLTableElement09.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLTableElement09.xml diff --git a/test/testcases/tests/level1/html/HTMLTableElement10.xml.kfail b/test/testcases/tests/level1/html/HTMLTableElement10.xml index 160afeb..160afeb 100644 --- a/test/testcases/tests/level1/html/HTMLTableElement10.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLTableElement10.xml diff --git a/test/testcases/tests/level1/html/HTMLTableElement11.xml.kfail b/test/testcases/tests/level1/html/HTMLTableElement11.xml index 785c4d0..785c4d0 100644 --- a/test/testcases/tests/level1/html/HTMLTableElement11.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLTableElement11.xml diff --git a/test/testcases/tests/level1/html/HTMLTableElement12.xml.kfail b/test/testcases/tests/level1/html/HTMLTableElement12.xml index 811a147..811a147 100644 --- a/test/testcases/tests/level1/html/HTMLTableElement12.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLTableElement12.xml diff --git a/test/testcases/tests/level1/html/HTMLTableElement13.xml.kfail b/test/testcases/tests/level1/html/HTMLTableElement13.xml index 4a18d8d..4a18d8d 100644 --- a/test/testcases/tests/level1/html/HTMLTableElement13.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLTableElement13.xml diff --git a/test/testcases/tests/level1/html/HTMLTableElement14.xml.kfail b/test/testcases/tests/level1/html/HTMLTableElement14.xml index 478e9c9..478e9c9 100644 --- a/test/testcases/tests/level1/html/HTMLTableElement14.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLTableElement14.xml diff --git a/test/testcases/tests/level1/html/HTMLTableElement15.xml.kfail b/test/testcases/tests/level1/html/HTMLTableElement15.xml index 51f9763..51f9763 100644 --- a/test/testcases/tests/level1/html/HTMLTableElement15.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLTableElement15.xml diff --git a/test/testcases/tests/level1/html/HTMLTableElement16.xml.kfail b/test/testcases/tests/level1/html/HTMLTableElement16.xml index 7166437..7166437 100644 --- a/test/testcases/tests/level1/html/HTMLTableElement16.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLTableElement16.xml diff --git a/test/testcases/tests/level1/html/HTMLTableElement17.xml.kfail b/test/testcases/tests/level1/html/HTMLTableElement17.xml index 9337c09..9337c09 100644 --- a/test/testcases/tests/level1/html/HTMLTableElement17.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLTableElement17.xml diff --git a/test/testcases/tests/level1/html/HTMLTableElement18.xml.kfail b/test/testcases/tests/level1/html/HTMLTableElement18.xml index 210e2b1..210e2b1 100644 --- a/test/testcases/tests/level1/html/HTMLTableElement18.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLTableElement18.xml diff --git a/test/testcases/tests/level1/html/HTMLTableElement19.xml.kfail b/test/testcases/tests/level1/html/HTMLTableElement19.xml index 152174d..152174d 100644 --- a/test/testcases/tests/level1/html/HTMLTableElement19.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLTableElement19.xml diff --git a/test/testcases/tests/level1/html/HTMLTableElement20.xml.kfail b/test/testcases/tests/level1/html/HTMLTableElement20.xml index 032725b..032725b 100644 --- a/test/testcases/tests/level1/html/HTMLTableElement20.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLTableElement20.xml diff --git a/test/testcases/tests/level1/html/HTMLTableElement21.xml.kfail b/test/testcases/tests/level1/html/HTMLTableElement21.xml.kfail index 3903b69..b50a007 100644 --- a/test/testcases/tests/level1/html/HTMLTableElement21.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLTableElement21.xml.kfail @@ -35,8 +35,8 @@ See W3C License http://www.w3.org/Consortium/Legal/ for more details. <var name="nodeList" type="NodeList"/> <var name="rowsnodeList" type="HTMLCollection"/> <var name="testNode" type="Node"/> -<var name="vsection1" type="HTMLTableElement" /> -<var name="vsection2" type="HTMLTableElement" /> +<var name="vsection1" type="HTMLTableSectionElement" /> +<var name="vsection2" type="HTMLTableSectionElement" /> <var name="vrows" type="int"/> <var name="doc" type="Document"/> <var name="result" type="List"/> diff --git a/test/testcases/tests/level1/html/HTMLTableElement22.xml.kfail b/test/testcases/tests/level1/html/HTMLTableElement22.xml index 6649b0f..6649b0f 100644 --- a/test/testcases/tests/level1/html/HTMLTableElement22.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLTableElement22.xml diff --git a/test/testcases/tests/level1/html/HTMLTableElement23.xml.kfail b/test/testcases/tests/level1/html/HTMLTableElement23.xml index 1f53f03..1f53f03 100644 --- a/test/testcases/tests/level1/html/HTMLTableElement23.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLTableElement23.xml diff --git a/test/testcases/tests/level1/html/HTMLTableElement24.xml.kfail b/test/testcases/tests/level1/html/HTMLTableElement24.xml.kfail index d6f993c..58af66e 100644 --- a/test/testcases/tests/level1/html/HTMLTableElement24.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLTableElement24.xml.kfail @@ -35,8 +35,8 @@ See W3C License http://www.w3.org/Consortium/Legal/ for more details. <var name="nodeList" type="NodeList"/> <var name="rowsnodeList" type="HTMLCollection"/> <var name="testNode" type="Node"/> -<var name="vsection1" type="HTMLTableElement" /> -<var name="vsection2" type="HTMLTableElement" /> +<var name="vsection1" type="HTMLTableSectionElement" /> +<var name="vsection2" type="HTMLTableSectionElement" /> <var name="vrows" type="int"/> <var name="doc" type="Document"/> <var name="result" type="List"/> diff --git a/test/testcases/tests/level1/html/HTMLTableElement25.xml.kfail b/test/testcases/tests/level1/html/HTMLTableElement25.xml index a28ae65..a28ae65 100644 --- a/test/testcases/tests/level1/html/HTMLTableElement25.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLTableElement25.xml diff --git a/test/testcases/tests/level1/html/HTMLTableElement26.xml.kfail b/test/testcases/tests/level1/html/HTMLTableElement26.xml index 5517f2f..5517f2f 100644 --- a/test/testcases/tests/level1/html/HTMLTableElement26.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLTableElement26.xml diff --git a/test/testcases/tests/level1/html/HTMLTableElement27.xml.kfail b/test/testcases/tests/level1/html/HTMLTableElement27.xml index c387d69..c387d69 100644 --- a/test/testcases/tests/level1/html/HTMLTableElement27.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLTableElement27.xml diff --git a/test/testcases/tests/level1/html/HTMLTableRowElement01.xml.kfail b/test/testcases/tests/level1/html/HTMLTableRowElement01.xml index 0dbd008..0dbd008 100644 --- a/test/testcases/tests/level1/html/HTMLTableRowElement01.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLTableRowElement01.xml diff --git a/test/testcases/tests/level1/html/HTMLTableRowElement02.xml.kfail b/test/testcases/tests/level1/html/HTMLTableRowElement02.xml index 284bc84..284bc84 100644 --- a/test/testcases/tests/level1/html/HTMLTableRowElement02.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLTableRowElement02.xml diff --git a/test/testcases/tests/level1/html/HTMLTableRowElement03.xml.kfail b/test/testcases/tests/level1/html/HTMLTableRowElement03.xml index 341c2a5..341c2a5 100644 --- a/test/testcases/tests/level1/html/HTMLTableRowElement03.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLTableRowElement03.xml diff --git a/test/testcases/tests/level1/html/HTMLTableRowElement04.xml.kfail b/test/testcases/tests/level1/html/HTMLTableRowElement04.xml index bca05d4..bca05d4 100644 --- a/test/testcases/tests/level1/html/HTMLTableRowElement04.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLTableRowElement04.xml diff --git a/test/testcases/tests/level1/html/HTMLTableRowElement06.xml.kfail b/test/testcases/tests/level1/html/HTMLTableRowElement06.xml index 55fc2ac..55fc2ac 100644 --- a/test/testcases/tests/level1/html/HTMLTableRowElement06.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLTableRowElement06.xml diff --git a/test/testcases/tests/level1/html/HTMLTableRowElement07.xml.kfail b/test/testcases/tests/level1/html/HTMLTableRowElement07.xml index c586f6a..c586f6a 100644 --- a/test/testcases/tests/level1/html/HTMLTableRowElement07.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLTableRowElement07.xml diff --git a/test/testcases/tests/level1/html/HTMLTableRowElement08.xml.kfail b/test/testcases/tests/level1/html/HTMLTableRowElement08.xml index 751ef9e..751ef9e 100644 --- a/test/testcases/tests/level1/html/HTMLTableRowElement08.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLTableRowElement08.xml diff --git a/test/testcases/tests/level1/html/HTMLTableRowElement09.xml.kfail b/test/testcases/tests/level1/html/HTMLTableRowElement09.xml index eda033b..eda033b 100644 --- a/test/testcases/tests/level1/html/HTMLTableRowElement09.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLTableRowElement09.xml diff --git a/test/testcases/tests/level1/html/HTMLTableRowElement10.xml.kfail b/test/testcases/tests/level1/html/HTMLTableRowElement10.xml index 3554fb6..3554fb6 100644 --- a/test/testcases/tests/level1/html/HTMLTableRowElement10.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLTableRowElement10.xml diff --git a/test/testcases/tests/level1/html/anchor01.xml.notimpl b/test/testcases/tests/level1/html/anchor01.xml index 19a2711..19a2711 100644 --- a/test/testcases/tests/level1/html/anchor01.xml.notimpl +++ b/test/testcases/tests/level1/html/anchor01.xml diff --git a/test/testcases/tests/level1/html/anchor02.xml.notimpl b/test/testcases/tests/level1/html/anchor02.xml index 61486a7..61486a7 100644 --- a/test/testcases/tests/level1/html/anchor02.xml.notimpl +++ b/test/testcases/tests/level1/html/anchor02.xml diff --git a/test/testcases/tests/level1/html/anchor03.xml.notimpl b/test/testcases/tests/level1/html/anchor03.xml index e6bd32e..e6bd32e 100644 --- a/test/testcases/tests/level1/html/anchor03.xml.notimpl +++ b/test/testcases/tests/level1/html/anchor03.xml diff --git a/test/testcases/tests/level1/html/anchor04.xml.notimpl b/test/testcases/tests/level1/html/anchor04.xml.kfail index b5ce201..b5ce201 100644 --- a/test/testcases/tests/level1/html/anchor04.xml.notimpl +++ b/test/testcases/tests/level1/html/anchor04.xml.kfail diff --git a/test/testcases/tests/level1/html/anchor05.xml.notimpl b/test/testcases/tests/level1/html/anchor05.xml index 27b34ac..27b34ac 100644 --- a/test/testcases/tests/level1/html/anchor05.xml.notimpl +++ b/test/testcases/tests/level1/html/anchor05.xml diff --git a/test/testcases/tests/level1/html/anchor06.xml.notimpl b/test/testcases/tests/level1/html/anchor06.xml index 31190be..31190be 100644 --- a/test/testcases/tests/level1/html/anchor06.xml.notimpl +++ b/test/testcases/tests/level1/html/anchor06.xml diff --git a/test/testcases/tests/level1/html/dlist01.xml.notimpl b/test/testcases/tests/level1/html/dlist01.xml index 35cbe2c..35cbe2c 100644 --- a/test/testcases/tests/level1/html/dlist01.xml.notimpl +++ b/test/testcases/tests/level1/html/dlist01.xml diff --git a/test/testcases/tests/level1/html/table01.xml.kfail b/test/testcases/tests/level1/html/table01.xml index 4cee6f7..4cee6f7 100644 --- a/test/testcases/tests/level1/html/table01.xml.kfail +++ b/test/testcases/tests/level1/html/table01.xml diff --git a/test/testcases/tests/level1/html/table02.xml.kfail b/test/testcases/tests/level1/html/table02.xml index 2433751..2433751 100644 --- a/test/testcases/tests/level1/html/table02.xml.kfail +++ b/test/testcases/tests/level1/html/table02.xml diff --git a/test/testcases/tests/level1/html/table03.xml.kfail b/test/testcases/tests/level1/html/table03.xml index b8c3ef6..b8c3ef6 100644 --- a/test/testcases/tests/level1/html/table03.xml.kfail +++ b/test/testcases/tests/level1/html/table03.xml diff --git a/test/testcases/tests/level1/html/table04.xml.kfail b/test/testcases/tests/level1/html/table04.xml index 2d4fcf8..2d4fcf8 100644 --- a/test/testcases/tests/level1/html/table04.xml.kfail +++ b/test/testcases/tests/level1/html/table04.xml diff --git a/test/testcases/tests/level1/html/table08.xml.kfail b/test/testcases/tests/level1/html/table08.xml index ea77b80..ea77b80 100644 --- a/test/testcases/tests/level1/html/table08.xml.kfail +++ b/test/testcases/tests/level1/html/table08.xml diff --git a/test/testcases/tests/level1/html/table09.xml.kfail b/test/testcases/tests/level1/html/table09.xml index fcb9018..fcb9018 100644 --- a/test/testcases/tests/level1/html/table09.xml.kfail +++ b/test/testcases/tests/level1/html/table09.xml diff --git a/test/testcases/tests/level1/html/table10.xml.kfail b/test/testcases/tests/level1/html/table10.xml index aa05594..aa05594 100644 --- a/test/testcases/tests/level1/html/table10.xml.kfail +++ b/test/testcases/tests/level1/html/table10.xml diff --git a/test/testcases/tests/level1/html/table12.xml.kfail b/test/testcases/tests/level1/html/table12.xml index 93e475b..93e475b 100644 --- a/test/testcases/tests/level1/html/table12.xml.kfail +++ b/test/testcases/tests/level1/html/table12.xml diff --git a/test/testcases/tests/level1/html/table17.xml.kfail b/test/testcases/tests/level1/html/table17.xml index 7223562..7223562 100644 --- a/test/testcases/tests/level1/html/table17.xml.kfail +++ b/test/testcases/tests/level1/html/table17.xml diff --git a/test/testcases/tests/level1/html/table18.xml.kfail b/test/testcases/tests/level1/html/table18.xml index db8c161..db8c161 100644 --- a/test/testcases/tests/level1/html/table18.xml.kfail +++ b/test/testcases/tests/level1/html/table18.xml diff --git a/test/testcases/tests/level1/html/table19.xml.kfail b/test/testcases/tests/level1/html/table19.xml index e88be88..e88be88 100644 --- a/test/testcases/tests/level1/html/table19.xml.kfail +++ b/test/testcases/tests/level1/html/table19.xml diff --git a/test/testcases/tests/level1/html/table20.xml.kfail b/test/testcases/tests/level1/html/table20.xml index 2205987..2205987 100644 --- a/test/testcases/tests/level1/html/table20.xml.kfail +++ b/test/testcases/tests/level1/html/table20.xml diff --git a/test/testcases/tests/level1/html/table21.xml.kfail b/test/testcases/tests/level1/html/table21.xml index fa22103..fa22103 100644 --- a/test/testcases/tests/level1/html/table21.xml.kfail +++ b/test/testcases/tests/level1/html/table21.xml diff --git a/test/testcases/tests/level1/html/table22.xml.kfail b/test/testcases/tests/level1/html/table22.xml index 7c097b4..7c097b4 100644 --- a/test/testcases/tests/level1/html/table22.xml.kfail +++ b/test/testcases/tests/level1/html/table22.xml diff --git a/test/testcases/tests/level1/html/table23.xml.kfail b/test/testcases/tests/level1/html/table23.xml index 4ea8ace..4ea8ace 100644 --- a/test/testcases/tests/level1/html/table23.xml.kfail +++ b/test/testcases/tests/level1/html/table23.xml diff --git a/test/testcases/tests/level1/html/table24.xml.kfail b/test/testcases/tests/level1/html/table24.xml index 7606917..7606917 100644 --- a/test/testcases/tests/level1/html/table24.xml.kfail +++ b/test/testcases/tests/level1/html/table24.xml diff --git a/test/testcases/tests/level1/html/table25.xml.kfail b/test/testcases/tests/level1/html/table25.xml index b8e10dd..b8e10dd 100644 --- a/test/testcases/tests/level1/html/table25.xml.kfail +++ b/test/testcases/tests/level1/html/table25.xml diff --git a/test/testcases/tests/level1/html/table26.xml.kfail b/test/testcases/tests/level1/html/table26.xml index 9f09d4f..9f09d4f 100644 --- a/test/testcases/tests/level1/html/table26.xml.kfail +++ b/test/testcases/tests/level1/html/table26.xml diff --git a/test/testcases/tests/level1/html/table27.xml.kfail b/test/testcases/tests/level1/html/table27.xml index e0dc78d..e0dc78d 100644 --- a/test/testcases/tests/level1/html/table27.xml.kfail +++ b/test/testcases/tests/level1/html/table27.xml diff --git a/test/testcases/tests/level1/html/table28.xml.kfail b/test/testcases/tests/level1/html/table28.xml index d445a1c..d445a1c 100644 --- a/test/testcases/tests/level1/html/table28.xml.kfail +++ b/test/testcases/tests/level1/html/table28.xml diff --git a/test/testcases/tests/level1/html/table29.xml.kfail b/test/testcases/tests/level1/html/table29.xml index ae483d4..ae483d4 100644 --- a/test/testcases/tests/level1/html/table29.xml.kfail +++ b/test/testcases/tests/level1/html/table29.xml diff --git a/test/testcases/tests/level1/html/table30.xml.kfail b/test/testcases/tests/level1/html/table30.xml index 837be29..837be29 100644 --- a/test/testcases/tests/level1/html/table30.xml.kfail +++ b/test/testcases/tests/level1/html/table30.xml diff --git a/test/testcases/tests/level1/html/table31.xml.kfail b/test/testcases/tests/level1/html/table31.xml index f5c3fa6..f5c3fa6 100644 --- a/test/testcases/tests/level1/html/table31.xml.kfail +++ b/test/testcases/tests/level1/html/table31.xml diff --git a/test/testcases/tests/level1/html/table32.xml.kfail b/test/testcases/tests/level1/html/table32.xml index cf7e0cd..cf7e0cd 100644 --- a/test/testcases/tests/level1/html/table32.xml.kfail +++ b/test/testcases/tests/level1/html/table32.xml diff --git a/test/testcases/tests/level1/html/table33.xml.kfail b/test/testcases/tests/level1/html/table33.xml index 5c0e447..5c0e447 100644 --- a/test/testcases/tests/level1/html/table33.xml.kfail +++ b/test/testcases/tests/level1/html/table33.xml diff --git a/test/testcases/tests/level1/html/table34.xml.kfail b/test/testcases/tests/level1/html/table34.xml index 07443ef..07443ef 100644 --- a/test/testcases/tests/level1/html/table34.xml.kfail +++ b/test/testcases/tests/level1/html/table34.xml diff --git a/test/testcases/tests/level1/html/table35.xml.kfail b/test/testcases/tests/level1/html/table35.xml index 32cce60..32cce60 100644 --- a/test/testcases/tests/level1/html/table35.xml.kfail +++ b/test/testcases/tests/level1/html/table35.xml diff --git a/test/testcases/tests/level1/html/table36.xml.kfail b/test/testcases/tests/level1/html/table36.xml index 2bdded8..2bdded8 100644 --- a/test/testcases/tests/level1/html/table36.xml.kfail +++ b/test/testcases/tests/level1/html/table36.xml diff --git a/test/testcases/tests/level1/html/table37.xml.kfail b/test/testcases/tests/level1/html/table37.xml index cdf5b73..cdf5b73 100644 --- a/test/testcases/tests/level1/html/table37.xml.kfail +++ b/test/testcases/tests/level1/html/table37.xml diff --git a/test/testcases/tests/level1/html/table38.xml.kfail b/test/testcases/tests/level1/html/table38.xml index fad8dfe..fad8dfe 100644 --- a/test/testcases/tests/level1/html/table38.xml.kfail +++ b/test/testcases/tests/level1/html/table38.xml diff --git a/test/testcases/tests/level1/html/table39.xml.kfail b/test/testcases/tests/level1/html/table39.xml index 1fd66db..1fd66db 100644 --- a/test/testcases/tests/level1/html/table39.xml.kfail +++ b/test/testcases/tests/level1/html/table39.xml diff --git a/test/testcases/tests/level1/html/table40.xml.kfail b/test/testcases/tests/level1/html/table40.xml index 31a9763..31a9763 100644 --- a/test/testcases/tests/level1/html/table40.xml.kfail +++ b/test/testcases/tests/level1/html/table40.xml diff --git a/test/testcases/tests/level1/html/table41.xml.kfail b/test/testcases/tests/level1/html/table41.xml index 4030b09..4030b09 100644 --- a/test/testcases/tests/level1/html/table41.xml.kfail +++ b/test/testcases/tests/level1/html/table41.xml diff --git a/test/testcases/tests/level1/html/table42.xml.kfail b/test/testcases/tests/level1/html/table42.xml index 8fa86f1..8fa86f1 100644 --- a/test/testcases/tests/level1/html/table42.xml.kfail +++ b/test/testcases/tests/level1/html/table42.xml diff --git a/test/testcases/tests/level1/html/table43.xml.kfail b/test/testcases/tests/level1/html/table43.xml index ea9e5de..ea9e5de 100644 --- a/test/testcases/tests/level1/html/table43.xml.kfail +++ b/test/testcases/tests/level1/html/table43.xml diff --git a/test/testcases/tests/level1/html/table44.xml.kfail b/test/testcases/tests/level1/html/table44.xml index a893f76..a893f76 100644 --- a/test/testcases/tests/level1/html/table44.xml.kfail +++ b/test/testcases/tests/level1/html/table44.xml diff --git a/test/testcases/tests/level1/html/table45.xml.kfail b/test/testcases/tests/level1/html/table45.xml index b1717db..b1717db 100644 --- a/test/testcases/tests/level1/html/table45.xml.kfail +++ b/test/testcases/tests/level1/html/table45.xml diff --git a/test/testcases/tests/level1/html/table46.xml.kfail b/test/testcases/tests/level1/html/table46.xml index 096b892..096b892 100644 --- a/test/testcases/tests/level1/html/table46.xml.kfail +++ b/test/testcases/tests/level1/html/table46.xml diff --git a/test/testcases/tests/level1/html/table47.xml.kfail b/test/testcases/tests/level1/html/table47.xml index 4d8340b..4d8340b 100644 --- a/test/testcases/tests/level1/html/table47.xml.kfail +++ b/test/testcases/tests/level1/html/table47.xml diff --git a/test/testcases/tests/level1/html/table48.xml.kfail b/test/testcases/tests/level1/html/table48.xml index 1910883..1910883 100644 --- a/test/testcases/tests/level1/html/table48.xml.kfail +++ b/test/testcases/tests/level1/html/table48.xml diff --git a/test/testcases/tests/level1/html/table49.xml.kfail b/test/testcases/tests/level1/html/table49.xml index 1db690b..1db690b 100644 --- a/test/testcases/tests/level1/html/table49.xml.kfail +++ b/test/testcases/tests/level1/html/table49.xml diff --git a/test/testcases/tests/level1/html/table50.xml.kfail b/test/testcases/tests/level1/html/table50.xml index 8f60638..8f60638 100644 --- a/test/testcases/tests/level1/html/table50.xml.kfail +++ b/test/testcases/tests/level1/html/table50.xml diff --git a/test/testcases/tests/level1/html/table51.xml.kfail b/test/testcases/tests/level1/html/table51.xml index c917f27..c917f27 100644 --- a/test/testcases/tests/level1/html/table51.xml.kfail +++ b/test/testcases/tests/level1/html/table51.xml diff --git a/test/testcases/tests/level1/html/table52.xml.kfail b/test/testcases/tests/level1/html/table52.xml index bf94572..bf94572 100644 --- a/test/testcases/tests/level1/html/table52.xml.kfail +++ b/test/testcases/tests/level1/html/table52.xml diff --git a/test/testcases/tests/level1/html/table53.xml.kfail b/test/testcases/tests/level1/html/table53.xml index 210c7e1..210c7e1 100644 --- a/test/testcases/tests/level1/html/table53.xml.kfail +++ b/test/testcases/tests/level1/html/table53.xml diff --git a/test/testcases/tests/level2/html/HTMLTableElement34.xml.kfail b/test/testcases/tests/level2/html/HTMLTableElement34.xml index d774498..d774498 100644 --- a/test/testcases/tests/level2/html/HTMLTableElement34.xml.kfail +++ b/test/testcases/tests/level2/html/HTMLTableElement34.xml diff --git a/test/testcases/tests/level2/html/HTMLTableElement35.xml.kfail b/test/testcases/tests/level2/html/HTMLTableElement35.xml index 6410e89..6410e89 100644 --- a/test/testcases/tests/level2/html/HTMLTableElement35.xml.kfail +++ b/test/testcases/tests/level2/html/HTMLTableElement35.xml diff --git a/test/testcases/tests/level2/html/HTMLTableElement36.xml.kfail b/test/testcases/tests/level2/html/HTMLTableElement36.xml index 7a514e5..7a514e5 100644 --- a/test/testcases/tests/level2/html/HTMLTableElement36.xml.kfail +++ b/test/testcases/tests/level2/html/HTMLTableElement36.xml diff --git a/test/testcases/tests/level2/html/HTMLTableElement37.xml.kfail b/test/testcases/tests/level2/html/HTMLTableElement37.xml index 097deb1..097deb1 100644 --- a/test/testcases/tests/level2/html/HTMLTableElement37.xml.kfail +++ b/test/testcases/tests/level2/html/HTMLTableElement37.xml diff --git a/test/testcases/tests/level2/html/HTMLTableElement38.xml.kfail b/test/testcases/tests/level2/html/HTMLTableElement38.xml index 0f5bccd..0f5bccd 100644 --- a/test/testcases/tests/level2/html/HTMLTableElement38.xml.kfail +++ b/test/testcases/tests/level2/html/HTMLTableElement38.xml diff --git a/test/testcases/tests/level2/html/HTMLTableElement39.xml.kfail b/test/testcases/tests/level2/html/HTMLTableElement39.xml.kfail index 6631584..0a6fcfd 100644 --- a/test/testcases/tests/level2/html/HTMLTableElement39.xml.kfail +++ b/test/testcases/tests/level2/html/HTMLTableElement39.xml.kfail @@ -54,9 +54,14 @@ See W3C License http://www.w3.org/Consortium/Legal/ for more details. <length interface="HTMLCollection" obj="rowsnodeList" var="vrows"/> <assertEquals actual="vrows" expected="2" id="rowsLink1" ignoreCase="false"/> <insertRow interface="HTMLTableElement" obj="testNode" var="newRow" index="-1"/> +<!-- +* the following assumes that the row is appended to tbody +* this is obviously wrong it should be appended to tfoot which is the end +* of the table <tBodies interface="HTMLTableElement" obj="testNode" var="tbodiesnodeList"/> <item interface="HTMLCollection" obj="tbodiesnodeList" var="bodyNode" index="0"/> <rows interface="HTMLTableSectionElement" obj="bodyNode" var="rowsnodeList"/> <length interface="HTMLCollection" obj="rowsnodeList" var="vrows"/> <assertEquals actual="vrows" expected="3" id="rowsLink2" ignoreCase="false"/> +--!> </test> diff --git a/test/testcases/tests/level2/html/HTMLTableRowElement15.xml.kfail b/test/testcases/tests/level2/html/HTMLTableRowElement15.xml index 9e89674..9e89674 100644 --- a/test/testcases/tests/level2/html/HTMLTableRowElement15.xml.kfail +++ b/test/testcases/tests/level2/html/HTMLTableRowElement15.xml diff --git a/test/testcases/tests/level2/html/HTMLTableRowElement16.xml.kfail b/test/testcases/tests/level2/html/HTMLTableRowElement16.xml index 8471a2b..8471a2b 100644 --- a/test/testcases/tests/level2/html/HTMLTableRowElement16.xml.kfail +++ b/test/testcases/tests/level2/html/HTMLTableRowElement16.xml diff --git a/test/testcases/tests/level2/html/HTMLTableRowElement17.xml.kfail b/test/testcases/tests/level2/html/HTMLTableRowElement17.xml index b469470..b469470 100644 --- a/test/testcases/tests/level2/html/HTMLTableRowElement17.xml.kfail +++ b/test/testcases/tests/level2/html/HTMLTableRowElement17.xml diff --git a/test/testcases/tests/level2/html/HTMLTableRowElement18.xml.kfail b/test/testcases/tests/level2/html/HTMLTableRowElement18.xml index f296086..f296086 100644 --- a/test/testcases/tests/level2/html/HTMLTableRowElement18.xml.kfail +++ b/test/testcases/tests/level2/html/HTMLTableRowElement18.xml diff --git a/test/testcases/tests/level2/html/HTMLTableRowElement19.xml.kfail b/test/testcases/tests/level2/html/HTMLTableRowElement19.xml index 9a111f3..9a111f3 100644 --- a/test/testcases/tests/level2/html/HTMLTableRowElement19.xml.kfail +++ b/test/testcases/tests/level2/html/HTMLTableRowElement19.xml diff --git a/test/testcases/tests/level2/html/HTMLTableSectionElement30.xml.kfail b/test/testcases/tests/level2/html/HTMLTableSectionElement30.xml.kfail new file mode 100644 index 0000000..8fd17c2 --- /dev/null +++ b/test/testcases/tests/level2/html/HTMLTableSectionElement30.xml.kfail @@ -0,0 +1,55 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + +Copyright (c) 2001 World Wide Web Consortium, +(Massachusetts Institute of Technology, Institut National de +Recherche en Informatique et en Automatique, Keio University). All +Rights Reserved. This program is distributed under the W3C's Software +Intellectual Property License. This program is distributed in the +hope that it will be useful, but WITHOUT ANY WARRANTY; without even +the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. + +See W3C License http://www.w3.org/Consortium/Legal/ for more details. + +--> +<!DOCTYPE test SYSTEM "dom2.dtd"> +<test xmlns="http://www.w3.org/2001/DOM-Test-Suite/Level-2" name="HTMLTableSectionElement30"> +<metadata> +<title>HTMLTableSectionElement30</title> +<creator>NIST</creator> +<description> + The insertRow() method inserts a new empty table row. The new + row is inserted immediately before the current indexth row in this + section. If index is -1 or equal to the number of rows in this section, + the new row is appended. + + Retrieve the first THEAD element and invoke the insertRow() method + with an index of negative one. Since the index is negative one the + new row is appended. + After the new row is appended the number of rows in the THEAD + section is two. +</description> +<contributor>Rick Rivello</contributor> +<date qualifier="created">2002-11-07</date> +<subject resource="http://www.w3.org/TR/DOM-Level-2-HTML/html#ID-93995626"/> +</metadata> +<var name="nodeList" type="NodeList"/> +<var name="testNode" type="Node"/> +<var name="newRow" type="HTMLElement"/> +<var name="rowsnodeList" type="HTMLCollection"/> +<var name="vrows" type="int"/> +<var name="doc" type="Document"/> +<load var="doc" href="tablesection" willBeModified="true"/> +<getElementsByTagName interface="Document" obj="doc" var="nodeList" tagname=""thead""/> +<assertSize collection="nodeList" size="1" id="Asize"/> +<item interface="NodeList" obj="nodeList" var="testNode" index="0"/> +<rows interface="HTMLTableSectionElement" obj="testNode" var="rowsnodeList"/> +<length interface="HTMLCollection" obj="rowsnodeList" var="vrows"/> +<assertEquals actual="vrows" expected="1" id="rowsLink1" ignoreCase="false"/> +<insertRow interface="HTMLTableSectionElement" obj="testNode" var="newRow" index="-1"/> +<rows interface="HTMLTableSectionElement" obj="testNode" var="rowsnodeList"/> +<length interface="HTMLCollection" obj="rowsnodeList" var="vrows"/> +<assertEquals actual="vrows" expected="2" id="rowsLink2" ignoreCase="false"/> +</test> diff --git a/test/testcases/tests/level2/html/HTMLTableSectionElement31.xml.kfail b/test/testcases/tests/level2/html/HTMLTableSectionElement31.xml.kfail new file mode 100644 index 0000000..55464e2 --- /dev/null +++ b/test/testcases/tests/level2/html/HTMLTableSectionElement31.xml.kfail @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + +Copyright (c) 2001 World Wide Web Consortium, +(Massachusetts Institute of Technology, Institut National de +Recherche en Informatique et en Automatique, Keio University). All +Rights Reserved. This program is distributed under the W3C's Software +Intellectual Property License. This program is distributed in the +hope that it will be useful, but WITHOUT ANY WARRANTY; without even +the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. + +See W3C License http://www.w3.org/Consortium/Legal/ for more details. + +--> +<!DOCTYPE test SYSTEM "dom2.dtd"> +<test xmlns="http://www.w3.org/2001/DOM-Test-Suite/Level-2" name="HTMLTableSectionElement31"> +<metadata> +<title>HTMLTableSectionElement31</title> +<creator>NIST</creator> +<description> + The deleteRow() method deletes a row from this section. The index + starts from 0 and is relative only to the rows contained inside + this section, not all the rows in the table. If the index is -1 + the last row will be deleted. + + Retrieve the second TBODY element and invoke the deleteRow() method + with an index of -1. The nuber of rows in the THEAD section before + the deletion of the row is two. After the row is deleted the number + of rows in the TBODY section is one. +</description> +<contributor>Rick Rivello</contributor> +<date qualifier="created">2002-11-07</date> +<subject resource="http://www.w3.org/TR/DOM-Level-2-HTML/html#ID-5625626"/> +</metadata> +<var name="nodeList" type="NodeList"/> +<var name="testNode" type="Node"/> +<var name="rowsnodeList" type="HTMLCollection"/> +<var name="vrows" type="int"/> +<var name="doc" type="Document"/> +<load var="doc" href="tablesection" willBeModified="true"/> +<getElementsByTagName interface="Document" obj="doc" var="nodeList" tagname=""tbody""/> +<assertSize collection="nodeList" size="2" id="Asize"/> +<item interface="NodeList" obj="nodeList" var="testNode" index="1"/> +<rows interface="HTMLTableSectionElement" obj="testNode" var="rowsnodeList"/> +<length interface="HTMLCollection" obj="rowsnodeList" var="vrows"/> +<assertEquals actual="vrows" expected="2" id="rowsLink1" ignoreCase="false"/> +<deleteRow interface="HTMLTableSectionElement" obj="testNode" index="-1"/> +<rows interface="HTMLTableSectionElement" obj="testNode" var="rowsnodeList"/> +<length interface="HTMLCollection" obj="rowsnodeList" var="vrows"/> +<assertEquals actual="vrows" expected="1" id="rowsLink2" ignoreCase="false"/> +</test> diff --git a/test/testcases/tests/level2/html/files/table.html b/test/testcases/tests/level2/html/files/table.html new file mode 100644 index 0000000..b8f151e --- /dev/null +++ b/test/testcases/tests/level2/html/files/table.html @@ -0,0 +1,78 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<HTML> +<HEAD> +<META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=utf-8"> +<TITLE>NIST DOM HTML Test - TABLE</TITLE> +</HEAD> +<BODY onload="parent.loadComplete()"> +<TABLE ALIGN="center" SUMMARY="Table 1"> +<TR> +<TH>Id</TH> +<TH>Name</TH> +<TH>Position</TH> +<TH>Salary</TH> +</TR> +</TABLE> +<TABLE ID="table-1" ALIGN="center" BORDER="4" BGCOLOR="#ff0000" FRAME="border" CELLPADDING="2" CELLSPACING="2" SUMMARY="HTML Control Table" RULES="all" WIDTH="680"> +<CAPTION ALIGN="top">Table Caption</CAPTION> +<THEAD ALIGN="center" VALIGN="middle"> +<TR ALIGN="center" BGCOLOR="#00FFFF" VALIGN="middle"> +<TH ID="header-1">Employee Id</TH> +<TH ID="header-2" ABBR="maiden" AXIS="center" ALIGN="center" BGCOLOR="#00FFFF" COLSPAN="1" HEIGHT="50" NOWRAP="nowrap" ROWSPAN="1" SCOPE="col" HEADERS="header-1" VALIGN="middle" WIDTH="100">Employee Name</TH> +<TH>Position</TH> +<TH>Salary</TH> +<TH>Gender</TH> +<TH>Address</TH> +</TR> +</THEAD> +<TFOOT ALIGN="center" VALIGN="middle"> +<TR> +<TH>next page ...</TH> +<TH>next page ...</TH> +<TH>next page ...</TH> +<TH>next page ...</TH> +<TH>next page ...</TH> +<TH>next page ...</TH> +</TR> +</TFOOT> +<TBODY ALIGN="center" VALIGN="middle"> +<TR> +<TD AXIS="center" ID="Table-3" ABBR="maiden2" ALIGN="center" BGCOLOR="#FF0000" COLSPAN="1" HEIGHT="50" NOWRAP="nowrap" ROWSPAN="1" SCOPE="col" HEADERS="header-2" VALIGN="middle" WIDTH="175">EMP0001</TD> +<TD HEADERS="header-2">Margaret Martin</TD> +<TD>Accountant</TD> +<TD>56,000</TD> +<TD>Female</TD> +<TD>1230 North Ave. Dallas, Texas 98551</TD> +</TR> +<TR> +<TD>EMP0002</TD> +<TD>Martha Raynolds</TD> +<TD>Secretary</TD> +<TD>35,000</TD> +<TD>Female</TD> +<TD>1900 Dallas Road Dallas, Texas 98554</TD> +</TR> +</TBODY> +</TABLE> +<TABLE SUMMARY="Table 3"> +<TBODY> +<TR> +<TD> +</TD> +</TR> +</TBODY> +<TBODY> +<TR> +<TD> +</TD> +</TR> +</TBODY> +<TBODY> +<TR> +<TD> +</TD> +</TR> +</TBODY> +</TABLE> +</BODY> +</HTML> diff --git a/test/testcases/tests/level2/html/files/table.xhtml b/test/testcases/tests/level2/html/files/table.xhtml new file mode 100644 index 0000000..8300b90 --- /dev/null +++ b/test/testcases/tests/level2/html/files/table.xhtml @@ -0,0 +1,81 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "xhtml1-transitional.dtd"> +<html xmlns='http://www.w3.org/1999/xhtml'> +<head> +<title>NIST DOM HTML Test - TABLE</title> +</head> +<body onload="parent.loadComplete()"> +<table align="center" summary="Table 1"> +<tr> +<th>Id</th> +<th>Name</th> +<th>Position</th> +<th>Salary</th> +</tr> +</table> +<table id="table-1" align="center" border="4" bgcolor="#ff0000" frame="border" cellpadding="2" cellspacing="2" summary="HTML Control Table" rules="all" width="680"> +<caption align="top">Table Caption</caption> +<thead align="center" valign="middle"> +<tr align="center" bgcolor="#00FFFF" valign="middle"> +<th id="header-1">Employee Id</th> +<th id="header-2" abbr="maiden" axis="center" align="center" bgcolor="#00FFFF" colspan="1" height="50" nowrap="nowrap" rowspan="1" scope="col" headers="header-1" valign="middle" width="100">Employee Name</th> +<th>Position</th> +<th>Salary</th> +<th>Gender</th> +<th>Address</th> +</tr> +</thead> +<tfoot align="center" valign="middle"> +<tr> +<th>next page ...</th> +<th>next page ...</th> +<th>next page ...</th> +<th>next page ...</th> +<th>next page ...</th> +<th>next page ...</th> +</tr> +</tfoot> +<tbody align="center" valign="middle"> +<tr> +<td axis="center" id="Table-3" abbr="maiden2" align="center" bgcolor="#FF0000" colspan="1" height="50" nowrap="nowrap" rowspan="1" scope="col" headers="header-2" valign="middle" width="175">EMP0001</td> +<td headers="header-2">Margaret Martin</td> +<td>Accountant</td> +<td>56,000</td> +<td>Female</td> +<td>1230 North Ave. Dallas, Texas 98551</td> +</tr> +<tr> +<td>EMP0002</td> +<td>Martha Raynolds</td> +<td>Secretary</td> +<td>35,000</td> +<td>Female</td> +<td>1900 Dallas Road Dallas, Texas 98554</td> +</tr> +</tbody> +</table> +<table summary="Table 3"> +<tbody> +<tr> +<td> +</td> +</tr> +</tbody> +<tbody> +<tr> +<td> +</td> +</tr> +</tbody> +<tbody> +<tr> +<td> +</td> +</tr> +</tbody> +</table> +</body> +</html> + diff --git a/test/testcases/tests/level2/html/files/table.xml b/test/testcases/tests/level2/html/files/table.xml new file mode 100644 index 0000000..8300b90 --- /dev/null +++ b/test/testcases/tests/level2/html/files/table.xml @@ -0,0 +1,81 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "xhtml1-transitional.dtd"> +<html xmlns='http://www.w3.org/1999/xhtml'> +<head> +<title>NIST DOM HTML Test - TABLE</title> +</head> +<body onload="parent.loadComplete()"> +<table align="center" summary="Table 1"> +<tr> +<th>Id</th> +<th>Name</th> +<th>Position</th> +<th>Salary</th> +</tr> +</table> +<table id="table-1" align="center" border="4" bgcolor="#ff0000" frame="border" cellpadding="2" cellspacing="2" summary="HTML Control Table" rules="all" width="680"> +<caption align="top">Table Caption</caption> +<thead align="center" valign="middle"> +<tr align="center" bgcolor="#00FFFF" valign="middle"> +<th id="header-1">Employee Id</th> +<th id="header-2" abbr="maiden" axis="center" align="center" bgcolor="#00FFFF" colspan="1" height="50" nowrap="nowrap" rowspan="1" scope="col" headers="header-1" valign="middle" width="100">Employee Name</th> +<th>Position</th> +<th>Salary</th> +<th>Gender</th> +<th>Address</th> +</tr> +</thead> +<tfoot align="center" valign="middle"> +<tr> +<th>next page ...</th> +<th>next page ...</th> +<th>next page ...</th> +<th>next page ...</th> +<th>next page ...</th> +<th>next page ...</th> +</tr> +</tfoot> +<tbody align="center" valign="middle"> +<tr> +<td axis="center" id="Table-3" abbr="maiden2" align="center" bgcolor="#FF0000" colspan="1" height="50" nowrap="nowrap" rowspan="1" scope="col" headers="header-2" valign="middle" width="175">EMP0001</td> +<td headers="header-2">Margaret Martin</td> +<td>Accountant</td> +<td>56,000</td> +<td>Female</td> +<td>1230 North Ave. Dallas, Texas 98551</td> +</tr> +<tr> +<td>EMP0002</td> +<td>Martha Raynolds</td> +<td>Secretary</td> +<td>35,000</td> +<td>Female</td> +<td>1900 Dallas Road Dallas, Texas 98554</td> +</tr> +</tbody> +</table> +<table summary="Table 3"> +<tbody> +<tr> +<td> +</td> +</tr> +</tbody> +<tbody> +<tr> +<td> +</td> +</tr> +</tbody> +<tbody> +<tr> +<td> +</td> +</tr> +</tbody> +</table> +</body> +</html> + diff --git a/test/testcases/tests/level2/html/files/table1.html b/test/testcases/tests/level2/html/files/table1.html new file mode 100644 index 0000000..8f5d19b --- /dev/null +++ b/test/testcases/tests/level2/html/files/table1.html @@ -0,0 +1,12 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<HTML> +<HEAD> +<META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=utf-8"> +<TITLE>NIST DOM HTML Test - TABLE</TITLE> +</HEAD> +<BODY onload="parent.loadComplete()"> +<TABLE SUMMARY="Empty Table"> +<tr><td>HTML can't abide empty table</td></tr> +</TABLE> +</BODY> +</HTML> diff --git a/test/testcases/tests/level2/html/files/table1.xhtml b/test/testcases/tests/level2/html/files/table1.xhtml new file mode 100644 index 0000000..e174c63 --- /dev/null +++ b/test/testcases/tests/level2/html/files/table1.xhtml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "xhtml1-transitional.dtd"> +<html xmlns='http://www.w3.org/1999/xhtml'> +<head> +<title>NIST DOM HTML Test - TABLE</title> +</head> +<body onload="parent.loadComplete()"> +<table summary="Empty Table"> +<tr><td>XHTML can't abide empty table</td></tr> +</table> +</body> +</html> + diff --git a/test/testcases/tests/level2/html/files/table1.xml b/test/testcases/tests/level2/html/files/table1.xml new file mode 100644 index 0000000..e174c63 --- /dev/null +++ b/test/testcases/tests/level2/html/files/table1.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "xhtml1-transitional.dtd"> +<html xmlns='http://www.w3.org/1999/xhtml'> +<head> +<title>NIST DOM HTML Test - TABLE</title> +</head> +<body onload="parent.loadComplete()"> +<table summary="Empty Table"> +<tr><td>XHTML can't abide empty table</td></tr> +</table> +</body> +</html> + diff --git a/test/testcases/tests/level2/html/files/tablerow.html b/test/testcases/tests/level2/html/files/tablerow.html new file mode 100644 index 0000000..9e76a4c --- /dev/null +++ b/test/testcases/tests/level2/html/files/tablerow.html @@ -0,0 +1,59 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<HTML> +<HEAD> +<META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=utf-8"> +<TITLE>NIST DOM HTML Test - TABLEROW</TITLE> +</HEAD> +<BODY onload="parent.loadComplete()"> +<TABLE ALIGN="center" SUMMARY="Table 1"> +<TR> +<TH>Id</TH> +<TH>Name</TH> +<TH>Position</TH> +<TH>Salary</TH> +</TR> +</TABLE> +<TABLE ID="table-1" ALIGN="center" BORDER="4" BGCOLOR="#ff0000" FRAME="border" CELLPADDING="2" CELLSPACING="2" SUMMARY="HTML Control Table" RULES="all" WIDTH="680"> +<CAPTION ALIGN="top">Table Caption</CAPTION> +<THEAD ALIGN="center" VALIGN="middle"> +<TR ALIGN="center" BGCOLOR="#00FFFF" VALIGN="middle" CHAR="*" CHAROFF="1"> +<TH ID="header-1">Employee Id</TH> +<TH ID="header-2" ABBR="maiden" AXIS="center" ALIGN="center" BGCOLOR="#00FFFF" COLSPAN="1" HEIGHT="50" NOWRAP="nowrap" ROWSPAN="1" SCOPE="col" HEADERS="header-1" VALIGN="middle" WIDTH="100">Employee Name</TH> +<TH>Position</TH> +<TH>Salary</TH> +<TH>Gender</TH> +<TH>Address</TH> +</TR> +</THEAD> +<TFOOT ALIGN="center" VALIGN="middle"> +<TR> +<TH>next page ...</TH> +<TH>next page ...</TH> +<TH>next page ...</TH> +<TH>next page ...</TH> +<TH>next page ...</TH> +<TH>next page ...</TH> +</TR> +</TFOOT> +<TBODY ALIGN="center" VALIGN="middle"> +<TR> +<TD AXIS="center" ID="Table-3" ABBR="maiden2" ALIGN="center" BGCOLOR="#FF0000" COLSPAN="1" HEIGHT="50" NOWRAP="nowrap" ROWSPAN="1" SCOPE="col" HEADERS="header-2" VALIGN="middle" WIDTH="175">EMP0001</TD> +<TD HEADERS="header-2">Margaret Martin</TD> +<TD>Accountant</TD> +<TD>56,000</TD> +<TD>Female</TD> +<TD>1230 North Ave. Dallas, Texas 98551</TD> +</TR> +<TR> +<TD>EMP0002</TD> +<TD>Martha Raynolds</TD> +<TD>Secretary</TD> +<TD>35,000</TD> +<TD>Female</TD> +<TD>1900 Dallas Road Dallas, Texas 98554</TD> +</TR> +</TBODY> +</TABLE> +</BODY> +</HTML> + diff --git a/test/testcases/tests/level2/html/files/tablerow.xhtml b/test/testcases/tests/level2/html/files/tablerow.xhtml new file mode 100644 index 0000000..b901e3c --- /dev/null +++ b/test/testcases/tests/level2/html/files/tablerow.xhtml @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "xhtml1-transitional.dtd"> +<html xmlns='http://www.w3.org/1999/xhtml'> +<head> +<title>NIST DOM HTML Test - TABLE</title> +</head> +<body onload="parent.loadComplete()"> +<table align="center" summary="Table 1"> +<tr> +<th>Id</th> +<th>Name</th> +<th>Position</th> +<th>Salary</th> +</tr> +</table> +<table id="table-1" align="center" border="4" bgcolor="#ff0000" frame="border" cellpadding="2" cellspacing="2" summary="HTML Control Table" rules="all" width="680"> +<caption align="top">Table Caption</caption> +<thead align="center" valign="middle"> +<tr align="center" bgcolor="#00FFFF" valign="middle" char="*" charoff="1"> +<th id="header-1">Employee Id</th> +<th id="header-2" abbr="maiden" axis="center" align="center" bgcolor="#00FFFF" colspan="1" height="50" nowrap="nowrap" rowspan="1" scope="col" headers="header-1" valign="middle" width="100">Employee Name</th> +<th>Position</th> +<th>Salary</th> +<th>Gender</th> +<th>Address</th> +</tr> +</thead> +<tfoot align="center" valign="middle"> +<tr> +<th>next page ...</th> +<th>next page ...</th> +<th>next page ...</th> +<th>next page ...</th> +<th>next page ...</th> +<th>next page ...</th> +</tr> +</tfoot> +<tbody align="center" valign="middle"> +<tr> +<td axis="center" id="Table-3" abbr="maiden2" align="center" bgcolor="#FF0000" colspan="1" height="50" nowrap="nowrap" rowspan="1" scope="col" headers="header-2" valign="middle" width="175">EMP0001</td> +<td headers="header-2">Margaret Martin</td> +<td>Accountant</td> +<td>56,000</td> +<td>Female</td> +<td>1230 North Ave. Dallas, Texas 98551</td> +</tr> +<tr> +<td>EMP0002</td> +<td>Martha Raynolds</td> +<td>Secretary</td> +<td>35,000</td> +<td>Female</td> +<td>1900 Dallas Road Dallas, Texas 98554</td> +</tr> +</tbody> +</table> +</body> +</html> + + diff --git a/test/testcases/tests/level2/html/files/tablerow.xml b/test/testcases/tests/level2/html/files/tablerow.xml new file mode 100644 index 0000000..b901e3c --- /dev/null +++ b/test/testcases/tests/level2/html/files/tablerow.xml @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "xhtml1-transitional.dtd"> +<html xmlns='http://www.w3.org/1999/xhtml'> +<head> +<title>NIST DOM HTML Test - TABLE</title> +</head> +<body onload="parent.loadComplete()"> +<table align="center" summary="Table 1"> +<tr> +<th>Id</th> +<th>Name</th> +<th>Position</th> +<th>Salary</th> +</tr> +</table> +<table id="table-1" align="center" border="4" bgcolor="#ff0000" frame="border" cellpadding="2" cellspacing="2" summary="HTML Control Table" rules="all" width="680"> +<caption align="top">Table Caption</caption> +<thead align="center" valign="middle"> +<tr align="center" bgcolor="#00FFFF" valign="middle" char="*" charoff="1"> +<th id="header-1">Employee Id</th> +<th id="header-2" abbr="maiden" axis="center" align="center" bgcolor="#00FFFF" colspan="1" height="50" nowrap="nowrap" rowspan="1" scope="col" headers="header-1" valign="middle" width="100">Employee Name</th> +<th>Position</th> +<th>Salary</th> +<th>Gender</th> +<th>Address</th> +</tr> +</thead> +<tfoot align="center" valign="middle"> +<tr> +<th>next page ...</th> +<th>next page ...</th> +<th>next page ...</th> +<th>next page ...</th> +<th>next page ...</th> +<th>next page ...</th> +</tr> +</tfoot> +<tbody align="center" valign="middle"> +<tr> +<td axis="center" id="Table-3" abbr="maiden2" align="center" bgcolor="#FF0000" colspan="1" height="50" nowrap="nowrap" rowspan="1" scope="col" headers="header-2" valign="middle" width="175">EMP0001</td> +<td headers="header-2">Margaret Martin</td> +<td>Accountant</td> +<td>56,000</td> +<td>Female</td> +<td>1230 North Ave. Dallas, Texas 98551</td> +</tr> +<tr> +<td>EMP0002</td> +<td>Martha Raynolds</td> +<td>Secretary</td> +<td>35,000</td> +<td>Female</td> +<td>1900 Dallas Road Dallas, Texas 98554</td> +</tr> +</tbody> +</table> +</body> +</html> + + diff --git a/test/testutils/domtsasserts.c b/test/testutils/domtsasserts.c index 41cacf2..cbb8ed0 100644 --- a/test/testutils/domtsasserts.c +++ b/test/testutils/domtsasserts.c @@ -124,7 +124,10 @@ bool is_equals_list(list *expected, list *actual, bool ignoreCase) comparator rcmp = NULL; if (expected->type == INT) + { cmp = int_comparator; + rcmp = int_comparator; + } if (expected->type == STRING) { if (actual->type == DOM_STRING) { cmp = ignoreCase? str_icmp : str_cmp; @@ -139,6 +142,7 @@ bool is_equals_list(list *expected, list *actual, bool ignoreCase) } assert(cmp != NULL); + assert(rcmp != NULL); return list_contains_all(expected, actual, cmp) && list_contains_all(actual, expected, rcmp); } |