From caeb2ab3c91eb7d88119381b93cada85b39cb4be Mon Sep 17 00:00:00 2001 From: "Dirk-Jan C. Binnema" Date: Wed, 11 Jun 2025 19:50:38 +0300 Subject: [PATCH] scm: add some unit-tests Some basic unit tests. More will follow. --- scm/meson.build | 13 ++++++++ scm/mu-scm-test.scm | 76 +++++++++++++++++++++++++++++++++++++++++++++ scm/mu-scm.cc | 55 ++++++++++++++++++++++++++++++++ 3 files changed, 144 insertions(+) create mode 100644 scm/mu-scm-test.scm diff --git a/scm/meson.build b/scm/meson.build index 6681d5a7..a20785a8 100644 --- a/scm/meson.build +++ b/scm/meson.build @@ -56,3 +56,16 @@ if makeinfo.found() meson.add_install_script(install_info_script, infodir, 'mu-scm.info') endif endif + +if not get_option('tests').disabled() + + srcdir=meson.current_source_dir() + def_srcdir='-DMU_SCM_SRCDIR="' + srcdir + '"' + + test('test-scm', + executable('test-scm', + 'mu-scm.cc', + install: false, + dependencies: [mu_scm_dep], + cpp_args: [mu_scm_dir_arg, def_srcdir, '-DBUILD_TESTS'])) +endif diff --git a/scm/mu-scm-test.scm b/scm/mu-scm-test.scm new file mode 100644 index 00000000..d6c9325e --- /dev/null +++ b/scm/mu-scm-test.scm @@ -0,0 +1,76 @@ +;; unit tests + +(use-modules (mu) (srfi srfi-64)) + +(define (test-basic) + (test-begin "test-basic") + + (test-equal "mcount" 19 (mcount)) + (test-equal "cfind" 29 (length (cfind ""))) + (test-equal "mfind" 19 (length (mfind ""))) + + (test-end "test-basic")) + +(define (test-basic-mfind) + + (test-begin "test-basic-mfind") + + (let ((msg (car (mfind "")))) + ;; size + (test-equal 490 (size msg)) + ;; message-id + (test-equal "abcd$efgh@example.com" (message-id msg)) + ;; subject + (test-equal "Greetings from Lothlórien" (subject msg)) + ;; from + (test-equal 1 (length (from msg))) + (let ((sender (car (from msg)))) + (test-equal "Frodo Baggins" (assoc-ref sender 'name)) + (test-equal "frodo@example.com" (assoc-ref sender 'email))) + ;; to + (test-equal 1 (length (to msg))) + (let ((recip (car (to msg)))) + (test-equal "Bilbo Baggins" (assoc-ref recip 'name)) + (test-equal "bilbo@anotherexample.com" (assoc-ref recip 'email))) + + ;; no date + (test-assert (not (date msg))) + + ;; flags + (test-equal '(unread) (flags msg)) + (test-assert (unread? msg)) + (test-assert (not (seen? msg))) + (test-assert (not (new? msg)))) + + (test-end "test-basic-mfind")) + +(define (test-mfind) + (test-begin "test-mfind") + (let ((msg (car (mfind "" #:sort-field 'date #:reverse? #t)))) + + (test-equal "test with multi to and cc" (subject msg) ) + (test-equal "2016-05-15T16:57:25" (time-t->iso-date (date msg)))) + + (test-end "test-mfind")) + +(define (test-helpers) + (test-begin "test-helpers") + (test-equal 1750077792 (iso-date->time-t "2025-06-16T12:43:12")) + (test-equal 1750075200 (iso-date->time-t "2025-06-16T12")) + + (test-equal "2025-06-16T12:43:12" (time-t->iso-date 1750077792)) + (test-equal " " (time-t->iso-date #f)) + (test-end "test-helpers")) + +(define* (main _ #:rest args) + (let ((runner (test-runner-simple))) + (test-with-runner runner + (test-begin "mu-scm-tests") + + (test-basic) + (test-basic-mfind) + (test-mfind) + (test-helpers) + + (test-end "mu-scm-tests") + (exit (test-runner-fail-count runner))))) diff --git a/scm/mu-scm.cc b/scm/mu-scm.cc index 10526e3f..374716c2 100644 --- a/scm/mu-scm.cc +++ b/scm/mu-scm.cc @@ -158,3 +158,58 @@ Mu::Scm::run(const Mu::Scm::Config& conf) { return Ok(); } + + + + +#ifdef BUILD_TESTS + +/* + * Tests. + * + */ +#include +#include +#include "utils/mu-test-utils.hh" + + +static void +test_scm_script() +{ + TempDir tempdir{}; + const auto MuTestMaildir{ Mu::canonicalize_filename(MU_TESTMAILDIR, "/")}; + auto store{Store::make_new(tempdir.path(), MuTestMaildir)}; + assert_valid_result(store); + + { + const auto res = store->indexer().start({}, true/*block*/); + g_assert_true(res); + } + + Mu::Options opts{}; + opts.scm.script_path = join_paths(MU_SCM_SRCDIR, "mu-scm-test.scm"); + + Mu::Scm::Config scm_conf { + .store = *store, + .options = opts + }; + + { + const auto res = Mu::Scm::run(scm_conf); + assert_valid_result(res); + } +} + +int +main(int argc, char* argv[]) +{ + ::setenv("MU_SCM_DIR", MU_SCM_SRCDIR, 1); + + mu_test_init(&argc, &argv); + + g_test_add_func("/scm/script", test_scm_script); + + return g_test_run(); +} + +#endif /*BUILD_TESTS*/