(module test-address-book-1 mzscheme (require "address-book-1.ss" "relations.ss" (only (lib "1.ss" "srfi") lset=) (planet "test.ss" ("schematics" "schemeunit.plt" 2)) (planet "text-ui.ss" ("schematics" "schemeunit.plt" 2))) (provide address-book-1-test-suite) ;; TODO: remove duplication (define-simple-check (check-relation a-rel val-lists) (lset= equal? (relation->list a-rel) val-lists)) (define address-book-1-test-suite (test-suite "testing address-book-1" (test-case "create a name" (parameterize ([current-context (make-context)]) (transaction (make-Name "Danny")) (check-relation (context-get (current-context) 'Name) '(("Danny"))))) (test-case "create an address" (parameterize ([current-context (make-context)]) (transaction (make-Addr "50 Franklin Street")) (check-relation (context-get (current-context) 'Addr) '(("50 Franklin Street"))))) (test-case "create an empty book" (parameterize ([current-context (make-context)]) (transaction (make-Book "My Address Book")) (check-relation (context-get (current-context) 'Book) '(("My Address Book"))))) (test-case "try out let-transaction" (parameterize ([current-context (make-context)]) (let-transaction ([n1 (make-Name "Dan")] [n2 (make-Name "Kathi")] [n3 (make-Name "Shriram")]) (check-relation (context-get (current-context) 'Name) '(("Dan") ("Kathi") ("Shriram")))))) (test-case "try to apply add" (parameterize ([current-context (make-context)]) (let-transaction ([b1 (make-Book "MyBook-1")] [b2 (make-Book "MyBook-2")] [n (make-Name "Danny Yoo")] [a (make-Addr "dyoo@cs.wpi.edu")]) (check-true (transaction (add b1 b2 n a))) (check-relation (context-get (current-context) 'addr) '((_0 "MyBook-2" "Danny Yoo" "dyoo@cs.wpi.edu")))))))))