Fix test-userdata-dir on Mac.

This commit is contained in:
John Ralls 2017-09-16 14:50:27 -07:00
parent 42aa734475
commit 9dc8e6f40a
5 changed files with 61 additions and 14 deletions

View File

@ -402,6 +402,7 @@ update to latest darwin])
if test "x$_gtk_mac" = xyes; then
GTK_MAC_LIBS="${GTK_MAC_LIBS} -lobjc -framework Cocoa"
GTK_MAC_CFLAGS="${GTK_MAC_CFLAGS} -xobjective-c"
GTK_MAC_CXXFLAGS="${GTK_MAC_CFLAGS} -xobjective-c++"
if test "`echo ${GCC_VERSION} | cut -d. -f1`" -eq 4; then
if test "`echo ${GCC_VERSION} | cut -d. -f2`" -ge 8; then
# This is gcc >= 4.8.x
@ -412,6 +413,7 @@ update to latest darwin])
AC_MSG_RESULT(${_gtk_mac})
AC_SUBST(GTK_MAC_LIBS)
AC_SUBST(GTK_MAC_CFLAGS)
AC_SUBST(GTK_MAC_CXXFLAGS)
else
AC_MSG_RESULT(no)
fi

View File

@ -57,11 +57,13 @@ endif
AM_CPPFLAGS = \
${GUILE_CFLAGS} \
${GLIB_CFLAGS} \
${GTK_MAC_CFLAGS} \
-I${top_builddir}/common \
-I${top_srcdir}/common \
$(BOOST_CPPFLAGS)
AM_CFLAGS = ${GTK_MAC_CFLAGS}
AM_CXXFLAGS = ${GTK_MAC_CXXFLAGS}
gncscmmoddir = ${GNC_SCM_INSTALL_DIR}/gnucash
gncscmmod_DATA = core-utils.scm

View File

@ -5,8 +5,12 @@ SET(CORE_UTILS_TEST_INCLUDE_DIRS
${CMAKE_SOURCE_DIR}/libgnucash/core-utils
${CMAKE_SOURCE_DIR}/common/test-core
${GLIB2_INCLUDE_DIRS}
${GTK_MAC_INCLUDE_DIRS}
)
SET(CORE_UTILS_TEST_LIBS gnc-core-utils test-core)
IF (MAC_INTEGRATION)
LIST(APPEND CORE_UTILS_TEST_LIBS ${OSX_EXTRA_LIBRARIES})
ENDIF()
MACRO(ADD_CORE_UTILS_TEST _TARGET _SOURCE_FILES)
GNC_ADD_TEST(${_TARGET} "${_SOURCE_FILES}" CORE_UTILS_TEST_INCLUDE_DIRS CORE_UTILS_TEST_LIBS)
@ -15,7 +19,13 @@ ENDMACRO()
ADD_CORE_UTILS_TEST(test-gnc-glib-utils test-gnc-glib-utils.c)
ADD_CORE_UTILS_TEST(test-resolve-file-path test-resolve-file-path.c)
ADD_CORE_UTILS_TEST(test-userdata-dir test-userdata-dir.c)
ADD_CORE_UTILS_TEST(test-userdata-dir-invalid-home test-userdata-dir-invalid-home.c)
IF (NOT MAC_INTEGRATION AND NOT WIN32)
ADD_CORE_UTILS_TEST(test-userdata-dir-invalid-home test-userdata-dir-invalid-home.c)
ENDIF()
IF (MAC_INTEGRATION)
TARGET_COMPILE_OPTIONS(test-userdata-dir PRIVATE ${OSX_EXTRA_COMPILE_FLAGS})
TARGET_COMPILE_DEFINITIONS(test-userdata-dir PRIVATE ${GTK_MAC_CFLAGS_OTHER})
ENDIF(MAC_INTEGRATION)
SET_DIST_LIST(test_core_utils_DIST CMakeLists.txt Makefile.am test-gnc-glib-utils.c
test-resolve-file-path.c test-userdata-dir.c test-userdata-dir-invalid-home.c)

View File

