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
23 "foo" <mock-responder> "foo" add-responder
24 "bar" <mock-responder> "bar" add-responder
26 "123" <mock-responder> "123" add-responder
27 "default" <mock-responder> >>default
32 { "foo" } main-responder get find-responder path>> nip
36 { "bar" } main-responder get find-responder path>> nip
39 [ t ] [ "foo" "foo" check-dispatch ] unit-test
40 [ f ] [ "foo" "bar" check-dispatch ] unit-test
41 [ t ] [ "bar" "bar" check-dispatch ] unit-test
42 [ t ] [ "default" "baz/xxx" check-dispatch ] unit-test
43 [ t ] [ "default" "baz/xxx//" check-dispatch ] unit-test
44 [ t ] [ "default" "/baz/xxx//" check-dispatch ] unit-test
45 [ t ] [ "123" "baz/123" check-dispatch ] unit-test
46 [ t ] [ "123" "baz///123" check-dispatch ] unit-test
51 "default" <mock-responder> >>default
54 [ "/default" ] [ "/default" main-responder get find-responder drop ] unit-test
57 ! Make sure path for default responder isn't chopped
58 TUPLE: path-check-responder ;
60 C: <path-check-responder> path-check-responder
62 M: path-check-responder call-responder*
64 >array "text/plain" <content> ;
67 V{ } clone responder-nesting set
72 <path-check-responder> >>default
78 ! Test that "" dispatcher works with default>>
81 "" <mock-responder> "" add-responder
82 "bar" <mock-responder> "bar" add-responder
83 "baz" <mock-responder> >>default
86 [ t ] [ "" "" check-dispatch ] unit-test
87 [ f ] [ "" "quux" check-dispatch ] unit-test
88 [ t ] [ "baz" "quux" check-dispatch ] unit-test
89 [ f ] [ "foo" "bar" check-dispatch ] unit-test
90 [ t ] [ "bar" "bar" check-dispatch ] unit-test
91 [ t ] [ "baz" "xxx" check-dispatch ] unit-test