diff options
author | Don Scorgie <dscorgie@src.gnome.org> | 2007-06-12 07:06:00 +0000 |
---|---|---|
committer | Don Scorgie <dscorgie@src.gnome.org> | 2007-06-12 07:06:00 +0000 |
commit | fefabe85241c3d465af95338e3687cda63f378e7 (patch) | |
tree | fb46ab2bc03295128c35b2fc60c4a26d5dc6446f | |
parent | 136a904a2ab923f2f9049e71a8ec28c240b3c96e (diff) | |
download | yelp-fefabe85241c3d465af95338e3687cda63f378e7.tar.gz |
Add ghelp resolve support Many minor fixes to pass default test suite Add
* src/yelp-utils.c:
Add ghelp resolve support
Many minor fixes to pass default test suite
* src/test-resolver.c:
Add default tests
svn path=/branches/yelp-spoon/; revision=2821
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | src/test-resolver.c | 176 | ||||
-rw-r--r-- | src/yelp-utils.c | 52 |
3 files changed, 224 insertions, 14 deletions
@@ -1,3 +1,13 @@ +2007-06-12 Don Scorgie <dscorgie@svn.gnome.org> + + * src/yelp-utils.c: + Add ghelp resolve support + Many minor fixes to pass default test suite + + * src/test-resolver.c: + Add default tests + + 2007-06-11 Don Scorgie <dscorgie@svn.gnome.org> * src/yelp-utils.c: diff --git a/src/test-resolver.c b/src/test-resolver.c index 34b2aa58..48f3c5f9 100644 --- a/src/test-resolver.c +++ b/src/test-resolver.c @@ -7,6 +7,7 @@ #include <stdio.h> #include <glib.h> +#include <libgnomevfs/gnome-vfs.h> #include "yelp-utils.h" @@ -17,13 +18,182 @@ int TestFile (char *uri); int TestFile (char *uri) { - - return TRUE; + return (g_file_test (uri, G_FILE_TEST_EXISTS)); } int DefaultTests (void) { + gchar *result = NULL; + gchar *section = NULL; + YelpSpoonType restype = YELP_TYPE_ERROR; + + /* First, normal docs - these will only work with spoon XDG_DATA_DIRS set correctly */ + /* Normal doc, no section */ + restype = yelp_uri_resolve ("ghelp:user-guide", &result, §ion); + if (restype != YELP_TYPE_DOC || !TestFile (result) || + section != NULL) { + return 101; + } + g_free (result); result=NULL; + + /* Section type 1*/ + restype = yelp_uri_resolve ("ghelp:user-guide#madeupsection", &result, §ion); + if (restype != YELP_TYPE_DOC || !TestFile (result) || + !g_str_equal (section, "madeupsection")) { + return 102; + } + g_free (result); result=NULL; + g_free (section); section = NULL; + + /* Section type 2 */ + restype = yelp_uri_resolve ("ghelp:user-guide?madeupsection", &result, §ion); + if (restype != YELP_TYPE_DOC || !TestFile (result) || + !g_str_equal (section, "madeupsection")) { + return 103; + } + g_free (result); result=NULL; + g_free (section); section = NULL; + + /* man pages - only work with correct man pages installed */ + /* Simple man page */ + restype = yelp_uri_resolve ("man:yelp", &result, §ion); + if (restype != YELP_TYPE_MAN || !TestFile (result) || + !g_str_equal (section, "1")) { + return 104; + } + g_free (result); result=NULL; + g_free (section); section = NULL; + + /* man page from specific section 1*/ + restype = yelp_uri_resolve ("man:yelp(1)", &result, §ion); + if (restype != YELP_TYPE_MAN || !TestFile (result) || + !g_str_equal (section, "1")) { + return 105; + } + g_free (result); result=NULL; + g_free (section); section = NULL; + + /* man page from specific section 2*/ + restype = yelp_uri_resolve ("man:yelp.1", &result, §ion); + if (restype != YELP_TYPE_MAN || !TestFile (result) || + !g_str_equal (section, "1")) { + return 106; + } + g_free (result); result=NULL; + g_free (section); section = NULL; + + /* man page from specific section 3*/ + restype = yelp_uri_resolve ("man:yelp#1", &result, §ion); + if (restype != YELP_TYPE_MAN || !TestFile (result) || + !g_str_equal (section, "1")) { + return 107; + } + g_free (result); result=NULL; + g_free (section); section = NULL; + + /* Info pages */ + /* Simple info page */ + restype = yelp_uri_resolve ("info:cvs", &result, §ion); + if (restype != YELP_TYPE_INFO || !TestFile (result) || + section != NULL) { + return 108; + } + g_free (result); result=NULL; + g_free (section); section = NULL; + + /* info page with section */ + restype = yelp_uri_resolve ("info:cvs#toolbar", &result, §ion); + if (restype != YELP_TYPE_INFO || !TestFile (result) || + !g_str_equal (section, "toolbar")) { + return 109; + } + g_free (result); result=NULL; + g_free (section); section = NULL; + + /* info page with section 2*/ + restype = yelp_uri_resolve ("info:cvs?toolbar", &result, §ion); + if (restype != YELP_TYPE_INFO || !TestFile (result) || + !g_str_equal (section, "toolbar")) { + return 110; + } + g_free (result); result=NULL; + g_free (section); section = NULL; + + + /* info page with section included */ + restype = yelp_uri_resolve ("info:autopoint", &result, §ion); + if (restype != YELP_TYPE_INFO || !TestFile (result) || + !g_str_equal (section, "autopoint Invocation")) { + return 111; + } + g_free (result); result=NULL; + g_free (section); section = NULL; + + /* Other types: html - no html installed by default. Should be the same + * as ghelp + */ + /* External */ + restype = yelp_uri_resolve ("http://www.gnome.org", &result, §ion); + if (restype != YELP_TYPE_EXTERNAL) { + return 112; + } + g_free (result); result=NULL; + g_free (section); section = NULL; + + /* External, but local */ + restype = yelp_uri_resolve ("/usr/bin/yelp", &result, §ion); + if (restype != YELP_TYPE_EXTERNAL) { + return 113; + } + g_free (result); result=NULL; + g_free (section); section = NULL; + + /* External, local using file: uri */ + restype = yelp_uri_resolve ("file:///usr/bin/yelp", &result, §ion); + if (restype != YELP_TYPE_EXTERNAL) { + return 114; + } + g_free (result); result=NULL; + g_free (section); section = NULL; + + /* Local, file, readable */ + restype = yelp_uri_resolve ("file:///usr/share/gnome/help/user-guide/C/user-guide.xml", &result, §ion); + if (restype != YELP_TYPE_DOC || !TestFile (result) || + section != NULL) { + return 115; + } + g_free (result); result=NULL; + g_free (section); section = NULL; + + /* Local, readable, html */ + restype = yelp_uri_resolve ("/usr/share/doc/shared-mime-info/shared-mime-info-spec.html/index.html", &result, §ion); + if (restype != YELP_TYPE_HTML || !TestFile (result) || + section != NULL) { + return 116; + } + g_free (result); result=NULL; + g_free (section); section = NULL; + + /* Local, readable, html, with section */ + restype = yelp_uri_resolve ("/usr/share/doc/shared-mime-info/shared-mime-info-spec.html/index.html#foobar", &result, §ion); + if (restype != YELP_TYPE_HTML || !TestFile (result) || + !g_str_equal (section, "foobar")) { + return 117; + } + g_free (result); result=NULL; + g_free (section); section = NULL; + + /* error */ + restype = yelp_uri_resolve ("file:///usr/fake_file1", &result, §ion); + if (restype != YELP_TYPE_ERROR || result != NULL || section != NULL) { + return 118; + } + g_free (result); result=NULL; + g_free (section); section = NULL; + + + return 0; } @@ -78,7 +248,7 @@ main (int argc, char *argv[]) } } else if (g_str_equal (type, "external")) { restype = yelp_uri_resolve (argv[i], &result, §ion); - if (restype != YELP_TYPE_EXTERNAL || !TestFile (result)) { + if (restype != YELP_TYPE_EXTERNAL) { printf ("Failed doc test %s. Aborting.\n", uri, restype, YELP_TYPE_EXTERNAL); return 5; } diff --git a/src/yelp-utils.c b/src/yelp-utils.c index 8fdc499f..230607f8 100644 --- a/src/yelp-utils.c +++ b/src/yelp-utils.c @@ -1049,11 +1049,39 @@ convert_info_uri (gchar *uri) #include <spoon-info.h> #include <spoon-man.h> +#include <spoon.h> -gchar * -resolve_process_ghelp (char *uri) + +YelpSpoonType +resolve_process_ghelp (char *uri, gchar **result) { - return NULL; + SpoonReg *reg = spoon_find_from_ghelp (&uri[6]); + YelpSpoonType type = YELP_TYPE_ERROR; + + if (reg) { + gchar *mime = NULL; + if (g_str_has_prefix (reg->uri, "file:")) + *result = g_strdup (®->uri[5]); + else + *result = g_strdup (reg->uri); + + /* mime types are horrible in omf-translated files */ + if (reg->type && *(reg->type)) + mime = g_strdup (reg->type); + else + mime = gnome_vfs_get_mime_type (*result); + + if (g_str_equal (mime, "text/xml") || + g_str_equal (mime, "application/docbook+xml") || + g_str_equal (mime, "application/xml")) + type = YELP_TYPE_DOC; + else if (g_str_equal (mime, "text/html") || + g_str_equal (mime, "application/xhtml+xml")) + type = YELP_TYPE_HTML; + + } + + return type; } gchar * @@ -1245,11 +1273,10 @@ yelp_uri_resolve (gchar *uri, gchar **result, gchar **section) } intern_section = resolve_get_section(uri); intern_uri = resolve_remove_section (uri, intern_section); + if (!strncmp (uri, "ghelp:", 6) || !strncmp (uri, "gnome-help:", 11)) { - printf ("ghelp\n"); - *result = resolve_process_ghelp (uri); + ret = resolve_process_ghelp (intern_uri, result); if (*result) { - ret = YELP_TYPE_DOC; *section = intern_section; } } else if (!strncmp (uri, "man:", 4)) { @@ -1286,7 +1313,10 @@ yelp_uri_resolve (gchar *uri, gchar **result, gchar **section) entry = spoon_info_find_from_uri (info_name, info_sect); if (entry) { ret = YELP_TYPE_INFO; - *section = g_strdup (entry->section); + if (entry->section) + *section = g_strdup (entry->section); + else + *section = g_strdup (intern_section); *result = g_strdup (entry->base_filename); } else { ret = resolve_man_page (&uri[5], result, section); @@ -1324,9 +1354,9 @@ yelp_uri_resolve (gchar *uri, gchar **result, gchar **section) *result = g_strdup (uri+14); *section = NULL; ret = YELP_TYPE_SEARCH; - } else if (g_file_test (uri, G_FILE_TEST_EXISTS)) { + } else if (g_file_test (intern_uri, G_FILE_TEST_EXISTS)) { /* Full path */ - ret = resolve_full_file (&intern_uri[5]); + ret = resolve_full_file (intern_uri); if (ret == YELP_TYPE_EXTERNAL) { *section = NULL; *result = g_strdup (uri); @@ -1335,8 +1365,8 @@ yelp_uri_resolve (gchar *uri, gchar **result, gchar **section) *section = NULL; *result = NULL; } else { - *result = g_strdup (&intern_uri[5]); - *section = intern_section; + *result = g_strdup (intern_uri); + *section = g_strdup (intern_section); } } else if (*uri == '/' || g_str_has_suffix (uri, ".xml")) { /* Quite probable it was supposed to be ours, but |