@ -11,12 +11,14 @@ AM_CPPFLAGS = \
-I${top_srcdir}/libgnucash/engine \
${GUILE_CFLAGS} \
${GLIB_CFLAGS} \
${GTK_MAC_CFLAGS} \
$(BOOST_CPPFLAGS)
LDADD = \
../libgnc-core-utils.la \
${top_builddir}/common/test-core/libtest-core.la \
${GLIB_LIBS} \
${GTK_MAC_LIBS} \
${BOOST_LDFLAGS}
# these tests are ordered kind more or less in the order
@ -26,8 +28,13 @@ LDADD = \
TESTS = \
test-gnc-glib-utils \
test-resolve-file-path \
test-userdata-dir \
test-userdata-dir-invalid-home
test-userdata-dir
if !PLATFORM_OSX_QUARTZ
if !PLATFORM_WIN32
TESTS += test-userdata-dir-invalid-home
endif
endif
GNC_TEST_DEPS = \
--library-dir ${top_builddir}/libgnucash/core-utils

View File

@ -28,6 +28,9 @@
#include <glib.h>
#include "test-stuff.h"
#include "gnc-filepath-utils.h"
#ifdef MAC_INTEGRATION
#include <Foundation/Foundation.h>
#endif
struct usr_confpath_strings_struct
{
@ -55,13 +58,32 @@ usr_confpath_strings strs2[] =
{ 0, NULL, NULL },
};
static char*
test_get_userdatadir ()
{
#ifdef MAC_INTEGRATION
char *retval = NULL;
NSFileManager*fm = [NSFileManager defaultManager];
NSArray* appSupportDir = [fm URLsForDirectory:NSApplicationSupportDirectory
inDomains:NSUserDomainMask];
if ([appSupportDir count] > 0)
{
NSURL* dirUrl = [appSupportDir objectAtIndex:0];
NSString* dirPath = [dirUrl path];
retval = g_strdup([dirPath UTF8String]);
}
return retval;
#else
return g_strdup(g_get_user_data_dir());
#endif
}
int
main(int argc, char **argv)
{
int i;
char *home_dir = NULL;
const char *userdata_dir = NULL;
const char *tmp_dir = g_get_tmp_dir();
char *userdata_dir = NULL;
char *gnc_data_home_dir = NULL;
if (argc > 1)
@ -70,11 +92,14 @@ main(int argc, char **argv)
* used to pass invalid home directories manually. The
* test error messages should then show the system's temporary
* directory to be used instead */
home_dir = argv[1];
home_dir = g_strdup(argv[1]);
else
/* Set up a fake home directory to play with */
#ifdef MAC_INTEGRATION
home_dir = test_get_userdatadir();
#else
home_dir = g_dir_make_tmp("gnucashXXXXXX", NULL);
#endif
/* Run usr conf dir tests with a valid and writable homedir */
g_setenv("HOME", home_dir, TRUE);
@ -86,25 +111,25 @@ main(int argc, char **argv)
if (strs2[i].func_num == 0)
{
wantout = g_build_filename(tmp_dir, PACKAGE_NAME, "foo",
wantout = g_build_filename(home_dir, PACKAGE_NAME, "foo",
(gchar *)NULL);
daout = gnc_build_userdata_path("foo");
}
else if (strs2[i].func_num == 1)
{
wantout = g_build_filename(tmp_dir, PACKAGE_NAME, strs2[i].output, "foo",
wantout = g_build_filename(home_dir, PACKAGE_NAME, strs2[i].output, "foo",
(gchar *)NULL);
daout = gnc_build_book_path("foo");
}
else if (strs2[i].func_num == 2)
{
wantout = g_build_filename(tmp_dir, PACKAGE_NAME, strs2[i].output, "foo",
wantout = g_build_filename(home_dir, PACKAGE_NAME, strs2[i].output, "foo",
(gchar *)NULL);
daout = gnc_build_translog_path("foo");
}
else // if (strs2[i].prefix_home == 3)
{
wantout = g_build_filename(tmp_dir, PACKAGE_NAME, strs2[i].output, "foo",
wantout = g_build_filename(home_dir, PACKAGE_NAME, strs2[i].output, "foo",
(gchar *)NULL);
daout = gnc_build_data_path("foo");
}
@ -116,10 +141,10 @@ main(int argc, char **argv)
g_free(wantout);
g_free(daout);
}
g_free(home_dir);
/* Second run, after properly having called gnc_filepath_init */
gnc_filepath_init(TRUE);
userdata_dir = g_get_user_data_dir();
userdata_dir = test_get_userdatadir();
for (i = 0; strs2[i].funcname != NULL; i++)
{
char *daout;
@ -157,6 +182,7 @@ main(int argc, char **argv)
g_free(wantout);
g_free(daout);
}
g_free(userdata_dir);
/* Third run, after setting GNC_DATA_HOME gnc_filepath_init */
gnc_data_home_dir = g_build_filename(home_dir, "Test", NULL);