X-Git-Url: http://git.hcoop.net/bpt/guile.git/blobdiff_plain/46abd569d545d07a05e0bdbbe16750c31dd7140e..7b0a8dfb752d9d63179be944869db8447fdb7c5e:/test-suite/guile-test diff --git a/test-suite/guile-test b/test-suite/guile-test index 65b0533c8..4a264b426 100755 --- a/test-suite/guile-test +++ b/test-suite/guile-test @@ -1,11 +1,11 @@ -#!../libguile/guile \ +#!../meta/guile \ -e main -s !# ;;;; guile-test --- run the Guile test suite ;;;; Jim Blandy --- May 1999 ;;;; -;;;; Copyright (C) 1999, 2001, 2006 Free Software Foundation, Inc. +;;;; Copyright (C) 1999, 2001, 2006, 2010, 2014 Free Software Foundation, Inc. ;;;; ;;;; This program is free software; you can redistribute it and/or ;;;; modify it under the terms of the GNU Lesser General Public @@ -85,16 +85,22 @@ :use-module (ice-9 getopt-long) :use-module (ice-9 and-let-star) :use-module (ice-9 rdelim) + :use-module (system vm coverage) + :use-module (srfi srfi-11) + :use-module (system vm vm) :export (main data-file-name test-file-name)) ;;; User configurable settings: -(define default-test-suite - (string-append (getenv "HOME") "/bogus-path/test-suite")) +(define (default-test-suite) + (let ((argv0 (car (program-arguments)))) + (if (string=? (basename argv0) "guile-test") + (dirname argv0) + (error "Cannot find default test suite.")))) ;;; Variables that will receive their actual values later. -(define test-suite default-test-suite) +(define test-suite) (define tmp-dir #f) @@ -152,7 +158,7 @@ (let ((root-len (+ 1 (string-length test-dir))) (tests '())) (for-each-file (lambda (file) - (if (has-suffix? file ".test") + (if (string-suffix? ".test" file) (let ((short-name (substring file root-len))) (set! tests (cons short-name tests)))) @@ -175,6 +181,8 @@ (log-file (single-char #\l) (value #t)) + (coverage + (single-char #\c)) (debug (single-char #\d)))))) (define (opt tag default) @@ -187,7 +195,7 @@ (set! test-suite (or (opt 'test-suite #f) (getenv "TEST_SUITE_DIR") - default-test-suite)) + (default-test-suite))) ;; directory where temporary files are created. ;; when run from "make check", this must be under the build-dir, @@ -205,6 +213,13 @@ ;; Open the log file. (let ((log-port (open-output-file log-file))) + ;; Allow for arbitrary Unicode characters in the log file. + (set-port-encoding! log-port "UTF-8") + + ;; Don't fail if we can't display a test name to stdout/stderr. + (set-port-conversion-strategy! (current-output-port) 'escape) + (set-port-conversion-strategy! (current-error-port) 'escape) + ;; Register some reporters. (let ((global-pass #t) (counter (make-count-reporter))) @@ -220,11 +235,22 @@ (set! global-pass #f))))) ;; Run the tests. - (for-each (lambda (test) - (display (string-append "Running " test "\n")) - (with-test-prefix test - (load (test-file-name test)))) - tests) + (let ((run-tests + (lambda () + (for-each (lambda (test) + (display (string-append "Running " test "\n")) + (when (defined? 'setlocale) + (setlocale LC_ALL "C")) + (with-test-prefix test + (load (test-file-name test)))) + tests)))) + (if (opt 'coverage #f) + (let-values (((coverage-data _) + (with-code-coverage (the-vm) run-tests))) + (let ((out (open-output-file "guile.info"))) + (coverage-data->lcov coverage-data out) + (close out))) + (run-tests))) ;; Display the final counts, both to the user and in the log ;; file.