1 USING: http.server http.server.dispatchers http.server.responses
2 tools.test kernel namespaces accessors io http math sequences
3 assocs arrays classes words urls ;
4 IN: http.server.dispatchers.tests
6 TUPLE: mock-responder path ;
8 C: <mock-responder> mock-responder
10 M: mock-responder call-responder*
13 [ ] "text/plain" <content> ;
15 : check-dispatch ( tag path -- ? )
16 V{ } clone responder-nesting set
19 main-responder get call-responder
24 "foo" <mock-responder> "foo" add-responder
25 "bar" <mock-responder> "bar" add-responder
27 "123" <mock-responder> "123" add-responder
28 "default" <mock-responder> >>default
33 { "foo" } main-responder get find-responder path>> nip
37 { "bar" } main-responder get find-responder path>> nip
40 [ t ] [ "foo" "foo" check-dispatch ] unit-test
41 [ f ] [ "foo" "bar" check-dispatch ] unit-test
42 [ t ] [ "bar" "bar" check-dispatch ] unit-test
43 [ t ] [ "default" "baz/xxx" check-dispatch ] unit-test
44 [ t ] [ "default" "baz/xxx//" check-dispatch ] unit-test
45 [ t ] [ "default" "/baz/xxx//" check-dispatch ] unit-test
46 [ t ] [ "123" "baz/123" check-dispatch ] unit-test
47 [ t ] [ "123" "baz///123" check-dispatch ] unit-test
53 "default" <mock-responder> >>default
56 [ "/default" ] [ "/default" main-responder get find-responder drop ] unit-test
59 ! Make sure path for default responder isn't chopped
60 TUPLE: path-check-responder ;
62 C: <path-check-responder> path-check-responder
64 M: path-check-responder call-responder*
66 >array "text/plain" <content> ;
69 V{ } clone responder-nesting set
74 <path-check-responder> >>default
80 ! Test that "" dispatcher works with default>>
83 "" <mock-responder> "" add-responder
84 "bar" <mock-responder> "bar" add-responder
85 "baz" <mock-responder> >>default
88 [ t ] [ "" "" check-dispatch ] unit-test
89 [ f ] [ "" "quux" check-dispatch ] unit-test
90 [ t ] [ "baz" "quux" check-dispatch ] unit-test
91 [ f ] [ "foo" "bar" check-dispatch ] unit-test
92 [ t ] [ "bar" "bar" check-dispatch ] unit-test
93 [ t ] [ "baz" "xxx" check-dispatch ] unit-test