Convert shell-executed scheme tests to run directly from Guile.

I.e., remove the shell invocation and with it the need to set the shebang.

Surprisingly this required some build-system modifications particularly
for cmake in order to correctly set the environment.
This commit is contained in:
John Ralls
2017-10-31 16:33:08 -07:00
parent f412795ef2
commit 6c01e54042
46 changed files with 313 additions and 281 deletions

View File

@@ -54,7 +54,7 @@ SET(GUILE_DEPENDS gnc-module)
GNC_ADD_SCHEME_TARGETS(scm-gnc-module
"${gnc_module_SCHEME}"
${GUILE_OUTPUT_DIR}
${GUILE_OUTPUT_DIR}
"${GUILE_DEPENDS}"
FALSE
)

View File

@@ -34,16 +34,6 @@ ENDFUNCTION()
GNC_ADD_TEST_WITH_GUILE(test-load-c test-load-c.c GNC_MODULE_TEST_INCLUDE_DIRS GNC_MODULE_TEST_LIBS "GNC_MODULE_PATH=${CMAKE_BINARY_DIR}/lib/gnucash/test")
RUN_TEST_WITH_GUILE(test-load-scm ${CMAKE_CURRENT_SOURCE_DIR}/test-load-scm.in)
RUN_TEST_WITH_GUILE(test-load-deps ${CMAKE_CURRENT_SOURCE_DIR}/test-load-deps.in)
RUN_TEST_WITH_GUILE(test-scm-init ${CMAKE_CURRENT_SOURCE_DIR}/test-scm-init.in)
RUN_TEST_WITH_GUILE(test-scm-multi ${CMAKE_CURRENT_SOURCE_DIR}/test-scm-multi.in)
RUN_TEST_WITH_GUILE(test-scm-dynload ${CMAKE_CURRENT_SOURCE_DIR}/test-scm-dynload.in)
GNC_ADD_TEST_WITH_GUILE(test-modsysver test-modsysver.c
GNC_MODULE_TEST_INCLUDE_DIRS GNC_MODULE_TEST_LIBS
)
@@ -64,31 +54,36 @@ GNC_ADD_TEST(test-dynload test-dynload.c
LIBDIR=${_LIBDIR}
)
SET(GUILE ${GUILE_EXECUTABLE})
CONFIGURE_FILE(test-gwrapped-c.in test-gwrapped-c @ONLY)
CONFIGURE_FILE(test-scm-module.in test-scm-module @ONLY)
CONFIGURE_FILE(test-load-deps.in test-load-deps @ONLY)
CONFIGURE_FILE(test-load-scm.in test-load-scm @ONLY)
CONFIGURE_FILE(test-scm-dynload.in test-scm-dynload @ONLY)
CONFIGURE_FILE(test-scm-init.in test-scm-init @ONLY)
CONFIGURE_FILE(test-scm-multi.in test-scm-multi @ONLY)
FUNCTION(RUN_GUILE_SHELL_TEST _TARGET _SOURCE_FILE)
GET_GUILE_ENV()
SET(CMAKE_COMMAND_TMP "")
IF (${CMAKE_VERSION} VERSION_GREATER 3.1)
SET(CMAKE_COMMAND_TMP ${CMAKE_COMMAND} -E env "${GUILE_ENV};GNC_MODULE_PATH=${CMAKE_BINARY_DIR}/lib/gnucash/test")
ENDIF()
ADD_TEST(NAME ${_TARGET}
COMMAND ${CMAKE_COMMAND_TMP}
${SHELL} ${_SOURCE_FILE}
SET(test_gnc_module_SCHEME
test-gnc-module-scm-init.scm
test-gnc-module-load-scm.scm
test-gnc-module-swigged-c.scm
test-gnc-module-load-deps.scm
test-gnc-module-scm-dynload.scm
test-gnc-module-scm-module.scm
test-gnc-module-scm-multi.scm
)
SET_TESTS_PROPERTIES(${_TARGET} PROPERTIES ENVIRONMENT "${GUILE_ENV};GNC_MODULE_PATH=${CMAKE_BINARY_DIR}/lib/gnucash/test")
ENDFUNCTION()
RUN_GUILE_SHELL_TEST(test-gwrapped-c ${CMAKE_CURRENT_BINARY_DIR}/test-gwrapped-c)
SET(GUILE_DEPENDS gnc-module scm-test-core scm-mod-foo scm-mod-baz)
RUN_GUILE_SHELL_TEST(test-scm-module ${CMAKE_CURRENT_BINARY_DIR}/test-scm-module)
GNC_ADD_SCHEME_TARGETS(test-gnc-modules-scm
"${test_gnc_module_SCHEME}"
"gnucash/gnc-modules/test"
"${GUILE_DEPENDS}"
TRUE
)
GNC_ADD_SCHEME_TESTS("${test_gnc_module_SCHEME}")
IF(NOT WIN32)
# This little dance is needed because gnc_module_init will assert if
# it finds libgncmod_futuremod.so outside of a test that expects it.
GET_GUILE_ENV()
SET(_GNC_MODULE_PATH "${CMAKE_BINARY_DIR}/lib:${CMAKE_BINARY_DIR}/lib/gnucash:${CMAKE_BINARY_DIR}/lib/gnucash/test")
FOREACH(test_file ${test_gnc_module_SCHEME})
GET_FILENAME_COMPONENT(basename ${test_file} NAME_WE)
SET_TESTS_PROPERTIES(${basename} PROPERTIES ENVIRONMENT "${GUILE_ENV};GNC_MODULE_PATH=${_GNC_MODULE_PATH}")
ENDFOREACH()
ENDIF()
SET(test_gnc_module_SOURCE_DIST
test-agedver.c
@@ -100,13 +95,7 @@ SET(test_gnc_module_SOURCE_DIST
SET(test_gnc_module_EXTRA_DIST
README
test-gwrapped-c.in
test-load-deps.in
test-load-scm.in
test-scm-dynload.in
test-scm-init.in
test-scm-module.in
test-scm-multi.in
${test_gnc_module_SCHEME}
)
SET_LOCAL_DIST(test_gnc_module_DIST_local CMakeLists.txt Makefile.am README ${test_gnc_module_SOURCE_DIST} ${test_gnc_module_EXTRA_DIST})

View File

@@ -14,17 +14,22 @@ AM_CPPFLAGS = \
TESTS = \
test-load-c \
test-load-scm \
test-gwrapped-c \
test-scm-module \
test-scm-multi \
test-load-deps \
test-modsysver \
test-incompatdep \
test-agedver \
test-dynload \
test-scm-dynload \
test-scm-init
${SCM_TESTS}
SCM_TESTS = \
test-gnc-module-load-scm \
test-gnc-module-swigged-c \
test-gnc-module-scm-module \
test-gnc-module-scm-multi \
test-gnc-module-load-deps \
test-gnc-module-scm-dynload \
test-gnc-module-scm-init
SCM_TEST_SRCS = $(SCM_TESTS:%=%.scm)
GNC_TEST_DEPS = \
--gnc-module-dir ${top_builddir}/libgnucash/gnc-module \
@@ -58,14 +63,14 @@ check_PROGRAMS = \
test_dynload_LDFLAGS = ${GUILE_LIBS}
$(SCM_TESTS): %: $(srcdir)/%.scm Makefile
echo 'export GNC_BUILDDIR="${abs_top_builddir}";' > $@
echo 'export GNC_UNINSTALLED=yes;' >> $@
echo '${GUILE} --debug -l $(srcdir)/$*.scm -c "(exit (run-test))"' >> $@
chmod a+x $@
EXTRA_DIST = \
test-gwrapped-c \
test-load-deps \
test-load-scm \
test-scm-dynload \
test-scm-init \
test-scm-module \
test-scm-multi \
${SCM_TEST_SRCS} \
CMakeLists.txt
foo:

View File

@@ -27,6 +27,13 @@ TARGET_INCLUDE_DIRECTORIES(gncmodbaz PRIVATE
${GUILE_INCLUDE_DIRS}
)
GNC_ADD_SCHEME_TARGETS(scm-mod-baz
gnucash/baz.scm
"gnucash"
gncmodbaz
TRUE
)
SET_TARGET_PROPERTIES(baz gncmodbaz PROPERTIES
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib/gnucash/test
ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib/gnucash/test

View File

@@ -21,6 +21,13 @@ TARGET_INCLUDE_DIRECTORIES(gncmodfoo PRIVATE
${GUILE_INCLUDE_DIRS}
)
GNC_ADD_SCHEME_TARGETS(scm-mod-foo
gnucash/foo.scm
"gnucash"
gncmodfoo
TRUE
)
SET_TARGET_PROPERTIES(foo gncmodfoo PROPERTIES
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib/gnucash/test
ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib/gnucash/test

View File

@@ -1,8 +1,3 @@
#! @SHELL@
exec ${GUILE} -s $0 "$@"
!#
;; test-load-deps.scm : load gnc-mod-baz, which depends on gnc-mod-foo
(use-modules (gnucash unittest-support))
(define log-domain "gnc.module")
(define check (new-TestErrorStruct))
@@ -25,7 +20,3 @@ exec ${GUILE} -s $0 "$@"
(g-log-remove-handler log-domain handler)
(exit 0)
;; Local Variables:
;; mode: scheme
;; End:

View File

@@ -1,7 +1,3 @@
#! @SHELL@
exec ${GUILE} -s $0 "$@"
!#
(use-modules (gnucash unittest-support))
(define log-domain "gnc.module")
(define check (new-TestErrorStruct))
@@ -15,6 +11,4 @@ exec ${GUILE} -s $0 "$@"
(gnc:module-system-init)
(gnc:module-load "gnucash/foo" 0)
(g-log-remove-handler log-domain handler)
;; Local Variables:
;; mode: scheme
;; End:
(exit 0)

View File

@@ -0,0 +1,5 @@
(if (or (string=? (version) "1.3")
(string=? (version) "1.3.4"))
(dynamic-link "libgnc-module.so")
(dynamic-link "libgnc-module"))
(exit 0)

View File

@@ -1,8 +1,3 @@
#! @SHELL@
echo " test-scm-init: testing Scheme-only module system init. ";
exec ${GUILE} -s $0 "$@"
!#
(use-modules (gnucash unittest-support))
(define log-domain "gnc.module")
(define check (new-TestErrorStruct))
@@ -17,7 +12,4 @@ exec ${GUILE} -s $0 "$@"
(gnc:module-system-init)
(g-log-remove-handler log-domain handler)
;; LocalVariables:
;; mode: scheme
;; End:
(exit 0)

View File

@@ -0,0 +1,14 @@
(use-modules (gnucash unittest-support))
(define log-domain "gnc.module")
(define check (new-TestErrorStruct))
(define log-level (G-LOG-LEVEL-WARNING))
(define msg "Module '../../../libgnucash/gnc-module/test/misc-mods/.libs/libgncmod_futuremodsys.so' requires newer module system\n")
(TestErrorStruct-log-domain-set check log-domain)
(TestErrorStruct-log-level-set check log-level)
(TestErrorStruct-msg-set check msg)
(define handler (test-set-checked-handler log-domain log-level check))
(use-modules (gnucash gnc-module))
(gnc:module-system-init)
(if (not (gnc:module-load "gnucash/foo" 0)) (exit -1))
(exit (foo:scheme-hello))
(g-log-remove-handler log-domain handler)

View File

@@ -1,6 +1,3 @@
#! @SHELL@
exec ${GUILE} -s $0 "$@"
!#
(use-modules (gnucash unittest-support))
(define log-domain "gnc.module")
(define check (new-TestErrorStruct))
@@ -12,7 +9,7 @@ exec ${GUILE} -s $0 "$@"
(define handler (test-set-checked-handler log-domain log-level check))
(use-modules (gnucash gnc-module))
(gnc:module-system-init)
(gnc:module-system-init)
(gnc:module-load "gnucash/foo" 0)
(foo-hello)
(foo:scheme-hello)
@@ -23,7 +20,4 @@ exec ${GUILE} -s $0 "$@"
(bar:scheme-hello)
(g-log-remove-handler log-domain handler)
;; Local Variables:
;; mode: scheme
;; End:
(exit 0)

View File

@@ -0,0 +1,14 @@
(use-modules (gnucash unittest-support))
(define log-domain "gnc.module")
(define check (new-TestErrorStruct))
(define log-level (G-LOG-LEVEL-WARNING))
(define msg "Module '../../../libgnucash/gnc-module/test/misc-mods/.libs/libgncmod_futuremodsys.so' requires newer module system\n")
(TestErrorStruct-log-domain-set check log-domain)
(TestErrorStruct-log-level-set check log-level)
(TestErrorStruct-msg-set check msg)
(define handler (test-set-checked-handler log-domain log-level check))
(use-modules (gnucash gnc-module))
(gnc:module-system-init)
(gnc:module-load "gnucash/foo" 0)
(exit (eq? 10 (foo-hello)))
(g-log-remove-handler log-domain handler)

View File

@@ -1,15 +0,0 @@
#! @SHELL@
${GUILE} -c "(use-modules (gnucash unittest-support))
(define log-domain \"gnc.module\")
(define check (new-TestErrorStruct))
(define log-level (G-LOG-LEVEL-WARNING))
(define msg \"Module '../../../libgnucash/gnc-module/test/misc-mods/.libs/libgncmod_futuremodsys.so' requires newer module system\n\")
(TestErrorStruct-log-domain-set check log-domain)
(TestErrorStruct-log-level-set check log-level)
(TestErrorStruct-msg-set check msg)
(define handler (test-set-checked-handler log-domain log-level check))
(use-modules (gnucash gnc-module))
(gnc:module-system-init)
(gnc:module-load \"gnucash/foo\" 0)
(exit (eq? 10 (foo-hello)))
(g-log-remove-handler log-domain handler)"

View File

@@ -1,15 +0,0 @@
#! @SHELL@
echo " test-scm-dynload: testing dynamic-link of libgnc-module from Scheme.";
exec ${GUILE} -s $0 "$@"
!#
(if (or (string=? (version) "1.3")
(string=? (version) "1.3.4"))
(dynamic-link "libgnc-module.so")
(dynamic-link "libgnc-module"))
;; LocalVariables:
;; mode: scheme
;; End:

View File

@@ -1,15 +0,0 @@
#! @SHELL@
${GUILE} -c "(use-modules (gnucash unittest-support))
(define log-domain \"gnc.module\")
(define check (new-TestErrorStruct))
(define log-level (G-LOG-LEVEL-WARNING))
(define msg \"Module '../../../libgnucash/gnc-module/test/misc-mods/.libs/libgncmod_futuremodsys.so' requires newer module system\n\")
(TestErrorStruct-log-domain-set check log-domain)
(TestErrorStruct-log-level-set check log-level)
(TestErrorStruct-msg-set check msg)
(define handler (test-set-checked-handler log-domain log-level check))
(use-modules (gnucash gnc-module))
(gnc:module-system-init)
(if (not (gnc:module-load \"gnucash/foo\" 0)) (exit -1))
(exit (foo:scheme-hello))
(g-log-remove-handler log-domain handler)"