run method

  1. @override
void run()
override

Runs this command.

The return value is wrapped in a Future if necessary and returned by CommandRunner.runCommand.

Implementation

@override
void run() async {
  final String? apps = argResults?['apps']?.toString().snakeCase;
  final String? feature = argResults?['feature']?.toString().snakeCase;
  final String? page = argResults?['page']?.toString().snakeCase;

  final pathApps = join(current, 'apps', '${apps}_test');
  final pathFeature = apps?.isEmpty ?? true
      ? join(current, 'features', '$feature', 'test')
      : join(pathApps, 'features', '$feature', 'test');
  final pathPage = join(pathFeature, '${page}_test');

  final bool? isCoverage = argResults?['coverage'] as bool?;
  final argCoverage = isCoverage ?? false ? '--coverage' : '';

  final String? reporter = argResults?['reporter'];
  final argReporter = reporter != null ? '--reporter $reporter' : '';

  final String? fileReporter = argResults?['file-reporter'];
  final argFileReporter =
      fileReporter != null ? '--file-reporter $fileReporter' : '';

  if (apps == null && feature == null && page == null) {
    await ModularHelper.runSequence(
      (path) {
        final pathFeature = join(path, 'test');

        DirectoryHelper.createDir(pathFeature);

        final pages = find(
          '*_test',
          workingDirectory: pathFeature,
          recursive: false,
          types: [Find.directory],
        ).toList();

        for (var i = 0; i < pages.length; i++) {
          final pathPage = join(pathFeature, pages[i]);
          deleteAllBundleTest(pathPage);
          createBundleTest(pathPage);
        }

        creatFeatureBundleTest(pathFeature);
      },
      ignorePubWorkspaces: true,
    );
  } else if (page != null) {
    if (feature == null) {
      StatusHelper.failed('Feature is required');
    } else if (!exists(pathFeature)) {
      StatusHelper.failed('Feature not found');
    } else if (!exists(pathPage)) {
      StatusHelper.failed('Page not found');
    }

    DirectoryHelper.createDir(pathFeature);

    deleteAllBundleTest(pathPage);
    createBundleTest(pathPage);

    creatFeatureBundleTest(pathFeature);
  } else if (feature != null) {
    if (!exists(pathFeature)) {
      StatusHelper.failed('Feature not found');
    }

    DirectoryHelper.createDir(pathFeature);

    final pages = find(
      '*_test',
      workingDirectory: pathFeature,
      recursive: false,
      types: [Find.directory],
    ).toList();

    for (var i = 0; i < pages.length; i++) {
      final pathPage = join(pathFeature, pages[i]);
      deleteAllBundleTest(pathPage);
      createBundleTest(pathPage);
    }

    creatFeatureBundleTest(pathFeature);
  } else if (apps != null) {
    StatusHelper.failed('This feature is not yet available');
  }

  final argMorphemeYaml = argResults.getOptionMorphemeYaml();

  YamlHelper.validateMorphemeYaml(argMorphemeYaml);
  final yaml = YamlHelper.loadFileYaml(argMorphemeYaml);

  String workingDirCoverage = current;

  if (page != null) {
    workingDirCoverage = join(current, 'features', feature);
    await FlutterHelper.start(
      'test test/${page}_test/bundle_test.dart --no-pub $argCoverage $argReporter $argFileReporter',
      workingDirectory: workingDirCoverage,
    );
  } else if (feature != null) {
    workingDirCoverage = join(current, 'features', feature);
    await FlutterHelper.start(
      'test test/bundle_test.dart --no-pub $argCoverage $argReporter $argFileReporter',
      workingDirectory: join(current, 'features', feature),
    );
  } else {
    await ModularHelper.test(
      concurrent: yaml.concurrent,
      isCoverage: isCoverage ?? false,
      reporter: reporter,
      fileReporter: fileReporter,
    );
  }

  if (isCoverage ?? false) {
    combineLcovToRoot(
      workingDirectory: workingDirCoverage,
      isDeleteRootCoverageFirst: feature != null,
    );
  }

  StatusHelper.success('morpheme test');
}