Create a unit test system

Setup cantedraw/tests with a test-system record, as well as linking it
back to cantedraw so we can run test-system on cantedraw and run the
tests.

Using parachute, we can setup a suite of unit tests for each package.
For each package in src/ or lib/ we'll write a separate unit test
suite with tests for all the public exposing functionality.

I've setup a main suite in cantedraw/tests/main which will depend on
each of the unit test suites so we can run the tests all at once.

Currently we have one test for the --> macro.
This commit is contained in:
2025-02-21 13:53:33 +00:00
parent cc53e6ec42
commit dc1f3d8970
4 changed files with 76 additions and 2 deletions

View File

@@ -24,13 +24,17 @@
(defpackage bob
(:use :cl)
(:export :build :qload))
(:export :build :qload :tests))
(in-package :bob)
(defun qload ()
(ql:quickload :cantedraw))
(defun build ()
(defun tests ()
(qload)
(asdf:test-system :cantedraw))
(defun build ()
(tests)
(asdf:make :cantedraw))

View File

@@ -2,6 +2,7 @@
:author "Aryadev Chavali <aryadev@aryadevchavali.com>"
:license "GPL-2"
:depends-on (:alexandria)
:in-order-to ((asdf:test-op (asdf:test-op :cantedraw/tests)))
:components ((:file "packages")
(:module "lib"
:components
@@ -17,6 +18,22 @@
:build-pathname "bin/cantedraw"
:entry-point "cantedraw.main:start")
(asdf:defsystem "cantedraw/tests"
:author "Aryadev Chavali <aryadev@aryadevchavali.com>"
:license "GPL-2"
:depends-on (:cantedraw
:parachute)
:components ((:module "tests"
:components
((:file "macros")
;; (:file "functions")
;; (:file "model")
;; (:file "player")
;; (:file "game")
(:file "main"))))
:perform (test-op (op c) (uiop:symbol-call :parachute :test
:cantedraw/tests/main)))
;; Compress image for smaller binary size.
#+nil
(defmethod asdf:perform ((o asdf:image-op) (c asdf:system))

29
tests/macros.lisp Normal file
View File

@@ -0,0 +1,29 @@
;;; main.lisp - 2025-02-16
;; Copyright (C) 2025 Aryadev Chavali
;; This program is distributed in the hope that it will be useful, but WITHOUT
;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
;; FOR A PARTICULAR PURPOSE. See the GNU General Public License Version 2 for
;; details.
;; You may distribute and modify this code under the terms of the GNU General
;; Public License Version 2, which you should have received a copy of along with
;; this program. If not, please go to <https://www.gnu.org/licenses/>.
;;; Code:
(defpackage cantedraw/tests/macros
(:use :cl :cantedraw.lib.macros
:parachute))
(in-package :cantedraw/tests/macros)
(define-test macro-test)
(define-test (macro-test "-->")
(true (null (--> x)))
(is eq 'a (--> x 'a))
(is eq 2 (--> x 1 (1+ x)))
(is eq 2 (--> x 1 1+))
(is string= "World!" (--> _ "Hello" (format nil "~a World!" _) (subseq _ 6))))

24
tests/main.lisp Normal file
View File

@@ -0,0 +1,24 @@
;;; main.lisp - 2025-02-20
;; Copyright (C) 2025 Aryadev Chavali
;; This program is distributed in the hope that it will be useful, but WITHOUT
;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
;; FOR A PARTICULAR PURPOSE. See the GNU General Public License Version 2 for
;; details.
;; You may distribute and modify this code under the terms of the GNU General
;; Public License Version 2, which you should have received a copy of along with
;; this program. If not, please go to <https://www.gnu.org/licenses/>.
;;; Code:
(defpackage cantedraw/tests/main
(:use :cl :parachute))
(in-package :cantedraw/tests/main)
(define-test all
:serial t
:depends-on ((cantedraw/tests/macros macro-test)))