changeset 23382:5a3c3ff03167

inputParser.m: more tests for mix Param keys with positional options (bug #50752)
author Carnë Draug <carandraug@octave.org>
date Mon, 10 Apr 2017 15:36:39 +0100
parents e15ffa2b2262
children 62320e943696
files scripts/general/inputParser.m
diffstat 1 files changed, 37 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/general/inputParser.m	Mon Apr 10 15:00:25 2017 +0100
+++ b/scripts/general/inputParser.m	Mon Apr 10 15:36:39 2017 +0100
@@ -741,20 +741,52 @@
 ## that is the name of a parameter key.  This is required for Matlab
 ## compatibility.
 %!test <50752>
-%! p = inputParser;
+%! p = inputParser ();
 %! p.addOptional ("op1", "val");
 %! p.addParameter ("line", "tree");
 %! p.parse ("line", "circle");
 %! assert (p.Results, struct ("op1", "val", "line", "circle"))
 %!
 %! p = inputParser ();
-%! p.addOptional ("op1", "val1")
-%! p.addOptional ("op2", "val2")
-%! p.addParameter ("line", "tree")
-%! p.parse ("line", "circle")
+%! p.addOptional ("op1", "val1");
+%! p.addOptional ("op2", "val2");
+%! p.addParameter ("line", "tree");
+%! p.parse ("line", "circle");
 %! assert (p.Results.op1, "val1")
 %! assert (p.Results.op2, "val2")
 %! assert (p.Results.line, "circle")
+%!
+%! ## If there's enough arguments to fill the positional options and
+%! ## param/key, it still skips positional options.
+%! p = inputParser ();
+%! p.addOptional ("op1", "val1");
+%! p.addOptional ("op2", "val2");
+%! p.addParameter ("line", "tree");
+%! p.parse ("line", "circle", "line", "rectangle");
+%! assert (p.Results, struct ("op1", "val1", "op2", "val2",
+%!                            "line", "rectangle"))
+%!
+%! ## Even if the key/param fails validation, it does not backtrack to
+%! ## check if the values are valid positional options.
+%! p = inputParser ();
+%! p.addOptional ("op1", "val1", @ischar);
+%! p.addOptional ("op2", "val2", @isnumeric);
+%! p.addParameter ("line", "circle", @ischar);
+%! fail ('p.parse ("line", 89)', "failed validation of LINE")
+%!
+%! p = inputParser ();
+%! p.addOptional ("op1", "val1");
+%! p.addParamValue ("line", "circle", @ischar);
+%! fail ('p.parse ("line", "line", 89)')
+
+%!test <50752>
+%! ## This fails in Matlab but works in Octave.  It is a bug there
+%! ## that we do not replicate.
+%! p = inputParser ();
+%! p.addOptional ("op1", "val1");
+%! p.addParameter ("line", "circle");
+%! p.parse ("line");
+%! assert (p.Results, struct ("op1", "line", "line", "circle"))
 
 %!test <50752>
 %! p = inputParser;