X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Ftest.lisp;h=ab0feeb6567c827836f1c1cae9d216cc6f68b7c6;hb=55740edc3e2b3444e7e17978f68df8eced2b19e7;hp=9aa1039b95dbc08a1afbdda1df9ea020e05cbf5d;hpb=168a8cb290c6d9b3fa40e500fd044ecacebb5429;p=fiveam.git diff --git a/src/test.lisp b/src/test.lisp index 9aa1039..ab0feeb 100644 --- a/src/test.lisp +++ b/src/test.lisp @@ -1,12 +1,12 @@ ;; -*- lisp -*- -(in-package :it.bese.FiveAM) +(in-package :it.bese.fiveam) ;;;; * Tests ;;;; While executing checks and collecting the results is the core job ;;;; of a testing framework it is also important to be able to -;;;; organize checks into groups, FiveAM provides two mechanisms for +;;;; organize checks into groups, fiveam provides two mechanisms for ;;;; organizing checks: tests and test suites. A test is a named ;;;; collection of checks which can be run and a test suite is a named ;;;; collection of tests and test suites. @@ -24,7 +24,7 @@ "Create a test named NAME. If NAME is a list it must be of the form: - (name &key depends-on suite fixture compile-at) + (name &key depends-on suite fixture compile-at profile) NAME is the symbol which names the test. @@ -45,17 +45,18 @@ If DEPENDS-ON is a symbol it is interpreted as `(AND ,depends-on), this is accomadate the common case of one test depending on another. -FIXTURE specifies a fixtrue to wrap the body in." - +FIXTURE specifies a fixtrue to wrap the body in. + +If PROFILE is T profiling information will be collected as well." (let* ((tmp (gensym)) (suite-arg (getf (cdr (ensure-list name)) :suite tmp)) - (suite (cond - ((eq tmp suite-arg) *suite*) - (t (get-test suite-arg))))) + (suite-form (cond + ((eq tmp suite-arg) '*suite*) + (t `(get-test ',suite-arg))))) (when (consp name) (remf (cdr name) :suite)) - (destructuring-bind (name &key depends-on (compile-at :run-time) fixture) - (append (ensure-list name) (default-test-args suite)) + (destructuring-bind (name &key depends-on (compile-at :run-time) fixture profile) + (ensure-list name) (declare (type (member :run-time :definition-time) compile-at)) (let ((description (if (stringp (car body)) (pop body) @@ -66,20 +67,22 @@ FIXTURE specifies a fixtrue to wrap the body in." `((with-fixture ,name ,args ,@body))) body))) `(progn - (setf (get-test ',name) (make-instance 'test-case - :name ',name - :runtime-package ,*package* - :test-lambda - (lambda () - ,@ (ecase compile-at - (:run-time `((funcall - (let ((*package* (find-package ',(package-name *package*)))) - (compile nil '(lambda () - ,@effective-body)))))) - (:definition-time effective-body))) - :description ,description - :depends-on ',depends-on)) - (setf (gethash ',name (tests ,suite)) ',name) + (setf (get-test ',name) + (make-instance 'test-case + :name ',name + :runtime-package (find-package ,(package-name *package*)) + :test-lambda + (lambda () + ,@ (ecase compile-at + (:run-time `((funcall + (let ((*package* (find-package ',(package-name *package*)))) + (compile nil '(lambda () + ,@effective-body)))))) + (:definition-time effective-body))) + :description ,description + :depends-on ',depends-on + :collect-profiling-info ,profile)) + (setf (gethash ',name (tests ,suite-form)) ',name) (when *run-test-when-defined* (run! ',name)) ',name))))) @@ -88,15 +91,15 @@ FIXTURE specifies a fixtrue to wrap the body in." "When non-NIL tests are run as soon as they are defined.") ;; Copyright (c) 2002-2003, Edward Marco Baringer -;; All rights reserved. -;; +;; All rights reserved. +;; ;; Redistribution and use in source and binary forms, with or without ;; modification, are permitted provided that the following conditions are ;; met: -;; +;; ;; - Redistributions of source code must retain the above copyright ;; notice, this list of conditions and the following disclaimer. -;; +;; ;; - Redistributions in binary form must reproduce the above copyright ;; notice, this list of conditions and the following disclaimer in the ;; documentation and/or other materials provided with the distribution. @@ -104,7 +107,7 @@ FIXTURE specifies a fixtrue to wrap the body in." ;; - Neither the name of Edward Marco Baringer, nor BESE, nor the names ;; of its contributors may be used to endorse or promote products ;; derived from this software without specific prior written permission. -;; +;; ;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ;; "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ;; LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR