a first attempt at a rewording of the blame error messages to admit the possibility that the contract was wrong and also to claim that fixing the blamed module or the contract is all that is required
note that two test cases are failing, but only because they depend on the wording of the error messages; once that is set, I'll fix them.
This commit is contained in:
parent
092b966b83
commit
18dacad6c8
|
@ -19,19 +19,19 @@
|
|||
(struct-out exn:fail:contract:blame))
|
||||
|
||||
(define (blame=? a b equal?/recur)
|
||||
(and (equal?/recur (blame-positive a) (blame-positive b))
|
||||
(equal?/recur (blame-negative a) (blame-negative b))
|
||||
(equal?/recur (blame-contract a) (blame-contract b))
|
||||
(and (equal?/recur (blame-source a) (blame-source b))
|
||||
(equal?/recur (blame-value a) (blame-value b))
|
||||
(equal?/recur (blame-source a) (blame-source b))
|
||||
(equal?/recur (blame-contract a) (blame-contract b))
|
||||
(equal?/recur (blame-positive a) (blame-positive b))
|
||||
(equal?/recur (blame-negative a) (blame-negative b))
|
||||
(equal?/recur (blame-original? a) (blame-original? b))))
|
||||
|
||||
(define (blame-hash b hash/recur)
|
||||
(bitwise-xor (hash/recur (blame-positive b))
|
||||
(hash/recur (blame-negative b))
|
||||
(hash/recur (blame-contract b))
|
||||
(bitwise-xor (hash/recur (blame-source b))
|
||||
(hash/recur (blame-value b))
|
||||
(hash/recur (blame-source b))
|
||||
(hash/recur (blame-contract b))
|
||||
(hash/recur (blame-positive b))
|
||||
(hash/recur (blame-negative b))
|
||||
(hash/recur (blame-original? b))))
|
||||
|
||||
(define-struct blame
|
||||
|
@ -65,6 +65,7 @@
|
|||
(define (default-blame-format b x custom-message)
|
||||
(let* ([source-message (source-location->prefix (blame-source b))]
|
||||
[positive-message (show/display (blame-positive b))]
|
||||
[negative-message (show/display (blame-negative b))]
|
||||
[contract-message (show/write (blame-contract b))]
|
||||
[value-message (if (blame-value b)
|
||||
(format " on ~a" (show/display (blame-value b)))
|
||||
|
@ -73,13 +74,28 @@
|
|||
(equal? (blame-positive b) (blame-user b)))
|
||||
""
|
||||
(format " given to ~a" (show/display (blame-user b))))])
|
||||
(format "~a~a broke the contract ~a~a~a; ~a"
|
||||
|
||||
(cond
|
||||
[(blame-original? b)
|
||||
(format "~afound a contradiction between the contract ~a~a for ~a and its implementation~a; ~a; to fix adjust either the contract or the implementation of ~a"
|
||||
source-message
|
||||
positive-message
|
||||
contract-message
|
||||
value-message
|
||||
positive-message
|
||||
user-message
|
||||
custom-message)))
|
||||
custom-message
|
||||
positive-message)]
|
||||
[else
|
||||
(format "~afound a contradiction between the contract ~a~a for ~a and its client ~a~a; ~a; to fix adjust either the contract on ~a or the implementation of ~a"
|
||||
source-message
|
||||
contract-message
|
||||
value-message
|
||||
negative-message
|
||||
positive-message
|
||||
user-message
|
||||
custom-message
|
||||
negative-message
|
||||
positive-message)])))
|
||||
|
||||
(define ((show f) v)
|
||||
(let* ([line
|
||||
|
|
|
@ -89,9 +89,8 @@
|
|||
(define (test/spec-failed name expression blame)
|
||||
(let ()
|
||||
(define (has-proper-blame? msg)
|
||||
(regexp-match?
|
||||
(string-append "(^| )" (regexp-quote blame) " broke")
|
||||
msg))
|
||||
(define reg (string-append "the implementation of " (regexp-quote blame)))
|
||||
(regexp-match? reg msg))
|
||||
(printf "testing: ~s\n" name)
|
||||
(contract-eval
|
||||
`(,thunk-error-test
|
||||
|
|
Loading…
Reference in New Issue
Block a user