#include #include #include #include "uri.h" class RebaseHrefsTest : public CxxTest::TestSuite { Inkscape::XML::Document *document; Inkscape::XML::Node *a, *b, *c, *root; public: RebaseHrefsTest() { Inkscape::GC::init(); document = sp_repr_document_new("test"); root = document->root(); a = document->createElement("a"); b = document->createElement("b"); c = document->createElement("c"); } virtual ~RebaseHrefsTest() {} // createSuite and destroySuite get us per-suite setup and teardown // without us having to worry about static initialization order, etc. static RebaseHrefsTest *createSuite() { return new RebaseHrefsTest(); } static void destroySuite( RebaseHrefsTest *suite ) { delete suite; } void dump_str(gchar const *str, gchar const *prefix) { Glib::ustring tmp; tmp = prefix; tmp += " ["; size_t const total = strlen(str); for (unsigned i = 0; i < total; i++) { gchar *const tmp2 = g_strdup_printf(" %02x", (0x0ff & str[i])); tmp += tmp2; g_free(tmp2); } tmp += "]"; g_message("%s", tmp.c_str()); } void testFlipples() { using Inkscape::URI; using Inkscape::MalformedURIException; gchar const* things[] = { "data:foo,bar", "http://www.google.com/image.png", "ftp://ssd.com/doo", "/foo/dee/bar.svg", "foo.svg", "file:/foo/dee/bar.svg", "file:///foo/dee/bar.svg", "file:foo.svg", "/foo/bar\xe1\x84\x92.svg", "file:///foo/bar\xe1\x84\x92.svg", "file:///foo/bar%e1%84%92.svg", "/foo/bar%e1%84%92.svg", "bar\xe1\x84\x92.svg", "bar%e1%84%92.svg", NULL }; g_message("+------"); for ( int i = 0; things[i]; i++ ) { try { URI uri(things[i]); gboolean isAbs = g_path_is_absolute( things[i] ); gchar *str = uri.toString(); g_message( "abs:%d isRel:%d scheme:[%s] path:[%s][%s] uri[%s] / [%s]", (int)isAbs, (int)uri.isRelative(), uri.getScheme(), uri.getPath(), uri.getOpaque(), things[i], str ); g_free(str); } catch ( MalformedURIException err ) { dump_str( things[i], "MalformedURIException" ); xmlChar *redo = xmlURIEscape((xmlChar const *)things[i]); g_message(" gone from [%s] to [%s]", things[i], redo ); if ( redo == NULL ) { URI again = URI::fromUtf8( things[i] ); g_message(" uri from [%s] to [%s]", things[i], again.toString() ); gboolean isAbs = g_path_is_absolute( things[i] ); gchar *str = again.toString(); g_message( "abs:%d isRel:%d scheme:[%s] path:[%s][%s] uri[%s] / [%s]", (int)isAbs, (int)again.isRelative(), again.getScheme(), again.getPath(), again.getOpaque(), things[i], str ); g_free(str); g_message(" ----"); } } } g_message("+------"); } }; /* Local Variables: mode:c++ c-file-style:"stroustrup" c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) indent-tabs-mode:nil fill-column:99 End: */ // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :