Adding documentation for servlet testing system

This commit is contained in:
Jay McCarthy 2011-07-24 16:58:46 -04:00
parent 6e59cbf1d7
commit 3fca28c68f
2 changed files with 50 additions and 5 deletions

View File

@ -1,7 +1,10 @@
#lang scribble/doc #lang scribble/doc
@(require "web-server.rkt" @(require "web-server.rkt"
(for-label web-server/http/request-structs (for-label web-server/http/request-structs
web-server/servlet/servlet-structs
xml xml
web-server/test
net/url
racket/promise racket/promise
racket/match)) racket/match))
@ -20,10 +23,52 @@ The core functionality allows a request to be sent to the servlet and the respon
(->* () (->* ()
((or/c string? url? request? false/c) ((or/c string? url? request? false/c)
(listof binding?) (listof binding?)
boolean?) #:raw? boolean?)
(or/c bytes? (or/c bytes?
xexpr?))]{ xexpr?))]{
This function accepts This function accepts a servlet function and provides a function that accepts a request and returns the answer the servlet for that request. This interaction function has many possible calling patterns:
@itemize[
} @item{No arguments: a call to the root URL path with no bindings.}
@item{At least one argument: this may be a string, URL, or a request data structure.}
@item{Two arguments: the first argument must be a string or a URL, but the second argument can specify the request bindings.}
@item{The optional @racket[#:raw?] keyword controls whether an X-expression or a byte string is returned as a result.}
]
}
This facility is designed to be used in concert with a technique of extracting continuation URLs and relevant values; @racketmodname[xml/path] is one way to do this. Here is an extended example that tests an Add-Two-Numbers.com:
@(require (for-label xml/path
rackunit
racket/list
racket/promise))
@racketblock[
(define (test-add-two-numbers -s>)
(define x (random 500))
(define xs (string->bytes/utf-8 (number->string x)))
(define y (random 500))
(define ys (string->bytes/utf-8 (number->string y)))
(define r0 (-s>))
(define k0 (se-path* '(form #:action) r0))
(define i0 (se-path* '(form input #:name) r0))
(define r1
(-s> (format "~a?~a=~a" k0 i0 xs)
(list (make-binding:form (string->bytes/utf-8 i0) xs))))
(define k1 (se-path* '(form #:action) r1))
(define i1 (se-path* '(form input #:name) r1))
(define r2
(-s> (format "~a?~a=~a" k1 i1 ys)
(list (make-binding:form (string->bytes/utf-8 i1) ys))))
(define n (se-path* '(p) r2))
(check-equal? n
(format "The answer is ~a" (+ x y))))
(require
(prefix-in ex:add1: web-server/default-web-root/htdocs/servlets/examples/add)
(prefix-in ex:add2: web-server/default-web-root/htdocs/servlets/examples/add-v2))
(test-add-two-numbers
(make-servlet-tester ex:add1:start))
(test-add-two-numbers
(make-servlet-tester ex:add2:start))
]

View File

@ -16,7 +16,7 @@ This manual describes the Racket libraries for building Web applications.
The @secref["http"] section describes the common library function for manipulating HTTP requests and creating HTTP responses. The @secref["http"] section describes the common library function for manipulating HTTP requests and creating HTTP responses.
In particular, this section covers cookies, authentication, and request bindings. In particular, this section covers cookies, authentication, and request bindings.
The final four sections (@secref["dispatch"], @secref["formlets"], @secref["templates"], and @secref["page"]) cover utility libraries that ease the creation of typical Web applications. The final five sections (@secref["dispatch"], @secref["formlets"], @secref["templates"], @secref["page"], and @secref["test"]) cover utility libraries that ease the creation of typical Web applications.
This manual closes with a frequently asked questions section: @secref["faq"]. This manual closes with a frequently asked questions section: @secref["faq"].