// Copyright 2014 The Flutter Authors. 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:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
  // We need a separate test file for this test case (instead of including it
  // in platform_channel_test.dart) since we rely on the WidgetsFlutterBinding
  // not being initialized and we call ensureInitialized() in the other test
  // file.
  test('throws assertion error iff WidgetsFlutterBinding is not yet initialized', () {
    const MethodChannel methodChannel = MethodChannel('mock');

    // Ensure that accessing the binary messenger before initialization reports
    // a helpful error message.
    expect(() => methodChannel.binaryMessenger, throwsA(isA<AssertionError>()
        .having((AssertionError e) => e.message, 'message', contains('WidgetsFlutterBinding.ensureInitialized()'))));

    TestWidgetsFlutterBinding.ensureInitialized();
    expect(() => methodChannel.binaryMessenger, returnsNormally);
  });
}
