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 raptor_uri_init(void) { raptor_uri_set_handler(&raptor_uri_default_handler, NULL); return 0; }
void raptor_uri_init(void) { raptor_uri_init_default_handler(&raptor_uri_default_handler); raptor_uri_set_handler(&raptor_uri_default_handler, NULL); }