update expr/c, wrap-expr/c tests for contract message change
This commit is contained in:
parent
166c97ecea
commit
abb1ce71cc
|
@ -5,6 +5,17 @@
|
|||
|
||||
;; See also tests/syntax/contract/test-errors.rkt.
|
||||
|
||||
(define (check-ctc-exn rx swapped? thunk)
|
||||
((with-handlers ([(lambda (e) #t)
|
||||
(lambda (e)
|
||||
(check-pred exn:fail:contract:blame? e)
|
||||
(define b (exn:fail:contract:blame-object e))
|
||||
(check-equal? (blame-swapped? b) swapped?)
|
||||
(check-regexp-match rx (exn-message e))
|
||||
void)])
|
||||
(thunk)
|
||||
(lambda () (fail "no exn raised")))))
|
||||
|
||||
(define-syntax (m-str stx)
|
||||
(syntax-parse stx
|
||||
[(_ e)
|
||||
|
@ -12,8 +23,8 @@
|
|||
#'e.c]))
|
||||
|
||||
(check-equal? (m-str "string") "string")
|
||||
(check-exn #rx"m-str: contract violation.*expected: string?"
|
||||
(lambda () (m-str 'not-a-string)))
|
||||
(check-ctc-exn #rx"m-str: contract violation.*expected: string?" #t
|
||||
(lambda () (m-str 'not-a-string)))
|
||||
|
||||
(define-syntax (m-arr stx)
|
||||
(syntax-parse stx
|
||||
|
@ -22,8 +33,8 @@
|
|||
#'(f.c arg)]))
|
||||
|
||||
(check-equal? (m-arr string->symbol "a") 'a)
|
||||
(check-exn #rx"m-arr: broke its own contract.*promised: string?"
|
||||
(lambda () (m-arr string->symbol 'a)))
|
||||
(check-ctc-exn #rx"m-arr: contract violation.*expected: string?" #f
|
||||
(lambda () (m-arr string->symbol 'a)))
|
||||
|
||||
(define-syntax (m-app stx)
|
||||
(syntax-parse stx
|
||||
|
@ -38,14 +49,14 @@
|
|||
"def")
|
||||
"abcdef")
|
||||
|
||||
(check-exn #rx"m-app: broke its own contract.*promised: string?"
|
||||
;; Yes, it's m-app's fault, because it didn't protect
|
||||
;; f from bad arguments.
|
||||
(lambda ()
|
||||
((m-app (-> string? (-> string? string?))
|
||||
(lambda (s) (lambda (t) (string-append s t)))
|
||||
"abc")
|
||||
'def)))
|
||||
(check-ctc-exn #rx"m-app: contract violation.*expected: string?" #f
|
||||
;; Yes, it's m-app's fault, because it didn't protect
|
||||
;; f from bad arguments.
|
||||
(lambda ()
|
||||
((m-app (-> string? (-> string? string?))
|
||||
(lambda (s) (lambda (t) (string-append s t)))
|
||||
"abc")
|
||||
'def)))
|
||||
|
||||
(define-syntax (m-res stx)
|
||||
(syntax-parse stx
|
||||
|
@ -58,13 +69,13 @@
|
|||
(lambda (s) (lambda (t) (string-append s t))))
|
||||
"abc") "def")
|
||||
"abcdef")
|
||||
(check-exn #rx"m-res: contract violation.*expected: string?"
|
||||
(lambda ()
|
||||
(((m-res (-> string? (-> string? string?))
|
||||
(lambda (s) (lambda (t) (string-append s t))))
|
||||
'abc) "def")))
|
||||
(check-exn #rx"m-res: contract violation.*expected: string?"
|
||||
(lambda ()
|
||||
(((m-res (-> string? (-> string? string?))
|
||||
(lambda (s) (lambda (t) (string-append s t))))
|
||||
"abc") 'def)))
|
||||
(check-ctc-exn #rx"m-res: contract violation.*expected: string?" #t
|
||||
(lambda ()
|
||||
(((m-res (-> string? (-> string? string?))
|
||||
(lambda (s) (lambda (t) (string-append s t))))
|
||||
'abc) "def")))
|
||||
(check-ctc-exn #rx"m-res: contract violation.*expected: string?" #t
|
||||
(lambda ()
|
||||
(((m-res (-> string? (-> string? string?))
|
||||
(lambda (s) (lambda (t) (string-append s t))))
|
||||
"abc") 'def)))
|
||||
|
|
|
@ -3,14 +3,25 @@
|
|||
racket/contract
|
||||
rackunit)
|
||||
|
||||
(define (check-ctc-exn rx swapped? thunk)
|
||||
((with-handlers ([(lambda (e) #t)
|
||||
(lambda (e)
|
||||
(check-pred exn:fail:contract:blame? e)
|
||||
(define b (exn:fail:contract:blame-object e))
|
||||
(check-equal? (blame-swapped? b) swapped?)
|
||||
(check-regexp-match rx (exn-message e))
|
||||
void)])
|
||||
(thunk)
|
||||
(lambda () (fail "no exn raised")))))
|
||||
|
||||
(define-syntax (m-str stx)
|
||||
(syntax-case stx ()
|
||||
[(_ e)
|
||||
(wrap-expr/c #'string? #'e #:context stx)]))
|
||||
|
||||
(check-equal? (m-str "string") "string")
|
||||
(check-exn #rx"m-str: contract violation.*expected: string?"
|
||||
(lambda () (m-str 'not-a-string)))
|
||||
(check-ctc-exn #rx"m-str: contract violation.*expected: string?" #t
|
||||
(lambda () (m-str 'not-a-string)))
|
||||
|
||||
(define-syntax (m-arr stx)
|
||||
(syntax-case stx ()
|
||||
|
@ -19,8 +30,8 @@
|
|||
#'(f* arg))]))
|
||||
|
||||
(check-equal? (m-arr string->symbol "a") 'a)
|
||||
(check-exn #rx"m-arr: broke its own contract.*promised: string?"
|
||||
(lambda () (m-arr string->symbol 'a)))
|
||||
(check-ctc-exn #rx"m-arr: contract violation.*expected: string?" #f
|
||||
(lambda () (m-arr string->symbol 'a)))
|
||||
|
||||
(define-syntax (m-app stx)
|
||||
(syntax-case stx ()
|
||||
|
@ -35,14 +46,14 @@
|
|||
"def")
|
||||
"abcdef")
|
||||
|
||||
(check-exn #rx"m-app: broke its own contract.*promised: string?"
|
||||
;; Yes, it's m-app's fault, because it didn't protect
|
||||
;; f from bad arguments.
|
||||
(lambda ()
|
||||
((m-app (lambda (s) (lambda (t) (string-append s t)))
|
||||
(-> string? (-> string? string?))
|
||||
"abc")
|
||||
'def)))
|
||||
(check-ctc-exn #rx"m-app: contract violation.*expected: string?" #f
|
||||
;; Yes, it's m-app's fault, because it didn't protect
|
||||
;; f from bad arguments.
|
||||
(lambda ()
|
||||
((m-app (lambda (s) (lambda (t) (string-append s t)))
|
||||
(-> string? (-> string? string?))
|
||||
"abc")
|
||||
'def)))
|
||||
|
||||
(define-syntax (m-res stx)
|
||||
(syntax-case stx ()
|
||||
|
@ -54,16 +65,16 @@
|
|||
(-> string? (-> string? string?)))
|
||||
"abc") "def")
|
||||
"abcdef")
|
||||
(check-exn #rx"m-res: contract violation.*expected: string?"
|
||||
(lambda ()
|
||||
(((m-res (lambda (s) (lambda (t) (string-append s t)))
|
||||
(-> string? (-> string? string?)))
|
||||
'abc) "def")))
|
||||
(check-exn #rx"m-res: contract violation.*expected: string?"
|
||||
(lambda ()
|
||||
(((m-res (lambda (s) (lambda (t) (string-append s t)))
|
||||
(-> string? (-> string? string?)))
|
||||
"abc") 'def)))
|
||||
(check-ctc-exn #rx"m-res: contract violation.*expected: string?" #t
|
||||
(lambda ()
|
||||
(((m-res (lambda (s) (lambda (t) (string-append s t)))
|
||||
(-> string? (-> string? string?)))
|
||||
'abc) "def")))
|
||||
(check-ctc-exn #rx"m-res: contract violation.*expected: string?" #t
|
||||
(lambda ()
|
||||
(((m-res (lambda (s) (lambda (t) (string-append s t)))
|
||||
(-> string? (-> string? string?)))
|
||||
"abc") 'def)))
|
||||
|
||||
(let ()
|
||||
(define fruit/c (and/c string? (or/c "orange" "peach" "strawberry")))
|
||||
|
@ -72,10 +83,11 @@
|
|||
[(_ ing)
|
||||
(with-syntax ([ing.c (wrap-expr/c #'fruit/c #'ing #:context stx)])
|
||||
#'(format "icy blended ~s" ing.c))]))
|
||||
(check-exn
|
||||
(check-ctc-exn
|
||||
(regexp
|
||||
(string-append
|
||||
"^smoothie: contract violation.*"
|
||||
"given: \"kale\".*"
|
||||
"in:.*\\(and/c string[?] \\(or/c \"orange\" \"peach\" \"strawberry\"\\)\\).*"))
|
||||
#t
|
||||
(lambda () (smoothie "kale"))))
|
||||
|
|
Loading…
Reference in New Issue
Block a user