Add basic unit tests to user-side compiler
This commit is contained in:
parent
83fdb01368
commit
d25f3795f5
17 changed files with 68 additions and 1 deletions
|
@ -7,8 +7,8 @@
|
||||||
(defpackage #:user-side-compiler
|
(defpackage #:user-side-compiler
|
||||||
(:nicknames #:usc)
|
(:nicknames #:usc)
|
||||||
(:local-nicknames (#:tlk #:user-side-compiler/toolkit))
|
(:local-nicknames (#:tlk #:user-side-compiler/toolkit))
|
||||||
|
(:use #:cl)
|
||||||
(:export #:usc-init #:compile-string-to-bytes
|
(:export #:usc-init #:compile-string-to-bytes
|
||||||
;; Errors
|
;; Errors
|
||||||
#:usc-error #:tokenizer-error #:missing-function-error
|
#:usc-error #:tokenizer-error #:missing-function-error
|
||||||
#:parser-error))
|
#:parser-error))
|
||||||
(:use #:cl))
|
|
||||||
|
|
1
wip-duuqnd/user-side-compiler/tests/invalid-exprs-1.c6l
Normal file
1
wip-duuqnd/user-side-compiler/tests/invalid-exprs-1.c6l
Normal file
|
@ -0,0 +1 @@
|
||||||
|
dbg_print(5 => 3)
|
4
wip-duuqnd/user-side-compiler/tests/package.lisp
Normal file
4
wip-duuqnd/user-side-compiler/tests/package.lisp
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
(cl:in-package #:cl-user)
|
||||||
|
|
||||||
|
(defpackage #:user-side-compiler/test
|
||||||
|
(:use #:cl #:parachute))
|
2
wip-duuqnd/user-side-compiler/tests/syntax-error-1.c6l
Normal file
2
wip-duuqnd/user-side-compiler/tests/syntax-error-1.c6l
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
# Should fail due to the missing commas
|
||||||
|
dbg_print(5 3 1)
|
2
wip-duuqnd/user-side-compiler/tests/syntax-error-2.c6l
Normal file
2
wip-duuqnd/user-side-compiler/tests/syntax-error-2.c6l
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
# Should fail due to the lack of closing parentheses
|
||||||
|
test_2((5 + 6 + 7
|
1
wip-duuqnd/user-side-compiler/tests/syntax-error-3.c6l
Normal file
1
wip-duuqnd/user-side-compiler/tests/syntax-error-3.c6l
Normal file
|
@ -0,0 +1 @@
|
||||||
|
x = 1 + 5 + 6 + if
|
3
wip-duuqnd/user-side-compiler/tests/syntax-error-4.c6l
Normal file
3
wip-duuqnd/user-side-compiler/tests/syntax-error-4.c6l
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
for x from 0 to 12 do
|
||||||
|
test()
|
||||||
|
end
|
3
wip-duuqnd/user-side-compiler/tests/syntax-error-5.c6l
Normal file
3
wip-duuqnd/user-side-compiler/tests/syntax-error-5.c6l
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
if x == 5 then
|
||||||
|
test()
|
||||||
|
en
|
39
wip-duuqnd/user-side-compiler/tests/unit-tests.lisp
Normal file
39
wip-duuqnd/user-side-compiler/tests/unit-tests.lisp
Normal file
|
@ -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)))))
|
|
@ -3,6 +3,7 @@
|
||||||
(defsystem #:user-side-compiler
|
(defsystem #:user-side-compiler
|
||||||
:serial t
|
:serial t
|
||||||
:depends-on (#:closer-mop #:alexandria #:trivial-backtrace)
|
:depends-on (#:closer-mop #:alexandria #:trivial-backtrace)
|
||||||
|
:in-order-to ((asdf:test-op (asdf:test-op #:user-side-compiler/test)))
|
||||||
:components
|
:components
|
||||||
((:file "package")
|
((:file "package")
|
||||||
(:file "error-handling")
|
(:file "error-handling")
|
||||||
|
@ -39,3 +40,14 @@
|
||||||
(:file "code-generator")))
|
(:file "code-generator")))
|
||||||
(:file "interface")
|
(:file "interface")
|
||||||
(:file "binary-test-build")))
|
(: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")))))
|
||||||
|
|
Loading…
Add table
Reference in a new issue