;;;; Copyright (c) 2020-2021 Alan Dipert <alan@dipert.org>
;;;; Part of the JACL project: https://tailrecursion.com/JACL/
;;;;
;;;; Permission is hereby granted, free of charge, to any person obtaining a copy
;;;; of this software and associated documentation files (the "Software"), to deal
;;;; in the Software without restriction, including without limitation the rights
;;;; to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
;;;; copies of the Software, and to permit persons to whom the Software is
;;;; furnished to do so, subject to the following conditions:
;;;;
;;;; The above copyright notice and this permission notice shall be included in all
;;;; copies or substantial portions of the Software.
;;;;
;;;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
;;;; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
;;;; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
;;;; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
;;;; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
;;;; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
;;;; SOFTWARE.
;; Test framework
(defvar *is*)
(defvar *label* @"")
(defun in-module (label)
(\. @|QUnit| (|module| (\. label (|toString|)))))
(defmacro deftest (label &body body)
(let ((is# (gensym)))
`(\. @|QUnit| (|test| (\. ,label (|toString|))
(lambda (,is#)
(declare (jacl:async))
(let ((*is* ,is#))
,@body))))))
(defmacro with-label (label &body body)
`(let ((*label* (\. ,label (|toString|))))
,@body))
(defun assert= (x y &optional (label *label*))
(\. *is* (|strictEqual| x y label)))
(defun assert!= (x y &optional (label *label*))
(\. *is* (|notStrictEqual| x y label)))
(defmacro assert-throws (&body body)
`(\. *is* (|throws| (lambda () ,@body) *label*)))
(defun log (&rest objects)
(declare (ignore objects))
(\. @|console| |log| (|apply| nil @|arguments|)))
(defun start-tests ()
(\. @|QUnit| (|start|)))