git » jacl.git » master » tree

[master] / test.lisp

;;;; 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|)))