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

// VMOptions=--enable-isolate-groups
// VMOptions=--no-enable-isolate-groups

library test_extension_test;

import 'dart:isolate';

import "test_extension.dart";

class Expect {
  static void equals(expected, actual, [msg]) {
    if (expected != actual) {
      if (msg == null) msg = "Expected: $expected. Actual: $actual";
      throw new StateError(msg);
    }
  }

  static void isNull(x, [msg]) {
    if (x != null) {
      if (msg != null) msg = "$x not null";
      throw new StateError(msg);
    }
  }
}

isolateHandler(_) {}

main() async {
  Expect.equals('cat 13', new Cat(13).toString(), 'new Cat(13).toString()');

  Expect.equals(3, Cat.ifNull(null, 3), 'Cat.ifNull(null, 3)');
  Expect.equals(4, Cat.ifNull(4, null), 'Cat.ifNull(4, null)');
  Expect.equals(5, Cat.ifNull(5, 9), 'Cat.ifNull(5, 9)');
  Expect.isNull(Cat.ifNull(null, null), 'Cat.ifNull(null, null)');

  try {
    Cat.throwMeTheBall("ball");
  } on String catch (e) {
    Expect.equals("ball", e);
  }

  await Isolate.spawn(isolateHandler, []);
}
