start static method

Future<TestRuntime> start(
  1. Module module, {
  2. ResolverBackend? backend,
  3. CleanupFailureObserver? cleanupFailureObserver,
  4. Iterable<RuntimeObserver> observers = const <RuntimeObserver>[],
  5. RuntimeObserverErrorHandler? observerErrorHandler,
  6. TestCleanupRegistrar? registerCleanup,
})

Start a Runtime and automatically attach RecordingRuntimeObserver.

Pass registerCleanup from the test framework boundary to guarantee teardown without making better_effect depend on package:test:

final harness = await TestRuntime.start(
  module,
  registerCleanup: (cleanup) => addTearDown(cleanup),
);

Implementation

static Future<TestRuntime> start(
  Module module, {
  ResolverBackend? backend,
  CleanupFailureObserver? cleanupFailureObserver,
  Iterable<RuntimeObserver> observers = const <RuntimeObserver>[],
  RuntimeObserverErrorHandler? observerErrorHandler,
  TestCleanupRegistrar? registerCleanup,
}) async {
  final recorder = RecordingRuntimeObserver();
  final errors = <RuntimeObserverError>[];
  final runtime = await module.start(
    backend: backend,
    cleanupFailureObserver: cleanupFailureObserver,
    observers: <RuntimeObserver>[recorder, ...observers],
    observerErrorHandler: (error) {
      errors.add(error);
      observerErrorHandler?.call(error);
    },
  );

  final harness = TestRuntime._(
    runtime: runtime,
    observer: recorder,
    observerErrors: errors,
  );
  registerCleanup?.call(() => harness.close());
  return harness;
}