gcc/libjava/classpath/testsuite/scheme/test.scm
Tom Tromey f911ba985a Initial revision
From-SVN: r102074
2005-07-16 00:30:23 +00:00

164 lines
4.7 KiB
Scheme

#!/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)