source: project/release/4/uri-match/tests/run.scm @ 16093

Last change on this file since 16093 was 16093, checked in by Moritz Heidkamp, 10 years ago

uri-match now returns thunks which return the body of the matched route instead of strings

File size: 1.8 KB
Line 
1(load-relative "../uri-match.scm")
2
3(import uri-match)
4(use test srfi-1 data-structures)
5
6(test-group "routes creation"
7  (let ([routes (make-routes '((get "foo")
8                               ("/foo"
9                                (get "bar")
10                                (post "posted")
11                                ("/bar" (get "nested")))
12                               (post "ha!")))])
13
14    (test-assert (lset= '(get post) (map car routes)))
15
16    (test-group "expansion"
17
18      (test-assert (lset= '("/" "/foo" "/foo/bar")
19                          (map car (alist-ref 'get routes))))
20
21      (test-assert (lset= '("/" "/foo")
22                          (map car (alist-ref 'post routes)))))))
23
24
25(test-group "basic matching"
26
27  (test-assert (equal? "this is the body"
28                       ((uri-match 'get "/" (make-routes '((get "this is the body")))))))
29
30  (test-assert (not (uri-match 'get "/" (make-routes '((post "won't reach me"))))))
31
32  (test-group "with nesting"
33    (test-assert (equal? "foo" ((uri-match 'post "/foo/bar" (make-routes '(("/foo" ("/bar" (post "foo")))))))))
34
35    (test-group "with procedure body"
36      (test-assert (eq? 'something
37                        ((uri-match 'get "/me" (make-routes `(("/me" (get ,(lambda () 'something)))))))))
38
39      (test-assert (= 100 ((uri-match 'get "/numbers/100"
40                                      (make-routes `(("/numbers/(\\d+)" (get ,(lambda (n) (string->number n))))))))))))
41
42  (test-group "with capture groups"
43    (let ([routes (make-routes `(("/foo" ("/(\\d+)" ("/(\\d+)" (get ,string-append))))))])
44     
45      (test-assert (string= "105" ((uri-match 'get "/foo/10/5" routes))))
46      (test-assert (not (uri-match 'get "/foo/bar/10" routes))))))
47
48
49(test-group "matcher" 
50         
51  (let ([matcher (make-uri-matcher '((get "is") ("/this" (post "it") ("/or" (put "what?")))))])
52
53    (test-assert (equal? "is" ((matcher 'get "/"))))
54
55    (test-assert (equal? "it" ((matcher 'post "/this"))))
56
57    (test-assert (equal? "what?" ((matcher 'put "/this/or"))))))
Note: See TracBrowser for help on using the repository browser.