blob: d2b6b5884a589efc14821b5af5178e0bed0607a3 [file] [log] [blame]
// Copyright (c) 2025, 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.
import 'package:coverage/src/coverage_options.dart';
import 'package:path/path.dart' as path;
import 'package:test/test.dart';
import '../bin/collect_coverage.dart' as collect_coverage;
import '../bin/format_coverage.dart' as format_coverage;
import '../bin/test_with_coverage.dart' as test_with_coverage;
void main() {
final formatCoverageArgs = ['--in=./test/collect_coverage_config_test.dart'];
group('defaults when no yaml or command-line args provided', () {
// Setup
final defaults = CoverageOptionsProvider().coverageOptions;
test('collect coverage', () {
final collectedCoverage = collect_coverage.parseArgs([], defaults);
expect(collectedCoverage.scopedOutput, defaults.scopeOutput);
expect(collectedCoverage.functionCoverage, defaults.functionCoverage);
expect(collectedCoverage.branchCoverage, defaults.branchCoverage);
expect(collectedCoverage.out, isNull);
});
test('format coverage', () {
final formattedCoverage =
format_coverage.parseArgs(formatCoverageArgs, defaults);
expect(formattedCoverage.output, isNull);
expect(formattedCoverage.packagePath, defaults.packageDirectory);
});
test('test with coverage', () async {
final testCoverage = await test_with_coverage.parseArgs([], defaults);
expect(path.canonicalize(testCoverage.packageDir),
path.canonicalize(defaults.packageDirectory));
expect(path.canonicalize(testCoverage.outDir),
path.canonicalize('coverage'));
expect(testCoverage.testScript, defaults.testScript);
expect(testCoverage.functionCoverage, defaults.functionCoverage);
expect(testCoverage.branchCoverage, defaults.branchCoverage);
expect(testCoverage.scopeOutput, defaults.scopeOutput);
});
});
test('uses yaml values when all values are provided in yaml file', () async {
final configuredOptions = CoverageOptionsProvider(
filePath: 'test/test_coverage_options/all_field.yaml',
).coverageOptions;
// Parse arguments with empty command line args
final collectedCoverage = collect_coverage.parseArgs([], configuredOptions);
final formattedCoverage =
format_coverage.parseArgs(formatCoverageArgs, configuredOptions);
final testCoverage =
await test_with_coverage.parseArgs([], configuredOptions);
// Verify collect coverage yaml values
expect(collectedCoverage.scopedOutput, ['lib', 'src']);
expect(collectedCoverage.functionCoverage, isTrue);
expect(collectedCoverage.branchCoverage, isFalse);
expect(path.canonicalize(collectedCoverage.out!),
path.canonicalize('var/coverage_data/coverage.json'));
// Verify format coverage yaml values
expect(path.canonicalize(formattedCoverage.output!),
path.canonicalize('var/coverage_data/lcov.info'));
expect(path.canonicalize(formattedCoverage.packagePath),
path.canonicalize('test/test_files'));
// Verify test with coverage yaml values
expect(path.canonicalize(testCoverage.packageDir),
path.canonicalize('test/test_files'));
expect(path.canonicalize(testCoverage.outDir),
path.canonicalize('var/coverage_data'));
expect(testCoverage.testScript, 'test1');
expect(testCoverage.functionCoverage, isTrue);
expect(testCoverage.branchCoverage, isFalse);
expect(testCoverage.scopeOutput, ['lib', 'src']);
});
group('partial yaml configuration', () {
test('override default values with partial yaml values 1', () async {
final configuredOptions = CoverageOptionsProvider(
filePath: 'test/test_coverage_options/partial_fields1.yaml',
).coverageOptions;
// Parse arguments with empty command line args
final collectedCoverage =
collect_coverage.parseArgs([], configuredOptions);
final testCoverage =
await test_with_coverage.parseArgs([], configuredOptions);
final formattedCoverage =
format_coverage.parseArgs([], configuredOptions);
expect(path.canonicalize(collectedCoverage.out!),
path.canonicalize('var/coverage_data/custom_coverage/coverage.json'));
expect(collectedCoverage.scopedOutput, ['lib', 'test']);
expect(collectedCoverage.functionCoverage, isFalse);
expect(path.canonicalize(formattedCoverage.output!),
path.canonicalize('var/coverage_data/custom_coverage/lcov.info'));
expect(testCoverage.scopeOutput, ['lib', 'test']);
});
test('override default values with partial yaml values 2', () async {
final configuredOptions = CoverageOptionsProvider(
filePath: 'test/test_coverage_options/partial_fields2.yaml',
).coverageOptions;
// Parse arguments with empty command line args
final collectedCoverage =
collect_coverage.parseArgs([], configuredOptions);
final formattedCoverage =
format_coverage.parseArgs([], configuredOptions);
final testCoverage =
await test_with_coverage.parseArgs([], configuredOptions);
// Verify collect coverage yaml values
expect(collectedCoverage.scopedOutput, ['lib', 'tools']);
expect(collectedCoverage.branchCoverage, isFalse);
expect(collectedCoverage.functionCoverage, isTrue);
expect(path.canonicalize(collectedCoverage.out!),
path.canonicalize('var/coverage_data/custom_lcov/coverage.json'));
// Verify format coverage yaml values
expect(path.canonicalize(formattedCoverage.output!),
path.canonicalize('var/coverage_data/custom_lcov/lcov.info'));
expect(path.canonicalize(formattedCoverage.packagePath),
path.canonicalize('test/test_coverage_options'));
// Verify test with coverage yaml values
expect(path.canonicalize(testCoverage.outDir),
path.canonicalize('var/coverage_data/custom_lcov'));
expect(testCoverage.testScript, 'custom_test');
expect(testCoverage.functionCoverage, isTrue);
});
});
group('override yaml values with command line args', () {
test('override 1', () async {
final configuredOptions = CoverageOptionsProvider(
filePath: 'test/test_coverage_options/all_field.yaml',
).coverageOptions;
// Parse arguments with command line args
final collectedCoverage = collect_coverage.parseArgs([
'--out=var/coverage_data/coverage.json',
'--scope-output=lib',
'--no-function-coverage',
'--branch-coverage',
], configuredOptions);
final formattedCoverage = format_coverage.parseArgs([
'--out=var/coverage_data/out_test.info',
'--package=../code_builder',
], configuredOptions);
final testCoverage = await test_with_coverage.parseArgs([
'--package-name=test',
'--out=test_coverage.json',
'--test=test_test.dart',
'--function-coverage',
], configuredOptions);
// Verify collect coverage command line args
expect(collectedCoverage.out,
path.normalize('var/coverage_data/coverage.json'));
expect(collectedCoverage.scopedOutput, ['lib']);
expect(collectedCoverage.functionCoverage, isFalse);
expect(collectedCoverage.branchCoverage, isTrue);
// Verify format coverage command line args
expect(formattedCoverage.output,
path.normalize('var/coverage_data/out_test.info'));
expect(formattedCoverage.packagePath, '../code_builder');
// Verify test with coverage command line args
expect(testCoverage.outDir, 'test_coverage.json');
expect(testCoverage.testScript, 'test_test.dart');
expect(testCoverage.functionCoverage, isTrue);
});
test('override 2', () async {
final configuredOptions = CoverageOptionsProvider(
filePath: 'test/test_coverage_options/all_field.yaml',
).coverageOptions;
// Parse arguments with command line args
final collectedCoverage = collect_coverage.parseArgs([
'--out=stdout',
'--scope-output=src',
'--function-coverage',
'--no-branch-coverage',
], configuredOptions);
final formattedCoverage = format_coverage.parseArgs([
'--out=stdout',
'--package=../cli_config',
], configuredOptions);
final testCoverage = await test_with_coverage.parseArgs([
'--package-name=cli_config',
'--out=cli_config_coverage.json',
'--test=cli_config_test.dart',
'--function-coverage',
], configuredOptions);
// Verify collect coverage command line args
expect(collectedCoverage.out, isNull);
expect(collectedCoverage.scopedOutput, ['src']);
expect(collectedCoverage.functionCoverage, isTrue);
expect(collectedCoverage.branchCoverage, isFalse);
// Verify format coverage command line args
expect(formattedCoverage.output, isNull);
expect(formattedCoverage.packagePath, '../cli_config');
// Verify test with coverage command line args
expect(testCoverage.outDir, 'cli_config_coverage.json');
expect(testCoverage.testScript, 'cli_config_test.dart');
expect(testCoverage.functionCoverage, isTrue);
});
});
test('format exception when empty yaml file', () {
expect(
() => CoverageOptionsProvider(
filePath: 'test/test_coverage_options/empty.yaml',
),
throwsFormatException);
});
}