Mercurial > octave
annotate scripts/miscellaneous/inputParser.m @ 28563:5a07c798eb08
avoid function call input or output argument number mismatch
Don't call functions with more inputs or outputs than they are defined
to accept. For example, always define graphics callback functions to
accept at least two arguments. To avoid creating unused variable
names, they may be defined as ignored (~).
* importdata.m: Call fileparts with three outputs, not four.
* inputParser.m: Define default validation function with ignored input.
* odemergeopts.m: Accept additional SOLVER argument.
* annotation.m, legend.m, movfun.m, bug-55321.tst: Define callback
functions with two inputs.
* annotation.m (addbasemenu): Also accept varargin.
* graphics.cc: Fix tests.
* pkg/private/install.m: Don't pass extra global_install argument to
getarchdir.
* sparse/private/__alltohandles__.m: Define function handles with two
inputs where needed.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Sat, 11 Jul 2020 10:15:57 -0400 |
parents | 8dbe4eec1741 |
children | 28de41192f3c |
rev | line source |
---|---|
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
1 ######################################################################## |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
2 ## |
27919
1891570abac8
update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents:
27918
diff
changeset
|
3 ## Copyright (C) 2011-2020 The Octave Project Developers |
27918
b442ec6dda5c
use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents:
27216
diff
changeset
|
4 ## |
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
5 ## See the file COPYRIGHT.md in the top-level directory of this |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
6 ## distribution or <https://octave.org/copyright/>. |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
7 ## |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
8 ## This file is part of Octave. |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
9 ## |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
24491
diff
changeset
|
10 ## Octave is free software: you can redistribute it and/or modify it |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
11 ## under the terms of the GNU General Public License as published by |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
24491
diff
changeset
|
12 ## the Free Software Foundation, either version 3 of the License, or |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22559
diff
changeset
|
13 ## (at your option) any later version. |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
14 ## |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
15 ## Octave is distributed in the hope that it will be useful, but |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
16 ## WITHOUT ANY WARRANTY; without even the implied warranty of |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22559
diff
changeset
|
17 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22559
diff
changeset
|
18 ## GNU General Public License for more details. |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
19 ## |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
20 ## You should have received a copy of the GNU General Public License |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
21 ## along with Octave; see the file COPYING. If not, see |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
24491
diff
changeset
|
22 ## <https://www.gnu.org/licenses/>. |
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
23 ## |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
24 ######################################################################## |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
25 |
28378
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
26 classdef inputParser < handle |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
27 |
28378
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
28 ## -*- texinfo -*- |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
29 ## @deftypefn {} {@var{p} =} inputParser () |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
30 ## Create object @var{p} of the inputParser class. |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
31 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
32 ## This class is designed to allow easy parsing of function arguments. The |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
33 ## class supports four types of arguments: |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
34 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
35 ## @enumerate |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
36 ## @item mandatory (see @code{addRequired}); |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
37 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
38 ## @item optional (see @code{addOptional}); |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
39 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
40 ## @item named (see @code{addParameter}); |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
41 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
42 ## @item switch (see @code{addSwitch}). |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
43 ## @end enumerate |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
44 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
45 ## After defining the function API with these methods, the supplied arguments |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
46 ## can be parsed with the @code{parse} method and the parsing results |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
47 ## accessed with the @code{Results} accessor. |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
48 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
49 ## @end deftypefn |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
50 ## @deftypefn {} {} inputParser.Parameters |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
51 ## Return list of parameter names already defined. |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
52 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
53 ## @end deftypefn |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
54 ## @deftypefn {} {} inputParser.Results |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
55 ## Return structure with argument names as fieldnames and corresponding values. |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
56 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
57 ## @end deftypefn |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
58 ## @deftypefn {} {} inputParser.Unmatched |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
59 ## Return structure similar to @code{Results}, but for unmatched parameters. |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
60 ## See the @code{KeepUnmatched} property. |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
61 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
62 ## @end deftypefn |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
63 ## @deftypefn {} {} inputParser.UsingDefaults |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
64 ## Return cell array with the names of arguments that are using default values. |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
65 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
66 ## @end deftypefn |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
67 ## @deftypefn {} {} inputParser.CaseSensitive = @var{boolean} |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
68 ## Set whether matching of argument names should be case sensitive. Defaults |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
69 ## to false. |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
70 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
71 ## @end deftypefn |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
72 ## @deftypefn {} {} inputParser.FunctionName = @var{name} |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
73 ## Set function name to be used in error messages; Defaults to empty string. |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
74 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
75 ## @end deftypefn |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
76 ## @deftypefn {} {} inputParser.KeepUnmatched = @var{boolean} |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
77 ## Set whether an error should be given for non-defined arguments. Defaults to |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
78 ## false. If set to true, the extra arguments can be accessed through |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
79 ## @code{Unmatched} after the @code{parse} method. Note that since |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
80 ## @code{Switch} and @code{Parameter} arguments can be mixed, it is |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
81 ## not possible to know the unmatched type. If argument is found unmatched |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
82 ## it is assumed to be of the @code{Parameter} type and it is expected to |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
83 ## be followed by a value. |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
84 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
85 ## @end deftypefn |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
86 ## @deftypefn {} {} inputParser.StructExpand = @var{boolean} |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
87 ## Set whether a structure can be passed to the function instead of |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
88 ## parameter/value pairs. Defaults to true. |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
89 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
90 ## The following example shows how to use this class: |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
91 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
92 ## @example |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
93 ## function check (varargin) |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
94 ## @c The next two comments need to be indented by one for alignment |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
95 ## p = inputParser (); # create object |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
96 ## p.FunctionName = "check"; # set function name |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
97 ## p.addRequired ("pack", @@ischar); # mandatory argument |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
98 ## p.addOptional ("path", pwd(), @@ischar); # optional argument |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
99 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
100 ## ## create a function handle to anonymous functions for validators |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
101 ## val_mat = @@(x) isvector (x) && all (x <= 1) && all (x >= 0); |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
102 ## p.addOptional ("mat", [0 0], val_mat); |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
103 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
104 ## ## create two arguments of type "Parameter" |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
105 ## val_type = @@(x) any (strcmp (x, @{"linear", "quadratic"@})); |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
106 ## p.addParameter ("type", "linear", val_type); |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
107 ## val_verb = @@(x) any (strcmp (x, @{"low", "medium", "high"@})); |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
108 ## p.addParameter ("tolerance", "low", val_verb); |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
109 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
110 ## ## create a switch type of argument |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
111 ## p.addSwitch ("verbose"); |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
112 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
113 ## p.parse (varargin@{:@}); # Run created parser on inputs |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
114 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
115 ## ## the rest of the function can access inputs by using p.Results. |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
116 ## ## for example, get the tolerance input with p.Results.tolerance |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
117 ## endfunction |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
118 ## @end example |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
119 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
120 ## @example |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
121 ## @group |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
122 ## check ("mech"); # valid, use defaults for other arguments |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
123 ## check (); # error, one argument is mandatory |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
124 ## check (1); # error, since ! ischar |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
125 ## check ("mech", "~/dev"); # valid, use defaults for other arguments |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
126 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
127 ## check ("mech", "~/dev", [0 1 0 0], "type", "linear"); # valid |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
128 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
129 ## ## following is also valid. Note how the Switch argument type can |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
130 ## ## be mixed into or before the Parameter argument type (but it |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
131 ## ## must still appear after any Optional argument). |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
132 ## check ("mech", "~/dev", [0 1 0 0], "verbose", "tolerance", "high"); |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
133 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
134 ## ## following returns an error since not all optional arguments, |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
135 ## ## 'path' and 'mat', were given before the named argument 'type'. |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
136 ## check ("mech", "~/dev", "type", "linear"); |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
137 ## @end group |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
138 ## @end example |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
139 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
140 ## @emph{Note 1}: A function can have any mixture of the four API types but |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
141 ## they must appear in a specific order. @code{Required} arguments must be |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
142 ## first and can be followed by any @code{Optional} arguments. Only |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
143 ## the @code{Parameter} and @code{Switch} arguments may be mixed |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
144 ## together and they must appear at the end. |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
145 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
146 ## @emph{Note 2}: If both @code{Optional} and @code{Parameter} arguments |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
147 ## are mixed in a function API then once a string Optional argument fails to |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
148 ## validate it will be considered the end of the @code{Optional} |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
149 ## arguments. The remaining arguments will be compared against any |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
150 ## @code{Parameter} or @code{Switch} arguments. |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
151 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
152 ## @seealso{nargin, validateattributes, validatestring, varargin} |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
153 ## @end deftypefn |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
154 |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
155 properties |
21578
683a1beee538
maint: Use "FIXME:" for all code blocks needing further attention.
Rik <rik@octave.org>
parents:
21568
diff
changeset
|
156 ## FIXME: set input checking for these properties |
21568
3d60ed163b70
maint: Eliminate bad spacing around '='.
Rik <rik@octave.org>
parents:
21546
diff
changeset
|
157 CaseSensitive = false; |
3d60ed163b70
maint: Eliminate bad spacing around '='.
Rik <rik@octave.org>
parents:
21546
diff
changeset
|
158 FunctionName = ""; |
3d60ed163b70
maint: Eliminate bad spacing around '='.
Rik <rik@octave.org>
parents:
21546
diff
changeset
|
159 KeepUnmatched = false; |
21937
55f7de37b618
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
160 PartialMatching = false; # FIXME: unimplemented (and default should be true) |
21667
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
161 StructExpand = true; |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
162 endproperties |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
163 |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
164 properties (SetAccess = protected) |
19833
9fc020886ae9
maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19597
diff
changeset
|
165 Parameters = cell (); |
9fc020886ae9
maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19597
diff
changeset
|
166 Results = struct (); |
9fc020886ae9
maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19597
diff
changeset
|
167 Unmatched = struct (); |
9fc020886ae9
maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19597
diff
changeset
|
168 UsingDefaults = cell (); |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
169 endproperties |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
170 |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
171 properties (Access = protected) |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
172 ## Since Required and Optional are ordered, they get a cell array of |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
173 ## structs with the fields "name", "def" (default), and "val" (validator). |
23164
99ca557fd34f
maint: Use Octave whitespace conventions for scripts/general/inputParser.m.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
22755
diff
changeset
|
174 Required = cell (); |
99ca557fd34f
maint: Use Octave whitespace conventions for scripts/general/inputParser.m.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
22755
diff
changeset
|
175 Optional = cell (); |
21677
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
176 ## Parameter and Switch are unordered so we have a struct whose fieldnames |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
177 ## are the argname, and values are a struct with fields "def" and "val" |
23164
99ca557fd34f
maint: Use Octave whitespace conventions for scripts/general/inputParser.m.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
22755
diff
changeset
|
178 Parameter = struct (); |
99ca557fd34f
maint: Use Octave whitespace conventions for scripts/general/inputParser.m.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
22755
diff
changeset
|
179 Switch = struct (); |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
180 |
21677
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
181 ## List of Parameter and Switch names to ease searches |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
182 ParameterNames = cell (); |
23164
99ca557fd34f
maint: Use Octave whitespace conventions for scripts/general/inputParser.m.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
22755
diff
changeset
|
183 SwitchNames = cell (); |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
184 |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
185 ## When checking for fieldnames in a Case Insensitive way, this variable |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
186 ## holds the correct identifier for the last searched named using the |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
187 ## is_argname method. |
21568
3d60ed163b70
maint: Eliminate bad spacing around '='.
Rik <rik@octave.org>
parents:
21546
diff
changeset
|
188 last_name = ""; |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
189 endproperties |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
190 |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
191 properties (Access = protected, Constant = true) |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
192 ## Default validator, always returns scalar true. |
28563
5a07c798eb08
avoid function call input or output argument number mismatch
John W. Eaton <jwe@octave.org>
parents:
28378
diff
changeset
|
193 def_val = @(~) true; |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
194 endproperties |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
195 |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
196 methods |
21668
58f5a6347851
inpputParser.m: fix display method.
Carnë Draug <carandraug@octave.org>
parents:
21667
diff
changeset
|
197 function set.PartialMatching (this, val) |
58f5a6347851
inpputParser.m: fix display method.
Carnë Draug <carandraug@octave.org>
parents:
21667
diff
changeset
|
198 if (val) |
58f5a6347851
inpputParser.m: fix display method.
Carnë Draug <carandraug@octave.org>
parents:
21667
diff
changeset
|
199 error ("inputParser: PartialMatching is not yet implemented"); |
58f5a6347851
inpputParser.m: fix display method.
Carnë Draug <carandraug@octave.org>
parents:
21667
diff
changeset
|
200 endif |
58f5a6347851
inpputParser.m: fix display method.
Carnë Draug <carandraug@octave.org>
parents:
21667
diff
changeset
|
201 endfunction |
58f5a6347851
inpputParser.m: fix display method.
Carnë Draug <carandraug@octave.org>
parents:
21667
diff
changeset
|
202 |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
203 function addRequired (this, name, val = inputParser.def_val) |
28378
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
204 |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
205 ## -*- texinfo -*- |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
206 ## @deftypefn {} {} addRequired (@var{argname}) |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
207 ## @deftypefnx {} {} addRequired (@var{argname}, @var{validator}) |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
208 ## Add new mandatory argument to the object @var{parser} of inputParser class. |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
209 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
210 ## This method belongs to the inputParser class and implements an ordered |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
211 ## arguments type of API. |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
212 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
213 ## @var{argname} must be a string with the name of the new argument. The order |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
214 ## in which new arguments are added with @code{addrequired}, represents the |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
215 ## expected order of arguments. |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
216 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
217 ## @var{validator} is an optional function handle to validate the given values |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
218 ## for the argument with name @var{argname}. Alternatively, a function name |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
219 ## can be used. |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
220 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
221 ## See @code{help inputParser} for examples. |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
222 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
223 ## @emph{Note}: this can be used together with the other type of arguments but |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
224 ## it must be the first (see @code{@@inputParser}). |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
225 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
226 ## @end deftypefn |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
227 |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
228 if (nargin < 2 || nargin > 3) |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
229 print_usage (); |
21677
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
230 elseif (numel (this.Optional) || numfields (this.Parameter) |
20937
3b2cc6ef0624
use numfields (x) instead of numel (fieldnames (x))
John W. Eaton <jwe@octave.org>
parents:
20852
diff
changeset
|
231 || numfields (this.Switch)) |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
232 error (["inputParser.addRequired: can't have a Required argument " ... |
21677
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
233 "after Optional, Parameter, or Switch"]); |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
234 endif |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
235 this.validate_name ("Required", name); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
236 this.Required{end+1} = struct ("name", name, "val", val); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
237 endfunction |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
238 |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
239 function addOptional (this, name, def, val = inputParser.def_val) |
28378
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
240 |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
241 ## -*- texinfo -*- |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
242 ## @deftypefn {} {} addOptional (@var{argname}, @var{default}) |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
243 ## @deftypefnx {} {} addOptional (@var{argname}, @var{default}, @var{validator}) |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
244 ## Add new optional argument to the object @var{parser} of the class |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
245 ## inputParser to implement an ordered arguments type of API |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
246 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
247 ## @var{argname} must be a string with the name of the new argument. The order |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
248 ## in which new arguments are added with @code{addOptional}, represents the |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
249 ## expected order of arguments. |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
250 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
251 ## @var{default} will be the value used when the argument is not specified. |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
252 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
253 ## @var{validator} is an optional anonymous function to validate the given |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
254 ## values for the argument with name @var{argname}. Alternatively, a |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
255 ## function name can be used. |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
256 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
257 ## See @code{help inputParser} for examples. |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
258 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
259 ## @emph{Note}: if a string argument does not validate, it will be considered a |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
260 ## ParamValue key. If an optional argument is not given a validator, anything |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
261 ## will be valid, and so any string will be considered will be the value of the |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
262 ## optional argument (in @sc{matlab}, if no validator is given and argument is |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
263 ## a string it will also be considered a ParamValue key). |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
264 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
265 ## @end deftypefn |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
266 |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
267 if (nargin < 3 || nargin > 4) |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
268 print_usage (); |
21677
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
269 elseif (numfields (this.Parameter) || numfields (this.Switch)) |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
270 error (["inputParser.Optional: can't have Optional arguments " ... |
21677
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
271 "after Parameter or Switch"]); |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
272 endif |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
273 this.validate_name ("Optional", name); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
274 this.Optional{end+1} = struct ("name", name, "def", def, "val", val); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
275 endfunction |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
276 |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
277 function addParamValue (this, name, def, val = inputParser.def_val) |
28378
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
278 |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
279 ## -*- texinfo -*- |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
280 ## @deftypefn {} {} addParamValue (@var{argname}, @var{default}) |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
281 ## @deftypefnx {} {} addParamValue (@var{argname}, @var{default}, @var{validator}) |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
282 ## Add new parameter to the object @var{parser} of the class inputParser to |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
283 ## implement a name/value pair type of API. |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
284 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
285 ## This is an alias for @code{addParameter} method without the |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
286 ## @qcode{"PartialMatchPriority"} option. See it for the help text. |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
287 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
288 ## @end deftypefn |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
289 |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
290 if (nargin < 3 || nargin > 4) |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
291 print_usage (); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
292 endif |
21677
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
293 this.addParameter (name, def, val); |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
294 endfunction |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
295 |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
296 function addParameter (this, name, def, varargin) |
28378
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
297 |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
298 ## -*- texinfo -*- |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
299 ## @deftypefn {} {} addParameter (@var{argname}, @var{default}) |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
300 ## @deftypefnx {} {} addParameter (@var{argname}, @var{default}, @var{validator}) |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
301 ## Add new parameter to the object @var{parser} of the class inputParser to |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
302 ## implement a name/value pair type of API. |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
303 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
304 ## @var{argname} must be a string with the name of the new parameter. |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
305 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
306 ## @var{default} will be the value used when the parameter is not specified. |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
307 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
308 ## @var{validator} is an optional function handle to validate the given values |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
309 ## for the parameter with name @var{argname}. Alternatively, a function name |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
310 ## can be used. |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
311 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
312 ## See @code{help inputParser} for examples. |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
313 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
314 ## @end deftypefn |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
315 |
21677
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
316 if (nargin < 3 || nargin > 6) |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
317 print_usage (); |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
318 endif |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
319 |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
320 n_opt = numel (varargin); |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
321 |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
322 if (n_opt == 0 || n_opt == 2) |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
323 val = inputParser.def_val; |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
324 else # n_opt is 1 or 3 |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
325 val = varargin{1}; |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
326 endif |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
327 |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
328 if (n_opt == 0 || n_opt == 1) |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
329 match_priority = 1; |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
330 else # n_opt is 2 or 3 |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
331 if (! strcmpi (varargin{end-1}, "PartialMatchPriority")) |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
332 error ("inputParser.addParameter: unrecognized option"); |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
333 endif |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
334 match_priority = varargin{end}; |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
335 validateattributes (match_priority, {"numeric"}, {"positive", "integer"}, |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
336 "inputParser.addParameter", |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
337 "PartialMatchPriority"); |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
338 endif |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
339 |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
340 this.validate_name ("Parameter", name); |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
341 this.Parameter.(name).def = def; |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
342 this.Parameter.(name).val = val; |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
343 endfunction |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
344 |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
345 function addSwitch (this, name) |
28378
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
346 |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
347 ## -*- texinfo -*- |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
348 ## @deftypefn {} {} addSwitch (@var{argname}) |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
349 ## Add new switch type of argument to the object @var{parser} of inputParser |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
350 ## class. |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
351 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
352 ## This method belongs to the inputParser class and implements a switch |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
353 ## arguments type of API. |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
354 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
355 ## @var{argname} must be a string with the name of the new argument. Arguments |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
356 ## of this type can be specified at the end, after @code{Required} and |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
357 ## @code{Optional}, and mixed between the @code{Parameter}. They default to |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
358 ## false. If one of the arguments supplied is a string like @var{argname}, |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
359 ## then after parsing the value of @var{parse}.Results.@var{argname} will be |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
360 ## true. |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
361 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
362 ## See @code{help inputParser} for examples. |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
363 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
364 ## @end deftypefn |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
365 |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
366 if (nargin != 2) |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
367 print_usage (); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
368 endif |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
369 this.validate_name ("Switch", name); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
370 this.Switch.(name).def = false; |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
371 endfunction |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
372 |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
373 function parse (this, varargin) |
28378
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
374 |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
375 ## -*- texinfo -*- |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
376 ## @deftypefn {} {} parse (@var{varargin}) |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
377 ## Parses and validates list of arguments according to object @var{parser} of |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
378 ## the class inputParser. |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
379 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
380 ## After parsing, the results can be accessed with the @code{Results} |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
381 ## accessor. See @code{help inputParser} for a more complete description. |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
382 ## |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
383 ## @end deftypefn |
8dbe4eec1741
move classdef docstring comments inside classdef definitions
John W. Eaton <jwe@octave.org>
parents:
28187
diff
changeset
|
384 |
22541
4b7ab10b5c38
inputParser clear previous results before new parse (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents:
22489
diff
changeset
|
385 this.Results = struct (); |
22559
27f2a7a3b55d
inputParser reset more parse results before new parse. (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents:
22541
diff
changeset
|
386 this.Unmatched = struct (); |
27f2a7a3b55d
inputParser reset more parse results before new parse. (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents:
22541
diff
changeset
|
387 this.UsingDefaults = cell (); |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
388 if (numel (varargin) < numel (this.Required)) |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
389 if (this.FunctionName) |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
390 print_usage (this.FunctionName); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
391 else |
20726
25d676f9619c
Preface error() messages with name of function when possible.
Rik <rik@octave.org>
parents:
20575
diff
changeset
|
392 this.error ("inputParser.parse: not enough input arguments"); |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
393 endif |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
394 endif |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
395 pnargin = numel (varargin); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
396 |
23167
a2d6b84ce5c5
scripts/general/inputParser.m: refactor two xtest cases to normal test cases.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
23165
diff
changeset
|
397 this.ParameterNames = fieldnames (this.Parameter); |
a2d6b84ce5c5
scripts/general/inputParser.m: refactor two xtest cases to normal test cases.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
23165
diff
changeset
|
398 this.SwitchNames = fieldnames (this.Switch); |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
399 |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
400 ## Evaluate the Required arguments first |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
401 nReq = numel (this.Required); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
402 for idx = 1:nReq |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
403 req = this.Required{idx}; |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
404 this.validate_arg (req.name, req.val, varargin{idx}); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
405 endfor |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
406 |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
407 vidx = nReq; # current index in varargin |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
408 |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
409 ## Search for a list of Optional arguments |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
410 idx = 0; # current index on the array of Optional |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
411 nOpt = numel (this.Optional); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
412 while (vidx < pnargin && idx < nOpt) |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
413 opt = this.Optional{++idx}; |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
414 in = varargin{++vidx}; |
23377
f1bf2590272a
inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23365
diff
changeset
|
415 if ((this.is_argname ("Parameter", in) && vidx < pnargin) |
f1bf2590272a
inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23365
diff
changeset
|
416 || this.is_argname ("Switch", in)) |
f1bf2590272a
inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23365
diff
changeset
|
417 ## This looks like an optional parameter/value pair or a |
f1bf2590272a
inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23365
diff
changeset
|
418 ## switch, not an positional option. This does mean that |
f1bf2590272a
inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23365
diff
changeset
|
419 ## positional options cannot be strings named like parameter |
f1bf2590272a
inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23365
diff
changeset
|
420 ## keys. See bug #50752. |
23365
7b594fcfa32b
improve inputParser compatibility for optional args (bug #50752)
John W. Eaton <jwe@octave.org>
parents:
23337
diff
changeset
|
421 idx -= 1; |
7b594fcfa32b
improve inputParser compatibility for optional args (bug #50752)
John W. Eaton <jwe@octave.org>
parents:
23337
diff
changeset
|
422 vidx -= 1; |
7b594fcfa32b
improve inputParser compatibility for optional args (bug #50752)
John W. Eaton <jwe@octave.org>
parents:
23337
diff
changeset
|
423 break |
7b594fcfa32b
improve inputParser compatibility for optional args (bug #50752)
John W. Eaton <jwe@octave.org>
parents:
23337
diff
changeset
|
424 endif |
21666
09517e0a8aa0
inputParser.m: handle errors in Optional parameters (maybe is a param key).
Carnë Draug <carandraug@octave.org>
parents:
21634
diff
changeset
|
425 try |
09517e0a8aa0
inputParser.m: handle errors in Optional parameters (maybe is a param key).
Carnë Draug <carandraug@octave.org>
parents:
21634
diff
changeset
|
426 valid_option = opt.val (in); |
09517e0a8aa0
inputParser.m: handle errors in Optional parameters (maybe is a param key).
Carnë Draug <carandraug@octave.org>
parents:
21634
diff
changeset
|
427 catch |
09517e0a8aa0
inputParser.m: handle errors in Optional parameters (maybe is a param key).
Carnë Draug <carandraug@octave.org>
parents:
21634
diff
changeset
|
428 valid_option = false; |
09517e0a8aa0
inputParser.m: handle errors in Optional parameters (maybe is a param key).
Carnë Draug <carandraug@octave.org>
parents:
21634
diff
changeset
|
429 end_try_catch |
09517e0a8aa0
inputParser.m: handle errors in Optional parameters (maybe is a param key).
Carnë Draug <carandraug@octave.org>
parents:
21634
diff
changeset
|
430 if (! valid_option) |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
431 ## If it does not match there's two options: |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
432 ## 1) input is actually wrong and we should error; |
23377
f1bf2590272a
inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23365
diff
changeset
|
433 ## 2) it's a Parameter or Switch name and we should use |
f1bf2590272a
inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23365
diff
changeset
|
434 ## the default for the rest; |
21677
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
435 ## 3) it's a struct with the Parameter pairs. |
21667
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
436 if (ischar (in) || (this.StructExpand && isstruct (in) |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
437 && isscalar (in))) |
20735
418ae0cb752f
Replace ++,-- with in-place operators for performance.
Rik <rik@octave.org>
parents:
20726
diff
changeset
|
438 idx -= 1; |
418ae0cb752f
Replace ++,-- with in-place operators for performance.
Rik <rik@octave.org>
parents:
20726
diff
changeset
|
439 vidx -= 1; |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
440 break |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
441 else |
23165
5291b67ff124
More verbose information when inputParser fails validating argument (patch #9241)
Georg Wiora
parents:
23164
diff
changeset
|
442 this.error (sprintf (["failed validation of %s\n", ... |
5291b67ff124
More verbose information when inputParser fails validating argument (patch #9241)
Georg Wiora
parents:
23164
diff
changeset
|
443 "Validation function: %s"], |
5291b67ff124
More verbose information when inputParser fails validating argument (patch #9241)
Georg Wiora
parents:
23164
diff
changeset
|
444 toupper (opt.name), disp(opt.val))); |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
445 endif |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
446 endif |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
447 this.Results.(opt.name) = in; |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
448 endwhile |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
449 |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
450 ## Fill in with defaults of missing Optional |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
451 while (idx++ < nOpt) |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
452 opt = this.Optional{idx}; |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
453 this.UsingDefaults{end+1} = opt.name; |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
454 this.Results.(opt.name) = opt.def; |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
455 endwhile |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
456 |
21677
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
457 ## Search unordered Options (Switch and Parameter) |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
458 while (vidx++ < pnargin) |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
459 name = varargin{vidx}; |
21667
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
460 |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
461 if (this.StructExpand && isstruct (name) && isscalar (name)) |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
462 expanded_options = [fieldnames(name) struct2cell(name)]'(:); |
25628
a0d642f24349
Parse empty struct input correctly (bug #54318).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
463 if (isempty (expanded_options)) |
a0d642f24349
Parse empty struct input correctly (bug #54318).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
464 continue; # empty, continue to next argument |
a0d642f24349
Parse empty struct input correctly (bug #54318).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
465 endif |
21667
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
466 n_new_args = numel (expanded_options) -1; |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
467 pnargin += n_new_args; |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
468 varargin(vidx+n_new_args+1:pnargin) = varargin(vidx+1:end); |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
469 varargin(vidx:vidx+n_new_args) = expanded_options; |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
470 name = varargin{vidx}; |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
471 endif |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
472 |
23383
62320e943696
inputParser.m: check if Param key and Switch are strings for better errors.
Carnë Draug <carandraug@octave.org>
parents:
23382
diff
changeset
|
473 if (! ischar (name)) |
62320e943696
inputParser.m: check if Param key and Switch are strings for better errors.
Carnë Draug <carandraug@octave.org>
parents:
23382
diff
changeset
|
474 this.error ("non-string for Parameter name or Switch"); |
62320e943696
inputParser.m: check if Param key and Switch are strings for better errors.
Carnë Draug <carandraug@octave.org>
parents:
23382
diff
changeset
|
475 endif |
62320e943696
inputParser.m: check if Param key and Switch are strings for better errors.
Carnë Draug <carandraug@octave.org>
parents:
23382
diff
changeset
|
476 |
21677
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
477 if (this.is_argname ("Parameter", name)) |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
478 if (vidx++ > pnargin) |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
479 this.error (sprintf ("no matching value for option '%s'", |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
480 toupper (name))); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
481 endif |
19833
9fc020886ae9
maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19597
diff
changeset
|
482 this.validate_arg (this.last_name, |
21677
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
483 this.Parameter.(this.last_name).val, |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
484 varargin{vidx}); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
485 elseif (this.is_argname ("Switch", name)) |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
486 this.Results.(this.last_name) = true; |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
487 else |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
488 if (vidx++ < pnargin && this.KeepUnmatched) |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
489 this.Unmatched.(name) = varargin{vidx}; |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
490 else |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
491 this.error (sprintf ("argument '%s' is not a valid parameter", |
23167
a2d6b84ce5c5
scripts/general/inputParser.m: refactor two xtest cases to normal test cases.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
23165
diff
changeset
|
492 toupper (name))); |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
493 endif |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
494 endif |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
495 endwhile |
23337
f04f32f08590
Override disp rather than display for class objects (bug #50640).
Rik <rik@octave.org>
parents:
23333
diff
changeset
|
496 ## Add them to the UsingDefaults list |
21677
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
497 this.add_missing ("Parameter"); |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
498 this.add_missing ("Switch"); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
499 |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
500 endfunction |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
501 |
23337
f04f32f08590
Override disp rather than display for class objects (bug #50640).
Rik <rik@octave.org>
parents:
23333
diff
changeset
|
502 function disp (this) |
23333
b636f10ce53f
fix display methods to only expect one argument
John W. Eaton <jwe@octave.org>
parents:
23220
diff
changeset
|
503 if (nargin != 1) |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
504 print_usage (); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
505 endif |
23337
f04f32f08590
Override disp rather than display for class objects (bug #50640).
Rik <rik@octave.org>
parents:
23333
diff
changeset
|
506 printf ("inputParser object with properties:\n\n"); |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
507 b2s = @(x) ifelse (any (x), "true", "false"); |
21634
96518f623c91
Backed out changeset dcf8922b724b
Mike Miller <mtmiller@octave.org>
parents:
21633
diff
changeset
|
508 printf ([" CaseSensitive : %s\n FunctionName : %s\n" ... |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
509 " KeepUnmatched : %s\n PartialMatching : %s\n" ... |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
510 " StructExpand : %s\n\n"], |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
511 b2s (this.CaseSensitive), b2s (this.FunctionName), |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
512 b2s (this.KeepUnmatched), b2s (this.PartialMatching), |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
513 b2s (this.StructExpand)); |
21634
96518f623c91
Backed out changeset dcf8922b724b
Mike Miller <mtmiller@octave.org>
parents:
21633
diff
changeset
|
514 printf ("Defined parameters:\n\n {%s}\n", |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
515 strjoin (this.Parameters, ", ")); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
516 endfunction |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
517 endmethods |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
518 |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
519 methods (Access = private) |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
520 function validate_name (this, type, name) |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
521 if (! isvarname (name)) |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
522 error ("inputParser.add%s: NAME is an invalid identifier", method); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
523 elseif (any (strcmpi (this.Parameters, name))) |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
524 ## Even if CaseSensitive is "on", we still shouldn't allow |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
525 ## two args with the same name. |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
526 error ("inputParser.add%s: argname '%s' has already been specified", |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
527 type, name); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
528 endif |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
529 this.Parameters{end+1} = name; |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
530 endfunction |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
531 |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
532 function validate_arg (this, name, val, in) |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
533 if (! val (in)) |
23165
5291b67ff124
More verbose information when inputParser fails validating argument (patch #9241)
Georg Wiora
parents:
23164
diff
changeset
|
534 this.error (sprintf ("failed validation of %s with %s", |
5291b67ff124
More verbose information when inputParser fails validating argument (patch #9241)
Georg Wiora
parents:
23164
diff
changeset
|
535 toupper (name), func2str (val))); |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
536 endif |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
537 this.Results.(name) = in; |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
538 endfunction |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
539 |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
540 function r = is_argname (this, type, name) |
28187
3faa700d64d4
inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents:
27978
diff
changeset
|
541 r = ischar (name) && isrow (name); |
3faa700d64d4
inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents:
27978
diff
changeset
|
542 if (r) |
3faa700d64d4
inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents:
27978
diff
changeset
|
543 if (this.CaseSensitive) |
3faa700d64d4
inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents:
27978
diff
changeset
|
544 r = isfield (this.(type), name); |
3faa700d64d4
inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents:
27978
diff
changeset
|
545 if (r) |
3faa700d64d4
inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents:
27978
diff
changeset
|
546 this.last_name = name; |
3faa700d64d4
inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents:
27978
diff
changeset
|
547 endif |
3faa700d64d4
inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents:
27978
diff
changeset
|
548 else |
3faa700d64d4
inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents:
27978
diff
changeset
|
549 fnames = this.([type "Names"]); |
3faa700d64d4
inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents:
27978
diff
changeset
|
550 l = strcmpi (name, fnames); |
3faa700d64d4
inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents:
27978
diff
changeset
|
551 r = any (l(:)); |
3faa700d64d4
inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents:
27978
diff
changeset
|
552 if (r) |
3faa700d64d4
inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents:
27978
diff
changeset
|
553 this.last_name = fnames{l}; |
3faa700d64d4
inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents:
27978
diff
changeset
|
554 endif |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
555 endif |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
556 endif |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
557 endfunction |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
558 |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
559 function add_missing (this, type) |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
560 unmatched = setdiff (fieldnames (this.(type)), fieldnames (this.Results)); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
561 for namec = unmatched(:)' |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
562 name = namec{1}; |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
563 this.UsingDefaults{end+1} = name; |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
564 this.Results.(name) = this.(type).(name).def; |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
565 endfor |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
566 endfunction |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
567 |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
568 function error (this, msg) |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
569 where = ""; |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
570 if (this.FunctionName) |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
571 where = [this.FunctionName ": "]; |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
572 endif |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
573 error ("%s%s", where, msg); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
574 endfunction |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
575 endmethods |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
576 |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
577 endclassdef |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
578 |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
579 %!function p = create_p () |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
580 %! p = inputParser (); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
581 %! p.CaseSensitive = true; |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
582 %! p.addRequired ("req1", @(x) ischar (x)); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
583 %! p.addOptional ("op1", "val", @(x) any (strcmp (x, {"val", "foo"}))); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
584 %! p.addOptional ("op2", 78, @(x) x > 50); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
585 %! p.addSwitch ("verbose"); |
21677
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
586 %! p.addParameter ("line", "tree", @(x) any (strcmp (x, {"tree", "circle"}))); |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
587 %!endfunction |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
588 |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
589 ## check normal use, only required are given |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
590 %!test |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
591 %! p = create_p (); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
592 %! p.parse ("file"); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
593 %! r = p.Results; |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
594 %! assert (r.req1, "file"); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
595 %! assert (sort (p.UsingDefaults), sort ({"op1", "op2", "verbose", "line"})); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
596 %! assert ({r.req1, r.op1, r.op2, r.verbose, r.line}, |
21580
ecce63c99c3f
maint: Add semicolons to terminate code in %! blocks.
Rik <rik@octave.org>
parents:
21578
diff
changeset
|
597 %! {"file", "val", 78, false, "tree"}); |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
598 |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
599 ## check normal use, but give values different than defaults |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
600 %!test |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
601 %! p = create_p (); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
602 %! p.parse ("file", "foo", 80, "line", "circle", "verbose"); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
603 %! r = p.Results; |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
604 %! assert ({r.req1, r.op1, r.op2, r.verbose, r.line}, |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
605 %! {"file", "foo", 80, true, "circle"}); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
606 |
21677
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
607 ## check optional is skipped and considered Parameter if unvalidated string |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
608 %!test |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
609 %! p = create_p (); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
610 %! p.parse ("file", "line", "circle"); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
611 %! r = p.Results; |
19597
db92e7e28e1f
strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents:
19039
diff
changeset
|
612 %! assert ({r.req1, r.op1, r.op2, r.verbose, r.line}, |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
613 %! {"file", "val", 78, false, "circle"}); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
614 |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
615 ## check case insensitivity |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
616 %!test |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
617 %! p = create_p (); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
618 %! p.CaseSensitive = false; |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
619 %! p.parse ("file", "foo", 80, "LiNE", "circle", "vERbOSe"); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
620 %! r = p.Results; |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
621 %! assert ({r.req1, r.op1, r.op2, r.verbose, r.line}, |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
622 %! {"file", "foo", 80, true, "circle"}); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
623 |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
624 ## check KeepUnmatched |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
625 %!test |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
626 %! p = create_p (); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
627 %! p.KeepUnmatched = true; |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
628 %! p.parse ("file", "foo", 80, "line", "circle", "verbose", "extra", 50); |
21580
ecce63c99c3f
maint: Add semicolons to terminate code in %! blocks.
Rik <rik@octave.org>
parents:
21578
diff
changeset
|
629 %! assert (p.Unmatched.extra, 50); |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
630 |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
631 ## check error when missing required |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
632 %!error <not enough input arguments> |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
633 %! p = create_p (); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
634 %! p.parse (); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
635 |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
636 ## check error when given required does not validate |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
637 %!error <failed validation of > |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
638 %! p = create_p (); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
639 %! p.parse (50); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
640 |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
641 ## check error when given optional does not validate |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
642 %!error <is not a valid parameter> |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
643 %! p = create_p (); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
644 %! p.parse ("file", "no-val"); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
645 |
21677
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
646 ## check error when given Parameter does not validate |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
647 %!error <failed validation of > |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
648 %! p = create_p (); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
649 %! p.parse ("file", "foo", 51, "line", "round"); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
650 |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
651 ## check alternative method (obj, ...) API |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
652 %!function p2 = create_p2 (); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
653 %! p2 = inputParser; |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
654 %! addRequired (p2, "req1", @(x) ischar (x)); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
655 %! addOptional (p2, "op1", "val", @(x) any (strcmp (x, {"val", "foo"}))); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
656 %! addOptional (p2, "op2", 78, @(x) x > 50); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
657 %! addSwitch (p2, "verbose"); |
21677
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
658 %! addParameter (p2, "line", "tree", @(x) any (strcmp (x, {"tree", "circle"}))); |
19035
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
659 %!endfunction |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
660 |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
661 ## check normal use, only required are given |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
662 %!test |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
663 %! p2 = create_p2 (); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
664 %! parse (p2, "file"); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
665 %! r = p2.Results; |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
666 %! assert ({r.req1, r.op1, r.op2, r.verbose, r.line}, |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
667 %! {"file", "val", 78, false, "tree"}); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
668 %! assert (sort (p2.UsingDefaults), sort ({"op1", "op2", "verbose", "line"})); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
669 |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
670 ## check normal use, but give values different than defaults |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
671 %!test |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
672 %! p2 = create_p2 (); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
673 %! parse (p2, "file", "foo", 80, "line", "circle", "verbose"); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
674 %! r = p2.Results; |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
675 %! assert ({r.req1, r.op1, r.op2, r.verbose, r.line}, |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
676 %! {"file", "foo", 80, true, "circle"}); |
ff820f92cbb5
inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
677 |
22489
93ea313301f9
test: Add bug ids (<#####>) to BIST tests.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
678 ## We must not perform validation of default values |
23573
1b4f4ec53b4a
use new script to tag fixed bugs in tests
John W. Eaton <jwe@octave.org>
parents:
23572
diff
changeset
|
679 %!test <*45837> |
20575
a61f0d6beb71
inputParser: do not perform validation of default values (bug #45837)
Carnë Draug <carandraug@octave.org>
parents:
20470
diff
changeset
|
680 %! p = inputParser; |
21677
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
681 %! p.addParameter ("Dir", [], @ischar); |
20575
a61f0d6beb71
inputParser: do not perform validation of default values (bug #45837)
Carnë Draug <carandraug@octave.org>
parents:
20470
diff
changeset
|
682 %! p.parse (); |
21580
ecce63c99c3f
maint: Add semicolons to terminate code in %! blocks.
Rik <rik@octave.org>
parents:
21578
diff
changeset
|
683 %! assert (p.Results.Dir, []); |
20575
a61f0d6beb71
inputParser: do not perform validation of default values (bug #45837)
Carnë Draug <carandraug@octave.org>
parents:
20470
diff
changeset
|
684 |
a61f0d6beb71
inputParser: do not perform validation of default values (bug #45837)
Carnë Draug <carandraug@octave.org>
parents:
20470
diff
changeset
|
685 %!test |
a61f0d6beb71
inputParser: do not perform validation of default values (bug #45837)
Carnë Draug <carandraug@octave.org>
parents:
20470
diff
changeset
|
686 %! p = inputParser; |
21677
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
687 %! p.addParameter ("positive", -1, @(x) x > 5); |
20575
a61f0d6beb71
inputParser: do not perform validation of default values (bug #45837)
Carnë Draug <carandraug@octave.org>
parents:
20470
diff
changeset
|
688 %! p.parse (); |
21580
ecce63c99c3f
maint: Add semicolons to terminate code in %! blocks.
Rik <rik@octave.org>
parents:
21578
diff
changeset
|
689 %! assert (p.Results.positive, -1); |
20575
a61f0d6beb71
inputParser: do not perform validation of default values (bug #45837)
Carnë Draug <carandraug@octave.org>
parents:
20470
diff
changeset
|
690 |
21666
09517e0a8aa0
inputParser.m: handle errors in Optional parameters (maybe is a param key).
Carnë Draug <carandraug@octave.org>
parents:
21634
diff
changeset
|
691 ## Throw an error on validation of optional argument to check that it |
09517e0a8aa0
inputParser.m: handle errors in Optional parameters (maybe is a param key).
Carnë Draug <carandraug@octave.org>
parents:
21634
diff
changeset
|
692 ## is caught without preventing continuation into param/value pairs. |
09517e0a8aa0
inputParser.m: handle errors in Optional parameters (maybe is a param key).
Carnë Draug <carandraug@octave.org>
parents:
21634
diff
changeset
|
693 %!test |
09517e0a8aa0
inputParser.m: handle errors in Optional parameters (maybe is a param key).
Carnë Draug <carandraug@octave.org>
parents:
21634
diff
changeset
|
694 %! p = inputParser (); |
09517e0a8aa0
inputParser.m: handle errors in Optional parameters (maybe is a param key).
Carnë Draug <carandraug@octave.org>
parents:
21634
diff
changeset
|
695 %! p.addOptional ("err", "foo", @error); |
21677
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
696 %! p.addParameter ("not_err", "bar", @ischar); |
21666
09517e0a8aa0
inputParser.m: handle errors in Optional parameters (maybe is a param key).
Carnë Draug <carandraug@octave.org>
parents:
21634
diff
changeset
|
697 %! p.parse ("not_err", "qux"); |
09517e0a8aa0
inputParser.m: handle errors in Optional parameters (maybe is a param key).
Carnë Draug <carandraug@octave.org>
parents:
21634
diff
changeset
|
698 %! assert (p.Results.err, "foo") |
09517e0a8aa0
inputParser.m: handle errors in Optional parameters (maybe is a param key).
Carnë Draug <carandraug@octave.org>
parents:
21634
diff
changeset
|
699 %! assert (p.Results.not_err, "qux") |
09517e0a8aa0
inputParser.m: handle errors in Optional parameters (maybe is a param key).
Carnë Draug <carandraug@octave.org>
parents:
21634
diff
changeset
|
700 |
09517e0a8aa0
inputParser.m: handle errors in Optional parameters (maybe is a param key).
Carnë Draug <carandraug@octave.org>
parents:
21634
diff
changeset
|
701 |
21677
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
702 ## With more Parameters to test StructExpand |
21667
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
703 %!function p3 = create_p3 (); |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
704 %! p3 = inputParser; |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
705 %! addOptional (p3, "op1", "val", @(x) any (strcmp (x, {"val", "foo"}))); |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
706 %! addOptional (p3, "op2", 78, @(x) x > 50); |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
707 %! addSwitch (p3, "verbose"); |
21677
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
708 %! addParameter (p3, "line", "tree", @(x) any (strcmp (x, {"tree", "circle"}))); |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
709 %! addParameter (p3, "color", "red", @(x) any (strcmp (x, {"red", "green"}))); |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
710 %! addParameter (p3, "style", "tt", @(x) any (strcmp (x, {"tt", "f", "i"}))); |
21667
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
711 %!endfunction |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
712 |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
713 ## Test StructExpand |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
714 %!test |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
715 %! p3 = create_p3 (); |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
716 %! p3.parse (struct ("line", "circle", "color", "green")); |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
717 %! assert (p3.Results, struct ("op1", "val", "op2", 78, "verbose", false, |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
718 %! "line", "circle", "color", "green", |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
719 %! "style", "tt")) |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
720 |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
721 %!test |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
722 %! p3 = create_p3 (); |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
723 %! p3.parse (struct ("line", "circle", "color", "green"), "line", "tree"); |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
724 %! assert (p3.Results.line, "tree") |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
725 %! p3.parse ("line", "tree", struct ("line", "circle", "color", "green")); |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
726 %! assert (p3.Results.line, "circle") |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
727 |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
728 %!test # unmatched parameters with StructExpand |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
729 %! p3 = create_p3 (); |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
730 %! p3.KeepUnmatched = true; |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
731 %! p3.parse (struct ("line", "circle", "color", "green", "bar", "baz")); |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
732 %! assert (p3.Unmatched.bar, "baz") |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
733 |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
734 ## The validation for the second optional argument throws an error with |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
735 ## a struct so check that we can handle it. |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
736 %!test |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
737 %! p3 = create_p3 (); |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
738 %! p3.parse ("foo", struct ("color", "green"), "line", "tree"); |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
739 %! assert (p3.Results.op1, "foo") |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
740 %! assert (p3.Results.line, "tree") |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
741 %! assert (p3.Results.color, "green") |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
742 %! assert (p3.Results.verbose, false) |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
743 |
84092ccb45e2
inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents:
21666
diff
changeset
|
744 |
21677
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
745 ## Some simple tests for addParamValue since all the other ones use add |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
746 ## addParameter but they use the same codepath. |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
747 %!test |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
748 %! p = inputParser; |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
749 %! addParameter (p, "line", "tree", @(x) any (strcmp (x, {"tree", "circle"}))); |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
750 %! addParameter (p, "color", "red", @(x) any (strcmp (x, {"red", "green"}))); |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
751 %! p.parse ("line", "circle"); |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
752 %! assert ({p.Results.line, p.Results.color}, {"circle", "red"}) |
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
753 |
23167
a2d6b84ce5c5
scripts/general/inputParser.m: refactor two xtest cases to normal test cases.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
23165
diff
changeset
|
754 %!test |
a2d6b84ce5c5
scripts/general/inputParser.m: refactor two xtest cases to normal test cases.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
23165
diff
changeset
|
755 %! p = inputParser; |
a2d6b84ce5c5
scripts/general/inputParser.m: refactor two xtest cases to normal test cases.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
23165
diff
changeset
|
756 %! p.addParameter ("foo", "bar", @ischar); |
a2d6b84ce5c5
scripts/general/inputParser.m: refactor two xtest cases to normal test cases.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
23165
diff
changeset
|
757 %! p.parse (); |
a2d6b84ce5c5
scripts/general/inputParser.m: refactor two xtest cases to normal test cases.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
23165
diff
changeset
|
758 %! assert (p.Results, struct ("foo", "bar")) |
a2d6b84ce5c5
scripts/general/inputParser.m: refactor two xtest cases to normal test cases.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
23165
diff
changeset
|
759 %! p.parse ("foo", "qux"); |
a2d6b84ce5c5
scripts/general/inputParser.m: refactor two xtest cases to normal test cases.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
23165
diff
changeset
|
760 %! assert (p.Results, struct ("foo", "qux")) |
21508
04923b7b0d89
inputParser.m: add failing test due to bug in the parser (bug #44779)
Carnë Draug <carandraug@octave.org>
parents:
21505
diff
changeset
|
761 |
23377
f1bf2590272a
inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23365
diff
changeset
|
762 ## This behaviour means that a positional option can never be a string |
f1bf2590272a
inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23365
diff
changeset
|
763 ## that is the name of a parameter key. This is required for Matlab |
f1bf2590272a
inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23365
diff
changeset
|
764 ## compatibility. |
23573
1b4f4ec53b4a
use new script to tag fixed bugs in tests
John W. Eaton <jwe@octave.org>
parents:
23572
diff
changeset
|
765 %!test <*50752> |
23382
5a3c3ff03167
inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23377
diff
changeset
|
766 %! p = inputParser (); |
21505
7f7d7cb73e0d
inputParser.m: uncomment failing test and use %!xtest instead.
Carnë Draug <carandraug@octave.org>
parents:
21316
diff
changeset
|
767 %! p.addOptional ("op1", "val"); |
21677
1cd04fb745f6
inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents:
21668
diff
changeset
|
768 %! p.addParameter ("line", "tree"); |
21505
7f7d7cb73e0d
inputParser.m: uncomment failing test and use %!xtest instead.
Carnë Draug <carandraug@octave.org>
parents:
21316
diff
changeset
|
769 %! p.parse ("line", "circle"); |
23377
f1bf2590272a
inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23365
diff
changeset
|
770 %! assert (p.Results, struct ("op1", "val", "line", "circle")) |
f1bf2590272a
inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23365
diff
changeset
|
771 %! |
f1bf2590272a
inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23365
diff
changeset
|
772 %! p = inputParser (); |
23382
5a3c3ff03167
inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23377
diff
changeset
|
773 %! p.addOptional ("op1", "val1"); |
5a3c3ff03167
inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23377
diff
changeset
|
774 %! p.addOptional ("op2", "val2"); |
5a3c3ff03167
inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23377
diff
changeset
|
775 %! p.addParameter ("line", "tree"); |
5a3c3ff03167
inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23377
diff
changeset
|
776 %! p.parse ("line", "circle"); |
23377
f1bf2590272a
inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23365
diff
changeset
|
777 %! assert (p.Results.op1, "val1") |
f1bf2590272a
inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23365
diff
changeset
|
778 %! assert (p.Results.op2, "val2") |
f1bf2590272a
inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23365
diff
changeset
|
779 %! assert (p.Results.line, "circle") |
23382
5a3c3ff03167
inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23377
diff
changeset
|
780 %! |
5a3c3ff03167
inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23377
diff
changeset
|
781 %! ## If there's enough arguments to fill the positional options and |
5a3c3ff03167
inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23377
diff
changeset
|
782 %! ## param/key, it still skips positional options. |
5a3c3ff03167
inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23377
diff
changeset
|
783 %! p = inputParser (); |
5a3c3ff03167
inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23377
diff
changeset
|
784 %! p.addOptional ("op1", "val1"); |
5a3c3ff03167
inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23377
diff
changeset
|
785 %! p.addOptional ("op2", "val2"); |
5a3c3ff03167
inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23377
diff
changeset
|
786 %! p.addParameter ("line", "tree"); |
5a3c3ff03167
inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23377
diff
changeset
|
787 %! p.parse ("line", "circle", "line", "rectangle"); |
5a3c3ff03167
inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23377
diff
changeset
|
788 %! assert (p.Results, struct ("op1", "val1", "op2", "val2", |
5a3c3ff03167
inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23377
diff
changeset
|
789 %! "line", "rectangle")) |
5a3c3ff03167
inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23377
diff
changeset
|
790 %! |
5a3c3ff03167
inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23377
diff
changeset
|
791 %! ## Even if the key/param fails validation, it does not backtrack to |
5a3c3ff03167
inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23377
diff
changeset
|
792 %! ## check if the values are valid positional options. |
5a3c3ff03167
inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23377
diff
changeset
|
793 %! p = inputParser (); |
5a3c3ff03167
inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23377
diff
changeset
|
794 %! p.addOptional ("op1", "val1", @ischar); |
5a3c3ff03167
inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23377
diff
changeset
|
795 %! p.addOptional ("op2", "val2", @isnumeric); |
5a3c3ff03167
inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23377
diff
changeset
|
796 %! p.addParameter ("line", "circle", @ischar); |
5a3c3ff03167
inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23377
diff
changeset
|
797 %! fail ('p.parse ("line", 89)', "failed validation of LINE") |
5a3c3ff03167
inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23377
diff
changeset
|
798 %! |
5a3c3ff03167
inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23377
diff
changeset
|
799 %! p = inputParser (); |
5a3c3ff03167
inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23377
diff
changeset
|
800 %! p.addOptional ("op1", "val1"); |
5a3c3ff03167
inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23377
diff
changeset
|
801 %! p.addParamValue ("line", "circle", @ischar); |
23383
62320e943696
inputParser.m: check if Param key and Switch are strings for better errors.
Carnë Draug <carandraug@octave.org>
parents:
23382
diff
changeset
|
802 %! fail ('p.parse ("line", "line", 89)', |
62320e943696
inputParser.m: check if Param key and Switch are strings for better errors.
Carnë Draug <carandraug@octave.org>
parents:
23382
diff
changeset
|
803 %! "non-string for Parameter name or Switch") |
23382
5a3c3ff03167
inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23377
diff
changeset
|
804 |
23573
1b4f4ec53b4a
use new script to tag fixed bugs in tests
John W. Eaton <jwe@octave.org>
parents:
23572
diff
changeset
|
805 %!test <*50752> |
23382
5a3c3ff03167
inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23377
diff
changeset
|
806 %! ## This fails in Matlab but works in Octave. It is a bug there |
5a3c3ff03167
inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23377
diff
changeset
|
807 %! ## that we do not replicate. |
5a3c3ff03167
inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23377
diff
changeset
|
808 %! p = inputParser (); |
5a3c3ff03167
inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23377
diff
changeset
|
809 %! p.addOptional ("op1", "val1"); |
5a3c3ff03167
inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23377
diff
changeset
|
810 %! p.addParameter ("line", "circle"); |
5a3c3ff03167
inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23377
diff
changeset
|
811 %! p.parse ("line"); |
5a3c3ff03167
inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23377
diff
changeset
|
812 %! assert (p.Results, struct ("op1", "line", "line", "circle")) |
23377
f1bf2590272a
inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23365
diff
changeset
|
813 |
23573
1b4f4ec53b4a
use new script to tag fixed bugs in tests
John W. Eaton <jwe@octave.org>
parents:
23572
diff
changeset
|
814 %!test <*50752> |
23377
f1bf2590272a
inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23365
diff
changeset
|
815 %! p = inputParser; |
f1bf2590272a
inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23365
diff
changeset
|
816 %! p.addOptional ("op1", "val1"); |
f1bf2590272a
inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23365
diff
changeset
|
817 %! p.addSwitch ("line"); |
f1bf2590272a
inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23365
diff
changeset
|
818 %! p.parse ("line"); |
f1bf2590272a
inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23365
diff
changeset
|
819 %! assert (p.Results.op1, "val1") |
f1bf2590272a
inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents:
23365
diff
changeset
|
820 %! assert (p.Results.line, true) |
22541
4b7ab10b5c38
inputParser clear previous results before new parse (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents:
22489
diff
changeset
|
821 |
4b7ab10b5c38
inputParser clear previous results before new parse (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents:
22489
diff
changeset
|
822 %!test |
4b7ab10b5c38
inputParser clear previous results before new parse (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents:
22489
diff
changeset
|
823 %! p = inputParser; |
4b7ab10b5c38
inputParser clear previous results before new parse (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents:
22489
diff
changeset
|
824 %! p.addParameter ("a", []); |
4b7ab10b5c38
inputParser clear previous results before new parse (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents:
22489
diff
changeset
|
825 %! p.addParameter ("b", []); |
4b7ab10b5c38
inputParser clear previous results before new parse (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents:
22489
diff
changeset
|
826 %! p.parse ("a", 1); |
4b7ab10b5c38
inputParser clear previous results before new parse (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents:
22489
diff
changeset
|
827 %! p.parse ("b", 1); |
4b7ab10b5c38
inputParser clear previous results before new parse (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents:
22489
diff
changeset
|
828 %! assert (p.Results, struct ("a", [], "b", 1)); |
22559
27f2a7a3b55d
inputParser reset more parse results before new parse. (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents:
22541
diff
changeset
|
829 %! assert (p.UsingDefaults, {"a"}); |
22541
4b7ab10b5c38
inputParser clear previous results before new parse (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents:
22489
diff
changeset
|
830 |
22559
27f2a7a3b55d
inputParser reset more parse results before new parse. (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents:
22541
diff
changeset
|
831 %!test |
27f2a7a3b55d
inputParser reset more parse results before new parse. (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents:
22541
diff
changeset
|
832 %! p = inputParser; |
27f2a7a3b55d
inputParser reset more parse results before new parse. (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents:
22541
diff
changeset
|
833 %! p.addParameter ("b", []); |
27f2a7a3b55d
inputParser reset more parse results before new parse. (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents:
22541
diff
changeset
|
834 %! p.KeepUnmatched = true; |
27f2a7a3b55d
inputParser reset more parse results before new parse. (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents:
22541
diff
changeset
|
835 %! p.parse ("a", 1); |
27f2a7a3b55d
inputParser reset more parse results before new parse. (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents:
22541
diff
changeset
|
836 %! p.parse ("b", 1); |
27f2a7a3b55d
inputParser reset more parse results before new parse. (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents:
22541
diff
changeset
|
837 %! assert (p.Results, struct ("b", 1)); |
27f2a7a3b55d
inputParser reset more parse results before new parse. (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents:
22541
diff
changeset
|
838 %! assert (p.Unmatched, struct ()); |
23165
5291b67ff124
More verbose information when inputParser fails validating argument (patch #9241)
Georg Wiora
parents:
23164
diff
changeset
|
839 |
5291b67ff124
More verbose information when inputParser fails validating argument (patch #9241)
Georg Wiora
parents:
23164
diff
changeset
|
840 ## Test for patch #9241 |
5291b67ff124
More verbose information when inputParser fails validating argument (patch #9241)
Georg Wiora
parents:
23164
diff
changeset
|
841 %!error<failed validation of A with ischar> |
5291b67ff124
More verbose information when inputParser fails validating argument (patch #9241)
Georg Wiora
parents:
23164
diff
changeset
|
842 %! p = inputParser; |
5291b67ff124
More verbose information when inputParser fails validating argument (patch #9241)
Georg Wiora
parents:
23164
diff
changeset
|
843 %! p.addParameter ("a", [], @ischar); |
5291b67ff124
More verbose information when inputParser fails validating argument (patch #9241)
Georg Wiora
parents:
23164
diff
changeset
|
844 %! p.parse ("a", 1); |
28187
3faa700d64d4
inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents:
27978
diff
changeset
|
845 |
3faa700d64d4
inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents:
27978
diff
changeset
|
846 %!test <*58112> |
3faa700d64d4
inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents:
27978
diff
changeset
|
847 %! p = inputParser (); |
3faa700d64d4
inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents:
27978
diff
changeset
|
848 %! p.addRequired ("first"); |
3faa700d64d4
inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents:
27978
diff
changeset
|
849 %! p.addOptional ("second", []); |
3faa700d64d4
inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents:
27978
diff
changeset
|
850 %! p.parse (1, {"test", 1, 2, 3}); |
3faa700d64d4
inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents:
27978
diff
changeset
|
851 %! r = p.Results; |
3faa700d64d4
inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents:
27978
diff
changeset
|
852 %! assert (r.first, 1); |
3faa700d64d4
inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents:
27978
diff
changeset
|
853 %! assert (r.second, {"test", 1, 2, 3}); |