declareTest function

  1. @isTest
void declareTest(
  1. String name,
  2. List<Component> components,
  3. FutureOr<void> body(), {
  4. Timeout? timeout,
  5. Object? skip,
  6. Object? tags,
  7. Map<String, dynamic> config = const {},
  8. List<File> configFiles = const [],
  9. ComposeEnvironment? environment,
})

Implementation

@isTest
void declareTest(
  String name,
  List<Component> components,
  FutureOr<void> Function() body, {
  dart_test.Timeout? timeout,
  Object? skip,
  Object? tags,
  Map<String, dynamic> config = const {},
  List<File> configFiles = const [],
  ComposeEnvironment? environment,
}) {
  final traceFrame = Trace.current(1).frames.first;
  final testLocation = dart_test.TestLocation(
    traceFrame.uri,
    traceFrame.line ?? 0,
    traceFrame.column ?? 0,
  );

  dart_test.group(name, () {
    TestHost? host;

    Map<String, dynamic>? environmentConfig;
    if (environment case final environment?) {
      late final ComposeEnvironmentInstance environmentInstance;
      dart_test.setUpAll(() async {
        environmentInstance = await environment.up();
        environmentConfig = {'test': environmentInstance.buildConfiguration()};
      });

      dart_test.tearDownAll(() async {
        await environmentInstance.down();
      });
    }

    dart_test.setUp(() async {
      final testHost = TestHost(components: components, testBody: body);
      if (environmentConfig case final config?) {
        testHost.configuration.addConfigMap(config);
      }
      for (final file in configFiles) {
        testHost.configuration.addConfigFile(file);
      }
      testHost.configuration.addConfigMap(config);
      await testHost.initialize();
      host = testHost;
    });

    dart_test.test(
      name,
      () async => await host!
          .findComponent(Find<_TestRunnerServiceInstance>(), null)
          .runTest(body),
      timeout: timeout,
      skip: skip,
      tags: tags,
      location: testLocation,
    );

    dart_test.tearDown(() async {
      if (host?.state == ServiceHostState.initialized) {
        await host?.shutdown();
      }
      host = null;
    });
  }, location: testLocation);
}