;; Test case for globs2 format of the Shared MIME-Info Database ;; ;; Copyright (C) 2014 Mike Gerwitz ;; ;; This file is part of guile-mime. ;; ;; guile-mime is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published ;; 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 General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;; ;; TODO: We should provide stronger assurances, as this does not ;; prevent a bogus implementation. (define-module (test mime xdg globs2) #:use-module (srfi srfi-64) #:use-module (ice-9 match) #:use-module (mime xdg globs2)) (define-syntax-rule (%make-test-match pattern test-expr) (match test-expr (pattern #t) (_ #f))) (define-syntax test-match (syntax-rules () ((test-match test-name pattern test-expr) (test-eq test-name #t (%make-test-match pattern test-expr))) ((test-match pattern test-expr) (test-eq #t (%make-test-match pattern test-expr))))) (test-group "(mime xdg globs2)" (test-group "parse-mime-glob2" (test-match "comment yields empty record of class 'comment" ($ 'comment #f #f #f #f) (parse-mime-glob2 "#comment line")) (test-group "__NOGLOBS__ yields" (let* ((type "foo/noglobs") (r (parse-mime-glob2 (string-append "10:" type ":__NOGLOBS__:cs" )))) (test-assert " record" (mime-glob2? r)) (test-eq "class of 'deleteall" (mime-glob2-class r) 'deleteall) (test-assert "the given type" (string=? type (mime-glob2-type r))) (test-equal "weight of zero" (mime-glob2-weight r) 0) (test-eq "no pattern" #f (mime-glob2-pattern r)) (test-eq "no flags" #f (mime-glob2-flag r))) ;; tests both with and without flags (for-each (lambda (xs) (let ((group-desc (car xs)) (flag (cdr xs))) (test-group group-desc ;; flags will be tested below (let* ((type "foo/flags") (weight 15) (pattern "*.foo") (r (parse-mime-glob2 (string-append (number->string weight) ":" type ":" pattern flag)))) (test-assert " record" (mime-glob2? r)) (test-eq "class of 'pattern" (mime-glob2-class r) 'pattern) (test-assert "the given type" (string=? type (mime-glob2-type r))) (test-equal "the given weight" weight (mime-glob2-weight r)) (test-assert "the given pattern" (string=? pattern (mime-glob2-pattern r))))))) '(("pattern with flag yields" . ":foo") ("pattern without flag yields" . ""))) (test-group "flag" (test-eq "yields #f when unknown" #f (mime-glob2-flag (parse-mime-glob2 "0:foo:*:unknown"))) (test-eq "yields 'case-fold when `cs'" 'case-fold (mime-glob2-flag (parse-mime-glob2 "0:foo:*:cs")))))))