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
|
||||
(: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))
|
||||
|
|
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
|
||||
: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")))))
|
||||
|
|
Loading…
Add table
Reference in a new issue