Mercurial > octave-antonio
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 |