fix stacks when in test coverage mode
(most of the commit is a rather involved test case....)
This commit is contained in:
parent
19d9d9a8ae
commit
542e256206
|
@ -0,0 +1,110 @@
|
|||
#lang at-exp racket/base
|
||||
(require "private/drracket-test-util.rkt"
|
||||
framework/test
|
||||
racket/class
|
||||
racket/gui/base)
|
||||
|
||||
(define (setup-racket/base-raw) (setup/rb "No debugging or profiling"))
|
||||
(define (setup-racket/base-debug) (setup/rb "Debugging"))
|
||||
(define (setup-racket/base-profile) (setup/rb "Debugging and profiling"))
|
||||
(define (setup-racket/base-coverage) (setup/rb "Syntactic test suite coverage"))
|
||||
|
||||
(define (setup/rb which-rb)
|
||||
(set-module-language! #f)
|
||||
(test:set-radio-box-item! which-rb)
|
||||
(let ([f (test:get-active-top-level-window)])
|
||||
(test:button-push "OK")
|
||||
(wait-for-new-frame f)))
|
||||
|
||||
(define (run errortrace-stack? setup-language)
|
||||
(define drracket-frame (wait-for-drracket-frame))
|
||||
|
||||
(define ints-text (queue-callback/res (λ () (send drracket-frame get-interactions-text))))
|
||||
|
||||
(setup-language)
|
||||
(clear-definitions drracket-frame)
|
||||
(insert-in-definitions
|
||||
drracket-frame
|
||||
@string-append{
|
||||
#lang racket/base
|
||||
(define (f x)
|
||||
(+ 1 (/ x)))
|
||||
|
||||
(define (g x)
|
||||
(+ 1 (+ 1 (+ 1 (f x)))))
|
||||
|
||||
(g 0)})
|
||||
|
||||
(do-execute drracket-frame)
|
||||
|
||||
(define ints-content (queue-callback/res (λ () (send ints-text get-text))))
|
||||
(unless (regexp-match? #rx"division by zero" ints-content)
|
||||
(error 'errortrace-stacks.rkt
|
||||
"expected a division by zero error in the interactions window, got:\n~a"
|
||||
ints-content))
|
||||
|
||||
;; try to find the stacktrace button in the interactions window
|
||||
(define cb
|
||||
(queue-callback/res
|
||||
(λ ()
|
||||
(let loop ([snip (send ints-text find-first-snip)])
|
||||
(cond
|
||||
[snip
|
||||
(define cb
|
||||
(with-handlers ([exn:fail? (λ (x) #f)])
|
||||
;; string snips will fail this
|
||||
(send snip get-callback)))
|
||||
(cond
|
||||
[cb (λ () (cb snip))]
|
||||
[else (loop (send snip next))])]
|
||||
[else #f])))))
|
||||
|
||||
(unless cb
|
||||
(error 'errortrace-stacks.rkt
|
||||
(string-append
|
||||
"could not find the second clickable snip"
|
||||
"in the interactions text, got: ~a")
|
||||
ints-content))
|
||||
|
||||
(queue-callback (λ () (cb)))
|
||||
|
||||
(define stacks (wait-for-new-frame drracket-frame))
|
||||
|
||||
;; #f => no tab panel in the frame
|
||||
(define tab-panel-labels
|
||||
(queue-callback/res
|
||||
(λ ()
|
||||
(let loop ([window stacks])
|
||||
(cond
|
||||
[(is-a? window tab-panel%)
|
||||
(for/list ([i (in-range (send window get-number))])
|
||||
(send window get-item-label i))]
|
||||
[(is-a? window area-container<%>)
|
||||
(for/or ([child (in-list (send window get-children))])
|
||||
(loop child))]
|
||||
[else #f])))))
|
||||
|
||||
(define test-passed?
|
||||
(cond
|
||||
[errortrace-stack?
|
||||
(equal? tab-panel-labels '("Errortrace" "Builtin"))]
|
||||
[else
|
||||
(equal? tab-panel-labels #f)]))
|
||||
|
||||
(unless test-passed?
|
||||
(error 'errortrace-stacks.rkt
|
||||
"errortrace-stack? ~s and tab-panel-labels ~s don't match up for ~s"
|
||||
errortrace-stack? tab-panel-labels setup-language))
|
||||
|
||||
;; close the stacks window
|
||||
(queue-callback/res (λ () (send stacks close)))
|
||||
|
||||
;; wait for it to close
|
||||
(wait-for-new-frame stacks))
|
||||
|
||||
(fire-up-drracket-and-run-tests
|
||||
(λ ()
|
||||
(run #f setup-racket/base-raw)
|
||||
(run #t setup-racket/base-debug)
|
||||
(run #t setup-racket/base-profile)
|
||||
(run #t setup-racket/base-coverage)))
|
|
@ -554,8 +554,11 @@
|
|||
(error-display-handler)))
|
||||
(current-eval (drracket:debug:make-debug-eval-handler (current-eval)))]
|
||||
|
||||
[(debug/profile test-coverage)
|
||||
[(test-coverage)
|
||||
(drracket:debug:test-coverage-enabled #t)
|
||||
(error-display-handler
|
||||
(drracket:debug:make-debug-error-display-handler
|
||||
(error-display-handler)))
|
||||
(current-eval (drracket:debug:make-debug-eval-handler (current-eval)))]))
|
||||
|
||||
(define my-setup-printing-parameters (make-setup-printing-parameters))
|
||||
|
|
Loading…
Reference in New Issue
Block a user