📄 test.scm
字号:
#!/usr/local/bin/guile -s!#; Guile/JNI/JVM Testing Framework;; Copyright (c) 1998 Free Software Foundation, Inc.; Written by Paul Fisher (rao@gnu.org);; This program is free software; you can redistribute it and/or modify; it under the terms of the GNU General Public License as published by; the Free Software Foundation; either version 2 of the License, or; (at your option) any later version.;; This program is distributed in the hope that it will be useful,; but WITHOUT ANY WARRANTY; without even the implied warranty of; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the; GNU General Public License for more details.;; You should have received a copy of the GNU General Public License; along with this program; if not, write to the Free Software; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, ; USA.; log filenames(define verbose-log-file "classpath.log")(define summary-log-file "classpath.sum"); returns the number of times that ELEM appears in the toplevel of LS(define count (lambda (elem ls) (letrec ((count-it (lambda (ls acc) (cond ((null? ls) acc) ((equal? (car ls) elem) (count-it (cdr ls) (+ acc 1))) (else (count-it (cdr ls) acc)))))) (count-it ls 0)))); returns a list of pairs containing an element of ELS along with the ; number of times that element appears in LS(define build-result-count (lambda (els ls) (cond ((null? els) '()) (else (cons (cons (car els) (count (car els) ls)) (build-result-count (cdr els) ls)))))); soft port which sends output to both (current-output-port) and; the verbose-log-port(define screen-and-log-port (make-soft-port (vector (lambda (c) (cond ((char=? c #\newline) (newline (current-output-port)) (newline verbose-log-port)) (else (write c (current-output-port)) (write c verbose-log-port)))) (lambda (s) (display s (current-output-port)) (display s verbose-log-port)) (lambda () (force-output (current-output-port)) (force-output verbose-log-port)) #f #f) "w")); pretty prints the result of a single test(define display-test-summary (lambda (result port) (let ((name (car result)) (code (cadr result)) (msg (caddr result))) (display "Name : " port) (display name port) (newline port) (display "Result : " port) (display code port) (newline port) (display "Message : " port) (if (= (string-length msg) 0) (display "None" port) (display msg port)) (newline port) (newline port)))); status message(define display-running (lambda (class port) (display "Running " port) (display class port) (display "..." port) (newline port))); runs the test named CLASS(define run-test (lambda (class) (display-running class screen-and-log-port) (force-output verbose-log-port) (let ((result (test class))) (display-test-summary result screen-and-log-port) (write (cons class result) summary-log-port) (newline summary-log-port) (cadr result)))); run each and every test. each test is read from PORT; and delimited by a newline. returns a list of all test result codes(define parse-input-file (lambda (port) (letrec ((parse-line (lambda (line) (cond ((eof-object? (car line)) '()) ((= (string-length (car line)) 0) (parse-line (read-line port 'split))) (else (cons (run-test (car line)) (parse-line (read-line port 'split)))))))) (parse-line (read-line port 'split))))); pretty prints the result list(define display-results (lambda (results port) (display "Summary information..." port) (newline port) (letrec ((display-results-l (lambda (ls) (cond ((null? ls)) (else (let ((res (car ls))) (display "# of " port) (display (car res) port) (display "'s " port) (display (cdr res) port) (newline port)) (display-results-l (cdr ls))))))) (display-results-l results))))(if (batch-mode?) (if (> (length (command-line)) 1) (define input-port (open-input-file (cadr (command-line)))) (error "filename listing tests to execute must be specified."))); open up the log files(define verbose-log-port (open verbose-log-file (logior O_WRONLY O_CREAT O_TRUNC)))(define summary-log-port (open summary-log-file (logior O_WRONLY O_CREAT O_TRUNC))); redirect stderr to the verbose log(dup verbose-log-port 2); run the tests, and build the result table, and display the results(display-results (build-result-count '(PASS XPASS FAIL XPAIL UNRESOLVED UNSUPPORTED UNTESTED ERROR) (parse-input-file input-port)) screen-and-log-port)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -