Package: guile;
Reported by: Dale Mellor <guile-qf1qmg <at> rdmp.org>
Date: Sun, 19 Apr 2020 18:36:02 UTC
Severity: normal
Tags: patch
Merged with 40720, 40721, 40722, 40723
Done: Dale Mellor <guile-qf1qmg <at> rdmp.org>
Bug is archived. No further changes may be made.
View this message in rfc822 format
From: Dale Mellor <guile-qf1qmg <at> rdmp.org> To: 40719 <at> debbugs.gnu.org Subject: bug#40719: [PATCH 2/4] test *broken*: augmented tests of (ice-9 getopt-long) Date: Thu, 07 May 2020 18:03:12 +0100
This is to prepare the ground for some test-driven development mainly to make the module satisfy the needs of the GNU Mcron project. The main requirement is for the module to be more intelligent when dealing with optional values to command-line options: if the following argument looks like a new option then treat it as such, otherwise treat it as the value of the current option. The particular case is mcronʼs -s option which needs to assume a default value of “8” if there is not one on the command line, but currently ‘mcron -s input_file’ fails badly. Other tests introduced involve allowing negative numbers as option values, and dealing with various cases of option-processing termination. * test-suite/tests/getopt-long.test: new code added. --- test-suite/tests/getopt-long.test | 88 ++++++++++++++++++++++++++----- 1 file changed, 76 insertions(+), 12 deletions(-) diff --git a/test-suite/tests/getopt-long.test b/test-suite/tests/getopt-long.test index a837b0799..b0530fe62 100644 --- a/test-suite/tests/getopt-long.test +++ b/test-suite/tests/getopt-long.test @@ -78,8 +78,8 @@ (with-test-prefix "exported procs" - (pass-if "`option-ref' defined" (defined? 'option-ref)) - (pass-if "`getopt-long' defined" (defined? 'getopt-long))) + (pass-if "‘option-ref’ defined" (defined? 'option-ref)) + (pass-if "‘getopt-long’ defined" (defined? 'getopt-long))) (with-test-prefix "specifying predicate" @@ -150,6 +150,15 @@ (test "--bar --foo" '((()) (foo . #t) (bar . #t)))) + (pass-if "long option with equals and space" + (test "--foo= test" + '((() "test") (foo . #t)))) + + (pass-if "long option with equals and space, not allowed a value" + (A-TEST "--foo= test" + '((foo (value #f))) + '((() "test") (foo . #t)))) + (pass-if "--=" (test "--=" '((() "--=")))) @@ -167,16 +176,16 @@ (bar))) 'foo #f))) - (pass-if "option-ref `--foo 4'" + (pass-if "option-ref ‘--foo 4’" (test4 "4" "--foo" "4")) - (pass-if "option-ref `-f 4'" + (pass-if "option-ref ‘-f 4’" (test4 "4" "-f" "4")) - (pass-if "option-ref `-f4'" + (pass-if "option-ref ‘-f4’" (test4 "4" "-f4")) - (pass-if "option-ref `--foo=4'" + (pass-if "option-ref ‘--foo=4’" (test4 "4" "--foo=4")) ) @@ -262,8 +271,8 @@ (with-test-prefix "apples-blimps-catalexis example" (define spec '((apples (single-char #\a)) - (blimps (single-char #\b) (value #t)) - (catalexis (single-char #\c) (value #t)))) + (blimps (single-char #\b) (value #t)) + (catalexis (single-char #\c) (value #t)))) (define (test8 . args) (equal? (sort (getopt-long (cons "foo" args) spec) @@ -281,9 +290,38 @@ (pass-if "normal 2" (test8 "-ab" "bang" "-c" "couth")) (pass-if "normal 3" (test8 "-ac" "couth" "-b" "bang")) - (pass-if-fatal-exception "bad ordering causes missing option" - exception:option-must-have-arg - (test8 "-abc" "couth" "bang")) + + ;;;; Dale Mellor 2020-04-14 + ;;;; + ;;;; I disagree with this test: to my mind 'c' is 'b's argument, and + ;;;; the other two arguments are non-options which get passed + ;;;; through; there should not be an exception. + + ;; (pass-if-fatal-exception "bad ordering causes missing option" + ;; exception:option-must-have-arg + ;; (test8 "-abc" "couth" "bang")) + + (pass-if "clumped options with trailing mandatory value" + (A-TEST "-abc couth bang" + spec + '((() "couth" "bang") (apples . #t) (blimps . "c")))) + + (pass-if "clumped options with trailing optional value" + (A-TEST "-abc couth bang" + '((apples (single-char #\a)) + (blimps (single-char #\b) + (value optional))) + '((() "couth" "bang") (apples . #t) (blimps . "c")))) + + (pass-if "clumped options with trailing optional value" + (A-TEST "-abc couth bang" + '((apples (single-char #\a)) + (blimps (single-char #\b) + (value optional)) + (catalexis (single-char #\c) + (value #t))) + '((() "bang") + (apples . #t) (blimps . #t) (catalexis . "couth")))) ) @@ -326,12 +364,19 @@ (with-test-prefix "stop-at-first-non-option" (pass-if "guile-tools compile example" - (equal? (getopt-long '("guile-tools" "compile" "-Wformat" "eval.scm" "-o" "eval.go") + (equal? (getopt-long '("guile-tools" "compile" "-Wformat" + "eval.scm" "-o" "eval.go") '((help (single-char #\h)) (version (single-char #\v))) #:stop-at-first-non-option #t) '((() "compile" "-Wformat" "eval.scm" "-o" "eval.go")))) + (pass-if "stop after option" + (equal? (getopt-long '("foo" "-a" "3" "4" "-b" "4") + '((about (single-char #\a) (value #t)) + (breathe (single-char #\b) (value #t))) + #:stop-at-first-non-option #t) + '((() "4" "-b" "4") (about . "3")))) ) @@ -356,6 +401,11 @@ '((() "--ben" "dave" "--charles") (abby . #t)) #:stop-at-first-non-option #t)) + (pass-if "first non-option before marker" + (test "--abby dave --ben -- --charles" + '((() "dave" "--ben" "--" "--charles") (abby . #t)) + #:stop-at-first-non-option #t)) + (pass-if "double end marker" (test "--abby -- -- --ben" '((() "--" "--ben") (abby . #t)))) @@ -409,6 +459,14 @@ (pass-if "non-predicated -o-1" (test "-c-1" '((()) (charles . "-1")))) + (pass-if-fatal-exception "non-predicated --optional -1" + exception:no-such-option + (test "--charles -1" '((()) (charles . "-1")))) + + (pass-if-fatal-exception "non-predicated -o -1" + exception:no-such-option + (test "-c -1" '((()) (charles . "-1")))) + (pass-if "non-predicated --mandatory=-1" (test "--dave=-1" '((()) (dave . "-1")))) @@ -444,9 +502,15 @@ (pass-if "-s 8" (test "-s 8 file" '((() "file") (schedule . "8")))) + (pass-if "-s file" + (test "-s file" '((() "file") (schedule . #t)))) + (pass-if "-sd file" (test "-sd file" '((() "file") (daemon . #t) (schedule . #t)))) + (pass-if "-ds file" + (test "-ds file" '((() "file") (daemon . #t) (schedule . #t)))) + (pass-if "--schedule=8" (test "--schedule=8 file" '((() "file") (schedule . "8")))) -- 2.20.1
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.