1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
(in-package #:metabang-bind-test)
#+(or)
(run-tests :suite 'test-regex)
(deftestsuite test-regex (metabang-bind-test)
()
(:equality-test #'equalp))
(addtest (test-regex)
simple-bind
(ensure-same
(bind (((:re "(\\w+)\\s+(\\w+)\\s+(\\d{1,2})\\.(\\d{1,2})\\.(\\d{4})"
fname lname date month year) "Frank Zappa 21.12.1940"))
(list fname lname date month year))
(list "Frank" "Zappa" "21" "12" "1940")))
(addtest (test-regex)
nils-are-ignored-1
(ensure-same
(bind (((:re "(\\w+)\\s+(\\w+)\\s+(\\d{1,2})\\.(\\d{1,2})\\.(\\d{4})"
fname lname nil month year) "Frank Zappa 21.12.1940"))
(list fname lname month year))
(list "Frank" "Zappa" "12" "1940")))
(addtest (test-regex)
nils-are-ignored-2
(ensure-same
(bind (((:re "(\\w+)\\s+(\\w+)\\s+(\\d{1,2})\\.(\\d{1,2})\\.(\\d{4})"
nil lname nil month year) "Frank Zappa 21.12.1940"))
(list lname month year))
(list "Zappa" "12" "1940")))
#+(or)
(addtest (test-regex)
nils-are-ignored-1
(let ((result
(lambda ()
(bind (((:re "(\\w+)\\s+(\\w+)\\s+(\\d{1,2})\\.(\\d{1,2})\\.(\\d{4})"
fname lname nil month year) "Frank Zappa 21.12.1940"))
(list lname month year)))))
(ensure-same (funcall result)
(list "Zappa" "12" "1940"))
(ensure-warning
(compile
nil
(lambda ()
(bind (((:re "(\\w+)\\s+(\\w+)\\s+(\\d{1,2})\\.(\\d{1,2})\\.(\\d{4})"
fname lname nil month year) "Frank Zappa 21.12.1940"))
(list lname month year)))))))
(addtest (test-regex)
executes-when-no-bindings
(ensure-same
(bind (((:re "(a|b)+" first) "cccc"))
(list "still seen" first))
(list "still seen" nil)))
#+(or)
(addtest (test-regex)
you-can-use-doit
(ensure-same
(bind (((:re "(\\w+)\\s+(\\w+)\\s+(\\d{1,2})\\.(\\d{1,2})\\.(\\d{4})"
fname lname nil month year)
"Frank Zappa 21.12.1940"))
(flet ((doit (&rest vars)
(reverse vars)))
(doit fname lname month year)))
(reverse (list "Frank" "Zappa" "12" "1940"))))
#+(or)
(defun xxx ()
(let ((result
'(lambda ()
(bind (((:re "(\\w+)\\s+(\\w+)\\s+(\\d{1,2})\\.(\\d{1,2})\\.(\\d{4})"
nil lname nil month year) "Frank Zappa 21.12.1940"))
(list lname month year)))))
(compile nil result)))
|