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

/// Defines how dynamic modules get compiled and executed on each target
/// platform.
library;

import 'model.dart';

/// Possible backends where the tests can be executed.
enum Target {
  aot,
  dart2wasm,
  ddc,
}

/// Defines how to build and run a test in a specific target.
///
/// The test framework will use a single executor for all tests in a suite. This
/// can be leveraged to keep compilers warm and cache results if that is
/// helpful.
abstract class TargetExecutor {
  /// Takes the steps necessary to build the initial version of the app.
  Future compileApplication(DynamicModuleTest test);

  /// Takes the steps necessary to build a single dynamic module.
  Future compileDynamicModule(DynamicModuleTest test, String name);

  /// Takes the steps necessary to execute the test.
  ///
  /// This step will only be called after both the app and modules have been
  /// generated.
  Future executeApplication(DynamicModuleTest test);

  /// Notification that all tests have been executed and that this executor is
  /// no longer going to be used anymore.
  Future suiteComplete();
}
