// Copyright (c) 2015, 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
 *  awaitExpression:
 *      await unaryExpression
 *
 * @description Verify several kinds of valid await expressions inside
 * functions with async modifier
 * @author a.semenov@unipro.ru
 */

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

f() {
  return new Future<int>.value(1);
}

Future test() async {
  int x = 100500;

  await true;
  await 1;
  await x;
  await (x + 3);
  await x++;
  await --x;
  await ((x + 10) * 10);
  await 'hello';
  await f();
  await (await f());
  await ! await false;
  await ~ await (x * x);
  await - await f();
  await (10 - await 5);
  await await 'bye bye';
}

class S {
  var x = 1;
  operator -() { return this; }
  operator ~() { return this; }
}

class A extends S {
  Future test() async {
    await - super;
    await ~ super;
  }
}

main() {
  asyncStart();
  test().then(
    (value) => new A().test()
  ).then(
    (value) => asyncEnd()
  );
}
