changeset 28081:9291de57bcfe stable

orient.m: Overhaul function. * orient.m: Use "nargin" rather than "nargs" as variable name. Put input validation of nargin ahead of call to gcf() so that useless figure is not created when function fails. Use variable "orientation" rather than "varargin{1}" for readability. Put BIST tests within unwind_protect block so that temporary figure is always cleaned up correctly even when tests fail. Put code for %!error test within unwind_protect block to clean up any figure created.
author Rik <rik@octave.org>
date Mon, 17 Feb 2020 17:22:17 -0800
parents 5e79401cbc35
children 8ddecbd15a88
files scripts/plot/appearance/orient.m
diffstat 1 files changed, 53 insertions(+), 50 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/plot/appearance/orient.m	Mon Feb 17 12:31:16 2020 -0800
+++ b/scripts/plot/appearance/orient.m	Mon Feb 17 17:22:17 2020 -0800
@@ -53,25 +53,26 @@
 
 function retval = orient (varargin)
 
-  nargs = nargin;
-
-  if (nargs > 0 && numel (varargin{1}) == 1 && isfigure (varargin{1}))
+  cf = [];
+  if (nargin > 0 && isscalar (varargin{1}) && isfigure (varargin{1}))
     cf = varargin{1};
     varargin(1) = [];
-    nargs -= 1;
-  else
-    cf = gcf ();
+    nargin = nargin - 1;
   endif
 
-  if (nargs > 1)
+  if (nargin > 1)
     print_usage ();
   endif
 
+  if (isempty (cf))
+    cf = gcf ();
+  endif
+
   paperunits = get (cf, "paperunits");
   unwind_protect
     set (cf, "paperunits", "inches");  # All Matlab calculations assume inches.
 
-    if (nargs == 0)
+    if (nargin == 0)
       retval = get (cf, "paperorientation");
       if (strcmp (retval, "portrait"))
         papersize = get (cf, "papersize");
@@ -103,7 +104,7 @@
           papersize = get (cf, "papersize");
           set (cf, "paperposition", [0.25, 0.25, (papersize - 0.5)]);
         endif
-      elseif (strcmpi (varargin{1}, "tall"))
+      elseif (strcmpi (orientation, "tall"))
         orient ("portrait");
         papersize = get (cf, "papersize");
         set (cf, "paperposition", [0.25, 0.25, (papersize - 0.5)]);
@@ -119,50 +120,52 @@
 endfunction
 
 
-%!shared papersize, paperposition, fullpaperposition, hfig
+%!test
 %! papersize = [8.5, 11];
-%! paperposition = [0.25, 2.5, 8, 6];
+%! paperposition = [1.342185258002766, 3.319138943502075, 5.815629483994468, 4.361722112995850];
 %! fullpaperposition = [0.25, 0.25, (papersize-0.5)];
 %! hfig = figure ("visible", "off");
-%! set (hfig, "paperunits", "inches");
-%! set (hfig, "paperorientation", "portrait");
-%! set (hfig, "papersize", papersize);
-%! set (hfig, "paperposition", paperposition);
-
-%!test
-%! orient portrait;
-%! assert (orient, "portrait");  # default
-%! assert (get (hfig, "papersize"), papersize);
-%! assert (get (hfig, "paperposition"), paperposition);
-
-%!test
-%! orient landscape;
-%! assert (orient,"landscape");  # change to landscape
-%! assert (get (hfig, "papersize"), papersize([2, 1]));
-%! assert (get (hfig, "paperposition"), fullpaperposition([1, 2, 4, 3]));
-
-%!test
-%! orient portrait   # change back to portrait
-%! assert (orient, "portrait");
-%! assert (get (hfig, "papersize"), papersize);
-%! assert (get (hfig, "paperposition"), paperposition);
-
-%!test
-%! orient landscape;
-%! orient tall;
-%! assert (orient, "tall");
-%! assert (get (hfig, "papersize"), papersize);
-%! assert (get (hfig, "paperposition"), fullpaperposition);
-
-%!test
-%! orient portrait   # errors don't change the state
-%! assert (orient, "portrait");
-%! assert (get (hfig, "papersize"), papersize);
-%! assert (get (hfig, "paperposition"), paperposition);
+%! unwind_protect
+%!   set (hfig, "paperunits", "inches");
+%!   set (hfig, "paperorientation", "portrait");
+%!   set (hfig, "papersize", papersize);
+%!   set (hfig, "paperposition", paperposition);
+%!
+%!   orient portrait;
+%!   assert (orient, "portrait");  # default
+%!   assert (get (hfig, "papersize"), papersize);
+%!   assert (get (hfig, "paperposition"), paperposition);
+%!
+%!   orient landscape;
+%!   assert (orient,"landscape");  # change to landscape
+%!   assert (get (hfig, "papersize"), papersize([2, 1]));
+%!   assert (get (hfig, "paperposition"), fullpaperposition([1, 2, 4, 3]));
+%!
+%!   orient portrait   # change back to portrait
+%!   assert (orient, "portrait");
+%!   assert (get (hfig, "papersize"), papersize);
+%!   assert (get (hfig, "paperposition"), paperposition);
+%!
+%!   orient landscape;
+%!   orient tall;
+%!   assert (orient, "tall");
+%!   assert (get (hfig, "papersize"), papersize);
+%!   assert (get (hfig, "paperposition"), fullpaperposition);
+%!
+%!   orient portrait   # errors don't change the state
+%!   assert (orient, "portrait");
+%!   assert (get (hfig, "papersize"), papersize);
+%!   assert (get (hfig, "paperposition"), paperposition);
+%! unwind_protect_cleanup
+%!   close (hfig);
+%! end_unwind_protect
 
 ## Test input validation
 %!error orient (1.73, 2.5)
-%!error <unknown ORIENTATION> orient ("nobody")
-
-%!test
-%! close (hfig);
+%!error <unknown ORIENTATION>
+%! hfig = figure ("visible", "off");
+%! unwind_protect
+%!   orient ("nobody");
+%! unwind_protect_cleanup
+%!   close (hfig);
+%! end_unwind_protect