如何在Guile中构建单元测试,将其输出到TAP标准?
时间:2020-03-05 18:55:53 来源:igfitidea点击:
我想要一个Guile脚本,该脚本实现功能,并根据TAP协议输出测试结果消息。
解决方案
回答
以下名为guiletap.scm的脚本实现了运行测试时使用TAP协议的常用功能。
; Define functions for running Guile-written tests under the TAP protocol.
; Copyright © 2008 by Omer Zak
; Released under the GNU LGPL 2.1 or (at your option) any later version.
;;;
;;; To invoke it:
;;; (use-modules (guiletap))
;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define-module (guiletap))
(export plan)
(export ok)
(export bail_out)
(export diag)
(export is_ok)
(use-modules (ice-9 format))
; n is the number of tests.
(define plan
(lambda (n) (display (format "1..~d~%" n))))
; n - test number
; testdesc - test descriptor
; res - result which is #f at failure, other at success.
(define ok
(lambda (n testdesc res)
(if (not res)(display "not "))
(display (format "ok ~d - ~a~%" n testdesc))))
; testdesc - test descriptor
(define bail_out
(lambda (testdesc)
(display (format "Bail out! - ~a~%" testdesc))))
; diagmsg - diagnostic message
(define diag
(lambda (diagmsg)
(display (format "# ~a~%" diagmsg))))
; n - test number
; testdesc - test descriptor
; expres - expected test result
; actres - actual test result
(define is_ok
(lambda (n testdesc expres actres)
(ok n testdesc (equal? expres actres))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; !!! TODO:
; !!! To be implemented also:
; plan_no_plan
; plan_skip_all [REASON]
;
; is RESULT EXPECTED [NAME]
; isnt RESULT EXPECTED [NAME]
; like RESULT PATTERN [NAME]
; unlike RESULT PATTERN [NAME]
; pass [NAME]
; fail [NAME]
;
; skip CONDITION [REASON] [NB_TESTS=1]
; Specify TODO mode by setting $TODO:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; End of guiletap.scm

