⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testing.scm

📁 A framework written in Java for implementing high-level and dynamic languages, compiling them into J
💻 SCM
📖 第 1 页 / 共 3 页
字号:
	(begin	  (display "Group begin: " log)	  (display suite-name log)	  (newline log))))  #f)(define (test-on-group-end-simple runner)  (let ((log (test-runner-aux-value runner)))    (if (output-port? log)	(begin	  (display "Group end: " log)	  (display (car (test-runner-group-stack runner)) log)	  (newline log))))  #f)(define (%test-on-bad-count-write runner count expected-count port)  (display "*** Total number of tests was " port)  (display count port)  (display " but should be " port)  (display expected-count port)  (display ". ***" port)  (newline port)  (display "*** Discrepancy indicates testsuite error or exceptions. ***" port)  (newline port))(define (test-on-bad-count-simple runner count expected-count)  (%test-on-bad-count-write runner count expected-count (current-output-port))  (let ((log (test-runner-aux-value runner)))    (if (output-port? log)	(%test-on-bad-count-write runner count expected-count log))))(define (test-on-bad-end-name-simple runner begin-name end-name)  (let ((msg (string-append (%test-format-line runner) "test-end " begin-name			    " does not match test-begin " end-name)))    (cond-expand     (srfi-23 (error msg))     (else (display msg) (newline)))))  (define (%test-final-report1 value label port)  (if (> value 0)      (begin	(display label port)	(display value port)	(newline port))))(define (%test-final-report-simple runner port)  (%test-final-report1 (test-runner-pass-count runner)		      "# of expected passes      " port)  (%test-final-report1 (test-runner-xfail-count runner)		      "# of expected failures    " port)  (%test-final-report1 (test-runner-xpass-count runner)		      "# of unexpected successes " port)  (%test-final-report1 (test-runner-fail-count runner)		      "# of unexpected failures  " port)  (%test-final-report1 (test-runner-skip-count runner)		      "# of skipped tests        " port))(define (test-on-final-simple runner)  (%test-final-report-simple runner (current-output-port))  (let ((log (test-runner-aux-value runner)))    (if (output-port? log)	(%test-final-report-simple runner log))))(define (%test-format-line runner)   (let* ((line-info (test-result-alist runner))	  (source-file (assq 'source-file line-info))	  (source-line (assq 'source-line line-info))	  (file (if source-file (cdr source-file) "")))     (if source-line	 (string-append file ":"			(number->string (cdr source-line)) ": ")	 "")))(define (%test-end suite-name line-info)  (let* ((r (test-runner-get))	 (groups (test-runner-group-stack r))	 (line (%test-format-line r)))    (test-result-alist! r line-info)    (if (null? groups)	(let ((msg (string-append line "test-end not in a group")))	  (cond-expand	   (srfi-23 (error msg))	   (else (display msg) (newline)))))    (if (and suite-name (not (equal? suite-name (car groups))))	((test-runner-on-bad-end-name r) r suite-name (car groups)))    (let* ((count-list (%test-runner-count-list r))	   (expected-count (cdar count-list))	   (saved-count (caar count-list))	   (group-count (- (%test-runner-total-count r) saved-count)))      (if (and expected-count	       (not (= expected-count group-count)))	  ((test-runner-on-bad-count r) r group-count expected-count))      ((test-runner-on-group-end r) r)      (test-runner-group-stack! r (cdr (test-runner-group-stack r)))      (%test-runner-skip-list! r (car (%test-runner-skip-save r)))      (%test-runner-skip-save! r (cdr (%test-runner-skip-save r)))      (%test-runner-fail-list! r (car (%test-runner-fail-save r)))      (%test-runner-fail-save! r (cdr (%test-runner-fail-save r)))      (%test-runner-count-list! r (cdr count-list))      (if (null? (test-runner-group-stack r))	  ((test-runner-on-final r) r)))))(define-syntax test-group  (syntax-rules ()    ((test-group suite-name . body)     (let ((r (test-runner-current)))       ;; Ideally should also set line-number, if available.       (test-result-alist! r (list (cons 'test-name suite-name)))       (if (%test-should-execute r)	   (dynamic-wind	       (lambda () (test-begin suite-name))	       (lambda () . body)	       (lambda () (test-end  suite-name))))))))(define-syntax test-group-with-cleanup  (syntax-rules ()    ((test-group-with-cleanup suite-name form cleanup-form)     (test-group suite-name		    (dynamic-wind			(lambda () #f)			(lambda () form)			(lambda () cleanup-form))))    ((test-group-with-cleanup suite-name cleanup-form)     (test-group-with-cleanup suite-name #f cleanup-form))    ((test-group-with-cleanup suite-name form1 form2 form3 . rest)     (test-group-with-cleanup suite-name (begin form1 form2) form3 . rest))))(define (test-on-test-begin-simple runner) (let ((log (test-runner-aux-value runner)))    (if (output-port? log)	(let* ((results (test-result-alist runner))	       (source-file (assq 'source-file results))	       (source-line (assq 'source-line results))	       (source-form (assq 'source-form results))	       (test-name (assq 'test-name results)))	  (display "Test begin:" log)	  (newline log)	  (if test-name (%test-write-result1 test-name log))	  (if source-file (%test-write-result1 source-file log))	  (if source-line (%test-write-result1 source-line log))	  (if source-file (%test-write-result1 source-form log))))))(define-syntax test-result-ref  (syntax-rules ()    ((test-result-ref runner pname)     (test-result-ref runner pname #f))    ((test-result-ref runner pname default)     (let ((p (assq pname (test-result-alist runner))))       (if p (cdr p) default)))))(define (test-on-test-end-simple runner)  (let ((log (test-runner-aux-value runner))	(kind (test-result-ref runner 'result-kind)))    (if (memq kind '(fail xpass))	(let* ((results (test-result-alist runner))	       (source-file (assq 'source-file results))	       (source-line (assq 'source-line results))	       (test-name (assq 'test-name results)))	  (if (or source-file source-line)	      (begin		(if source-file (display (cdr source-file)))		(display ":")		(if source-line (display (cdr source-line)))		(display ": ")))	  (display (if (eq? kind 'xpass) "XPASS" "FAIL"))	  (if test-name	      (begin		(display " ")		(display (cdr test-name))))	  (newline)))    (if (output-port? log)	(begin	  (display "Test end:" log)	  (newline log)	  (let loop ((list (test-result-alist runner)))	    (if (pair? list)		(let ((pair (car list)))		  ;; Write out properties not written out by on-test-begin.		  (if (not (memq (car pair)				 '(test-name source-file source-line source-form)))		      (%test-write-result1 pair log))		  (loop (cdr list)))))))))(define (%test-write-result1 pair port)  (display "  " port)  (display (car pair) port)  (display ": " port)  (write (cdr pair) port)  (newline port))(define (test-result-set! runner pname value)  (let* ((alist (test-result-alist runner))	 (p (assq pname alist)))    (if p	(set-cdr! p value)	(test-result-alist! runner (cons (cons pname value) alist)))))(define (test-result-clear runner)  (test-result-alist! runner '()))(define (test-result-remove runner pname)  (let* ((alist (test-result-alist runner))	 (p (assq pname alist)))    (if p	(test-result-alist! runner				   (let loop ((r alist))				     (if (eq? r p) (cdr r)					 (cons (car r) (loop (cdr r)))))))))(define (test-result-kind . rest)  (let ((runner (if (pair? rest) (car rest) (test-runner-current))))    (test-result-ref runner 'result-kind)))(define (test-passed? . rest)  (let ((runner (if (pair? rest) (car rest) (test-runner-get))))    (memq (test-result-ref runner 'result-kind) '(pass xpass))))(define (%test-report-result)  (let* ((r (test-runner-get))	 (result-kind (test-result-kind r)))    (case result-kind      ((pass)       (test-runner-pass-count! r (+ 1 (test-runner-pass-count r))))      ((fail)       (test-runner-fail-count!	r (+ 1 (test-runner-fail-count r))))      ((xpass)       (test-runner-xpass-count! r (+ 1 (test-runner-xpass-count r))))      ((xfail)       (test-runner-xfail-count! r (+ 1 (test-runner-xfail-count r))))      (else       (test-runner-skip-count! r (+ 1 (test-runner-skip-count r)))))    (%test-runner-total-count! r (+ 1 (%test-runner-total-count r)))    ((test-runner-on-test-end r) r)))(cond-expand (guile  (define-syntax %test-evaluate-with-catch    (syntax-rules ()      ((%test-evaluate-with-catch test-expression)       (catch #t (lambda () test-expression) (lambda (key . args) #f)))))) (kawa  (define-syntax %test-evaluate-with-catch    (syntax-rules ()      ((%test-evaluate-with-catch test-expression)       (try-catch test-expression		  (ex <java.lang.Throwable>		      (test-result-set! (test-runner-current) 'actual-error ex)		      #f)))))) (srfi-34  (define-syntax %test-evaluate-with-catch    (syntax-rules ()      ((%test-evaluate-with-catch test-expression)       (guard (err (else #f)) test-expression))))) (chicken  (define-syntax %test-evaluate-with-catch    (syntax-rules ()      ((%test-evaluate-with-catch test-expression)       (condition-case test-expression (ex () #f)))))) (else  (define-syntax %test-evaluate-with-catch    (syntax-rules ()      ((%test-evaluate-with-catch test-expression)       test-expression)))))	    (cond-expand ((or kawa mzscheme)  (cond-expand   (mzscheme    (define-for-syntax (%test-syntax-file form)      (let ((source (syntax-source form)))	(cond ((string? source) file)				((path? source) (path->string source))				(else #f)))))   (kawa    (define (%test-syntax-file form)      (syntax-source form))))  (define-for-syntax (%test-source-line2 form)    (let* ((line (syntax-line form))	   (file (%test-syntax-file form))	   (line-pair (if line (list (cons 'source-line line)) '())))      (cons (cons 'source-form (syntax-object->datum form))	    (if file (cons (cons 'source-file file) line-pair) line-pair))))) (else  (define (%test-source-line2 form)    '())))(define (%test-on-test-begin r)  (%test-should-execute r)  ((test-runner-on-test-begin r) r)  (not (eq? 'skip (test-result-ref r 'result-kind))))(define (%test-on-test-end r result)    (test-result-set! r 'result-kind		      (if (eq? (test-result-ref r 'result-kind) 'xfail)			  (if result 'xpass 'xfail)			  (if result 'pass 'fail))))(define (test-runner-test-name runner)  (test-result-ref runner 'test-name ""))(define-syntax %test-comp2body  (syntax-rules ()		((%test-comp2body r comp expected expr)		 (let ()		   (if (%test-on-test-begin r)		       (let ((exp expected))			 (test-result-set! r 'expected-value exp)			 (let ((res (%test-evaluate-with-catch expr)))			   (test-result-set! r 'actual-value res)			   (%test-on-test-end r (comp exp res)))))		   (%test-report-result)))))(define (%test-approximimate= error)  (lambda (value expected)    (and (>= value (- expected error))         (<= value (+ expected error)))))(define-syntax %test-comp1body  (syntax-rules ()    ((%test-comp1body r expr)     (let ()       (if (%test-on-test-begin r)	   (let ()

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -