changelog shortlog graph tags branches changeset files file revisions raw help

Mercurial > core / annotate lisp/lib/cli/tests.lisp

changeset 109: a5adbe8640b0
parent: 301fd45bbe73
child: cae8da4b1415
author: ellis <ellis@rwest.io>
date: Sun, 17 Dec 2023 23:30:05 -0500
permissions: -rw-r--r--
description: tests, bug fixes, parser init
96
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
1
 (defpackage :cli/tests
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
2
   (:use :cl :std :rt :cli))
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
3
 
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
4
 (in-package :cli/tests)
109
a5adbe8640b0 tests, bug fixes, parser init
ellis <ellis@rwest.io>
parents: 96
diff changeset
5
 (defsuite :cli)
96
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
6
 (in-suite :cli)
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
7
 
109
a5adbe8640b0 tests, bug fixes, parser init
ellis <ellis@rwest.io>
parents: 96
diff changeset
8
 
a5adbe8640b0 tests, bug fixes, parser init
ellis <ellis@rwest.io>
parents: 96
diff changeset
9
 ;; TODO: needs to be compiled outside scope of test - contender for
a5adbe8640b0 tests, bug fixes, parser init
ellis <ellis@rwest.io>
parents: 96
diff changeset
10
 ;; fixture API
a5adbe8640b0 tests, bug fixes, parser init
ellis <ellis@rwest.io>
parents: 96
diff changeset
11
 (defprompt tpfoo "testing: ")
a5adbe8640b0 tests, bug fixes, parser init
ellis <ellis@rwest.io>
parents: 96
diff changeset
12
 
96
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
13
 (deftest cli-prompt ()
109
a5adbe8640b0 tests, bug fixes, parser init
ellis <ellis@rwest.io>
parents: 96
diff changeset
14
   "Test CLI prompts"
a5adbe8640b0 tests, bug fixes, parser init
ellis <ellis@rwest.io>
parents: 96
diff changeset
15
 
96
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
16
   (defvar tcoll nil)
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
17
   (defvar thist nil)
109
a5adbe8640b0 tests, bug fixes, parser init
ellis <ellis@rwest.io>
parents: 96
diff changeset
18
   (setf *standard-input* (make-string-input-stream 
a5adbe8640b0 tests, bug fixes, parser init
ellis <ellis@rwest.io>
parents: 96
diff changeset
19
 			    (format nil "~A~%~A~%~%" "foobar" "foobar")))
96
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
20
     ;; prompts 
109
a5adbe8640b0 tests, bug fixes, parser init
ellis <ellis@rwest.io>
parents: 96
diff changeset
21
   (is (string= (tpfoo-prompt) "foobar"))
a5adbe8640b0 tests, bug fixes, parser init
ellis <ellis@rwest.io>
parents: 96
diff changeset
22
   (is (string= "foobar"
a5adbe8640b0 tests, bug fixes, parser init
ellis <ellis@rwest.io>
parents: 96
diff changeset
23
                (cli:completing-read "nothing: " tcoll :history thist :default "foobar"))))
96
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
24
 
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
25
 (defparameter *opts* (cli:make-opts (:name foo :global t :description "bar")
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
26
 		       (:name bar :description "foo")))
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
27
 
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
28
 (defparameter *cmd1* (make-cli :cmd :name "holla" :opts *opts* :description "cmd1 description"))
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
29
 (defparameter *cmd2* (make-cli :cmd :name "ayo" :cmds #(*cmd1*) :opts *opts* :description "cmd1 description"))
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
30
 (defparameter *cmds* (cli:make-cmds (:name "baz" :description "baz" :opts *opts*)))
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
31
 
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
32
 (defparameter *cli* (make-cli t :opts *opts* :cmds *cmds* :description "test cli"))
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
33
 
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
34
 (deftest cli ()
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
35
   "test MACS.CLI OOS."
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
36
   (let ((cli *cli*))
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
37
     (is (eq (make-shorty "test") #\t))
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
38
     (is (equalp (proc-args cli '("-f" "baz" "--bar" "fax")) ;; not eql
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
39
 		(make-cli-ast 
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
40
 		 (list (make-cli-node 'opt (find-short-opt cli #\f))
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
41
 		       (make-cli-node 'cmd (find-cmd cli "baz"))
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
42
 		       (make-cli-node 'opt (find-opt cli "bar"))
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
43
 		       (make-cli-node 'arg "fax")))))
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
44
     (is (parse-args cli '("--bar" "baz" "-f" "yaks")))
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
45
     (is (stringp
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
46
 	 (with-output-to-string (s)
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
47
 	   (print-version cli s)
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
48
 	   (print-usage cli s)
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
49
 	   (print-help cli s))))
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
50
     (is (string= "foobar" (parse-str-opt "foobar")))))