我希望你能够编写一个Guile脚本,实现函数,根据TAP协议输出测试结果消息。
现在也有ggspec,这是一个Guile单元测试框架,可以输出(TAP格式的子集)测试结果。要做到这一点,请将所有测试(Scheme)脚本放入名为spec
的项目子目录中并运行:
$ ggspec -f tap
由于ggspec是一个完整的框架,具有设置、拆卸和测试跳过等功能,因此可选项更多。请参阅项目中附带的示例测试文件(spec/lib-spec.scm
)以获得很好的概述。
免责声明:本人编写了ggspec。
; 定义用于在TAP协议下运行Guile编写的测试的函数。 ; 版权所有 © 2008 Omer Zak ; 根据GNU LGPL 2.1或(根据您的选择)任何更新版本发布。 ;;; ;;; 调用方式: ;;; (use-modules (guiletap)) ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define-module (guiletap)) (export plan) (export ok) (export bail_out) (export diag) (export is_ok)
(use-modules (ice-9 format))
; n是测试数量。 (define plan (lambda (n) (display (format "1..~d~%" n))))
; n - 测试编号 ; testdesc - 测试描述 ; res - 失败时为#f,成功时为其他值。 (define ok (lambda (n testdesc res) (if (not res)(display "not ")) (display (format "ok ~d - ~a~%" n testdesc))))
; testdesc - 测试描述 (define bail_out (lambda (testdesc) (display (format "Bail out! - ~a~%" testdesc))))
; diagmsg - 诊断消息 (define diag (lambda (diagmsg) (display (format "# ~a~%" diagmsg))))
; n - 测试编号 ; testdesc - 测试描述 ; expres - 预期测试结果 ; actres - 实际测试结果 (define is_ok (lambda (n testdesc expres actres) (ok n testdesc (equal? expres actres))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; !!! TODO: ; !!! 还需实现: ; 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] ; 通过设置$TODO来指定TODO模式:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; guiletap.scm结束