Mercurial > core / lisp/lib/cli/tests/clap.lisp
changeset 688: |
517c65b51e6b |
author: |
Richard Westhaver <ellis@rwest.io> |
date: |
Tue, 01 Oct 2024 21:52:17 -0400 |
permissions: |
-rw-r--r-- |
description: |
clap tests |
1 ;;; clap.lisp --- CLAP tests 6 (in-package :cli/tests) 16 (defparameter *opts* '((:name "foo" :description "bar" :kind string) 17 (:name "bar" :description "foo" :kind string))) 18 (defparameter *cmd1* (make-cli :cmd :name "holla" :opts *opts* :description "cmd1 description")) 19 (defparameter *cmd2* (make-cli :cmd :name "ayo" :cmds (vector *cmd1*) :opts *opts* :description "cmd1 description")) 20 (defparameter *cmd3* (make-cli :cmd :name "flub" :opts *opts* :thunk 'flub-thunk)) 21 (defparameter *cmds* (make-cmds (list `(:name "baz" :description "baz" :opts ,*opts*) *cmd1* *cmd2* *cmd3*))) 23 (defparameter *cli* (make-cli :cli :opts *opts* :cmds *cmds* :description "test cli")) 25 (deftest mixed-args () 26 (with-cli (*cli*) '("--foo" "bar" "flub") 27 (is (string= "bar" (cli-opt-val (aref (opts *cli*) 0)))) 28 (is (null (cli-args *cli*))) 32 "Validate the CLI/CLAP/AST parser." 33 (is (string= (cli-opt-name (cli-node-form (car (ast (proc-args *cli* '("--foo" "1")))))) 35 (signals clap-unknown-argument 36 (proc-args *cli* '("--log" "default" "--foo=11")))) 38 (defmain foo-main (:exit nil) 40 (log:trace! "defmain is OK") 44 (is (null (funcall #'foo-main)))) 46 (deftest clap-basic (:skip t) 47 "test basic CLAP functionality." 48 (with-cli (*cli* opts cmds args) *args* 49 (is (eq (make-shorty "test") #\t)) 50 (is (equalp (proc-args *cli* '("-f" "baz" "--bar=fax")) ;; not eql 52 (list (make-cli-node 'opt (find-short-opts *cli* #\f)) 53 (make-cli-node 'cmd (find-cmd *cli* "baz")) 54 (make-cli-node 'opt (find-opts *cli* "bar")) 55 (make-cli-node 'arg "fax"))))) 56 (is (parse-args *cli* '("--bar" "baz" "-f" "yaks"))) 58 (with-output-to-string (s) 59 (print-version *cli* s) 61 (print-help *cli* s)))) 62 (is (string= "foobar" (cli/clap:parse-string-opt "foobar"))) 67 (make-opt-parser trivial *arg*) 68 (is (reduce (lambda (x y) (and x y)) 69 (loop for k across *cli-opt-kinds* collect (cli-opt-kind-p k)))) 70 (is (parse-trivial-opt t)) 71 (is (null (parse-trivial-opt nil))))