// 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.

/// @assertion If the object being thrown is an instance of class Error or a
/// subclass thereof, its stackTrace getter will return the stack trace current
/// at the point where the object was first thrown.
/// @description Checks that if thrown object is an instance of Error or its
/// subclass the stackTrace getter contains the stack trace.
/// @author ilya
/// @note Can't really test anything on stack trace even if its toString()
/// contains certain function names due to possible minification.

import '../../../Utils/expect.dart';

class E extends Error {}

foo(x) => throw x;
bar(x) => foo(x);

main() {
  try {
    bar(new Error());
  } on Error catch (e) {
    Expect.isNotNull(e.stackTrace);
  }
  try {
    bar(new E());
  } on Error catch (e) {
    Expect.isNotNull(e.stackTrace);
  }
}
