// Copyright (c) 2014, 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=--optimization-counter-threshold=10 --no-background-compilation

import 'package:expect/expect.dart';

import 'dart:async';

expectThenValue(future, value) {
  Expect.isTrue(future is Future);
  future.then((result) {
    Expect.equals(value, result);
  });
}

asyncIf(condition) async {
  if (condition) {
    return 1;
  } else {
    return 2;
  }
  // This return is never reached as the finally block returns from the
  // function.
  return 3;
}

asyncFor(condition) async {
  for (int i = 0; i < 10; i++) {
    if (i == 5 && condition) {
      return 1;
    }
  }
  return 2;
}

asyncTryCatchFinally(overrideInFinally, doThrow) async {
  try {
    if (doThrow) throw 444;
    return 1;
  } catch (e) {
    return e;
  } finally {
    if (overrideInFinally) return 3;
  }
}

asyncTryCatchLoop() async {
  var i = 0;
  var throws = 13;
  while (true) {
    try {
      throw throws;
    } catch (e) {
      if (i == throws) {
        return e;
      }
    } finally {
      i++;
    }
  }
}

asyncImplicitReturn() async {
  try {} catch (e) {} finally {}
}

main() {
  var asyncReturn;

  for (int i = 0; i < 10; i++) {
    asyncReturn = asyncIf(true);
    expectThenValue(asyncReturn, 1);
    asyncReturn = asyncIf(false);
    expectThenValue(asyncReturn, 2);

    asyncReturn = asyncFor(true);
    expectThenValue(asyncReturn, 1);
    asyncReturn = asyncFor(false);
    expectThenValue(asyncReturn, 2);

    asyncReturn = asyncTryCatchFinally(true, false);
    expectThenValue(asyncReturn, 3);
    asyncReturn = asyncTryCatchFinally(false, false);
    expectThenValue(asyncReturn, 1);
    asyncReturn = asyncTryCatchFinally(true, true);
    expectThenValue(asyncReturn, 3);
    asyncReturn = asyncTryCatchFinally(false, true);
    expectThenValue(asyncReturn, 444);
    asyncReturn = asyncTryCatchLoop();
    expectThenValue(asyncReturn, 13);

    asyncReturn = asyncImplicitReturn();
    expectThenValue(asyncReturn, null);
  }
}
