comparison scripts/testfun/fail.m @ 20140:64a2d4c87ecb stable

Don't save "warning: " prefix in lastwarn() message. * error.cc (vwarning): Save base_msg (without "warning: ") to Vlast_warning_message. * error.cc (error_1): Use std::string operators rather than strsave to strip "\n" from fmt string. Simpler syntax avoids having to delete [] memory created with new. * error.cc (warning_1): Strip trailing newline from fmt string as error_1 does. * fail.m: Fix input validation which allowed nonsensical second input with 3 args. Don't post-process warning or error messages from lastwarn or lasterr. Add BIST test for input validation.
author Rik <rik@octave.org>
date Tue, 28 Apr 2015 14:03:03 -0700
parents 2d5cbb6ac845
children 2645f9ef8c88
comparison
equal deleted inserted replaced
20139:bcf0a288aa6c 20140:64a2d4c87ecb
65 if (nargin < 1 || nargin > 3) 65 if (nargin < 1 || nargin > 3)
66 print_usage (); 66 print_usage ();
67 endif 67 endif
68 68
69 ## Parse input arguments 69 ## Parse input arguments
70 test_warning = (nargin > 1 && strcmp (pattern, "warning")); 70 test_warning = false;
71 if (nargin == 3) 71 if (nargin == 1)
72 pattern = warning_pattern;
73 elseif (nargin == 1 || (nargin == 2 && test_warning))
74 pattern = ""; 72 pattern = "";
73 elseif (nargin == 2 && ! strcmp (pattern, "warning"))
74 ## Normal error test
75 elseif (nargin >= 2 && strcmp (pattern, "warning"))
76 test_warning = true;
77 if (nargin == 2)
78 pattern = "";
79 else
80 pattern = warning_pattern;
81 endif
82 else
83 print_usage ();
75 endif 84 endif
76 85
77 ## Match any nonempty message 86 ## Match any nonempty message
78 if (isempty (pattern)) 87 if (isempty (pattern))
79 pattern = "."; 88 pattern = ".";
87 if (test_warning) 96 if (test_warning)
88 ## Perform the warning test. 97 ## Perform the warning test.
89 ## Clear old warnings. 98 ## Clear old warnings.
90 lastwarn (""); 99 lastwarn ("");
91 ## Make sure warnings are turned on. 100 ## Make sure warnings are turned on.
92 state = warning ("query", "quiet"); 101 wstate = warning ("query", "quiet");
93 warning ("on", "quiet"); 102 warning ("on", "quiet");
94 try 103 try
95 evalin ("caller", [code ";"]); 104 evalin ("caller", [code ";"]);
96 ## Retrieve new warnings. 105 ## Retrieve new warnings.
97 warn = lastwarn (); 106 warn = lastwarn ();
98 warning (state.state, "quiet"); 107 warning (wstate.state, "quiet");
99 if (isempty (warn)) 108 if (isempty (warn))
100 msg = sprintf ("expected warning <%s> but got none", pattern); 109 msg = sprintf ("expected warning <%s> but got none", pattern);
101 else 110 else
102 ## Transform "warning: ...\n" to "...".
103 warn([1:9, end]) = [];
104 if (! isempty (regexp (warn, pattern, "once"))) 111 if (! isempty (regexp (warn, pattern, "once")))
105 return; 112 return;
106 endif 113 endif
107 msg = sprintf ("expected warning <%s>\nbut got <%s>", pattern, warn); 114 msg = sprintf ("expected warning <%s>\nbut got <%s>", pattern, warn);
108 endif 115 endif
109 catch 116 catch
110 warning (state.state, "quiet"); 117 warning (wstate.state, "quiet");
111 err = lasterr; 118 err = lasterr ();
112 ## Transform "error: ...\n", to "...".
113 err([1:6, end]) = [];
114 msg = sprintf ("expected warning <%s>\nbut got error <%s>", pattern, err); 119 msg = sprintf ("expected warning <%s>\nbut got error <%s>", pattern, err);
115 end_try_catch 120 end_try_catch
116 121
117 else 122 else
118 ## Perform the error test. 123 ## Perform the error test.
119 try 124 try
120 evalin ("caller", [code ";"]); 125 evalin ("caller", [code ";"]);
121 msg = sprintf ("expected error <%s> but got none", pattern); 126 msg = sprintf ("expected error <%s> but got none", pattern);
122 catch 127 catch
123 err = lasterr (); 128 err = lasterr ();
124 if (strcmp (err(1:7), "error:"))
125 err([1:6, end]) = []; # transform "error: ...\n", to "..."
126 endif
127 if (! isempty (regexp (err, pattern, "once"))) 129 if (! isempty (regexp (err, pattern, "once")))
128 return; 130 return;
129 endif 131 endif
130 msg = sprintf ("expected error <%s>\nbut got <%s>", pattern, err); 132 msg = sprintf ("expected error <%s>\nbut got <%s>", pattern, err);
131 end_try_catch 133 end_try_catch
151 %!error <warning failure> fail ("warning ('warning failure')", "warning", "success") 153 %!error <warning failure> fail ("warning ('warning failure')", "warning", "success")
152 154
153 ## Test input validation 155 ## Test input validation
154 %!error fail () 156 %!error fail ()
155 %!error fail (1,2,3,4) 157 %!error fail (1,2,3,4)
158 %!error fail (1, "nowarning", "foo")
156 159