2007-10-19 Nagappan A <anagappan@novell.com>
[mono.git] / eglib / test / path.c
index 2cde57bd2956b855fe7315365f0901651d371506..63714817b96b055c2fe2387510549a18537aa53f 100644 (file)
@@ -1,10 +1,20 @@
+#include <config.h>
 #include <glib.h>
 #include <string.h>
 #include <stdio.h>
+#ifdef HAVE_UNISTD_H
 #include <unistd.h>
+#endif
+#ifdef G_OS_UNIX
 #include <pthread.h>
+#endif
 #include "test.h"
 
+#ifdef G_OS_WIN32
+#include <direct.h>
+#define chdir _chdir
+#endif
+
 /* This test is just to be used with valgrind */
 RESULT
 test_buildpath ()
@@ -77,6 +87,11 @@ test_buildpath ()
        if (strcmp (s, "a/b/c/d") != 0)
                return FAILED ("13 Got wrong result, got: %s", s);
        g_free (s);
+
+       s = g_build_path ("/", "/a", "", "/c/", NULL);
+       if (strcmp (s, "/a/c/") != 0)
+               return FAILED ("14 Got wrong result, got: %s", s);
+       g_free (s);
        
        return OK;
 }
@@ -87,7 +102,11 @@ test_buildfname ()
        char *s;
        
        s = g_build_filename ("a", "b", "c", "d", NULL);
+#ifdef G_OS_WIN32
+       if (strcmp (s, "a\\b\\c\\d") != 0)
+#else
        if (strcmp (s, "a/b/c/d") != 0)
+#endif
                return FAILED ("1 Got wrong result, got: %s", s);
        g_free (s);
        
@@ -99,6 +118,26 @@ test_dirname ()
 {
        char *s;
 
+#ifdef G_OS_WIN32
+       s = g_path_get_dirname ("c:\\home\\miguel");
+       if (strcmp (s, "c:\\home") != 0)
+               return FAILED ("Expected c:\\home, got %s", s);
+       g_free (s);
+
+       s = g_path_get_dirname ("c:\\home\\dingus\\");
+       if (strcmp (s, "c:\\home\\dingus") != 0)
+               return FAILED ("Expected c:\\home\\dingus, got %s", s);
+       g_free (s);
+
+       s = g_path_get_dirname ("dir.c");
+       if (strcmp (s, ".") != 0)
+               return FAILED ("Expected `.', got %s", s);
+       g_free (s);
+
+       s = g_path_get_dirname ("c:\\index.html");
+       if (strcmp (s, "c:") != 0)
+               return FAILED ("Expected [c:], got [%s]", s);
+#else
        s = g_path_get_dirname ("/home/miguel");
        if (strcmp (s, "/home") != 0)
                return FAILED ("Expected /home, got %s", s);
@@ -108,7 +147,16 @@ test_dirname ()
        if (strcmp (s, "/home/dingus") != 0)
                return FAILED ("Expected /home/dingus, got %s", s);
        g_free (s);
-       
+
+       s = g_path_get_dirname ("dir.c");
+       if (strcmp (s, ".") != 0)
+               return FAILED ("Expected `.', got %s", s);
+       g_free (s);
+
+       s = g_path_get_dirname ("/index.html");
+       if (strcmp (s, "/") != 0)
+               return FAILED ("Expected [/], got [%s]", s);
+#endif 
        return OK;
 }
 
@@ -117,6 +165,22 @@ test_basename ()
 {
        char *s;
 
+#ifdef G_OS_WIN32
+       s = g_path_get_basename ("");
+       if (strcmp (s, ".") != 0)
+               return FAILED ("Expected `.', got %s", s);
+       g_free (s);
+
+       s = g_path_get_basename ("c:\\home\\dingus\\");
+       if (strcmp (s, "dingus") != 0)
+               return FAILED ("1 Expected dingus, got %s", s);
+       g_free (s);
+
+       s = g_path_get_basename ("c:\\home\\dingus");
+       if (strcmp (s, "dingus") != 0)
+               return FAILED ("2 Expected dingus, got %s", s);
+       g_free (s);
+#else
        s = g_path_get_basename ("");
        if (strcmp (s, ".") != 0)
                return FAILED ("Expected `.', got %s", s);
@@ -131,7 +195,7 @@ test_basename ()
        if (strcmp (s, "dingus") != 0)
                return FAILED ("2 Expected dingus, got %s", s);
        g_free (s);
-
+#endif
        return OK;
 }
 
@@ -139,11 +203,43 @@ gchar *
 test_ppath ()
 {
        char *s;
+#ifdef G_OS_WIN32
+       const gchar *searchfor = "explorer.exe";
+#else
+       const gchar *searchfor = "ls";
+#endif
+       s = g_find_program_in_path (searchfor);
+       if (s == NULL)
+               return FAILED ("No %s on this system?", searchfor);
+       g_free (s);
+       return OK;
+}
+
+gchar *
+test_ppath2 ()
+{
+       char *s;
+       const char *path = g_getenv ("PATH");
+#ifdef G_OS_WIN32
+       const gchar *searchfor = "test_eglib.exe";
+#else
+       const gchar *searchfor = "test-glib";
+#endif
        
+       g_setenv ("PATH", "", TRUE);
        s = g_find_program_in_path ("ls");
-       if (s == NULL)
-               return FAILED ("No shell on this system (This assumes Unix)?");
+       if (s != NULL) {
+               g_setenv ("PATH", path, TRUE);
+               return FAILED ("Found something interesting here: %s", s);
+       }
+       g_free (s);
+       s = g_find_program_in_path (searchfor);
+       if (s == NULL) {
+               g_setenv ("PATH", path, TRUE);
+               return FAILED ("It should find '%s' in the current directory.", searchfor);
+       }
        g_free (s);
+       g_setenv ("PATH", path, TRUE);
        return OK;
 }
 
@@ -151,31 +247,54 @@ gchar *
 test_cwd ()
 {
        char *dir = g_get_current_dir ();
+#ifdef G_OS_WIN32
+       const gchar *newdir = "C:\\Windows";
+#else
+       const gchar *newdir = "/bin";
+#endif
 
        if (dir == NULL)
                return FAILED ("No current directory?");
        g_free (dir);
        
-       if (chdir ("/bin") == -1)
-               return FAILED ("No /bin?");
+       if (chdir (newdir) == -1)
+               return FAILED ("No %s?", newdir);
        
        dir = g_get_current_dir ();
-       if (strcmp (dir, "/bin") != 0)
-               return "Did not go to /bin?";
+       if (strcmp (dir, newdir) != 0)
+               return FAILED("Did not go to %s?", newdir);
        g_free (dir);
        
        return OK;
 }
 
+gchar *
+test_misc ()
+{
+       const char *home = g_get_home_dir ();
+       const char *tmp = g_get_tmp_dir ();
+       
+       if (home == NULL)
+               return FAILED ("Where did my home go?");
+
+       if (tmp == NULL)
+               return FAILED ("Where did my /tmp go?");
+
+       return OK;
+}
+
 static Test path_tests [] = {
        {"g_buildpath", test_buildpath},
        {"g_build_filename", test_buildfname},
        {"g_path_get_dirname", test_dirname},
        {"g_path_get_basename", test_basename},
        {"g_find_program_in_path", test_ppath},
+       {"g_find_program_in_path2", test_ppath2},
        {"test_cwd", test_cwd },
+       {"test_misc", test_misc },
        {NULL, NULL}
 };
 
 DEFINE_TEST_GROUP_INIT(path_tests_init, path_tests)
 
+