| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- //
- // ExceptionTest.cs - NUnit Test Cases for the System.Exception class
- //
- // Linus Upson ([email protected])
- //
- using System;
- using NUnit.Framework;
- namespace MonoTests.System
- {
- public class ExceptionTest : TestCase
- {
- public ExceptionTest() {}
-
- // This test makes sure that exceptions thrown on block boundaries are
- // handled in the correct block. The meaning of the 'caught' variable is
- // a little confusing since there are two catchers: the method being
- // tested the the method calling the test. There is probably a better
- // name, but I can't think of it right now.
-
- public void TestThrowOnBlockBoundaries()
- {
- bool caught;
-
- try {
- caught = false;
- ThrowBeforeTry();
- } catch {
- caught = true;
- }
- Assert("Exceptions thrown before try blocks should not be caught", caught);
-
- try {
- caught = false;
- ThrowAtBeginOfTry();
- } catch {
- caught = true;
- }
- Assert("Exceptions thrown at begin of try blocks should be caught", !caught);
- try {
- caught = false;
- ThrowAtEndOfTry();
- } catch {
- caught = true;
- }
- Assert("Exceptions thrown at end of try blocks should be caught", !caught);
- try {
- caught = false;
- ThrowAtBeginOfCatch();
- } catch {
- caught = true;
- }
- Assert("Exceptions thrown at begin of catch blocks should not be caught", caught);
- try {
- caught = false;
- ThrowAtEndOfCatch();
- } catch {
- caught = true;
- }
- Assert("Exceptions thrown at end of catch blocks should not be caught", caught);
- try {
- caught = false;
- ThrowAtBeginOfFinally();
- } catch {
- caught = true;
- }
- Assert("Exceptions thrown at begin of finally blocks should not be caught", caught);
- try {
- caught = false;
- ThrowAtEndOfFinally();
- } catch {
- caught = true;
- }
- Assert("Exceptions thrown at end of finally blocks should not be caught", caught);
- try {
- caught = false;
- ThrowAfterFinally();
- } catch {
- caught = true;
- }
- Assert("Exceptions thrown after finally blocks should not be caught", caught);
- }
-
- private static void DoNothing()
- {
- }
- private static void ThrowException()
- {
- throw new Exception();
- }
-
- private static void ThrowBeforeTry()
- {
- ThrowException();
- try {
- DoNothing();
- } catch (Exception) {
- DoNothing();
- }
- }
- private static void ThrowAtBeginOfTry()
- {
- DoNothing();
- try {
- ThrowException();
- DoNothing();
- } catch (Exception) {
- DoNothing();
- }
- }
- private static void ThrowAtEndOfTry()
- {
- DoNothing();
- try {
- DoNothing();
- ThrowException();
- } catch (Exception) {
- DoNothing();
- }
- }
- private static void ThrowAtBeginOfCatch()
- {
- DoNothing();
- try {
- DoNothing();
- ThrowException();
- } catch (Exception) {
- throw;
- }
- }
- private static void ThrowAtEndOfCatch()
- {
- DoNothing();
- try {
- DoNothing();
- ThrowException();
- } catch (Exception) {
- DoNothing();
- throw;
- }
- }
- private static void ThrowAtBeginOfFinally()
- {
- DoNothing();
- try {
- DoNothing();
- ThrowException();
- } catch (Exception) {
- DoNothing();
- } finally {
- ThrowException();
- DoNothing();
- }
- }
- private static void ThrowAtEndOfFinally()
- {
- DoNothing();
- try {
- DoNothing();
- ThrowException();
- } catch (Exception) {
- DoNothing();
- } finally {
- DoNothing();
- ThrowException();
- }
- }
- private static void ThrowAfterFinally()
- {
- DoNothing();
- try {
- DoNothing();
- ThrowException();
- } catch (Exception) {
- DoNothing();
- } finally {
- DoNothing();
- }
- ThrowException();
- }
- }
- }
|