blob: 3dc54b23e402414a39eeb2e35a1891f5449b2b60 [file] [log] [blame]
// Copyright (c) 2018, 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.
/// Unit tests for lib/src/warnings.dart.
library dartdoc.warnings_test;
import 'dart:io';
import 'package:dartdoc/src/dartdoc_options.dart';
import 'package:dartdoc/src/warnings.dart';
import 'package:path/path.dart' as path;
import 'package:test/test.dart';
void main() {
Directory tempDir, testPackageOne, testPackageTwo, testPackageThree;
File pubspecYamlOne, pubspecYamlTwo, pubspecYamlThree, dartdocYamlThree;
DartdocOptionSet optionSet;
setUpAll(() {
tempDir = Directory.systemTemp.createTempSync('warnings_test');
testPackageOne = Directory(path.join(tempDir.path, 'test_package_one'))
..createSync();
testPackageTwo = Directory(path.join(tempDir.path, 'test_package_two'))
..createSync();
testPackageThree = Directory(path.join(tempDir.path, 'test_package_three'))
..createSync();
pubspecYamlOne = File(path.join(testPackageOne.path, 'pubspec.yaml'));
pubspecYamlOne.writeAsStringSync('name: test_package_one');
pubspecYamlTwo = File(path.join(testPackageTwo.path, 'pubspec.yaml'));
pubspecYamlTwo.writeAsStringSync('name: test_package_two');
dartdocYamlThree =
File(path.join(testPackageThree.path, 'dartdoc_options.yaml'));
dartdocYamlThree.writeAsStringSync('''
dartdoc:
warnings:
- type-as-html
- unresolved-export
errors:
- unresolved-doc-reference
ignore:
- ambiguous-reexport
''');
pubspecYamlThree = File(path.join(testPackageThree.path, 'pubspec.yaml'));
pubspecYamlThree.writeAsStringSync('name: test_package_three');
});
setUp(() async {
optionSet = await DartdocOptionSet.fromOptionGenerators(
'dartdoc', [createDartdocOptions]);
});
test('Verify that options for enabling/disabling packages work', () {
optionSet.parseArguments([
'--allow-warnings-in-packages',
'test_package_two,test_package_three',
'--allow-errors-in-packages',
'test_package_two,test_package_three',
'--ignore-warnings-in-packages',
'test_package_three',
'--ignore-errors-in-packages',
'test_package_three',
]);
PackageWarningOptions optionsOne =
optionSet['packageWarningOptions'].valueAt(testPackageOne);
PackageWarningOptions optionsTwo =
optionSet['packageWarningOptions'].valueAt(testPackageTwo);
PackageWarningOptions optionsThree =
optionSet['packageWarningOptions'].valueAt(testPackageThree);
expect(optionsOne.warningModes.values,
everyElement(equals(PackageWarningMode.ignore)));
expect(optionsOne.warningModes.values,
everyElement(equals(PackageWarningMode.ignore)));
expect(optionsTwo.warningModes.values, contains(PackageWarningMode.warn));
expect(optionsTwo.warningModes.values, contains(PackageWarningMode.error));
expect(optionsThree.warningModes.values,
everyElement(equals(PackageWarningMode.ignore)));
expect(optionsThree.warningModes.values,
everyElement(equals(PackageWarningMode.ignore)));
});
test('Verify that loading warning options from files works', () {
optionSet.parseArguments([]);
PackageWarningOptions optionsThree =
optionSet['packageWarningOptions'].valueAt(testPackageThree);
expect(optionsThree.warningModes[PackageWarning.typeAsHtml],
equals(PackageWarningMode.warn));
expect(optionsThree.warningModes[PackageWarning.unresolvedExport],
equals(PackageWarningMode.warn));
expect(optionsThree.warningModes[PackageWarning.unresolvedDocReference],
equals(PackageWarningMode.error));
expect(optionsThree.warningModes[PackageWarning.ambiguousReexport],
equals(PackageWarningMode.ignore));
});
test('Verify that args override warning options from files', () {
optionSet.parseArguments([
'--warnings',
'ambiguous-reexport',
'--errors',
'type-as-html',
'--ignore',
'unresolved-export',
]);
PackageWarningOptions optionsThree =
optionSet['packageWarningOptions'].valueAt(testPackageThree);
expect(optionsThree.warningModes[PackageWarning.typeAsHtml],
equals(PackageWarningMode.error));
expect(optionsThree.warningModes[PackageWarning.unresolvedExport],
equals(PackageWarningMode.ignore));
// unresolved-doc-reference is not mentioned in command line, so it reverts to default
expect(optionsThree.warningModes[PackageWarning.unresolvedDocReference],
equals(PackageWarningMode.warn));
expect(optionsThree.warningModes[PackageWarning.ambiguousReexport],
equals(PackageWarningMode.warn));
});
test(
'Verify that null values for warnings, ignore, and errors reset to defaults',
() {
optionSet.parseArguments([
'--warnings',
'',
'--errors',
'',
'--ignore',
'',
]);
PackageWarningOptions optionsThree =
optionSet['packageWarningOptions'].valueAt(testPackageThree);
expect(optionsThree.warningModes[PackageWarning.typeAsHtml],
equals(PackageWarningMode.ignore));
expect(optionsThree.warningModes[PackageWarning.unresolvedExport],
equals(PackageWarningMode.error));
expect(optionsThree.warningModes[PackageWarning.unresolvedDocReference],
equals(PackageWarningMode.warn));
expect(optionsThree.warningModes[PackageWarning.ambiguousReexport],
equals(PackageWarningMode.warn));
});
}