int main(int argc, char *argv[]) { const char *base_uri = "http://example.org/bpath/cpath/d;p?querystr#frag"; const char *base_uri_xmlbase = "http://example.org/bpath/cpath/d;p"; const char *base_uri_retrievable = "http://example.org/bpath/cpath/d;p?querystr"; #ifndef WIN32 #if defined(HAVE_UNISTD_H) && defined(HAVE_SYS_STAT_H) const char* dirs[6] = { "/etc", "/bin", "/tmp", "/lib", "/var", NULL }; unsigned char uri_buffer[16]; /* strlen("file:///DIR/foo")+1 */ int i; const char *dir; #endif #endif unsigned char *str; raptor_uri *uri1, *uri2, *uri3; int failures=0; if((program=strrchr(argv[0], '/'))) program++; else if((program=strrchr(argv[0], '\\'))) program++; else program=argv[0]; #ifdef WIN32 failures += assert_filename_to_uri ("c:\\windows\\system", "file:///c:/windows/system"); failures += assert_filename_to_uri ("\\\\server\\share\\file.doc", "file://server/share/file.doc"); failures += assert_filename_to_uri ("a:foo", "file:///a:./foo"); failures += assert_filename_to_uri ("C:\\Documents and Settings\\myapp\\foo.bat", "file:///C:/Documents%20and%20Settings/myapp/foo.bat"); failures += assert_filename_to_uri ("C:\\My Documents\\%age.txt", "file:///C:/My%20Documents/%25age.txt"); failures += assert_uri_to_filename ("file:///c|/windows/system", "c:\\windows\\system"); failures += assert_uri_to_filename ("file:///c:/windows/system", "c:\\windows\\system"); failures += assert_uri_to_filename ("file://server/share/file.doc", "\\\\server\\share\\file.doc"); failures += assert_uri_to_filename ("file:///a:./foo", "a:foo"); failures += assert_uri_to_filename ("file:///C:/Documents%20and%20Settings/myapp/foo.bat", "C:\\Documents and Settings\\myapp\\foo.bat"); failures += assert_uri_to_filename ("file:///C:/My%20Documents/%25age.txt", "C:\\My Documents\\%age.txt"); failures += assert_uri_to_filename ("file:c:\\thing", "c:\\thing"); failures += assert_uri_to_filename ("file:/c:\\thing", "c:\\thing"); failures += assert_uri_to_filename ("file://c:\\thing", NULL); failures += assert_uri_to_filename ("file:///c:\\thing", "c:\\thing"); failures += assert_uri_to_filename ("file://localhost/", NULL); failures += assert_uri_to_filename ("file://c:\\foo\\bar\\x.rdf", NULL); #else failures += assert_filename_to_uri ("/path/to/file", "file:///path/to/file"); failures += assert_filename_to_uri ("/path/to/file with spaces", "file:///path/to/file%20with%20spaces"); failures += assert_uri_to_filename ("file:///path/to/file", "/path/to/file"); failures += assert_uri_to_filename ("file:///path/to/file%20with%20spaces", "/path/to/file with spaces"); #if defined(HAVE_UNISTD_H) && defined(HAVE_SYS_STAT_H) /* Need to test this with a real dir (preferably not /) * This is just a test so pretty likely to work on all development systems * that are not WIN32 */ for(i=0; (dir=dirs[i]); i++) { struct stat buf; if(!lstat(dir, &buf) && S_ISDIR(buf.st_mode) && !S_ISLNK(buf.st_mode)) { if(!chdir(dir)) break; } } if(!dir) fprintf(stderr, "%s: WARNING: Found no convenient directory - not testing relative files\n", program); else { sprintf((char*)uri_buffer, "file://%s/foo", dir); fprintf(stderr, "%s: Checking relative file name 'foo' in dir %s expecting URI %s\n", program, dir, uri_buffer); failures += assert_filename_to_uri ("foo", (const char*)uri_buffer); } #endif #endif raptor_uri_init(); uri1=raptor_new_uri((const unsigned char*)base_uri); str=raptor_uri_as_string(uri1); if(strcmp((const char*)str, base_uri)) { fprintf(stderr, "%s: raptor_uri_as_string(%s) FAILED gaving %s != %s\n", program, base_uri, str, base_uri); failures++; } uri2=raptor_new_uri_for_xmlbase(uri1); str=raptor_uri_as_string(uri2); if(strcmp((const char*)str, base_uri_xmlbase)) { fprintf(stderr, "%s: raptor_new_uri_for_xmlbase(URI %s) FAILED giving %s != %s\n", program, base_uri, str, base_uri_xmlbase); failures++; } uri3=raptor_new_uri_for_retrieval(uri1); str=raptor_uri_as_string(uri3); if(strcmp((const char*)str, base_uri_retrievable)) { fprintf(stderr, "%s: raptor_new_uri_for_retrievable(%s) FAILED gaving %s != %s\n", program, base_uri, str, base_uri_retrievable); failures++; } raptor_free_uri(uri3); raptor_free_uri(uri2); raptor_free_uri(uri1); failures += assert_uri_to_relative(NULL, "http://example.com/foo/bar", "http://example.com/foo/bar"); failures += assert_uri_to_relative("", "http://example.com/foo/bar", "http://example.com/foo/bar"); failures += assert_uri_to_relative("foo:", "http://example.com/foo/bar", "http://example.com/foo/bar"); failures += assert_uri_to_relative("http://example.com/base/foo?foo#foo", "http://example.com/base/bar?bar#bar", "bar?bar#bar"); failures += assert_uri_to_relative("http://example.com/base/foo", "http://example.com/base/foo/", "foo/"); failures += assert_uri_to_relative("http://example.com/base/foo", "http://example.com/base/foo/.foo", "foo/.foo"); failures += assert_uri_to_relative("http://example.com/base/foo", "http://example.com/base/foo/.foo#bar", "foo/.foo#bar"); failures += assert_uri_to_relative("http://example.com/base/foo", "http://example.com/base/foo/bar", "foo/bar"); failures += assert_uri_to_relative("http://example.com/base/foo", "http://example.com/base/foo#bar", "#bar"); failures += assert_uri_to_relative("http://example.com/base/foo", "http://example.com/base/bar#foo", "bar#foo"); failures += assert_uri_to_relative("http://example.com/base/foo", "http://example.com/otherbase/bar", "../otherbase/bar"); failures += assert_uri_to_relative("http://example.com/base/foo", "http://example.com/base/#foo", ".#foo"); failures += assert_uri_to_relative("http://example.com/base/foo", "http://example2.com/base/bar", "http://example2.com/base/bar"); failures += assert_uri_to_relative("http://example.com/base/one?path=/should/be/ignored", "http://example.com/base/two?path=/should/be/ignored", "two?path=/should/be/ignored"); failures += assert_uri_to_relative("http://example.org/base#", "http://www.foo.org", "http://www.foo.org"); failures += assert_uri_to_relative("http://example.org", "http://a.example.org/", "http://a.example.org/"); failures += assert_uri_to_relative("http://example.org", "http://a.example.org", "http://a.example.org"); failures += assert_uri_to_relative("http://abcdefgh.example.org/foo/bar/", "http://ijklmnop.example.org/", "http://ijklmnop.example.org/"); if(1) { raptor_uri_handler uri_handler; int ret; raptor_uri* u1; raptor_uri* u2; int called; /* URI Interface V1 */ uri_handler.new_uri = raptor_default_new_uri; uri_handler.free_uri = raptor_default_free_uri; uri_handler.uri_compare = raptor_test_uri_compare; uri_handler.initialised=1; called=0; raptor_uri_set_handler(&uri_handler, &called); u1=raptor_new_uri((const unsigned char *)"http://example.org/abc"); u2=raptor_new_uri((const unsigned char *)"http://example.org/def"); ret=raptor_uri_compare(u1, u2); if(!(ret < 0)) { fprintf(stderr, "%s: raptor_uri_compare(%s, %s) FAILED V1 gave %d expected <0\n", program, raptor_uri_as_string(u1), raptor_uri_as_string(u2), ret); failures++; } if(called) { fprintf(stderr, "%s: raptor_uri_compare(%s, %s) FAILED V1 called user handler\n", program, raptor_uri_as_string(u1), raptor_uri_as_string(u2)); failures++; } /* URI Interface V2 */ uri_handler.initialised=2; called=0; raptor_uri_set_handler(&uri_handler, &called); ret=raptor_uri_compare(u1, u2); if(!(ret < 0)) { fprintf(stderr, "%s: raptor_uri_compare(%s, %s) FAILED V2 gave %d expected <0\n", program, raptor_uri_as_string(u1), raptor_uri_as_string(u2), ret); failures++; } if(!called) { fprintf(stderr, "%s: raptor_uri_compare(%s, %s) FAILED V2 did not call user handler\n", program, raptor_uri_as_string(u1), raptor_uri_as_string(u2)); failures++; } raptor_free_uri(u1); raptor_free_uri(u2); } return failures ; }
int main(int argc, char *argv[]) { const char *base_uri = "http://example.org/bpath/cpath/d;p?querystr#frag"; const char *base_uri_xmlbase = "http://example.org/bpath/cpath/d;p"; const char *base_uri_retrievable = "http://example.org/bpath/cpath/d;p?querystr"; const char* dirs[6] = { "/etc", "/bin", "/tmp", "/lib", "/var", NULL }; unsigned char uri_buffer[16]; /* strlen("file:///DIR/foo")+1 */ int i; const char *dir; unsigned char *str; raptor_uri *uri1, *uri2, *uri3; int failures=0; fprintf(stderr, "raptor_uri_resolve_uri_reference: Testing with base URI %s\n", base_uri); failures += assert_resolve_uri (base_uri, "g:h", "g:h"); failures += assert_resolve_uri (base_uri, "gpath", "http://example.org/bpath/cpath/gpath"); failures += assert_resolve_uri (base_uri, "./gpath", "http://example.org/bpath/cpath/gpath"); failures += assert_resolve_uri (base_uri, "gpath/", "http://example.org/bpath/cpath/gpath/"); failures += assert_resolve_uri (base_uri, "/gpath", "http://example.org/gpath"); failures += assert_resolve_uri (base_uri, "//gpath", "http://gpath"); failures += assert_resolve_uri (base_uri, "?y", "http://example.org/bpath/cpath/?y"); failures += assert_resolve_uri (base_uri, "gpath?y", "http://example.org/bpath/cpath/gpath?y"); failures += assert_resolve_uri (base_uri, "#s", "http://example.org/bpath/cpath/d;p?querystr#s"); failures += assert_resolve_uri (base_uri, "gpath#s", "http://example.org/bpath/cpath/gpath#s"); failures += assert_resolve_uri (base_uri, "gpath?y#s", "http://example.org/bpath/cpath/gpath?y#s"); failures += assert_resolve_uri (base_uri, ";x", "http://example.org/bpath/cpath/;x"); failures += assert_resolve_uri (base_uri, "gpath;x", "http://example.org/bpath/cpath/gpath;x"); failures += assert_resolve_uri (base_uri, "gpath;x?y#s", "http://example.org/bpath/cpath/gpath;x?y#s"); failures += assert_resolve_uri (base_uri, ".", "http://example.org/bpath/cpath/"); failures += assert_resolve_uri (base_uri, "./", "http://example.org/bpath/cpath/"); failures += assert_resolve_uri (base_uri, "..", "http://example.org/bpath/"); failures += assert_resolve_uri (base_uri, "../", "http://example.org/bpath/"); failures += assert_resolve_uri (base_uri, "../gpath", "http://example.org/bpath/gpath"); failures += assert_resolve_uri (base_uri, "../..", "http://example.org/"); failures += assert_resolve_uri (base_uri, "../../", "http://example.org/"); failures += assert_resolve_uri (base_uri, "../../gpath", "http://example.org/gpath"); failures += assert_resolve_uri (base_uri, "", "http://example.org/bpath/cpath/d;p?querystr"); failures += assert_resolve_uri (base_uri, "../../../gpath", "http://example.org/../gpath"); failures += assert_resolve_uri (base_uri, "../../../../gpath", "http://example.org/../../gpath"); failures += assert_resolve_uri (base_uri, "/./gpath", "http://example.org/./gpath"); failures += assert_resolve_uri (base_uri, "/../gpath", "http://example.org/../gpath"); failures += assert_resolve_uri (base_uri, "gpath.", "http://example.org/bpath/cpath/gpath."); failures += assert_resolve_uri (base_uri, ".gpath", "http://example.org/bpath/cpath/.gpath"); failures += assert_resolve_uri (base_uri, "gpath..", "http://example.org/bpath/cpath/gpath.."); failures += assert_resolve_uri (base_uri, "..gpath", "http://example.org/bpath/cpath/..gpath"); failures += assert_resolve_uri (base_uri, "./../gpath", "http://example.org/bpath/gpath"); failures += assert_resolve_uri (base_uri, "./gpath/.", "http://example.org/bpath/cpath/gpath/"); failures += assert_resolve_uri (base_uri, "gpath/./hpath", "http://example.org/bpath/cpath/gpath/hpath"); failures += assert_resolve_uri (base_uri, "gpath/../hpath", "http://example.org/bpath/cpath/hpath"); failures += assert_resolve_uri (base_uri, "gpath;x=1/./y", "http://example.org/bpath/cpath/gpath;x=1/y"); failures += assert_resolve_uri (base_uri, "gpath;x=1/../y", "http://example.org/bpath/cpath/y"); failures += assert_resolve_uri (base_uri, "gpath?y/./x", "http://example.org/bpath/cpath/gpath?y/./x"); failures += assert_resolve_uri (base_uri, "gpath?y/../x", "http://example.org/bpath/cpath/gpath?y/../x"); failures += assert_resolve_uri (base_uri, "gpath#s/./x", "http://example.org/bpath/cpath/gpath#s/./x"); failures += assert_resolve_uri (base_uri, "gpath#s/../x", "http://example.org/bpath/cpath/gpath#s/../x"); failures += assert_resolve_uri (base_uri, "http:gauthority", "http:gauthority"); failures += assert_resolve_uri (base_uri, "gpath/../../../hpath", "http://example.org/hpath"); failures += assert_resolve_uri ("http://example.org/dir/file", "../../../absfile", "http://example.org/../../absfile"); failures += assert_resolve_uri ("http://example.org/dir/file", "http://another.example.org/dir/file", "http://another.example.org/dir/file"); #ifdef WIN32 failures += assert_filename_to_uri ("c:\\windows\\system", "file://c|/windows/system"); failures += assert_filename_to_uri ("\\\\server\\share\\file.doc", "file://server/share/file.doc"); failures += assert_filename_to_uri ("a:foo", "file://a|./foo"); failures += assert_uri_to_filename ("file://c|/windows/system", "c:\\windows\\system"); failures += assert_uri_to_filename ("file://c:/windows/system", "c:\\windows\\system"); failures += assert_uri_to_filename ("file://server/share/file.doc", "\\\\server\\share\\file.doc"); failures += assert_uri_to_filename ("file://a|./foo", "a:foo"); #else failures += assert_filename_to_uri ("/path/to/file", "file:///path/to/file"); failures += assert_uri_to_filename ("file:///path/to/file", "/path/to/file"); #if defined(HAVE_UNISTD_H) && defined(HAVE_SYS_STAT_H) /* Need to test this with a real dir (preferably not /) * This is just a test so pretty likely to work on all development systems * that are not WIN32 */ for(i=0; (dir=dirs[i]); i++) { struct stat buf; if(!lstat(dir, &buf) && S_ISDIR(buf.st_mode) && !S_ISLNK(buf.st_mode)) { if(!chdir(dir)) break; } } if(!dir) fprintf(stderr, "WARNING: %s: Found no convenient directory - not testing relative files\n", argv[0]); else { sprintf((char*)uri_buffer, "file://%s/foo", dir); fprintf(stderr, "%s: Checking relative file name 'foo' in dir %s expecting URI %s\n", argv[0], dir, uri_buffer); failures += assert_filename_to_uri ("foo", (const char*)uri_buffer); } #endif #endif raptor_uri_init(); uri1=raptor_new_uri((const unsigned char*)base_uri); str=raptor_uri_as_string(uri1); if(strcmp((const char*)str, base_uri)) { fprintf(stderr, "FAIL raptor_uri_as_string URI %s gave %s != %s\n", base_uri, str, base_uri); failures++; } uri2=raptor_new_uri_for_xmlbase(uri1); str=raptor_uri_as_string(uri2); if(strcmp((const char*)str, base_uri_xmlbase)) { fprintf(stderr, "FAIL raptor_new_uri_for_xmlbase URI %s gave %s != %s\n", base_uri, str, base_uri_xmlbase); failures++; } uri3=raptor_new_uri_for_retrieval(uri1); str=raptor_uri_as_string(uri3); if(strcmp((const char*)str, base_uri_retrievable)) { fprintf(stderr, "FAIL raptor_new_uri_for_retrievable URI %s gave %s != %s\n", base_uri, str, base_uri_retrievable); failures++; } raptor_free_uri(uri3); raptor_free_uri(uri2); raptor_free_uri(uri1); return failures ; }