2 using System
.Collections
;
3 using System
.Collections
.Generic
;
5 using System
.Diagnostics
;
6 using System
.Text
.RegularExpressions
;
8 namespace UnhandledExceptionTest
{
10 private string monoRuntime
;
11 public string RUNTIME
{
16 public bool UseMonoRuntime
{
18 return (monoRuntime
!= null) && (monoRuntime
!= "");
21 private bool generateTestConfigurations
;
24 return generateTestConfigurations
;
28 private static bool ParseArgumentValue (string value) {
29 if ((value.Length
== 1)) {
36 Console
.WriteLine ("Invalid argument value {0}", value);
37 throw new ApplicationException ("Invalid argument value " + value);
40 Console
.WriteLine ("Invalid argument value {0}", value);
41 throw new ApplicationException ("Invalid argument value " + value);
44 public RunningMode (string runningMode
) {
45 string [] arguments
= runningMode
.Split (',');
46 foreach (string argument
in arguments
) {
47 string [] components
= argument
.Split (':');
48 if (components
.Length
== 2) {
49 switch (components
[0]) {
51 monoRuntime
= components
[1];
54 generateTestConfigurations
= ParseArgumentValue (components
[1]);
57 Console
.WriteLine ("Invalid argument {0}", argument
);
58 throw new ApplicationException ("Invalid argument " + argument
);
61 Console
.WriteLine ("Invalid argument {0}", argument
);
62 throw new ApplicationException ("Invalid argument " + argument
);
75 public bool EXITZERO
{
77 return (exitCode
== 0);
80 private bool continueMarker
;
83 return continueMarker
;
86 private bool rootDomainUnhandledExceptionMarker
;
89 return rootDomainUnhandledExceptionMarker
;
92 private bool differentDomainUnhandledExceptionMarker
;
95 return differentDomainUnhandledExceptionMarker
;
98 private bool invalidArgument
;
99 public bool InvalidArgument
{
101 return invalidArgument
;
104 private string [] output
;
106 private static Regex continuePattern
= new Regex ("MARKER-CONT");
107 private static Regex rootDomainUnhandledExceptionPattern
= new Regex ("MARKER-RDUE");
108 private static Regex differentDomainUnhandledExceptionPattern
= new Regex ("MARKER-DDUE");
109 private static Regex invalidArgumentPattern
= new Regex ("Invalid argument");
111 private void UpdateFlags () {
112 foreach (string outputLine
in output
) {
113 if (continuePattern
.Match (outputLine
).Success
) {
114 continueMarker
= true;
116 if (rootDomainUnhandledExceptionPattern
.Match (outputLine
).Success
) {
117 rootDomainUnhandledExceptionMarker
= true;
119 if (differentDomainUnhandledExceptionPattern
.Match (outputLine
).Success
) {
120 differentDomainUnhandledExceptionMarker
= true;
122 if (invalidArgumentPattern
.Match (outputLine
).Success
) {
123 invalidArgument
= true;
127 public void PrintOutput () {
128 Console
.WriteLine ("--- Output start: ---");
129 foreach (string outputLine
in output
) {
130 Console
.WriteLine (outputLine
);
132 Console
.WriteLine ("--- Output end. ---");
135 public TestResult (int exitCode
, string [] output
) {
136 this.exitCode
= exitCode
;
137 this.output
= output
;
142 class TestDescription
{
143 private bool use20Runtime
;
149 private bool rootConfigurationIsLegacy
;
152 return rootConfigurationIsLegacy
;
156 private bool exitCodeShouldBeZero
;
157 public bool EXITZERO
{
159 return exitCodeShouldBeZero
;
162 private bool continueMarkerExpected
;
165 return continueMarkerExpected
;
168 private bool rootDomainUnhandledExceptionMarkerExpected
;
171 return rootDomainUnhandledExceptionMarkerExpected
;
174 private bool differentDomainUnhandledExceptionMarkerExpected
;
177 return differentDomainUnhandledExceptionMarkerExpected
;
181 private static string BoolToString (bool value) {
182 return value ? "T" : "F";
184 public static readonly int MIN_CONFIG_CODE
= 0;
185 public static readonly int MAX_CONFIG_CODE
= 255;
186 public static TestDescription
FromCode (int code
) {
187 if ((code
>= MIN_CONFIG_CODE
) && (code
<= MAX_CONFIG_CODE
)) {
188 bool testUSE20
= (code
& 0x01) != 0;
189 bool testRCIL
= (code
& 0x02) != 0;
190 bool testDT
= (code
& 0x04) != 0;
191 bool testDA
= (code
& 0x08) != 0;
192 bool testDCIL
= (code
& 0x10) != 0;
193 bool testDTDA
= (code
& 0x20) != 0;
194 bool testHRA
= (code
& 0x40) != 0;
195 bool testHDA
= (code
& 0x80) != 0;
197 if (testDCIL
&& ! testDA
) {
199 } else if (testDTDA
&& ! testDA
) {
201 } else if (testHDA
&& ! testDA
) {
204 string testConfiguration
= String
.Format ("USE20:{0},RCIL:{1}",
205 BoolToString (testUSE20
), BoolToString (testRCIL
));
206 string testArguments
= String
.Format ("DT:{0},DA:{1},DCIL:{2},DTDA:{3},HRA:{4},HDA:{5}",
207 BoolToString (testDT
), BoolToString (testDA
),
208 BoolToString (testDCIL
), BoolToString (testDTDA
),
209 BoolToString (testHRA
), BoolToString (testHDA
));
210 string testExpectedResult
= "EXITZERO:F,CONT:F,RDUE:F,DDUE:F";
211 return new TestDescription (testConfiguration
, testArguments
, testExpectedResult
);
219 private string configuration
;
220 public string Configuration
{
222 return configuration
;
225 private string arguments
;
226 public string Arguments
{
231 private string expectedResult
;
232 public string ExpectedResult
{
234 return expectedResult
;
238 private static bool ParseArgumentValue (string value) {
239 if ((value.Length
== 1)) {
246 Console
.WriteLine ("Invalid argument value {0}", value);
247 throw new ApplicationException ("Invalid argument value " + value);
250 Console
.WriteLine ("Invalid argument value {0}", value);
251 throw new ApplicationException ("Invalid argument value " + value);
255 public TestDescription (string configuration
, string arguments
, string expectedResult
) {
256 this.configuration
= configuration
;
257 this.arguments
= arguments
;
258 this.expectedResult
= expectedResult
;
260 string [] configurationFlags
= configuration
.Split (',');
261 foreach (string configurationFlag
in configurationFlags
) {
262 string [] components
= configurationFlag
.Split (':');
263 if (components
.Length
== 2) {
264 switch (components
[0]) {
266 use20Runtime
= ParseArgumentValue (components
[1]);
269 rootConfigurationIsLegacy
= ParseArgumentValue (components
[1]);
272 Console
.WriteLine ("Invalid argument {0}", components
[0]);
273 throw new ApplicationException ("Invalid argument " + components
[0]);
276 Console
.WriteLine ("Invalid argument {0}", configurationFlag
);
277 throw new ApplicationException ("Invalid argument " + configurationFlag
);
280 string [] expectedResultFlags
= expectedResult
.Split (',');
281 foreach (string expectedResultFlag
in expectedResultFlags
) {
282 string [] components
= expectedResultFlag
.Split (':');
283 if (components
.Length
== 2) {
284 switch (components
[0]) {
286 exitCodeShouldBeZero
= ParseArgumentValue (components
[1]);
289 continueMarkerExpected
= ParseArgumentValue (components
[1]);
292 rootDomainUnhandledExceptionMarkerExpected
= ParseArgumentValue (components
[1]);
295 differentDomainUnhandledExceptionMarkerExpected
= ParseArgumentValue (components
[1]);
298 Console
.WriteLine ("Invalid argument {0}", components
[0]);
299 throw new ApplicationException ("Invalid argument " + components
[0]);
302 Console
.WriteLine ("Invalid argument {0}", expectedResultFlag
);
303 throw new ApplicationException ("Invalid argument " + expectedResultFlag
);
309 public bool Check (TestResult testResult
) {
310 if (EXITZERO
&& (testResult
.ExitCode
!= 0)) {
311 Console
.WriteLine ("Test FAILED: exit code is {0}, expected zero", testResult
.ExitCode
);
314 if (!CONT
&& testResult
.CONT
) {
315 Console
.WriteLine ("Test FAILED: unexpected CONT marker found");
318 if (CONT
&& !testResult
.CONT
) {
319 Console
.WriteLine ("Test FAILED: expected CONT marker not found");
322 if (!RDUE
&& testResult
.RDUE
) {
323 Console
.WriteLine ("Test FAILED: unexpected RDUE marker found");
326 if (RDUE
&& !testResult
.RDUE
) {
327 Console
.WriteLine ("Test FAILED: expected RDUE marker not found");
330 if (!DDUE
&& testResult
.DDUE
) {
331 Console
.WriteLine ("Test FAILED: unexpected marker found");
334 if (DDUE
&& !testResult
.DDUE
) {
335 Console
.WriteLine ("Test FAILED: expected DDUE marker not found");
343 private TestDescription description
;
344 private TestResult result
;
346 public TestRun (TestDescription description
, RunningMode runningMode
) {
347 this.description
= description
;
349 Process p
= new Process ();
350 p
.StartInfo
.UseShellExecute
= false;
351 p
.StartInfo
.CreateNoWindow
= true;
352 p
.StartInfo
.RedirectStandardOutput
= true;
353 p
.EnableRaisingEvents
= true;
355 string program
= "unhandled-exception-test-case";
356 if (description
.RCIL
) {
357 program
= program
+ "-legacy";
359 program
= program
+ (description
.USE20
? ".2.exe" : ".1.exe");
360 if (runningMode
.UseMonoRuntime
) {
361 p
.StartInfo
.FileName
= runningMode
.RUNTIME
;
362 p
.StartInfo
.Arguments
= "--debug " + program
+ " " + description
.Arguments
;
364 p
.StartInfo
.FileName
= program
;
365 p
.StartInfo
.Arguments
= description
.Arguments
;
368 Console
.WriteLine ("Starting process \"{0}\" \"{1}\"", p
.StartInfo
.FileName
, p
.StartInfo
.Arguments
);
371 // Do not wait for the child process to exit before
372 // reading to the end of its redirected stream.
374 // Read the output stream first and then wait.
375 string output
= p
.StandardOutput
.ReadToEnd ();
377 string[] outputLines
= output
.Split ('\n');
379 result
= new TestResult (p
.ExitCode
, outputLines
);
382 public bool Check () {
383 return description
.Check (result
);
386 private static string BoolToString (bool value) {
387 return value ? "T" : "F";
389 public void Print () {
390 Console
.WriteLine ("Results of test {0} {1} {2}",
391 description
.Configuration
, description
.Arguments
, description
.ExpectedResult
);
392 Console
.WriteLine ("Exit code is {0}, output is:", result
.ExitCode
);
393 result
.PrintOutput ();
394 Console
.WriteLine ("The following configuration would make the test pass:");
395 Console
.WriteLine ("new TestDescription (\"{0}\", \"{1}\", \"EXITZERO:{2},CONT:{3},RDUE:{4},DDUE:{5}\"),",
396 description
.Configuration
, description
.Arguments
,
397 BoolToString (result
.EXITZERO
), BoolToString (result
.CONT
),
398 BoolToString (result
.RDUE
), BoolToString (result
.DDUE
));
401 public bool Process (RunningMode runningMode
) {
402 if (runningMode
.GTC
) {
403 Console
.WriteLine ("Generating test configuration...");
407 Console
.WriteLine ("Checking test result...");
408 bool checkResult
= Check ();
412 Console
.WriteLine ("Test PASSED");
419 class UnhandledExceptionTester
{
420 private static TestDescription
[] tests
= new TestDescription
[] {
421 new TestDescription ("USE20:F,RCIL:F", "DT:F,DA:F,DCIL:F,DTDA:F,HRA:F,HDA:F", "EXITZERO:F,CONT:F,RDUE:F,DDUE:F"),
422 new TestDescription ("USE20:T,RCIL:F", "DT:F,DA:F,DCIL:F,DTDA:F,HRA:F,HDA:F", "EXITZERO:F,CONT:F,RDUE:F,DDUE:F"),
423 new TestDescription ("USE20:F,RCIL:T", "DT:F,DA:F,DCIL:F,DTDA:F,HRA:F,HDA:F", "EXITZERO:F,CONT:F,RDUE:F,DDUE:F"),
424 new TestDescription ("USE20:T,RCIL:T", "DT:F,DA:F,DCIL:F,DTDA:F,HRA:F,HDA:F", "EXITZERO:F,CONT:F,RDUE:F,DDUE:F"),
425 new TestDescription ("USE20:F,RCIL:F", "DT:T,DA:F,DCIL:F,DTDA:F,HRA:F,HDA:F", "EXITZERO:T,CONT:T,RDUE:F,DDUE:F"),
426 new TestDescription ("USE20:T,RCIL:F", "DT:T,DA:F,DCIL:F,DTDA:F,HRA:F,HDA:F", "EXITZERO:F,CONT:F,RDUE:F,DDUE:F"),
427 new TestDescription ("USE20:F,RCIL:T", "DT:T,DA:F,DCIL:F,DTDA:F,HRA:F,HDA:F", "EXITZERO:T,CONT:T,RDUE:F,DDUE:F"),
428 new TestDescription ("USE20:T,RCIL:T", "DT:T,DA:F,DCIL:F,DTDA:F,HRA:F,HDA:F", "EXITZERO:T,CONT:T,RDUE:F,DDUE:F"),
429 new TestDescription ("USE20:F,RCIL:F", "DT:F,DA:T,DCIL:F,DTDA:F,HRA:F,HDA:F", "EXITZERO:F,CONT:F,RDUE:F,DDUE:F"),
430 new TestDescription ("USE20:T,RCIL:F", "DT:F,DA:T,DCIL:F,DTDA:F,HRA:F,HDA:F", "EXITZERO:F,CONT:F,RDUE:F,DDUE:F"),
431 new TestDescription ("USE20:F,RCIL:T", "DT:F,DA:T,DCIL:F,DTDA:F,HRA:F,HDA:F", "EXITZERO:F,CONT:F,RDUE:F,DDUE:F"),
432 new TestDescription ("USE20:T,RCIL:T", "DT:F,DA:T,DCIL:F,DTDA:F,HRA:F,HDA:F", "EXITZERO:F,CONT:F,RDUE:F,DDUE:F"),
433 new TestDescription ("USE20:F,RCIL:F", "DT:T,DA:T,DCIL:F,DTDA:F,HRA:F,HDA:F", "EXITZERO:T,CONT:T,RDUE:F,DDUE:F"),
434 new TestDescription ("USE20:T,RCIL:F", "DT:T,DA:T,DCIL:F,DTDA:F,HRA:F,HDA:F", "EXITZERO:F,CONT:F,RDUE:F,DDUE:F"),
435 new TestDescription ("USE20:F,RCIL:T", "DT:T,DA:T,DCIL:F,DTDA:F,HRA:F,HDA:F", "EXITZERO:T,CONT:T,RDUE:F,DDUE:F"),
436 new TestDescription ("USE20:T,RCIL:T", "DT:T,DA:T,DCIL:F,DTDA:F,HRA:F,HDA:F", "EXITZERO:T,CONT:T,RDUE:F,DDUE:F"),
437 new TestDescription ("USE20:F,RCIL:F", "DT:F,DA:T,DCIL:T,DTDA:F,HRA:F,HDA:F", "EXITZERO:F,CONT:F,RDUE:F,DDUE:F"),
438 new TestDescription ("USE20:T,RCIL:F", "DT:F,DA:T,DCIL:T,DTDA:F,HRA:F,HDA:F", "EXITZERO:F,CONT:F,RDUE:F,DDUE:F"),
439 new TestDescription ("USE20:F,RCIL:T", "DT:F,DA:T,DCIL:T,DTDA:F,HRA:F,HDA:F", "EXITZERO:F,CONT:F,RDUE:F,DDUE:F"),
440 new TestDescription ("USE20:T,RCIL:T", "DT:F,DA:T,DCIL:T,DTDA:F,HRA:F,HDA:F", "EXITZERO:F,CONT:F,RDUE:F,DDUE:F"),
441 new TestDescription ("USE20:F,RCIL:F", "DT:T,DA:T,DCIL:T,DTDA:F,HRA:F,HDA:F", "EXITZERO:T,CONT:T,RDUE:F,DDUE:F"),
442 new TestDescription ("USE20:T,RCIL:F", "DT:T,DA:T,DCIL:T,DTDA:F,HRA:F,HDA:F", "EXITZERO:F,CONT:F,RDUE:F,DDUE:F"),
443 new TestDescription ("USE20:F,RCIL:T", "DT:T,DA:T,DCIL:T,DTDA:F,HRA:F,HDA:F", "EXITZERO:T,CONT:T,RDUE:F,DDUE:F"),
444 new TestDescription ("USE20:T,RCIL:T", "DT:T,DA:T,DCIL:T,DTDA:F,HRA:F,HDA:F", "EXITZERO:T,CONT:T,RDUE:F,DDUE:F"),
445 new TestDescription ("USE20:F,RCIL:F", "DT:F,DA:T,DCIL:F,DTDA:T,HRA:F,HDA:F", "EXITZERO:T,CONT:T,RDUE:F,DDUE:F"),
446 new TestDescription ("USE20:T,RCIL:F", "DT:F,DA:T,DCIL:F,DTDA:T,HRA:F,HDA:F", "EXITZERO:F,CONT:F,RDUE:F,DDUE:F"),
447 new TestDescription ("USE20:F,RCIL:T", "DT:F,DA:T,DCIL:F,DTDA:T,HRA:F,HDA:F", "EXITZERO:T,CONT:T,RDUE:F,DDUE:F"),
448 new TestDescription ("USE20:T,RCIL:T", "DT:F,DA:T,DCIL:F,DTDA:T,HRA:F,HDA:F", "EXITZERO:T,CONT:T,RDUE:F,DDUE:F"),
449 new TestDescription ("USE20:F,RCIL:F", "DT:T,DA:T,DCIL:F,DTDA:T,HRA:F,HDA:F", "EXITZERO:T,CONT:T,RDUE:F,DDUE:F"),
450 new TestDescription ("USE20:T,RCIL:F", "DT:T,DA:T,DCIL:F,DTDA:T,HRA:F,HDA:F", "EXITZERO:F,CONT:F,RDUE:F,DDUE:F"),
451 new TestDescription ("USE20:F,RCIL:T", "DT:T,DA:T,DCIL:F,DTDA:T,HRA:F,HDA:F", "EXITZERO:T,CONT:T,RDUE:F,DDUE:F"),
452 new TestDescription ("USE20:T,RCIL:T", "DT:T,DA:T,DCIL:F,DTDA:T,HRA:F,HDA:F", "EXITZERO:T,CONT:T,RDUE:F,DDUE:F"),
453 new TestDescription ("USE20:F,RCIL:F", "DT:F,DA:T,DCIL:T,DTDA:T,HRA:F,HDA:F", "EXITZERO:T,CONT:T,RDUE:F,DDUE:F"),
454 new TestDescription ("USE20:T,RCIL:F", "DT:F,DA:T,DCIL:T,DTDA:T,HRA:F,HDA:F", "EXITZERO:F,CONT:F,RDUE:F,DDUE:F"),
455 new TestDescription ("USE20:F,RCIL:T", "DT:F,DA:T,DCIL:T,DTDA:T,HRA:F,HDA:F", "EXITZERO:T,CONT:T,RDUE:F,DDUE:F"),
456 new TestDescription ("USE20:T,RCIL:T", "DT:F,DA:T,DCIL:T,DTDA:T,HRA:F,HDA:F", "EXITZERO:T,CONT:T,RDUE:F,DDUE:F"),
457 new TestDescription ("USE20:F,RCIL:F", "DT:T,DA:T,DCIL:T,DTDA:T,HRA:F,HDA:F", "EXITZERO:T,CONT:T,RDUE:F,DDUE:F"),
458 new TestDescription ("USE20:T,RCIL:F", "DT:T,DA:T,DCIL:T,DTDA:T,HRA:F,HDA:F", "EXITZERO:F,CONT:F,RDUE:F,DDUE:F"),
459 new TestDescription ("USE20:F,RCIL:T", "DT:T,DA:T,DCIL:T,DTDA:T,HRA:F,HDA:F", "EXITZERO:T,CONT:T,RDUE:F,DDUE:F"),
460 new TestDescription ("USE20:T,RCIL:T", "DT:T,DA:T,DCIL:T,DTDA:T,HRA:F,HDA:F", "EXITZERO:T,CONT:T,RDUE:F,DDUE:F"),
461 new TestDescription ("USE20:F,RCIL:F", "DT:F,DA:F,DCIL:F,DTDA:F,HRA:T,HDA:F", "EXITZERO:F,CONT:F,RDUE:T,DDUE:F"),
462 new TestDescription ("USE20:T,RCIL:F", "DT:F,DA:F,DCIL:F,DTDA:F,HRA:T,HDA:F", "EXITZERO:F,CONT:F,RDUE:T,DDUE:F"),
463 new TestDescription ("USE20:F,RCIL:T", "DT:F,DA:F,DCIL:F,DTDA:F,HRA:T,HDA:F", "EXITZERO:F,CONT:F,RDUE:T,DDUE:F"),
464 new TestDescription ("USE20:T,RCIL:T", "DT:F,DA:F,DCIL:F,DTDA:F,HRA:T,HDA:F", "EXITZERO:F,CONT:F,RDUE:T,DDUE:F"),
465 new TestDescription ("USE20:F,RCIL:F", "DT:T,DA:F,DCIL:F,DTDA:F,HRA:T,HDA:F", "EXITZERO:T,CONT:T,RDUE:T,DDUE:F"),
466 new TestDescription ("USE20:T,RCIL:F", "DT:T,DA:F,DCIL:F,DTDA:F,HRA:T,HDA:F", "EXITZERO:F,CONT:F,RDUE:T,DDUE:F"),
467 new TestDescription ("USE20:F,RCIL:T", "DT:T,DA:F,DCIL:F,DTDA:F,HRA:T,HDA:F", "EXITZERO:T,CONT:T,RDUE:T,DDUE:F"),
468 new TestDescription ("USE20:T,RCIL:T", "DT:T,DA:F,DCIL:F,DTDA:F,HRA:T,HDA:F", "EXITZERO:T,CONT:T,RDUE:T,DDUE:F"),
469 new TestDescription ("USE20:F,RCIL:F", "DT:F,DA:T,DCIL:F,DTDA:F,HRA:T,HDA:F", "EXITZERO:F,CONT:F,RDUE:T,DDUE:F"),
470 new TestDescription ("USE20:T,RCIL:F", "DT:F,DA:T,DCIL:F,DTDA:F,HRA:T,HDA:F", "EXITZERO:F,CONT:F,RDUE:T,DDUE:F"),
471 new TestDescription ("USE20:F,RCIL:T", "DT:F,DA:T,DCIL:F,DTDA:F,HRA:T,HDA:F", "EXITZERO:F,CONT:F,RDUE:T,DDUE:F"),
472 new TestDescription ("USE20:T,RCIL:T", "DT:F,DA:T,DCIL:F,DTDA:F,HRA:T,HDA:F", "EXITZERO:F,CONT:F,RDUE:T,DDUE:F"),
473 new TestDescription ("USE20:F,RCIL:F", "DT:T,DA:T,DCIL:F,DTDA:F,HRA:T,HDA:F", "EXITZERO:T,CONT:T,RDUE:T,DDUE:F"),
474 new TestDescription ("USE20:T,RCIL:F", "DT:T,DA:T,DCIL:F,DTDA:F,HRA:T,HDA:F", "EXITZERO:F,CONT:F,RDUE:T,DDUE:F"),
475 new TestDescription ("USE20:F,RCIL:T", "DT:T,DA:T,DCIL:F,DTDA:F,HRA:T,HDA:F", "EXITZERO:T,CONT:T,RDUE:T,DDUE:F"),
476 new TestDescription ("USE20:T,RCIL:T", "DT:T,DA:T,DCIL:F,DTDA:F,HRA:T,HDA:F", "EXITZERO:T,CONT:T,RDUE:T,DDUE:F"),
477 new TestDescription ("USE20:F,RCIL:F", "DT:F,DA:T,DCIL:T,DTDA:F,HRA:T,HDA:F", "EXITZERO:F,CONT:F,RDUE:T,DDUE:F"),
478 new TestDescription ("USE20:T,RCIL:F", "DT:F,DA:T,DCIL:T,DTDA:F,HRA:T,HDA:F", "EXITZERO:F,CONT:F,RDUE:T,DDUE:F"),
479 new TestDescription ("USE20:F,RCIL:T", "DT:F,DA:T,DCIL:T,DTDA:F,HRA:T,HDA:F", "EXITZERO:F,CONT:F,RDUE:T,DDUE:F"),
480 new TestDescription ("USE20:T,RCIL:T", "DT:F,DA:T,DCIL:T,DTDA:F,HRA:T,HDA:F", "EXITZERO:F,CONT:F,RDUE:T,DDUE:F"),
481 new TestDescription ("USE20:F,RCIL:F", "DT:T,DA:T,DCIL:T,DTDA:F,HRA:T,HDA:F", "EXITZERO:T,CONT:T,RDUE:T,DDUE:F"),
482 new TestDescription ("USE20:T,RCIL:F", "DT:T,DA:T,DCIL:T,DTDA:F,HRA:T,HDA:F", "EXITZERO:F,CONT:F,RDUE:T,DDUE:F"),
483 new TestDescription ("USE20:F,RCIL:T", "DT:T,DA:T,DCIL:T,DTDA:F,HRA:T,HDA:F", "EXITZERO:T,CONT:T,RDUE:T,DDUE:F"),
484 new TestDescription ("USE20:T,RCIL:T", "DT:T,DA:T,DCIL:T,DTDA:F,HRA:T,HDA:F", "EXITZERO:T,CONT:T,RDUE:T,DDUE:F"),
485 new TestDescription ("USE20:F,RCIL:F", "DT:F,DA:T,DCIL:F,DTDA:T,HRA:T,HDA:F", "EXITZERO:T,CONT:T,RDUE:T,DDUE:F"),
486 new TestDescription ("USE20:T,RCIL:F", "DT:F,DA:T,DCIL:F,DTDA:T,HRA:T,HDA:F", "EXITZERO:F,CONT:F,RDUE:T,DDUE:F"),
487 new TestDescription ("USE20:F,RCIL:T", "DT:F,DA:T,DCIL:F,DTDA:T,HRA:T,HDA:F", "EXITZERO:T,CONT:T,RDUE:T,DDUE:F"),
488 new TestDescription ("USE20:T,RCIL:T", "DT:F,DA:T,DCIL:F,DTDA:T,HRA:T,HDA:F", "EXITZERO:T,CONT:T,RDUE:T,DDUE:F"),
489 new TestDescription ("USE20:F,RCIL:F", "DT:T,DA:T,DCIL:F,DTDA:T,HRA:T,HDA:F", "EXITZERO:T,CONT:T,RDUE:T,DDUE:F"),
490 new TestDescription ("USE20:T,RCIL:F", "DT:T,DA:T,DCIL:F,DTDA:T,HRA:T,HDA:F", "EXITZERO:F,CONT:F,RDUE:T,DDUE:F"),
491 new TestDescription ("USE20:F,RCIL:T", "DT:T,DA:T,DCIL:F,DTDA:T,HRA:T,HDA:F", "EXITZERO:T,CONT:T,RDUE:T,DDUE:F"),
492 new TestDescription ("USE20:T,RCIL:T", "DT:T,DA:T,DCIL:F,DTDA:T,HRA:T,HDA:F", "EXITZERO:T,CONT:T,RDUE:T,DDUE:F"),
493 new TestDescription ("USE20:F,RCIL:F", "DT:F,DA:T,DCIL:T,DTDA:T,HRA:T,HDA:F", "EXITZERO:T,CONT:T,RDUE:T,DDUE:F"),
494 new TestDescription ("USE20:T,RCIL:F", "DT:F,DA:T,DCIL:T,DTDA:T,HRA:T,HDA:F", "EXITZERO:F,CONT:F,RDUE:T,DDUE:F"),
495 new TestDescription ("USE20:F,RCIL:T", "DT:F,DA:T,DCIL:T,DTDA:T,HRA:T,HDA:F", "EXITZERO:T,CONT:T,RDUE:T,DDUE:F"),
496 new TestDescription ("USE20:T,RCIL:T", "DT:F,DA:T,DCIL:T,DTDA:T,HRA:T,HDA:F", "EXITZERO:T,CONT:T,RDUE:T,DDUE:F"),
497 new TestDescription ("USE20:F,RCIL:F", "DT:T,DA:T,DCIL:T,DTDA:T,HRA:T,HDA:F", "EXITZERO:T,CONT:T,RDUE:T,DDUE:F"),
498 new TestDescription ("USE20:T,RCIL:F", "DT:T,DA:T,DCIL:T,DTDA:T,HRA:T,HDA:F", "EXITZERO:F,CONT:F,RDUE:T,DDUE:F"),
499 new TestDescription ("USE20:F,RCIL:T", "DT:T,DA:T,DCIL:T,DTDA:T,HRA:T,HDA:F", "EXITZERO:T,CONT:T,RDUE:T,DDUE:F"),
500 new TestDescription ("USE20:T,RCIL:T", "DT:T,DA:T,DCIL:T,DTDA:T,HRA:T,HDA:F", "EXITZERO:T,CONT:T,RDUE:T,DDUE:F"),
501 new TestDescription ("USE20:F,RCIL:F", "DT:F,DA:T,DCIL:F,DTDA:F,HRA:F,HDA:T", "EXITZERO:F,CONT:F,RDUE:F,DDUE:F"),
502 new TestDescription ("USE20:T,RCIL:F", "DT:F,DA:T,DCIL:F,DTDA:F,HRA:F,HDA:T", "EXITZERO:F,CONT:F,RDUE:F,DDUE:F"),
503 new TestDescription ("USE20:F,RCIL:T", "DT:F,DA:T,DCIL:F,DTDA:F,HRA:F,HDA:T", "EXITZERO:F,CONT:F,RDUE:F,DDUE:F"),
504 new TestDescription ("USE20:T,RCIL:T", "DT:F,DA:T,DCIL:F,DTDA:F,HRA:F,HDA:T", "EXITZERO:F,CONT:F,RDUE:F,DDUE:F"),
505 new TestDescription ("USE20:F,RCIL:F", "DT:T,DA:T,DCIL:F,DTDA:F,HRA:F,HDA:T", "EXITZERO:T,CONT:T,RDUE:F,DDUE:F"),
506 new TestDescription ("USE20:T,RCIL:F", "DT:T,DA:T,DCIL:F,DTDA:F,HRA:F,HDA:T", "EXITZERO:F,CONT:F,RDUE:F,DDUE:F"),
507 new TestDescription ("USE20:F,RCIL:T", "DT:T,DA:T,DCIL:F,DTDA:F,HRA:F,HDA:T", "EXITZERO:T,CONT:T,RDUE:F,DDUE:F"),
508 new TestDescription ("USE20:T,RCIL:T", "DT:T,DA:T,DCIL:F,DTDA:F,HRA:F,HDA:T", "EXITZERO:T,CONT:T,RDUE:F,DDUE:F"),
509 new TestDescription ("USE20:F,RCIL:F", "DT:F,DA:T,DCIL:T,DTDA:F,HRA:F,HDA:T", "EXITZERO:F,CONT:F,RDUE:F,DDUE:F"),
510 new TestDescription ("USE20:T,RCIL:F", "DT:F,DA:T,DCIL:T,DTDA:F,HRA:F,HDA:T", "EXITZERO:F,CONT:F,RDUE:F,DDUE:F"),
511 new TestDescription ("USE20:F,RCIL:T", "DT:F,DA:T,DCIL:T,DTDA:F,HRA:F,HDA:T", "EXITZERO:F,CONT:F,RDUE:F,DDUE:F"),
512 new TestDescription ("USE20:T,RCIL:T", "DT:F,DA:T,DCIL:T,DTDA:F,HRA:F,HDA:T", "EXITZERO:F,CONT:F,RDUE:F,DDUE:F"),
513 new TestDescription ("USE20:F,RCIL:F", "DT:T,DA:T,DCIL:T,DTDA:F,HRA:F,HDA:T", "EXITZERO:T,CONT:T,RDUE:F,DDUE:F"),
514 new TestDescription ("USE20:T,RCIL:F", "DT:T,DA:T,DCIL:T,DTDA:F,HRA:F,HDA:T", "EXITZERO:F,CONT:F,RDUE:F,DDUE:F"),
515 new TestDescription ("USE20:F,RCIL:T", "DT:T,DA:T,DCIL:T,DTDA:F,HRA:F,HDA:T", "EXITZERO:T,CONT:T,RDUE:F,DDUE:F"),
516 new TestDescription ("USE20:T,RCIL:T", "DT:T,DA:T,DCIL:T,DTDA:F,HRA:F,HDA:T", "EXITZERO:T,CONT:T,RDUE:F,DDUE:F"),
517 new TestDescription ("USE20:F,RCIL:F", "DT:F,DA:T,DCIL:F,DTDA:T,HRA:F,HDA:T", "EXITZERO:T,CONT:T,RDUE:F,DDUE:F"),
518 new TestDescription ("USE20:T,RCIL:F", "DT:F,DA:T,DCIL:F,DTDA:T,HRA:F,HDA:T", "EXITZERO:F,CONT:F,RDUE:F,DDUE:T"),
519 new TestDescription ("USE20:F,RCIL:T", "DT:F,DA:T,DCIL:F,DTDA:T,HRA:F,HDA:T", "EXITZERO:T,CONT:T,RDUE:F,DDUE:F"),
520 new TestDescription ("USE20:T,RCIL:T", "DT:F,DA:T,DCIL:F,DTDA:T,HRA:F,HDA:T", "EXITZERO:T,CONT:T,RDUE:F,DDUE:T"),
521 new TestDescription ("USE20:F,RCIL:F", "DT:T,DA:T,DCIL:F,DTDA:T,HRA:F,HDA:T", "EXITZERO:T,CONT:T,RDUE:F,DDUE:F"),
522 new TestDescription ("USE20:T,RCIL:F", "DT:T,DA:T,DCIL:F,DTDA:T,HRA:F,HDA:T", "EXITZERO:F,CONT:F,RDUE:F,DDUE:T"),
523 new TestDescription ("USE20:F,RCIL:T", "DT:T,DA:T,DCIL:F,DTDA:T,HRA:F,HDA:T", "EXITZERO:T,CONT:T,RDUE:F,DDUE:F"),
524 new TestDescription ("USE20:T,RCIL:T", "DT:T,DA:T,DCIL:F,DTDA:T,HRA:F,HDA:T", "EXITZERO:T,CONT:T,RDUE:F,DDUE:T"),
525 new TestDescription ("USE20:F,RCIL:F", "DT:F,DA:T,DCIL:T,DTDA:T,HRA:F,HDA:T", "EXITZERO:T,CONT:T,RDUE:F,DDUE:F"),
526 new TestDescription ("USE20:T,RCIL:F", "DT:F,DA:T,DCIL:T,DTDA:T,HRA:F,HDA:T", "EXITZERO:F,CONT:F,RDUE:F,DDUE:T"),
527 new TestDescription ("USE20:F,RCIL:T", "DT:F,DA:T,DCIL:T,DTDA:T,HRA:F,HDA:T", "EXITZERO:T,CONT:T,RDUE:F,DDUE:F"),
528 new TestDescription ("USE20:T,RCIL:T", "DT:F,DA:T,DCIL:T,DTDA:T,HRA:F,HDA:T", "EXITZERO:T,CONT:T,RDUE:F,DDUE:T"),
529 new TestDescription ("USE20:F,RCIL:F", "DT:T,DA:T,DCIL:T,DTDA:T,HRA:F,HDA:T", "EXITZERO:T,CONT:T,RDUE:F,DDUE:F"),
530 new TestDescription ("USE20:T,RCIL:F", "DT:T,DA:T,DCIL:T,DTDA:T,HRA:F,HDA:T", "EXITZERO:F,CONT:F,RDUE:F,DDUE:T"),
531 new TestDescription ("USE20:F,RCIL:T", "DT:T,DA:T,DCIL:T,DTDA:T,HRA:F,HDA:T", "EXITZERO:T,CONT:T,RDUE:F,DDUE:F"),
532 new TestDescription ("USE20:T,RCIL:T", "DT:T,DA:T,DCIL:T,DTDA:T,HRA:F,HDA:T", "EXITZERO:T,CONT:T,RDUE:F,DDUE:T"),
533 new TestDescription ("USE20:F,RCIL:F", "DT:F,DA:T,DCIL:F,DTDA:F,HRA:T,HDA:T", "EXITZERO:F,CONT:F,RDUE:T,DDUE:F"),
534 new TestDescription ("USE20:T,RCIL:F", "DT:F,DA:T,DCIL:F,DTDA:F,HRA:T,HDA:T", "EXITZERO:F,CONT:F,RDUE:T,DDUE:F"),
535 new TestDescription ("USE20:F,RCIL:T", "DT:F,DA:T,DCIL:F,DTDA:F,HRA:T,HDA:T", "EXITZERO:F,CONT:F,RDUE:T,DDUE:F"),
536 new TestDescription ("USE20:T,RCIL:T", "DT:F,DA:T,DCIL:F,DTDA:F,HRA:T,HDA:T", "EXITZERO:F,CONT:F,RDUE:T,DDUE:F"),
537 new TestDescription ("USE20:F,RCIL:F", "DT:T,DA:T,DCIL:F,DTDA:F,HRA:T,HDA:T", "EXITZERO:T,CONT:T,RDUE:T,DDUE:F"),
538 new TestDescription ("USE20:T,RCIL:F", "DT:T,DA:T,DCIL:F,DTDA:F,HRA:T,HDA:T", "EXITZERO:F,CONT:F,RDUE:T,DDUE:F"),
539 new TestDescription ("USE20:F,RCIL:T", "DT:T,DA:T,DCIL:F,DTDA:F,HRA:T,HDA:T", "EXITZERO:T,CONT:T,RDUE:T,DDUE:F"),
540 new TestDescription ("USE20:T,RCIL:T", "DT:T,DA:T,DCIL:F,DTDA:F,HRA:T,HDA:T", "EXITZERO:T,CONT:T,RDUE:T,DDUE:F"),
541 new TestDescription ("USE20:F,RCIL:F", "DT:F,DA:T,DCIL:T,DTDA:F,HRA:T,HDA:T", "EXITZERO:F,CONT:F,RDUE:T,DDUE:F"),
542 new TestDescription ("USE20:T,RCIL:F", "DT:F,DA:T,DCIL:T,DTDA:F,HRA:T,HDA:T", "EXITZERO:F,CONT:F,RDUE:T,DDUE:F"),
543 new TestDescription ("USE20:F,RCIL:T", "DT:F,DA:T,DCIL:T,DTDA:F,HRA:T,HDA:T", "EXITZERO:F,CONT:F,RDUE:T,DDUE:F"),
544 new TestDescription ("USE20:T,RCIL:T", "DT:F,DA:T,DCIL:T,DTDA:F,HRA:T,HDA:T", "EXITZERO:F,CONT:F,RDUE:T,DDUE:F"),
545 new TestDescription ("USE20:F,RCIL:F", "DT:T,DA:T,DCIL:T,DTDA:F,HRA:T,HDA:T", "EXITZERO:T,CONT:T,RDUE:T,DDUE:F"),
546 new TestDescription ("USE20:T,RCIL:F", "DT:T,DA:T,DCIL:T,DTDA:F,HRA:T,HDA:T", "EXITZERO:F,CONT:F,RDUE:T,DDUE:F"),
547 new TestDescription ("USE20:F,RCIL:T", "DT:T,DA:T,DCIL:T,DTDA:F,HRA:T,HDA:T", "EXITZERO:T,CONT:T,RDUE:T,DDUE:F"),
548 new TestDescription ("USE20:T,RCIL:T", "DT:T,DA:T,DCIL:T,DTDA:F,HRA:T,HDA:T", "EXITZERO:T,CONT:T,RDUE:T,DDUE:F"),
549 new TestDescription ("USE20:F,RCIL:F", "DT:F,DA:T,DCIL:F,DTDA:T,HRA:T,HDA:T", "EXITZERO:T,CONT:T,RDUE:T,DDUE:F"),
550 new TestDescription ("USE20:T,RCIL:F", "DT:F,DA:T,DCIL:F,DTDA:T,HRA:T,HDA:T", "EXITZERO:F,CONT:F,RDUE:T,DDUE:T"),
551 new TestDescription ("USE20:F,RCIL:T", "DT:F,DA:T,DCIL:F,DTDA:T,HRA:T,HDA:T", "EXITZERO:T,CONT:T,RDUE:T,DDUE:F"),
552 new TestDescription ("USE20:T,RCIL:T", "DT:F,DA:T,DCIL:F,DTDA:T,HRA:T,HDA:T", "EXITZERO:T,CONT:T,RDUE:T,DDUE:T"),
553 new TestDescription ("USE20:F,RCIL:F", "DT:T,DA:T,DCIL:F,DTDA:T,HRA:T,HDA:T", "EXITZERO:T,CONT:T,RDUE:T,DDUE:F"),
554 new TestDescription ("USE20:T,RCIL:F", "DT:T,DA:T,DCIL:F,DTDA:T,HRA:T,HDA:T", "EXITZERO:F,CONT:F,RDUE:T,DDUE:T"),
555 new TestDescription ("USE20:F,RCIL:T", "DT:T,DA:T,DCIL:F,DTDA:T,HRA:T,HDA:T", "EXITZERO:T,CONT:T,RDUE:T,DDUE:F"),
556 new TestDescription ("USE20:T,RCIL:T", "DT:T,DA:T,DCIL:F,DTDA:T,HRA:T,HDA:T", "EXITZERO:T,CONT:T,RDUE:T,DDUE:T"),
557 new TestDescription ("USE20:F,RCIL:F", "DT:F,DA:T,DCIL:T,DTDA:T,HRA:T,HDA:T", "EXITZERO:T,CONT:T,RDUE:T,DDUE:F"),
558 new TestDescription ("USE20:T,RCIL:F", "DT:F,DA:T,DCIL:T,DTDA:T,HRA:T,HDA:T", "EXITZERO:F,CONT:F,RDUE:T,DDUE:T"),
559 new TestDescription ("USE20:F,RCIL:T", "DT:F,DA:T,DCIL:T,DTDA:T,HRA:T,HDA:T", "EXITZERO:T,CONT:T,RDUE:T,DDUE:F"),
560 new TestDescription ("USE20:T,RCIL:T", "DT:F,DA:T,DCIL:T,DTDA:T,HRA:T,HDA:T", "EXITZERO:T,CONT:T,RDUE:T,DDUE:T"),
561 new TestDescription ("USE20:F,RCIL:F", "DT:T,DA:T,DCIL:T,DTDA:T,HRA:T,HDA:T", "EXITZERO:T,CONT:T,RDUE:T,DDUE:F"),
562 new TestDescription ("USE20:T,RCIL:F", "DT:T,DA:T,DCIL:T,DTDA:T,HRA:T,HDA:T", "EXITZERO:F,CONT:F,RDUE:T,DDUE:T"),
563 new TestDescription ("USE20:F,RCIL:T", "DT:T,DA:T,DCIL:T,DTDA:T,HRA:T,HDA:T", "EXITZERO:T,CONT:T,RDUE:T,DDUE:F"),
564 new TestDescription ("USE20:T,RCIL:T", "DT:T,DA:T,DCIL:T,DTDA:T,HRA:T,HDA:T", "EXITZERO:T,CONT:T,RDUE:T,DDUE:T"),
567 public static int Main (string [] args
) {
568 RunningMode runningMode
= (args
.Length
> 0) ? new RunningMode (args
[0]) : new RunningMode ("RUNTIME:mono,GTC:F");
569 if (args
.Length
> 1) {
570 Console
.WriteLine ("Extra arguments unrecognized");
574 Console
.WriteLine ("Starting test run, UseMonoRuntime is {0}, GTC is {1}", runningMode
.UseMonoRuntime
, runningMode
.GTC
);
578 if (! runningMode
.GTC
) {
579 foreach (TestDescription test
in tests
) {
580 TestRun testRun
= new TestRun (test
, runningMode
);
581 if (! testRun
.Process (runningMode
)) {
586 for (int i
= TestDescription
.MIN_CONFIG_CODE
; i
<= TestDescription
.MAX_CONFIG_CODE
; i
++) {
587 TestDescription test
= TestDescription
.FromCode (i
);
589 TestRun testRun
= new TestRun (test
, runningMode
);
590 testRun
.Process (runningMode
);