// 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/widgets.dart';

import 'binding.dart';

 /// Ensure the [WidgetsBinding] is initialized.
WidgetsBinding ensureInitialized([@visibleForTesting Map<String, String>? environment]) {
  if (WidgetsBinding.instance == null) {
    AutomatedTestWidgetsFlutterBinding();
  }
  assert(WidgetsBinding.instance is TestWidgetsFlutterBinding);
  return WidgetsBinding.instance!;
}

 /// This method is a noop on the web.
void setupHttpOverrides() { }

 /// This method is a noop on the web.
void mockFlutterAssets() { }
