aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAryadev Chavali <aryadev@aryadevchavali.com>2025-02-21 13:53:33 +0000
committerAryadev Chavali <aryadev@aryadevchavali.com>2025-02-21 13:53:33 +0000
commitdc1f3d89706d8a038747b065110546c9351e7796 (patch)
tree218243bf7a8b981af8c3690148aa92b54660aa83
parentcc53e6ec42316262e9ad87230cb6892949d7a42b (diff)
downloadcantedraw-dc1f3d89706d8a038747b065110546c9351e7796.tar.gz
cantedraw-dc1f3d89706d8a038747b065110546c9351e7796.tar.bz2
cantedraw-dc1f3d89706d8a038747b065110546c9351e7796.zip
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.
-rw-r--r--bob.lisp8
-rw-r--r--cantedraw.asd17
-rw-r--r--tests/macros.lisp29
-rw-r--r--tests/main.lisp24
4 files changed, 76 insertions, 2 deletions
diff --git a/bob.lisp b/bob.lisp
index 5d08c7f..16c5faa 100644
--- a/bob.lisp
+++ b/bob.lisp
@@ -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))
diff --git a/cantedraw.asd b/cantedraw.asd
index 830a4c6..be1b17e 100644
--- a/cantedraw.asd
+++ b/cantedraw.asd
@@ -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))
diff --git a/tests/macros.lisp b/tests/macros.lisp
new file mode 100644
index 0000000..e86fbb3
--- /dev/null
+++ b/tests/macros.lisp
@@ -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))))
diff --git a/tests/main.lisp b/tests/main.lisp
new file mode 100644
index 0000000..0e8e462
--- /dev/null
+++ b/tests/main.lisp
@@ -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)))