[ "Goodbye" ] [ "http://localhost/quit" add-port http-get nip ] unit-test
-USING: html.components html.elements html.forms
+USING: html.components html.forms
xml xml.utilities validators
furnace furnace.conversations ;
<dispatcher>
<action>
[ a get-global "a" set-value ] >>init
- [ [ <html> "a" <field> render </html> ] "text/html" <content> ] >>display
+ [ [ "a" <field> render ] "text/html" <content> ] >>display
[ { { "a" [ v-integer ] } } validate-params ] >>validate
[ "a" value a set-global URL" " <redirect> ] >>submit
<conversations>
3 a set-global
-: test-a string>xml "input" tag-named "value" attr ;
+: test-a ( xml -- value )
+ string>xml body>> "input" deep-tag-named "value" attr ;
[ "3" ] [
"http://localhost/" add-port http-get
IN: http.server.dispatchers.tests
\ find-responder must-infer
-\ http-error. must-infer
TUPLE: mock-responder path ;
IN: http.server.tests
[ t ] [ [ \ + first ] [ <500> ] recover response? ] unit-test
+
+\ make-http-error must-infer
http.server.responses
http.server.remapping
html.templates
+html.streams
html
-html.streams ;
+xml.writer ;
IN: http.server
: check-absolute ( url -- url )
: call-responder ( path responder -- response )
[ add-responder-nesting ] [ call-responder* ] 2bi ;
-: http-error. ( error -- )
- ! TODO: get rid of rot
- "Internal server error" [ ] rot '[
- [ _ print-error nl :c ] with-html-writer
- ] simple-page ;
+: make-http-error ( error -- xml )
+ [ "Internal server error" f ] dip
+ [ print-error nl :c ] with-html-writer
+ simple-page ;
: <500> ( error -- response )
500 "Internal server error" <trivial-response>
- swap development? get [ '[ _ http-error. ] >>body ] [ drop ] if ;
+ swap development? get [ make-http-error >>body ] [ drop ] if ;
: do-response ( response -- )
[ request get swap write-full-response ]
[
utf8 [
development? get
- [ http-error. ] [ drop "Response error" write ] if
+ [ make-http-error ] [ drop "Response error" ] if
+ write-xml
] with-encoded-output
] bi
] recover ;
--- /dev/null
+IN: http.server.static.tests
+USING: http.server.static tools.test xml.writer ;
+
+[ ] [ "resource:basis" directory>html write-xml ] unit-test
\ No newline at end of file
\r
\ serve-file NOTICE add-input-logging\r
\r
-: file. ( name -- xml )\r
+: file>html ( name -- xml )\r
dup link-info directory? [ "/" append ] when\r
dup [XML <li><a href=<->><-></a></li> XML] ;\r
\r
-: directory. ( path -- )\r
- dup file-name [ ] [\r
- [ file-name ] [ directory-files [ file. ] map ] bi\r
- [XML <h1><-></h1> <ul><-></ul> XML] write-xml\r
- ] simple-page ;\r
+: directory>html ( path -- xml )\r
+ [ file-name ]\r
+ [ drop f ]\r
+ [\r
+ [ file-name ] [ [ [ file>html ] map ] with-directory-files ] bi\r
+ [XML <h1><-></h1> <ul><-></ul> XML]\r
+ ] tri\r
+ simple-page ;\r
\r
: list-directory ( directory -- response )\r
file-responder get allow-listings>> [\r
- '[ _ directory. ] "text/html" <content>\r
+ directory>html "text/html" <content>\r
] [\r
drop <403>\r
] if ;\r