*default-database*)
+(defun default-suites ()
+ "The default list of tests to run."
+ (append *rt-internal* *rt-connection* *rt-basic* *rt-fddl* *rt-fdml*
+ *rt-ooddl* *rt-oodml* *rt-syntax* *rt-time*))
+
(defvar *error-count* 0)
(defvar *error-list* nil)
(run-function-append-report-file 'run-tests report-file))
-(defun run-tests (&key (report-stream *standard-output*) (sexp-report-stream nil))
+(defun run-tests (&key (report-stream *standard-output*) (sexp-report-stream nil)
+ (suites (default-suites)))
;; clear SQL-OUTPUT cache
(setq clsql-sys::*output-hash* (make-hash-table :test #'equal))
(let ((specs (read-specs))
(dolist (spec (db-type-spec db-type specs))
(let ((*test-connection-spec* spec)
(*test-connection-db-type* db-type))
- (do-tests-for-backend db-type spec)))))
+ (do-tests-for-backend db-type spec :suites suites)))))
(zerop *error-count*))
(defun load-necessary-systems (specs)
"")
))
-(defun do-tests-for-backend (db-type spec)
+(defun do-tests-for-backend (db-type spec &key
+ (suites (default-suites)) )
(test-connect-to-database db-type spec)
-
(unwind-protect
(multiple-value-bind (test-forms skip-tests)
- (compute-tests-for-backend db-type *test-database-underlying-type*)
+ (compute-tests-for-backend db-type *test-database-underlying-type* :suites suites)
(write-report-banner "Test Suite" db-type *report-stream*
(database-name-from-spec spec db-type))
-; (test-initialise-database)
-
(regression-test:rem-all-tests)
(dolist (test-form test-forms)
(eval test-form))
(disconnect)))
-(defun compute-tests-for-backend (db-type db-underlying-type)
+(defun compute-tests-for-backend (db-type db-underlying-type
+ &key (suites (default-suites)))
(let ((test-forms '())
(skip-tests '()))
- (dolist (test-form (append *rt-internal* *rt-connection* *rt-basic* *rt-fddl* *rt-fdml*
- *rt-ooddl* *rt-oodml* *rt-syntax*))
+ (dolist (test-form (if (listp suites) suites (list suites)))
(let ((test (second test-form)))
(cond
+ ((and (not (eql db-underlying-type :mysql))
+ (clsql-sys:in test :connection/query-command))
+ (push (cons test "Known to only work in mysql as yet.") skip-tests))
((and (null (clsql-sys:db-type-has-views? db-underlying-type))
(clsql-sys:in test :fddl/view/1 :fddl/view/2 :fddl/view/3 :fddl/view/4))
(push (cons test "views not supported.") skip-tests))
:oodml/update-instance/6 :oodml/update-instance/7
:oodml/db-auto-sync/3 :oodml/db-auto-sync/4))
(push (cons test ":auto-increment not supported.") skip-tests))
+ ((and (not (member *test-database-underlying-type*
+ '(:postgresql :postgresql-socket)))
+ (clsql-sys:in test
+ :time/pg/fdml/usec :time/pg/oodml/no-usec :time/pg/oodml/usec))
+ (push (cons test "Postgres specific test.")
+ skip-tests))
+ ((and (member *test-database-underlying-type* '(:mysql))
+ (clsql-sys:in test :time/cross-platform/usec/no-tz :time/cross-platform/usec/tz))
+ (push (cons test "MySQL does not support fractional seconds on timestamp columns (http://forge.mysql.com/worklog/task.php?id=946).")
+ skip-tests))
+
(t
(push test-form test-forms)))))
(values (nreverse test-forms) (nreverse skip-tests))))