// Copyright 2013 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.

// TODO(flutter_web): the Web-only API below need to be cleaned up.

// @dart = 2.6
part of ui;

/// Used to track when the platform is initialized. This ensures the test fonts
/// are available.
Future<void> _testPlatformInitializedFuture;

/// If the platform is already initialized (by a previous test), then run the test
/// body immediately. Otherwise, initialize the platform then run the test.
Future<dynamic> ensureTestPlatformInitializedThenRunTest(
    dynamic Function() body) {
  if (_testPlatformInitializedFuture == null) {
    debugEmulateFlutterTesterEnvironment = true;

    // Initializing the platform will ensure that the test font is loaded.
    _testPlatformInitializedFuture = webOnlyInitializePlatform(
        assetManager: engine.WebOnlyMockAssetManager());
  }
  return _testPlatformInitializedFuture.then<dynamic>((_) => body());
}

/// Used to track when the platform is initialized. This ensures the test fonts
/// are available.
Future<void> _platformInitializedFuture;

/// Initializes domRenderer with specific devicePixelRatio and physicalSize.
Future<void> webOnlyInitializeTestDomRenderer({double devicePixelRatio = 3.0}) {
  // Force-initialize DomRenderer so it doesn't overwrite test pixel ratio.
  engine.domRenderer;

  // The following parameters are hard-coded in Flutter's test embedder. Since
  // we don't have an embedder yet this is the lowest-most layer we can put
  // this stuff in.
  engine.window.debugOverrideDevicePixelRatio(devicePixelRatio);
  engine.window.webOnlyDebugPhysicalSizeOverride =
      Size(800 * devicePixelRatio, 600 * devicePixelRatio);
  webOnlyScheduleFrameCallback = () {};
  debugEmulateFlutterTesterEnvironment = true;

  if (_platformInitializedFuture != null) {
    return _platformInitializedFuture;
  }

  // Only load the Ahem font once and await the same future in all tests.
  return _platformInitializedFuture =
      webOnlyInitializePlatform(assetManager: engine.WebOnlyMockAssetManager())
          .timeout(const Duration(seconds: 2), onTimeout: () async {
    throw Exception('Timed out loading Ahem font.');
  });
}
