r18897 - gnucash/trunk/src/core-utils - Add first test for the gnc-uri-utils api.

Geert Janssens gjanssens at code.gnucash.org
Fri Mar 12 17:39:48 EST 2010


Author: gjanssens
Date: 2010-03-12 17:39:48 -0500 (Fri, 12 Mar 2010)
New Revision: 18897
Trac: http://svn.gnucash.org/trac/changeset/18897

Added:
   gnucash/trunk/src/core-utils/test/test-gnc-uri-utils.c
Modified:
   gnucash/trunk/src/core-utils/gnc-uri-utils.c
   gnucash/trunk/src/core-utils/test/Makefile.am
Log:
Add first test for the gnc-uri-utils api.
This test verifies gnc_uri_get_components.

Modified: gnucash/trunk/src/core-utils/gnc-uri-utils.c
===================================================================
--- gnucash/trunk/src/core-utils/gnc-uri-utils.c	2010-03-12 21:38:43 UTC (rev 18896)
+++ gnucash/trunk/src/core-utils/gnc-uri-utils.c	2010-03-12 22:39:48 UTC (rev 18897)
@@ -102,6 +102,9 @@
     url = g_strdup (splituri[1]);
     g_strfreev ( splituri );
 
+    /* Check for "@" sign, but start from the end - the password may contain
+     * this sign as well */
+     */
     delimiter = g_strrstr ( url, "@" );
     if ( delimiter != NULL )
     {
@@ -110,15 +113,17 @@
         tmpusername = url;
         tmphostname = delimiter + 1;
 
-        /* Check if there's a password too */
+        /* Check if there's a password too by looking for a :
+         * Start from the beginning this time to avoid possible :
+         * in the password */
         delimiter = g_strstr_len ( tmpusername, -1, ":" );
         if ( delimiter != NULL )
         {
             /* There is password in the url */
             delimiter[0] = '\0';
-            *username = g_strdup ( (const gchar*)tmpusername );
             *password = g_strdup ( (const gchar*)(delimiter+1) );
         }
+        *username = g_strdup ( (const gchar*)tmpusername );
     }
     else
     {

Modified: gnucash/trunk/src/core-utils/test/Makefile.am
===================================================================
--- gnucash/trunk/src/core-utils/test/Makefile.am	2010-03-12 21:38:43 UTC (rev 18896)
+++ gnucash/trunk/src/core-utils/test/Makefile.am	2010-03-12 22:39:48 UTC (rev 18897)
@@ -18,6 +18,7 @@
 # that they should be executed, with more basic tests coming first.
 #
 TESTS = \
+  test-gnc-uri-utils \
   test-resolve-file-path
 
 GNC_TEST_DEPS = \
@@ -29,6 +30,7 @@
   $(shell ${top_srcdir}/src/gnc-test-env --no-exports ${GNC_TEST_DEPS})
 
 check_PROGRAMS = \
+  test-gnc-uri-utils \
   test-resolve-file-path
 
 

Added: gnucash/trunk/src/core-utils/test/test-gnc-uri-utils.c
===================================================================
--- gnucash/trunk/src/core-utils/test/test-gnc-uri-utils.c	                        (rev 0)
+++ gnucash/trunk/src/core-utils/test/test-gnc-uri-utils.c	2010-03-12 22:39:48 UTC (rev 18897)
@@ -0,0 +1,210 @@
+/***************************************************************************
+ *            test-gnc-uri-utils.c
+ *
+ *  Thu Sep 29 22:48:57 2005
+ *  Copyright  2005  GnuCash team
+ ****************************************************************************/
+/*
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ *  02110-1301, USA.
+ */
+
+#include "config.h"
+#include <stdlib.h>
+#include <string.h>
+
+#include <glib.h>
+#include "qof.h"
+#include "test-stuff.h"
+#include "gnc-uri-utils.h"
+
+struct test_strings_struct
+{
+    gchar *uri;
+    gchar *protocol;
+    gchar *hostname;
+    gchar *username;
+    gchar *password;
+    gchar *path;
+    guint32 port;
+    gchar *norm_uri;
+    gboolean want_password;
+};
+
+typedef struct test_strings_struct test_strings;
+
+test_strings strs[] =
+{
+#ifndef G_OS_WIN32
+    /* basic file tests in posix like environment */
+    {
+        "/test/path/file.xacc",
+        "file", NULL, NULL, NULL, "/test/path/file.xacc", 0,
+        "file:///test/path/file.xacc", FALSE
+    },
+    {
+        "file:///test/path/file.xacc",
+        "file", NULL, NULL, NULL, "/test/path/file.xacc", 0,
+        "file:///test/path/file.xacc", FALSE
+    },
+    {
+        "xml:///test/path/file.xacc",
+        "xml", NULL, NULL, NULL, "/test/path/file.xacc", 0,
+        "xml:///test/path/file.xacc", FALSE
+    },
+    {
+        "sqlite3:///test/path/file.xacc",
+        "sqlite3", NULL, NULL, NULL, "/test/path/file.xacc", 0,
+        "sqlite3:///test/path/file.xacc", FALSE
+    },
+#else
+    /* basic file tests in windows environment */
+    {
+        "c:\\test\\path\\file.gnucash",
+        "file", NULL, NULL, NULL, "c:\\test\\path\\file.gnucash", 0,
+        "file://c:\\test\\path\\file.gnucash", FALSE
+    },
+    {
+        "file://c:\\test\\path\\file.gnucash",
+        "file", NULL, NULL, NULL, "c:\\test\\path\\file.gnucash", 0,
+        "file://c:\\test\\path\\file.gnucash", FALSE
+    },
+    {
+        "xml://c:\\test\\path\\file.gnucash",
+        "xml", NULL, NULL, NULL, "c:\\test\\path\\file.gnucash", 0,
+        "xml://c:\\test\\path\\file.gnucash", FALSE
+    },
+    {
+        "sqlite3://c:\\test\\path\\file.gnucash",
+        "sqlite3", NULL, NULL, NULL, "c:\\test\\path\\file.gnucash", 0,
+        "sqlite3://c:\\test\\path\\file.gnucash", FALSE
+    },
+#endif
+    /* basic database tests */
+    {
+        "mysql://www.gnucash.org/gnucash",
+        "mysql", "www.gnucash.org", NULL, NULL, "gnucash", 0,
+        "mysql://www.gnucash.org/gnucash", FALSE
+    },
+    {
+        "mysql://www.gnucash.org/gnucash",
+        "mysql", "www.gnucash.org", NULL, NULL, "gnucash", 0,
+        "mysql://www.gnucash.org/gnucash", TRUE
+    },
+    {
+        "mysql://dbuser@www.gnucash.org/gnucash",
+        "mysql", "www.gnucash.org", "dbuser", NULL, "gnucash", 0,
+        "mysql://dbuser@www.gnucash.org/gnucash", FALSE
+    },
+    {
+        "mysql://dbuser@www.gnucash.org/gnucash",
+        "mysql", "www.gnucash.org", "dbuser", NULL, "gnucash", 0,
+        "mysql://dbuser@www.gnucash.org/gnucash", TRUE
+    },
+    {
+        "mysql://dbuser:dbpass@www.gnucash.org/gnucash",
+        "mysql", "www.gnucash.org", "dbuser", "dbpass", "gnucash", 0,
+        "mysql://dbuser@www.gnucash.org/gnucash", FALSE
+    },
+    {
+        "mysql://dbuser:dbpass@www.gnucash.org/gnucash",
+        "mysql", "www.gnucash.org", "dbuser", "dbpass", "gnucash", 0,
+        "mysql://dbuser:dbpass@www.gnucash.org/gnucash", TRUE
+    },
+    {
+        "postgres://www.gnucash.org/gnucash",
+        "postgres", "www.gnucash.org", NULL, NULL, "gnucash", 0,
+        "postgres://www.gnucash.org/gnucash", FALSE
+    },
+    {
+        "postgres://www.gnucash.org/gnucash",
+        "postgres", "www.gnucash.org", NULL, NULL, "gnucash", 0,
+        "postgres://www.gnucash.org/gnucash", TRUE
+    },
+    {
+        "postgres://dbuser@www.gnucash.org/gnucash",
+        "postgres", "www.gnucash.org", "dbuser", NULL, "gnucash", 0,
+        "postgres://dbuser@www.gnucash.org/gnucash", FALSE
+    },
+    {
+        "postgres://dbuser@www.gnucash.org/gnucash",
+        "postgres", "www.gnucash.org", "dbuser", NULL, "gnucash", 0,
+        "postgres://dbuser@www.gnucash.org/gnucash", TRUE
+    },
+    {
+        "postgres://dbuser:dbpass@www.gnucash.org/gnucash",
+        "postgres", "www.gnucash.org", "dbuser", "dbpass", "gnucash", 0,
+        "postgres://dbuser@www.gnucash.org/gnucash", FALSE
+    },
+    {
+        "postgres://dbuser:dbpass@www.gnucash.org/gnucash",
+        "postgres", "www.gnucash.org", "dbuser", "dbpass", "gnucash", 0,
+        "postgres://dbuser:dbpass@www.gnucash.org/gnucash", TRUE
+    },
+    /* password with lots of ugly characters in it test */
+    {
+        "postgres://dbuser:*#bad35:@xx@www.gnucash.org/gnucash",
+        "postgres", "www.gnucash.org", "dbuser", "*#bad35:@xx", "gnucash", 0,
+        "postgres://dbuser:*#bad35:@xx@www.gnucash.org/gnucash", TRUE
+    },
+    /* TODO Figure out how to write tests that actually verify the relative
+     * pathname resolution. The above tests only test absolute pathnames */
+    { NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, FALSE },
+};
+
+int
+main(int argc, char **argv)
+{
+    int i;
+
+    qof_init();
+
+    /* gnc_uri_get_components */
+    for (i = 0; strs[i].uri != NULL; i++)
+    {
+        gchar *tprotocol = NULL;
+        gchar *thostname = NULL;
+        gchar *tusername = NULL;
+        gchar *tpassword = NULL;
+        gchar *tpath     = NULL;
+        guint32 tport    = 0;
+        gboolean testresult;
+
+        gnc_uri_get_components( strs[i].uri, &tprotocol, &thostname,
+                                tport, &tusername, &tpassword, &tpath );
+        testresult = ( safe_strcmp ( tprotocol, strs[i].protocol ) == 0 ) &
+                     ( safe_strcmp ( thostname, strs[i].hostname ) == 0 ) &
+                     ( safe_strcmp ( tusername, strs[i].username ) == 0 ) &
+                     ( safe_strcmp ( tpassword, strs[i].password ) == 0 ) &
+                     ( safe_strcmp ( tpath, strs[i].path ) == 0 ) &
+                     ( tport == strs[i].port );
+        do_test_args(testresult,
+                     "gnc_uri_get_components",
+                     __FILE__, __LINE__,
+                     "\n  %s:\n"
+                     "    Expected: %s, %s, %s, %s, %s, %d\n"
+                     "    Got     : %s, %s, %s, %s, %s, %d\n",
+                     strs[i].uri, strs[i].protocol, strs[i].hostname,
+                     strs[i].username, strs[i].password, strs[i].path, strs[i].port,
+                     tprotocol, thostname, tusername, tpassword, tpath, tport);
+        g_free(tprotocol);
+        g_free(thostname);
+        g_free(tusername);
+        g_free(tpassword);
+        g_free(tpath);
+    }
+    print_test_results();
+    return get_rv();
+}


Property changes on: gnucash/trunk/src/core-utils/test/test-gnc-uri-utils.c
___________________________________________________________________
Added: svn:eol-style
   + native



More information about the gnucash-changes mailing list