65 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Factor
		
	
	
USING: accessors continuations http http.server
 | 
						|
io.encodings.utf8 io.encodings.binary io.streams.string kernel
 | 
						|
math sequences tools.test urls ;
 | 
						|
IN: http.server.tests
 | 
						|
 | 
						|
[ t ] [ [ \ + first ] [ <500> ] recover response? ] unit-test
 | 
						|
 | 
						|
[ "text/plain; charset=ASCII" ] [
 | 
						|
    <response>
 | 
						|
        "text/plain" >>content-type
 | 
						|
        "ASCII" >>content-charset
 | 
						|
    unparse-content-type
 | 
						|
] unit-test
 | 
						|
 | 
						|
[ "text/xml; charset=UTF-8" ] [
 | 
						|
    <response>
 | 
						|
        "text/xml" >>content-type
 | 
						|
    unparse-content-type
 | 
						|
] unit-test
 | 
						|
 | 
						|
[ "image/jpeg" ] [
 | 
						|
    <response>
 | 
						|
        "image/jpeg" >>content-type
 | 
						|
    unparse-content-type
 | 
						|
] unit-test
 | 
						|
 | 
						|
[ "application/octet-stream" ] [
 | 
						|
    <response>
 | 
						|
    unparse-content-type
 | 
						|
] unit-test
 | 
						|
 | 
						|
 | 
						|
! RFC 2616: Section 19.3
 | 
						|
! The line terminator for message-header fields is the sequence CRLF.
 | 
						|
! However, we recommend that applications, when parsing such headers,
 | 
						|
! recognize a single LF as a line terminator and ignore the leading CR.
 | 
						|
[ t ] [
 | 
						|
    {
 | 
						|
        "GET / HTTP/1.1"
 | 
						|
        "connection: close"
 | 
						|
        "host: 127.0.0.1:55532"
 | 
						|
        "user-agent: Factor http.client"
 | 
						|
    } [ "\n" join ] [ "\r\n" join ] bi
 | 
						|
    [ [ read-request ] with-string-reader ] bi@ =
 | 
						|
] unit-test
 | 
						|
 | 
						|
! RFC 2616: Section 4.1
 | 
						|
! In the interest of robustness, servers SHOULD ignore any empty
 | 
						|
! line(s) received where a Request-Line is expected. In other words, if
 | 
						|
! the server is reading the protocol stream at the beginning of a
 | 
						|
! message and receives a CRLF first, it should ignore the CRLF.
 | 
						|
[
 | 
						|
    T{ request
 | 
						|
        { method "GET" }
 | 
						|
        { url URL" /" }
 | 
						|
        { version "1.0" }
 | 
						|
        { header H{ } }
 | 
						|
        { cookies V{ } }
 | 
						|
        { redirects 10 }
 | 
						|
    }
 | 
						|
] [
 | 
						|
    "\r\n\r\n\r\nGET / HTTP/1.0\r\n\r\n"
 | 
						|
    [ read-request ] with-string-reader
 | 
						|
] unit-test
 |