racket/collects/tests/web-server/servlet-env-test.rkt
2010-05-17 12:07:32 -04:00

59 lines
2.1 KiB
Racket

#lang racket/base
(require rackunit
mzlib/etc
mzlib/list
mzlib/pretty
net/url
web-server/servlet-env
web-server/servlet)
(provide servlet-env-tests)
#;(define (call u bs)
(define sx (ssax:xml->sxml (get-pure-port (string->url u)) empty))
(pretty-print sx)
sx)
(define servlet-env-tests
(test-suite
"Servlet Environment"
; XXX At least just check whether the server can be started by the servlet-env guts
; XXX Broken
#;(test-not-exn "Add two numbers"
(lambda ()
(sleep 2)
(parameterize ([send-url
(lambda (a-url sep?)
(let* ([k0 (first ((sxpath "//form/@action/text()") (call a-url empty)))]
[k1 (first ((sxpath "//form/@action/text()") (call k0 (list (make-binding:form #"number" #"23")))))]
[n (first ((sxpath "//p/text()") (call k1 (list (make-binding:form #"number" #"12")))))])
n)
(void))])
(example))))))
; request-number : str -> num
(define (request-number which-number)
(string->number
(extract-binding/single
'number
(request-bindings (send/suspend (build-request-page which-number))))))
; build-request-page : str -> str -> response
(define (build-request-page which-number)
(lambda (k-url)
`(html (head (title "Enter a Number to Add"))
(body ([bgcolor "white"])
(form ([action ,k-url] [method "post"])
"Enter the " ,which-number " number to add: "
(input ([type "text"] [name "number"] [value ""]))
(input ([type "submit"] [name "enter"] [value "Enter"])))))))
(define (example)
(serve/servlet
(lambda (request)
`(html (head (title "Sum"))
(body ([bgcolor "white"])
(p "The sum is "
,(number->string (+ (request-number "first") (request-number "second")))))))
#:port 9999))