factor/extra/http/server/server-tests.factor

140 lines
4.0 KiB
Factor
Raw Normal View History

2008-02-25 15:53:18 -05:00
USING: http.server tools.test kernel namespaces accessors
2008-04-25 04:23:47 -04:00
io http math sequences assocs arrays classes words ;
2008-03-01 17:00:45 -05:00
IN: http.server.tests
2007-09-20 18:09:08 -04:00
2008-04-25 04:23:47 -04:00
\ find-responder must-infer
2008-03-11 04:39:09 -04:00
[
<request>
"www.apple.com" >>host
"/xxx/bar" >>path
{ { "a" "b" } } >>query
request set
[ "http://www.apple.com:80/xxx/bar?a=b" ] [ f f derive-url ] unit-test
[ "http://www.apple.com:80/xxx/baz?a=b" ] [ "baz" f derive-url ] unit-test
[ "http://www.apple.com:80/xxx/baz?c=d" ] [ "baz" { { "c" "d" } } derive-url ] unit-test
[ "http://www.apple.com:80/xxx/bar?c=d" ] [ f { { "c" "d" } } derive-url ] unit-test
[ "http://www.apple.com:80/flip?a=b" ] [ "/flip" f derive-url ] unit-test
[ "http://www.apple.com:80/flip?c=d" ] [ "/flip" { { "c" "d" } } derive-url ] unit-test
[ "http://www.jedit.org" ] [ "http://www.jedit.org" f derive-url ] unit-test
[ "http://www.jedit.org?a=b" ] [ "http://www.jedit.org" { { "a" "b" } } derive-url ] unit-test
] with-scope
2008-02-29 01:57:38 -05:00
TUPLE: mock-responder path ;
2008-02-25 15:53:18 -05:00
2008-02-29 01:57:38 -05:00
C: <mock-responder> mock-responder
2008-02-25 15:53:18 -05:00
2008-02-29 01:57:38 -05:00
M: mock-responder call-responder
2008-03-11 04:39:09 -04:00
nip
2008-02-25 15:53:18 -05:00
path>> on
"text/plain" <content> ;
: check-dispatch ( tag path -- ? )
2008-04-25 04:23:47 -04:00
H{ } clone base-paths set
2008-02-25 15:53:18 -05:00
over off
2008-04-25 04:23:47 -04:00
split-path
2008-03-11 04:39:09 -04:00
main-responder get call-responder
2008-02-29 01:57:38 -05:00
write-response get ;
2008-02-25 15:53:18 -05:00
[
2008-02-29 01:57:38 -05:00
<dispatcher>
"foo" <mock-responder> "foo" add-responder
"bar" <mock-responder> "bar" add-responder
<dispatcher>
"123" <mock-responder> "123" add-responder
2008-02-25 15:53:18 -05:00
"default" <mock-responder> >>default
2008-02-29 01:57:38 -05:00
"baz" add-responder
2008-03-11 04:39:09 -04:00
main-responder set
2008-02-25 15:53:18 -05:00
2008-02-29 01:57:38 -05:00
[ "foo" ] [
2008-04-25 04:23:47 -04:00
{ "foo" } main-responder get find-responder path>> nip
2008-02-29 01:57:38 -05:00
] unit-test
[ "bar" ] [
2008-04-25 04:23:47 -04:00
{ "bar" } main-responder get find-responder path>> nip
2008-02-29 01:57:38 -05:00
] unit-test
2008-02-25 15:53:18 -05:00
[ t ] [ "foo" "foo" check-dispatch ] unit-test
[ f ] [ "foo" "bar" check-dispatch ] unit-test
[ t ] [ "bar" "bar" check-dispatch ] unit-test
[ t ] [ "default" "baz/xxx" check-dispatch ] unit-test
2008-02-29 01:57:38 -05:00
[ t ] [ "default" "baz/xxx//" check-dispatch ] unit-test
[ t ] [ "default" "/baz/xxx//" check-dispatch ] unit-test
2008-02-25 15:53:18 -05:00
[ t ] [ "123" "baz/123" check-dispatch ] unit-test
2008-02-29 01:57:38 -05:00
[ t ] [ "123" "baz///123" check-dispatch ] unit-test
2008-02-25 15:53:18 -05:00
] with-scope
2008-03-03 03:19:36 -05:00
[
<dispatcher>
"default" <mock-responder> >>default
2008-03-11 04:39:09 -04:00
main-responder set
2008-03-03 03:19:36 -05:00
2008-03-11 04:39:09 -04:00
[ "/default" ] [ "/default" main-responder get find-responder drop ] unit-test
2008-03-03 03:19:36 -05:00
] with-scope
2008-04-25 04:23:47 -04:00
! Make sure path for default responder isn't chopped
TUPLE: path-check-responder ;
C: <path-check-responder> path-check-responder
M: path-check-responder call-responder
drop
"text/plain" <content> swap >array >>body ;
[ { "c" } ] [
H{ } clone base-paths set
{ "b" "c" }
<dispatcher>
<dispatcher>
<path-check-responder> >>default
"b" add-responder
call-responder
body>>
] unit-test
! Test that "" dispatcher works with default>>
[ ] [
<dispatcher>
"" <mock-responder> "" add-responder
"bar" <mock-responder> "bar" add-responder
"baz" <mock-responder> >>default
main-responder set
[ t ] [ "" "" check-dispatch ] unit-test
[ f ] [ "" "quux" check-dispatch ] unit-test
[ t ] [ "baz" "quux" check-dispatch ] unit-test
[ f ] [ "foo" "bar" check-dispatch ] unit-test
[ t ] [ "bar" "bar" check-dispatch ] unit-test
[ t ] [ "baz" "xxx" check-dispatch ] unit-test
] unit-test
TUPLE: funny-dispatcher < dispatcher ;
: <funny-dispatcher> funny-dispatcher new-dispatcher ;
TUPLE: base-path-check-responder ;
C: <base-path-check-responder> base-path-check-responder
M: base-path-check-responder call-responder
2drop
"$funny-dispatcher" resolve-base-path
"text/plain" <content> swap >>body ;
[ ] [
<dispatcher>
<dispatcher>
<funny-dispatcher>
<base-path-check-responder> "c" add-responder
"b" add-responder
"a" add-responder
main-responder set
] unit-test
[ "/a/b/" ] [
"a/b/c" split-path main-responder get call-responder body>>
] unit-test