PasteRack.org
Paste # 44750
2017-01-17 19:38:11

Fork as a new paste.

Paste viewed 804 times.


Embed:

  1. #lang racket
  2.  
  3. (require rackunit)
  4.  
  5. (define (check-stack->hash lst)
  6.   (for/hash ([info (in-list lst)])
  7.     (values (check-info-name info)
  8.             (check-info-value info))))
  9.  
  10. (define-check (check-exn-info? proc message info)
  11.   (define failure (with-handlers ([exn:test:check? identity])
  12.                     (parameterize ([current-check-around (λ (proc) (proc))])
  13.                       (proc))
  14.                     #f))
  15.   (unless failure
  16.     (fail-check "no exn raised"))
  17.   (define info-hash (check-stack->hash (exn:test:check-stack failure)))
  18.   (unless (equal? (exn-message failure) message)
  19.     (with-check-info (['actual (exn-message failure)]
  20.                       ['expected message])
  21.       (fail-check "message didn’t match")))
  22.   (unless (for/and ([(k v) (in-hash info)])
  23.             (equal? (hash-ref info-hash k (not v)) v))
  24.     (with-check-info (['actual info-hash]
  25.                       ['expected info])
  26.       (fail-check "info didn’t match"))))
  27.  
  28. (check-exn-info? (thunk (check-equal? 'one 'two))
  29.                  "Check failure"
  30.                  (hash 'actual 'one
  31.                        'expected 'two))

=>