[runtime] Move eglib into mono/eglib so it becomes a convenience library similar...
[mono.git] / mono / eglib / test / module.c
diff --git a/mono/eglib/test/module.c b/mono/eglib/test/module.c
new file mode 100644 (file)
index 0000000..a283637
--- /dev/null
@@ -0,0 +1,64 @@
+#include <config.h>
+#include <glib.h>
+#include <gmodule.h>
+#include <string.h>
+#include <stdio.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include "test.h"
+
+#if defined (G_OS_WIN32)
+#define EXTERNAL_SYMBOL "GetProcAddress"
+#else
+#define EXTERNAL_SYMBOL "system"
+#endif
+
+void G_MODULE_EXPORT
+dummy_test_export ()
+{
+}
+
+/* test for g_module_open (NULL, ...) */
+RESULT
+test_module_symbol_null ()
+{
+       gpointer proc = GINT_TO_POINTER (42);
+
+       GModule *m = g_module_open (NULL, G_MODULE_BIND_LAZY);
+
+       if (m == NULL)
+               return FAILED ("bind to main module failed. #0");
+
+       if (g_module_symbol (m, "__unlikely_\nexistent__", &proc))
+               return FAILED ("non-existent symbol lookup failed. #1");
+
+       if (proc)
+               return FAILED ("non-existent symbol lookup failed. #2");
+
+       if (!g_module_symbol (m, EXTERNAL_SYMBOL, &proc))
+               return FAILED ("external lookup failed. #3");
+
+       if (!proc)
+               return FAILED ("external lookup failed. #4");
+
+       if (!g_module_symbol (m, "dummy_test_export", &proc))
+               return FAILED ("in-proc lookup failed. #5");
+
+       if (!proc)
+               return FAILED ("in-proc lookup failed. #6");
+
+       if (!g_module_close (m))
+               return FAILED ("close failed. #7");
+
+       return OK;
+}
+
+static Test module_tests [] = {
+       {"g_module_symbol_null", test_module_symbol_null},
+       {NULL, NULL}
+};
+
+DEFINE_TEST_GROUP_INIT(module_tests_init, module_tests)
+
+