// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// Dart test program for testing throw statement

class MyException {
  const MyException();
}

class OtherException {
  const OtherException();
}

class RethrowTest {
  MyException currentException;

  void throwException() {
    currentException = new MyException();
    throw currentException;
  }

  void testRethrowPastUncaught() {
    try {
      try {
        try {
          throwException();
          Expect.fail("Should have thrown an exception");
        } catch (var e) {
          Expect.equals(true, e === currentException);
          throw;
          Expect.fail("Should have thrown an exception");
        }
      } catch (OtherException e) {
        Expect.fail("Should not have caught OtherException");
      }
    } catch (var e) {
      Expect.equals(true, e === currentException);
    }
  }

  void testRethrow() {
    try {
      try {
        throwException();
        Expect.fail("Should have thrown an exception");
      } catch (var e) {
        Expect.equals(true, e === currentException);
        throw;
        Expect.fail("Should have thrown an exception");
      }
    } catch (var e) {
      Expect.equals(true, e === currentException);
    }
  }
}

main() {
  RethrowTest t = new RethrowTest();
  t.testRethrow();
  t.testRethrowPastUncaught();
}

Add a test that verifies that rethrow ("throw;") throws the expected exception.
Add a test that verifies that rethrow ("throw;") throws the expected exception.

R=mmendez,kasperl
Review URL: http://codereview.chromium.org//8271018

git-svn-id: c93d8a2297af3b929165606efe145742a534bc71@448 260f80e4-7a28-3924-810f-c04153c831b5
