// Copyright (c) 2013, 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.

// Test that dart2js can handle unexpected exception types.

library native_exception_test;

import 'native_testing.dart';

main() {
  var previous;
  check(e) {
    print('$e');
    Expect.equals(e, e);
    Expect.notEquals(e, new Object());
    Expect.notEquals(e, previous);
    previous = e;
    return '$e' != '[object Object]';
  }

  Expect.throws(() {
    JS('void', 'noGlobalVariableWithThisName');
  }, check);
  Expect.throws(() {
    JS('void', 'throw 3');
  }, check);
  Expect.throws(() {
    JS('bool', 'Object.prototype.hasOwnProperty.call(undefined, "foo")');
  }, check);
  Expect.throws(() {
    JS('void', 'throw new ReferenceError()');
  }, check);
  Expect.throws(() {
    JS('void', 'throw void 0');
  }, check);
  Expect.throws(() {
    JS('void', 'throw "a string"');
  }, check);
  Expect.throws(() {
    JS('void', 'throw null');
  }, check);
}
