racket/collects/tests/web-server/http/xexpr.rkt
2012-03-14 13:04:30 -06:00

82 lines
3.6 KiB
Racket

#lang racket
(require tests/eli-tester
web-server/private/timer
web-server/private/connection-manager
web-server/http/response
web-server/http
"../util.rkt")
(define (write-response r [redact? #t])
(define-values (i-port o-port) (make-pipe))
(define conn
(connection 0 (start-timer +inf.0 void)
i-port o-port (make-custodian) #t))
(output-response conn r)
(close-output-port o-port)
(define bs (port->bytes i-port))
(bytes-sort (if redact? (redact bs) bs)))
(test
(write-response (response/xexpr '(a ([href "#"]) "link")))
=>
(bytes-sort
#"HTTP/1.1 200 Okay\r\nDate: REDACTED GMT\r\nLast-Modified: REDACTED GMT\r\nServer: Racket\r\nContent-Type: text/html; charset=utf-8\r\n\r\n<a href=\"#\">link</a>")
(write-response (response/xexpr '(html)))
=>
(bytes-sort
#"HTTP/1.1 200 Okay\r\nDate: REDACTED GMT\r\nLast-Modified: REDACTED GMT\r\nServer: Racket\r\nContent-Type: text/html; charset=utf-8\r\n\r\n<html></html>")
(write-response (response/xexpr '(img)))
=>
(bytes-sort
#"HTTP/1.1 200 Okay\r\nDate: REDACTED GMT\r\nLast-Modified: REDACTED GMT\r\nServer: Racket\r\nContent-Type: text/html; charset=utf-8\r\n\r\n<img />")
(write-response (response/xexpr '(a ([href "#"]) "link")
#:code 404))
=>
(bytes-sort
#"HTTP/1.1 404 Okay\r\nDate: REDACTED GMT\r\nLast-Modified: REDACTED GMT\r\nServer: Racket\r\nContent-Type: text/html; charset=utf-8\r\n\r\n<a href=\"#\">link</a>")
(write-response (response/xexpr '(a ([href "#"]) "link")
#:message #"Bad request"))
=>
(bytes-sort
#"HTTP/1.1 200 Bad request\r\nDate: REDACTED GMT\r\nLast-Modified: REDACTED GMT\r\nServer: Racket\r\nContent-Type: text/html; charset=utf-8\r\n\r\n<a href=\"#\">link</a>")
(map
(λ (b) (regexp-replace
#"Date: [a-zA-Z0-9:, ]+ GMT"
b
#"Date: REDACTED GMT"))
(write-response (response/xexpr '(a ([href "#"]) "link")
#:seconds 0)
#f))
=>
(bytes-sort
#"HTTP/1.1 200 Okay\r\nDate: REDACTED GMT\r\nLast-Modified: Thu, 01 Jan 1970 00:00:00 GMT\r\nServer: Racket\r\nContent-Type: text/html; charset=utf-8\r\nConnection: close\r\n\r\n<a href=\"#\">link</a>")
(write-response (response/xexpr '(a ([href "#"]) "link")
#:mime-type #"application/xml"))
=>
(bytes-sort
#"HTTP/1.1 200 Okay\r\nDate: REDACTED GMT\r\nLast-Modified: REDACTED GMT\r\nServer: Racket\r\nContent-Type: application/xml\r\n\r\n<a href=\"#\">link</a>")
(write-response (response/xexpr '(a ([href "#"]) "link")
#:headers (list (header #"head" #"value"))))
=>
(bytes-sort
#"HTTP/1.1 200 Okay\r\nDate: REDACTED GMT\r\nLast-Modified: REDACTED GMT\r\nServer: Racket\r\nContent-Type: text/html; charset=utf-8\r\nhead: value\r\n\r\n<a href=\"#\">link</a>")
(write-response (response/xexpr '(a ([href "#"]) "link")
#:cookies (list (make-cookie "head" "value"))))
=>
(bytes-sort
#"HTTP/1.1 200 Okay\r\nDate: REDACTED GMT\r\nLast-Modified: REDACTED GMT\r\nServer: Racket\r\nContent-Type: text/html; charset=utf-8\r\nSet-Cookie: head=value; Version=1\r\n\r\n<a href=\"#\">link</a>")
(write-response (response/xexpr '(a ([href "#"]) "link")
#:preamble #"<<!something XMLy>>"))
=>
(bytes-sort
#"HTTP/1.1 200 Okay\r\nDate: REDACTED GMT\r\nLast-Modified: REDACTED GMT\r\nServer: Racket\r\nContent-Type: text/html; charset=utf-8\r\n\r\n<<!something XMLy>><a href=\"#\">link</a>"))