;;; mumi -- Mediocre, uh, mail interface ;;; Copyright © 2020 Ricardo Wurmus ;;; ;;; This program is free software: you can redistribute it and/or ;;; modify it under the terms of the GNU Affero General Public License ;;; as published by the Free Software Foundation, either version 3 of ;;; the License, or (at your option) any later version. ;;; ;;; This program is distributed in the hope that it will be useful, ;;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ;;; Affero General Public License for more details. ;;; ;;; You should have received a copy of the GNU Affero General Public ;;; License along with this program. If not, see ;;; . (define-module (test-xapian) #:use-module (mumi xapian) #:use-module (srfi srfi-19) #:use-module (srfi srfi-64)) (define-syntax-rule (mock (module proc replacement) body ...) "Within BODY, replace the definition of PROC from MODULE with the definition given by REPLACEMENT." (let* ((m (resolve-module 'module)) (original (module-ref m 'proc))) (dynamic-wind (lambda () (module-set! m 'proc replacement)) (lambda () body ...) (lambda () (module-set! m 'proc original))))) (test-begin "xapian") (define (time->datestamp time) (date->string (time-utc->date time) "~Y~m~d")) (define sanitize (@@ (mumi xapian) sanitize-date-range)) (test-equal "sanitize-date-range: turns \"today\" into datestamp" (sanitize "date:today..today") (let ((today (time->datestamp (current-time)))) (format #f "date:~a..~a" today today))) (test-equal "sanitize-date-range: turns \"now\" into datestamp" (sanitize "date:today..now") (let ((today (time->datestamp (current-time)))) (format #f "date:~a..~a" today today))) (test-equal "sanitize-date-range: turns \"yesterday\" into datestamp" (sanitize "date:yesterday..today") (let* ((today (current-time)) (yesterday (subtract-duration today (make-time time-duration 0 (* 60 60 24))))) (format #f "date:~a..~a" (time->datestamp yesterday) (time->datestamp today)))) (test-equal "sanitize-date-range: pads short dates" (sanitize "date:20..19") "date:20000000..19000000") (test-equal "sanitize-date-range: turns 1m into datestamp one month ago" (sanitize "date:1m..now") (let* ((today (current-time)) (1m (subtract-duration today (make-time time-duration 0 (* 60 60 24 30))))) (format #f "date:~a..~a" (time->datestamp 1m) (time->datestamp today)))) (define tokenize (@@ (mumi xapian) tokenize)) (test-equal "tokenize: keeps phrases intact 1" (tokenize "subject:\"hello world\" how are you") '("subject:\"hello world\"" "how" "are" "you")) (test-equal "tokenize: keeps phrases intact 2" (tokenize "subject:\"hello world\" how \"are\" you") '("subject:\"hello world\"" "how" "\"are\"" "you")) (test-end "xapian")