diff options
author | Daniel Silverstone <dsilvers@digital-scurf.org> | 2012-07-07 18:25:30 +0100 |
---|---|---|
committer | Daniel Silverstone <dsilvers@digital-scurf.org> | 2012-07-07 18:25:30 +0100 |
commit | 7984f00c4cce1d599da95a8c8cbbd912f33444b1 (patch) | |
tree | b00b2061b386fc929b08150870f208fee2bebacb /test | |
parent | 814a54e5ef738654b6ee168a1763e1f1242a18d4 (diff) | |
parent | 287c31a83c21076b45388fa8e7f880ec861ce745 (diff) | |
download | libdom-7984f00c4cce1d599da95a8c8cbbd912f33444b1.tar.gz libdom-7984f00c4cce1d599da95a8c8cbbd912f33444b1.tar.bz2 |
Merge element work, adds 5 element types and enables 27 tests.
Diffstat (limited to 'test')
-rw-r--r-- | test/DOMTSHandler.pm | 28 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLCollection02.xml.kfail (renamed from test/testcases/tests/level1/html/HTMLCollection02.xml.notimpl) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLCollection03.xml.kfail (renamed from test/testcases/tests/level1/html/HTMLCollection03.xml.notimpl) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLCollection10.xml.kfail (renamed from test/testcases/tests/level1/html/HTMLCollection10.xml.notimpl) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLCollection11.xml.kfail (renamed from test/testcases/tests/level1/html/HTMLCollection11.xml.notimpl) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLCollection12.xml (renamed from test/testcases/tests/level1/html/HTMLCollection12.xml.notimpl) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLFormElement01.xml (renamed from test/testcases/tests/level1/html/HTMLFormElement01.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLFormElement02.xml (renamed from test/testcases/tests/level1/html/HTMLFormElement02.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLFormElement03.xml (renamed from test/testcases/tests/level1/html/HTMLFormElement03.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLFormElement04.xml (renamed from test/testcases/tests/level1/html/HTMLFormElement04.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLFormElement05.xml (renamed from test/testcases/tests/level1/html/HTMLFormElement05.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLFormElement06.xml (renamed from test/testcases/tests/level1/html/HTMLFormElement06.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLFormElement07.xml (renamed from test/testcases/tests/level1/html/HTMLFormElement07.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLFormElement08.xml (renamed from test/testcases/tests/level1/html/HTMLFormElement08.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLFormElement09.xml (renamed from test/testcases/tests/level1/html/HTMLFormElement09.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLFormElement10.xml (renamed from test/testcases/tests/level1/html/HTMLFormElement10.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLHeadElement01.xml (renamed from test/testcases/tests/level1/html/HTMLHeadElement01.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLHtmlElement01.xml (renamed from test/testcases/tests/level1/html/HTMLHtmlElement01.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLLinkElement01.xml (renamed from test/testcases/tests/level1/html/HTMLLinkElement01.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLLinkElement02.xml (renamed from test/testcases/tests/level1/html/HTMLLinkElement02.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLLinkElement03.xml (renamed from test/testcases/tests/level1/html/HTMLLinkElement03.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLLinkElement04.xml (renamed from test/testcases/tests/level1/html/HTMLLinkElement04.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLLinkElement05.xml (renamed from test/testcases/tests/level1/html/HTMLLinkElement05.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLLinkElement06.xml (renamed from test/testcases/tests/level1/html/HTMLLinkElement06.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLLinkElement07.xml (renamed from test/testcases/tests/level1/html/HTMLLinkElement07.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLLinkElement08.xml (renamed from test/testcases/tests/level1/html/HTMLLinkElement08.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLLinkElement09.xml (renamed from test/testcases/tests/level1/html/HTMLLinkElement09.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLMetaElement01.xml (renamed from test/testcases/tests/level1/html/HTMLMetaElement01.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLMetaElement02.xml (renamed from test/testcases/tests/level1/html/HTMLMetaElement02.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLMetaElement03.xml (renamed from test/testcases/tests/level1/html/HTMLMetaElement03.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLMetaElement04.xml (renamed from test/testcases/tests/level1/html/HTMLMetaElement04.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testcases/tests/level1/html/HTMLTitleElement01.xml (renamed from test/testcases/tests/level1/html/HTMLTitleElement01.xml.kfail) | 0 | ||||
-rw-r--r-- | test/testutils/domtsasserts.c | 152 | ||||
-rw-r--r-- | test/testutils/domtsasserts.h | 7 | ||||
-rw-r--r-- | test/testutils/utils.c | 9 | ||||
-rw-r--r-- | test/testutils/utils.h | 2 |
36 files changed, 175 insertions, 23 deletions
diff --git a/test/DOMTSHandler.pm b/test/DOMTSHandler.pm index e440f64..65efff3 100644 --- a/test/DOMTSHandler.pm +++ b/test/DOMTSHandler.pm @@ -38,6 +38,7 @@ our %special_type = ( DOMImplementation => "dom_implementation *", NamedNodeMap => "dom_namednodemap *", NodeList => "dom_nodelist *", + HTMLCollection => "dom_html_collection *", CharacterData => "dom_characterdata *", CDATASection => "dom_cdata_section *", ); @@ -46,6 +47,7 @@ our %special_prefix = ( DOMImplementation => "dom_implementation", NamedNodeMap => "dom_namednodemap", NodeList => "dom_nodelist", + HTMLCollection => "dom_html_collection", CharacterData => "dom_characterdata", CDATASection => "dom_cdata_section *", ); @@ -54,6 +56,7 @@ our %unref_prefix = ( DOMString => "dom_string", NamedNodeMap => "dom_namednodemap", NodeList => "dom_nodelist", + HTMLCollection => "dom_html_collection", ); our %special_method = ( @@ -79,6 +82,7 @@ our %override_suffix = ( DOMImplementation => "domimplementation", NamedNodeMap => "domnamednodemap", NodeList => "domnodelist", + HTMLCollection => "domhtmlcollection", Collection => "list", List => "list", ); @@ -661,9 +665,9 @@ sub generate_method { } $method = to_cmethod($ats{'interface'}, $en); - + my $cast = to_attribute_cast($ats{'interface'}); my $ns = $dd->find("parameters/param", $node); - my $params = "$ats{'obj'}"; + my $params = "${cast}$ats{'obj'}"; for ($count = 1; $count <= $ns->size; $count++) { my $n = $ns->get_node($count); my $p = $n->getAttribute("name"); @@ -788,7 +792,7 @@ sub generate_attribute_fetcher { } my $fetcher = to_attribute_fetcher($ats{'interface'}, "$en"); - + my $cast = to_attribute_cast($ats{'interface'}); my $unref = 0; my $temp_node = 0; # Deal with the situation like @@ -807,14 +811,14 @@ sub generate_attribute_fetcher { my $t = type_to_ctype($self->{'var'}->{$ats{'var'}}); $tnode_index ++; print "\t$t tnode$tnode_index = NULL;\n"; - print "\texp = $fetcher($ats{'obj'}, \&tnode$tnode_index);\n"; + print "\texp = $fetcher(${cast}$ats{'obj'}, \&tnode$tnode_index);\n"; # The ats{'obj'} must have been added to cleanup stack $unref = 1; # Indicate that we have created a temp node $temp_node = 1; } else { $unref = $self->param_unref($ats{'var'}); - print "\texp = $fetcher($ats{'obj'}, \&$ats{'var'});\n"; + print "\texp = $fetcher(${cast}$ats{'obj'}, \&$ats{'var'});\n"; } @@ -1116,7 +1120,7 @@ sub generate_assertion { case "assertURIEquals" { my $actual = $ats->{actual}; - my ($scheme, $path, $host, $file, $query, $fragment, $isAbsolute) = qw(NULL NULL NULL NULL NULL NULL NULL); + my ($scheme, $path, $host, $file, $name, $query, $fragment, $isAbsolute) = qw(NULL NULL NULL NULL NULL NULL NULL NULL); if (exists $ats->{scheme}) { $scheme = $ats->{scheme}; } @@ -1129,6 +1133,9 @@ sub generate_assertion { if (exists $ats->{file}) { $file = $ats->{file}; } + if (exists $ats->{name}) { + $name = $ats->{name}; + } if (exists $ats->{query}) { $query = $ats->{query}; } @@ -1139,7 +1146,7 @@ sub generate_assertion { $isAbsolute = $ats->{isAbsolute}; } - print "is_uri_equals($scheme, $path, $host, $file, $query, $fragment, $isAbsolute, $actual)" + print "is_uri_equals($scheme, $path, $host, $file, $name, $query, $fragment, $isAbsolute, $actual)" } } @@ -1376,6 +1383,13 @@ sub to_attribute_accessor { return $ret; } +sub to_attribute_cast { + my $type = shift; + my $ret = get_prefix($type); + $ret =~ s/h_t_m_l/html/; + return "(${ret} *)"; +} + sub get_prefix { my $type = shift; diff --git a/test/testcases/tests/level1/html/HTMLCollection02.xml.notimpl b/test/testcases/tests/level1/html/HTMLCollection02.xml.kfail index 521d5ae..521d5ae 100644 --- a/test/testcases/tests/level1/html/HTMLCollection02.xml.notimpl +++ b/test/testcases/tests/level1/html/HTMLCollection02.xml.kfail diff --git a/test/testcases/tests/level1/html/HTMLCollection03.xml.notimpl b/test/testcases/tests/level1/html/HTMLCollection03.xml.kfail index 36d489e..36d489e 100644 --- a/test/testcases/tests/level1/html/HTMLCollection03.xml.notimpl +++ b/test/testcases/tests/level1/html/HTMLCollection03.xml.kfail diff --git a/test/testcases/tests/level1/html/HTMLCollection10.xml.notimpl b/test/testcases/tests/level1/html/HTMLCollection10.xml.kfail index 78f4c9a..78f4c9a 100644 --- a/test/testcases/tests/level1/html/HTMLCollection10.xml.notimpl +++ b/test/testcases/tests/level1/html/HTMLCollection10.xml.kfail diff --git a/test/testcases/tests/level1/html/HTMLCollection11.xml.notimpl b/test/testcases/tests/level1/html/HTMLCollection11.xml.kfail index ebf217f..ebf217f 100644 --- a/test/testcases/tests/level1/html/HTMLCollection11.xml.notimpl +++ b/test/testcases/tests/level1/html/HTMLCollection11.xml.kfail diff --git a/test/testcases/tests/level1/html/HTMLCollection12.xml.notimpl b/test/testcases/tests/level1/html/HTMLCollection12.xml index d7feb3d..d7feb3d 100644 --- a/test/testcases/tests/level1/html/HTMLCollection12.xml.notimpl +++ b/test/testcases/tests/level1/html/HTMLCollection12.xml diff --git a/test/testcases/tests/level1/html/HTMLFormElement01.xml.kfail b/test/testcases/tests/level1/html/HTMLFormElement01.xml index 057fac5..057fac5 100644 --- a/test/testcases/tests/level1/html/HTMLFormElement01.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLFormElement01.xml diff --git a/test/testcases/tests/level1/html/HTMLFormElement02.xml.kfail b/test/testcases/tests/level1/html/HTMLFormElement02.xml index 06abf8d..06abf8d 100644 --- a/test/testcases/tests/level1/html/HTMLFormElement02.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLFormElement02.xml diff --git a/test/testcases/tests/level1/html/HTMLFormElement03.xml.kfail b/test/testcases/tests/level1/html/HTMLFormElement03.xml index 50332f9..50332f9 100644 --- a/test/testcases/tests/level1/html/HTMLFormElement03.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLFormElement03.xml diff --git a/test/testcases/tests/level1/html/HTMLFormElement04.xml.kfail b/test/testcases/tests/level1/html/HTMLFormElement04.xml index 4077e36..4077e36 100644 --- a/test/testcases/tests/level1/html/HTMLFormElement04.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLFormElement04.xml diff --git a/test/testcases/tests/level1/html/HTMLFormElement05.xml.kfail b/test/testcases/tests/level1/html/HTMLFormElement05.xml index 54a3436..54a3436 100644 --- a/test/testcases/tests/level1/html/HTMLFormElement05.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLFormElement05.xml diff --git a/test/testcases/tests/level1/html/HTMLFormElement06.xml.kfail b/test/testcases/tests/level1/html/HTMLFormElement06.xml index fb1ca95..fb1ca95 100644 --- a/test/testcases/tests/level1/html/HTMLFormElement06.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLFormElement06.xml diff --git a/test/testcases/tests/level1/html/HTMLFormElement07.xml.kfail b/test/testcases/tests/level1/html/HTMLFormElement07.xml index 897b63d..897b63d 100644 --- a/test/testcases/tests/level1/html/HTMLFormElement07.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLFormElement07.xml diff --git a/test/testcases/tests/level1/html/HTMLFormElement08.xml.kfail b/test/testcases/tests/level1/html/HTMLFormElement08.xml index 1a691cb..1a691cb 100644 --- a/test/testcases/tests/level1/html/HTMLFormElement08.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLFormElement08.xml diff --git a/test/testcases/tests/level1/html/HTMLFormElement09.xml.kfail b/test/testcases/tests/level1/html/HTMLFormElement09.xml index 4f552d6..4f552d6 100644 --- a/test/testcases/tests/level1/html/HTMLFormElement09.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLFormElement09.xml diff --git a/test/testcases/tests/level1/html/HTMLFormElement10.xml.kfail b/test/testcases/tests/level1/html/HTMLFormElement10.xml index 8d1f3b4..8d1f3b4 100644 --- a/test/testcases/tests/level1/html/HTMLFormElement10.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLFormElement10.xml diff --git a/test/testcases/tests/level1/html/HTMLHeadElement01.xml.kfail b/test/testcases/tests/level1/html/HTMLHeadElement01.xml index a0fd82b..a0fd82b 100644 --- a/test/testcases/tests/level1/html/HTMLHeadElement01.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLHeadElement01.xml diff --git a/test/testcases/tests/level1/html/HTMLHtmlElement01.xml.kfail b/test/testcases/tests/level1/html/HTMLHtmlElement01.xml index 1ad206a..1ad206a 100644 --- a/test/testcases/tests/level1/html/HTMLHtmlElement01.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLHtmlElement01.xml diff --git a/test/testcases/tests/level1/html/HTMLLinkElement01.xml.kfail b/test/testcases/tests/level1/html/HTMLLinkElement01.xml index c9e2d16..c9e2d16 100644 --- a/test/testcases/tests/level1/html/HTMLLinkElement01.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLLinkElement01.xml diff --git a/test/testcases/tests/level1/html/HTMLLinkElement02.xml.kfail b/test/testcases/tests/level1/html/HTMLLinkElement02.xml index ab0105a..ab0105a 100644 --- a/test/testcases/tests/level1/html/HTMLLinkElement02.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLLinkElement02.xml diff --git a/test/testcases/tests/level1/html/HTMLLinkElement03.xml.kfail b/test/testcases/tests/level1/html/HTMLLinkElement03.xml index fff36db..fff36db 100644 --- a/test/testcases/tests/level1/html/HTMLLinkElement03.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLLinkElement03.xml diff --git a/test/testcases/tests/level1/html/HTMLLinkElement04.xml.kfail b/test/testcases/tests/level1/html/HTMLLinkElement04.xml index 924d945..924d945 100644 --- a/test/testcases/tests/level1/html/HTMLLinkElement04.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLLinkElement04.xml diff --git a/test/testcases/tests/level1/html/HTMLLinkElement05.xml.kfail b/test/testcases/tests/level1/html/HTMLLinkElement05.xml index cec4f35..cec4f35 100644 --- a/test/testcases/tests/level1/html/HTMLLinkElement05.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLLinkElement05.xml diff --git a/test/testcases/tests/level1/html/HTMLLinkElement06.xml.kfail b/test/testcases/tests/level1/html/HTMLLinkElement06.xml index 400e8ed..400e8ed 100644 --- a/test/testcases/tests/level1/html/HTMLLinkElement06.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLLinkElement06.xml diff --git a/test/testcases/tests/level1/html/HTMLLinkElement07.xml.kfail b/test/testcases/tests/level1/html/HTMLLinkElement07.xml index 71bbd8d..71bbd8d 100644 --- a/test/testcases/tests/level1/html/HTMLLinkElement07.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLLinkElement07.xml diff --git a/test/testcases/tests/level1/html/HTMLLinkElement08.xml.kfail b/test/testcases/tests/level1/html/HTMLLinkElement08.xml index 657237d..657237d 100644 --- a/test/testcases/tests/level1/html/HTMLLinkElement08.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLLinkElement08.xml diff --git a/test/testcases/tests/level1/html/HTMLLinkElement09.xml.kfail b/test/testcases/tests/level1/html/HTMLLinkElement09.xml index 6fb55a8..6fb55a8 100644 --- a/test/testcases/tests/level1/html/HTMLLinkElement09.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLLinkElement09.xml diff --git a/test/testcases/tests/level1/html/HTMLMetaElement01.xml.kfail b/test/testcases/tests/level1/html/HTMLMetaElement01.xml index 5ee3bcc..5ee3bcc 100644 --- a/test/testcases/tests/level1/html/HTMLMetaElement01.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLMetaElement01.xml diff --git a/test/testcases/tests/level1/html/HTMLMetaElement02.xml.kfail b/test/testcases/tests/level1/html/HTMLMetaElement02.xml index 11e7a09..11e7a09 100644 --- a/test/testcases/tests/level1/html/HTMLMetaElement02.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLMetaElement02.xml diff --git a/test/testcases/tests/level1/html/HTMLMetaElement03.xml.kfail b/test/testcases/tests/level1/html/HTMLMetaElement03.xml index ab3afc7..ab3afc7 100644 --- a/test/testcases/tests/level1/html/HTMLMetaElement03.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLMetaElement03.xml diff --git a/test/testcases/tests/level1/html/HTMLMetaElement04.xml.kfail b/test/testcases/tests/level1/html/HTMLMetaElement04.xml index 14ce0eb..14ce0eb 100644 --- a/test/testcases/tests/level1/html/HTMLMetaElement04.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLMetaElement04.xml diff --git a/test/testcases/tests/level1/html/HTMLTitleElement01.xml.kfail b/test/testcases/tests/level1/html/HTMLTitleElement01.xml index 9b95d95..9b95d95 100644 --- a/test/testcases/tests/level1/html/HTMLTitleElement01.xml.kfail +++ b/test/testcases/tests/level1/html/HTMLTitleElement01.xml diff --git a/test/testutils/domtsasserts.c b/test/testutils/domtsasserts.c index 92e8222..e5220e0 100644 --- a/test/testutils/domtsasserts.c +++ b/test/testutils/domtsasserts.c @@ -190,20 +190,148 @@ bool is_size_list(unsigned long size, list *list) } -bool is_uri_equals(char *scheme, char *path, char *host, - char *file, char *query, char *fragment, - bool isAbsolute, dom_string *actual) +bool is_uri_equals(const char *scheme, const char *path, const char *host, + const char *file, const char *name, const char *query, + const char *fragment, const char *isAbsolute, + dom_string *actual) { - UNUSED(scheme); - UNUSED(path); - UNUSED(host); - UNUSED(file); - UNUSED(query); - UNUSED(fragment); - UNUSED(isAbsolute); - UNUSED(actual); + const char *_ptr = actual != NULL ? dom_string_data(actual) : NULL; + const size_t slen = actual != NULL ? dom_string_byte_length(actual) : 0; + char *_sptr = actual != NULL ? domts_strndup(_ptr, slen) : NULL; + char *sptr = _sptr; + bool result = false; + + /* Used farther down */ + const char *firstColon = NULL; + const char *firstSlash = NULL; + char *actualPath = NULL; + char *actualScheme = NULL; + char *actualHost = NULL; + char *actualFile = NULL; + char *actualName = NULL; + + assert(sptr != NULL); + + /* Note, from here on down, this is essentially a semi-direct + * reimplementation of assertURIEquals in the Java DOMTS. + */ + + /* Attempt to check fragment */ + { + char *fptr = strrchr(sptr, '#'); + const char *cfptr = fptr + 1; + if (fptr != NULL) { + *fptr = '\0'; /* Remove fragment from sptr */ + } else { + cfptr = ""; + } + if (fragment != NULL) { + if (strcmp(fragment, cfptr) != 0) + goto out; + } + } + /* Attempt to check query string */ + { + char *qptr = strrchr(sptr, '?'); + const char *cqptr = qptr + 1; + if (qptr != NULL) { + *qptr = '\0'; /* Remove query from sptr */ + } else { + cqptr = ""; + } + if (query != NULL) { + if (strcmp(query, cqptr) != 0) + goto out; + } + } + + /* Scheme and path */ + firstColon = strchr(sptr, ':'); + firstSlash = strchr(sptr, '/'); + actualPath = strdup(sptr); + actualScheme = strdup(""); + if (firstColon != NULL && firstColon < firstSlash) { + free(actualScheme); + free(actualPath); + actualScheme = domts_strndup(sptr, firstColon - sptr); + actualPath = strdup(firstColon + 1); + } + if (scheme != NULL) { + if (strcmp(scheme, actualScheme) != 0) + goto out; + } + if (path != NULL) { + if (strcmp(path, actualPath) != 0) + goto out; + } + + /* host */ + if (host != NULL) { + if (actualPath[0] == '/' && + actualPath[1] == '/') { + const char *termslash = strchr(actualPath + 2, '/'); + actualHost = domts_strndup(actualPath, + termslash - actualPath); + } else { + actualHost = strdup(""); + } + if (strcmp(actualHost, host) != 0) + goto out; + } + + + /* file */ + actualFile = strdup(actualPath); + if (file != NULL || name != NULL) { + const char *finalSlash = strrchr(actualPath, '/'); + if (finalSlash != NULL) { + free(actualFile); + actualFile = strdup(finalSlash + 1); + } + if (file != NULL) { + if (strcmp(actualFile, file) != 0) + goto out; + } + } + + /* name */ + if (name != NULL) { + const char *finalPeriod = strrchr(actualFile, '.'); + if (finalPeriod != NULL) { + actualName = domts_strndup(actualFile, + finalPeriod - actualFile); + } else { + actualName = strdup(actualFile); + } + if (strcmp(actualName, name) != 0) + goto out; + } + + /* isAbsolute */ + if (isAbsolute != NULL) { + bool startslash = *actualPath == '/'; + bool isabsolute = strcasecmp(isAbsolute, "true") == 0; + isabsolute |= (strcasecmp(isAbsolute, "yes") == 0); + isabsolute |= (strcmp(isAbsolute, "1") == 0); + startslash |= (strncmp(actualPath, "file:/", 6) == 0); + if (isabsolute != startslash) + goto out; + } - return false; + result = true; +out: + if (actualPath != NULL) + free(actualPath); + if (actualScheme != NULL) + free(actualScheme); + if (actualHost != NULL) + free(actualHost); + if (actualFile != NULL) + free(actualFile); + if (actualName != NULL) + free(actualName); + free(_sptr); + return result; } diff --git a/test/testutils/domtsasserts.h b/test/testutils/domtsasserts.h index c301d88..bc214e8 100644 --- a/test/testutils/domtsasserts.h +++ b/test/testutils/domtsasserts.h @@ -49,9 +49,10 @@ bool is_size_domnamednodemap(unsigned long size, dom_namednodemap *map); bool is_size_domnodelist(unsigned long size, dom_nodelist *list); bool is_size_list(unsigned long size, list *list); -bool is_uri_equals(char *scheme, char *path, char *host, - char *file, char *query, char *fragment, - bool isAbsolute, dom_string *actual); +bool is_uri_equals(const char *scheme, const char *path, const char *host, + const char *file, const char *name, const char *query, + const char *fragment, const char *isAbsolute, + dom_string *actual); bool is_contenttype(const char *type); diff --git a/test/testutils/utils.c b/test/testutils/utils.c index 739933f..c876613 100644 --- a/test/testutils/utils.c +++ b/test/testutils/utils.c @@ -8,6 +8,7 @@ #include <stdarg.h> #include <stdio.h> #include <stdlib.h> +#include <string.h> #include "utils.h" @@ -31,4 +32,10 @@ void mymsg(uint32_t severity, void *ctx, const char *msg, ...) fprintf(stderr, "\n"); } - +char *domts_strndup(const char *s, size_t len) +{ + size_t retlen = min(strlen(s), len); + char *ret = calloc(retlen + 1, 1); + memcpy(ret, s, retlen); + return ret; +} diff --git a/test/testutils/utils.h b/test/testutils/utils.h index b57db36..560e909 100644 --- a/test/testutils/utils.h +++ b/test/testutils/utils.h @@ -31,5 +31,7 @@ void *myrealloc(void *ptr, size_t len, void *pw); void mymsg(uint32_t severity, void *ctx, const char *msg, ...); +char *domts_strndup(const char *s, size_t len); + #endif |