summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDon Scorgie <dscorgie@src.gnome.org>2007-06-12 07:06:00 +0000
committerDon Scorgie <dscorgie@src.gnome.org>2007-06-12 07:06:00 +0000
commitfefabe85241c3d465af95338e3687cda63f378e7 (patch)
treefb46ab2bc03295128c35b2fc60c4a26d5dc6446f
parent136a904a2ab923f2f9049e71a8ec28c240b3c96e (diff)
downloadyelp-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--ChangeLog10
-rw-r--r--src/test-resolver.c176
-rw-r--r--src/yelp-utils.c52
3 files changed, 224 insertions, 14 deletions
diff --git a/ChangeLog b/ChangeLog
index 78fa253c..3b18ed94 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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, &section);
+ 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, &section);
+ 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, &section);
+ 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, &section);
+ 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, &section);
+ 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, &section);
+ 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, &section);
+ 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, &section);
+ 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, &section);
+ 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, &section);
+ 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, &section);
+ 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, &section);
+ 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, &section);
+ 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, &section);
+ 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, &section);
+ 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, &section);
+ 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, &section);
+ 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, &section);
+ 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, &section);
- 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 (&reg->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