PasteRack.org
Paste # 85188
2017-01-17 19:36:08

Fork as a new paste.

Paste viewed 444 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 expected)
  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 (for/and ([(k v) (in-hash expected)])
  19.             (equal? (hash-ref info-hash k (not v)) v))
  20.     (with-check-info (['actual info-hash]
  21.                       ['expected expected])
  22.       (fail-check))))
  23.  
  24. (check-exn-info? (thunk (check-equal? 'one 'two))
  25.                  (hash 'actual 'one
  26.                        'expected 'two))

=>