diff --git a/wip-duuqnd/user-side-compiler/package.lisp b/wip-duuqnd/user-side-compiler/package.lisp index de9d877..0255697 100644 --- a/wip-duuqnd/user-side-compiler/package.lisp +++ b/wip-duuqnd/user-side-compiler/package.lisp @@ -7,8 +7,8 @@ (defpackage #:user-side-compiler (:nicknames #:usc) (:local-nicknames (#:tlk #:user-side-compiler/toolkit)) + (:use #:cl) (:export #:usc-init #:compile-string-to-bytes ;; Errors #:usc-error #:tokenizer-error #:missing-function-error #:parser-error)) - (:use #:cl)) diff --git a/wip-duuqnd/user-side-compiler/example-0.c6l b/wip-duuqnd/user-side-compiler/tests/example-0.c6l similarity index 100% rename from wip-duuqnd/user-side-compiler/example-0.c6l rename to wip-duuqnd/user-side-compiler/tests/example-0.c6l diff --git a/wip-duuqnd/user-side-compiler/example-1.c6l b/wip-duuqnd/user-side-compiler/tests/example-1.c6l similarity index 100% rename from wip-duuqnd/user-side-compiler/example-1.c6l rename to wip-duuqnd/user-side-compiler/tests/example-1.c6l diff --git a/wip-duuqnd/user-side-compiler/example-2.c6l b/wip-duuqnd/user-side-compiler/tests/example-2.c6l similarity index 100% rename from wip-duuqnd/user-side-compiler/example-2.c6l rename to wip-duuqnd/user-side-compiler/tests/example-2.c6l diff --git a/wip-duuqnd/user-side-compiler/example-3.c6l b/wip-duuqnd/user-side-compiler/tests/example-3.c6l similarity index 100% rename from wip-duuqnd/user-side-compiler/example-3.c6l rename to wip-duuqnd/user-side-compiler/tests/example-3.c6l diff --git a/wip-duuqnd/user-side-compiler/example-4.c6l b/wip-duuqnd/user-side-compiler/tests/example-4.c6l similarity index 100% rename from wip-duuqnd/user-side-compiler/example-4.c6l rename to wip-duuqnd/user-side-compiler/tests/example-4.c6l diff --git a/wip-duuqnd/user-side-compiler/example-5.c6l b/wip-duuqnd/user-side-compiler/tests/example-5.c6l similarity index 100% rename from wip-duuqnd/user-side-compiler/example-5.c6l rename to wip-duuqnd/user-side-compiler/tests/example-5.c6l diff --git a/wip-duuqnd/user-side-compiler/example-6.c6l b/wip-duuqnd/user-side-compiler/tests/example-6.c6l similarity index 100% rename from wip-duuqnd/user-side-compiler/example-6.c6l rename to wip-duuqnd/user-side-compiler/tests/example-6.c6l diff --git a/wip-duuqnd/user-side-compiler/tests/invalid-exprs-1.c6l b/wip-duuqnd/user-side-compiler/tests/invalid-exprs-1.c6l new file mode 100644 index 0000000..bdf8143 --- /dev/null +++ b/wip-duuqnd/user-side-compiler/tests/invalid-exprs-1.c6l @@ -0,0 +1 @@ +dbg_print(5 => 3) \ No newline at end of file diff --git a/wip-duuqnd/user-side-compiler/tests/package.lisp b/wip-duuqnd/user-side-compiler/tests/package.lisp new file mode 100644 index 0000000..3ddfa26 --- /dev/null +++ b/wip-duuqnd/user-side-compiler/tests/package.lisp @@ -0,0 +1,4 @@ +(cl:in-package #:cl-user) + +(defpackage #:user-side-compiler/test + (:use #:cl #:parachute)) diff --git a/wip-duuqnd/user-side-compiler/tests/syntax-error-1.c6l b/wip-duuqnd/user-side-compiler/tests/syntax-error-1.c6l new file mode 100644 index 0000000..1468185 --- /dev/null +++ b/wip-duuqnd/user-side-compiler/tests/syntax-error-1.c6l @@ -0,0 +1,2 @@ +# Should fail due to the missing commas +dbg_print(5 3 1) \ No newline at end of file diff --git a/wip-duuqnd/user-side-compiler/tests/syntax-error-2.c6l b/wip-duuqnd/user-side-compiler/tests/syntax-error-2.c6l new file mode 100644 index 0000000..dac32f7 --- /dev/null +++ b/wip-duuqnd/user-side-compiler/tests/syntax-error-2.c6l @@ -0,0 +1,2 @@ +# Should fail due to the lack of closing parentheses +test_2((5 + 6 + 7 \ No newline at end of file diff --git a/wip-duuqnd/user-side-compiler/tests/syntax-error-3.c6l b/wip-duuqnd/user-side-compiler/tests/syntax-error-3.c6l new file mode 100644 index 0000000..e6177c3 --- /dev/null +++ b/wip-duuqnd/user-side-compiler/tests/syntax-error-3.c6l @@ -0,0 +1 @@ +x = 1 + 5 + 6 + if \ No newline at end of file diff --git a/wip-duuqnd/user-side-compiler/tests/syntax-error-4.c6l b/wip-duuqnd/user-side-compiler/tests/syntax-error-4.c6l new file mode 100644 index 0000000..273e35f --- /dev/null +++ b/wip-duuqnd/user-side-compiler/tests/syntax-error-4.c6l @@ -0,0 +1,3 @@ +for x from 0 to 12 do + test() +end \ No newline at end of file diff --git a/wip-duuqnd/user-side-compiler/tests/syntax-error-5.c6l b/wip-duuqnd/user-side-compiler/tests/syntax-error-5.c6l new file mode 100644 index 0000000..e3f652c --- /dev/null +++ b/wip-duuqnd/user-side-compiler/tests/syntax-error-5.c6l @@ -0,0 +1,3 @@ +if x == 5 then + test() +en \ No newline at end of file diff --git a/wip-duuqnd/user-side-compiler/tests/unit-tests.lisp b/wip-duuqnd/user-side-compiler/tests/unit-tests.lisp new file mode 100644 index 0000000..9c23885 --- /dev/null +++ b/wip-duuqnd/user-side-compiler/tests/unit-tests.lisp @@ -0,0 +1,39 @@ +(in-package #:user-side-compiler/test) + +(eval-when (:compile-toplevel :load-toplevel :execute) + (use-package '#:parachute)) + +(defun load-example (name) + (uiop:read-file-string + (let ((default (asdf:system-relative-pathname + '#:user-side-compiler/test name))) + (make-pathname + :defaults default + :directory (append (pathname-directory default) '("tests")))))) + +(define-test should-compile () + (let ((*debug-io* (make-string-output-stream))) + (loop :for test :in '("example-1.c6l" "example-2.c6l" "example-3.c6l" + "example-4.c6l" "example-5.c6l" "example-6.c6l") + :do (true + (> (length (handler-bind + ((usc:missing-function-error #'continue)) + (usc:compile-string-to-bytes (load-example test)))) + 0) + test)))) + +(define-test should-not-compile) + +(define-test syntax-errors + :parent should-not-compile + (let ((*debug-io* (make-string-output-stream))) + (loop :for test :in '("syntax-error-1.c6l" "syntax-error-2.c6l" + "syntax-error-3.c6l" "syntax-error-4.c6l" + "syntax-error-5.c6l") + :do (multiple-value-bind (ignore condition) + (ignore-errors + (handler-bind + ((usc:missing-function-error #'continue)) + (usc:compile-string-to-bytes (load-example test)))) + (declare (ignore ignore)) + (of-type usc:parser-error condition test))))) diff --git a/wip-duuqnd/user-side-compiler/user-side-compiler.asd b/wip-duuqnd/user-side-compiler/user-side-compiler.asd index 7974f7c..16a53bf 100644 --- a/wip-duuqnd/user-side-compiler/user-side-compiler.asd +++ b/wip-duuqnd/user-side-compiler/user-side-compiler.asd @@ -3,6 +3,7 @@ (defsystem #:user-side-compiler :serial t :depends-on (#:closer-mop #:alexandria #:trivial-backtrace) + :in-order-to ((asdf:test-op (asdf:test-op #:user-side-compiler/test))) :components ((:file "package") (:file "error-handling") @@ -39,3 +40,14 @@ (:file "code-generator"))) (:file "interface") (:file "binary-test-build"))) + +(defsystem #:user-side-compiler/test + :depends-on (#:user-side-compiler #:parachute) + :perform (asdf:test-op + (op c) + (uiop:symbol-call :parachute :test :user-side-compiler/test)) + :components + ((:module "tests" + :serial t + :components ((:file "package") + (:file "unit-tests")))))