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

import 'package:test/test.dart';

import 'utils_new.dart';

void main() {
  group('returned Future from expectLater()', () {
    test('completes immediately for a sync matcher', () {
      expect(expectLater(true, isTrue), completes);
    });

    test('contains the expect failure', () {
      expect(
        expectLater(Future.value(true), completion(isFalse)),
        throwsA(isTestFailure(anything)),
      );
    });

    test('contains an async error', () {
      expect(
        expectLater(Future<Never>.error('oh no'), completion(isFalse)),
        throwsA('oh no'),
      );
    });
  });

  group('an async matcher that fails synchronously', () {
    test('throws synchronously', () {
      expect(
        () => expect(() {}, throwsA(anything)),
        throwsA(isTestFailure(anything)),
      );
    });

    test('can be used with synchronous operators', () {
      expect(() {}, isNot(throwsA(anything)));
    });
  });
}
