--- /dev/null
+;;;; -*- Mode: Lisp; indent-tabs-mode: nil -*-
+
+(defsystem :fiveam-it
+ :author "Edward Marco Baringer <mb@bese.it>"
+
+ :depends-on (:fiveam)
+ :pathname "src/"
+ :components ((:file "rt")))
+
+;;;;@include "src/package.lisp"
+
+;;;;@include "t/example.lisp"
--- /dev/null
+(defpackage :fiveam.rt
+ (:use :fiveam :common-lisp)
+ (:export #:deftest
+ #:*test*
+ #:do-test
+ #:*do-tests-when-defined*
+ #:get-test
+ #:rem-test
+ #:rem-all-tests
+ #:do-tests
+ #:pending-tests
+ #:continue-testing))
+
+(in-package :fiveam.rt)
+
+(fiveam:def-suite :rt
+ :description "Suite holding all tests defined via the RT compatability layer.")
+
+(defvar *test* nil)
+
+(defvar *tests* '())
+
+(defvar *do-tests-when-defined* nil)
+
+(defmacro deftest (name form &rest values)
+ `(progn
+ (push (list ',name ',form (list ,@values)) *tests*)
+ (def-test ,name ()
+ (is-true (every #'equal (multiple-value-list ,name) (list ,@values))))
+ (when *do-tests-when-defined*
+ (do-test ',name))
+ (setf *test* ',name)))
+
+(defun do-test (&optional (name *test*))
+ (setf *test* name)
+ (let ((results (run name)))
+ (if (every #'fiveam::test-passed-p result)
+ name
+ (progn
+ (explain (make-instance 'fiveam::detailed-text-explainer) results)
+ nil))))
+
+(defun get-test (&optional (name *test*))
+ (find name *tests* :test #'eql :key #'first))
+
+(defun rem-test (&optional (name *test*))
+ (if (get-test name)
+ (progn
+ (setf *tests* (delete name *tests* :test #'eql :key #'first))
+ (remhash name (fiveam::tests (get-test :rt)))
+ name)
+ nil))
+
+(defun rem-all-tests ()
+ (clrhash (fiveam::tests (get-test :rt)))
+ (setf *tests* '()))
+
+(defun do-tests (&optional (out *standard-output*))
+ (loop
+ for test in *tests*
+ nconc (run (get-test (first test))) into results
+ finally (explain (make-instance 'fiveam::detailed-text-explainer) results)
+ finally (return (every #'fiveam::test-passed-p results))))