Index: test/driver_test.dart |
diff --git a/test/driver_test.dart b/test/driver_test.dart |
index 88791dc4b01736689c2cf050560a06a31fee554d..3151c519af9b0108fb176ee01f2f30ad9efdca88 100644 |
--- a/test/driver_test.dart |
+++ b/test/driver_test.dart |
@@ -10,6 +10,8 @@ import 'dart:io'; |
import 'package:analyzer/plugin/options.dart'; |
import 'package:analyzer/source/analysis_options_provider.dart'; |
import 'package:analyzer/src/generated/engine.dart'; |
+import 'package:analyzer/src/generated/error.dart'; |
+import 'package:analyzer/src/generated/source.dart'; |
import 'package:analyzer/src/plugin/plugin_configuration.dart'; |
import 'package:analyzer/src/services/lint.dart'; |
import 'package:analyzer_cli/src/bootloader.dart'; |
@@ -22,6 +24,21 @@ import 'package:yaml/src/yaml_node.dart'; |
main() { |
group('Driver', () { |
+ StringSink savedOutSink, savedErrorSink; |
+ int savedExitCode; |
+ setUp(() { |
+ savedOutSink = outSink; |
+ savedErrorSink = errorSink; |
+ savedExitCode = exitCode; |
+ outSink = new StringBuffer(); |
+ errorSink = new StringBuffer(); |
+ }); |
+ tearDown(() { |
+ outSink = savedOutSink; |
+ errorSink = savedErrorSink; |
+ exitCode = savedExitCode; |
+ }); |
+ |
group('options', () { |
test('custom processor', () { |
Driver driver = new Driver(); |
@@ -38,67 +55,62 @@ main() { |
}); |
group('exit codes', () { |
+ StringSink savedOutSink, savedErrorSink; |
int savedExitCode; |
ExitHandler savedExitHandler; |
setUp(() { |
+ savedOutSink = outSink; |
+ savedErrorSink = errorSink; |
savedExitCode = exitCode; |
savedExitHandler = exitHandler; |
exitHandler = (code) => exitCode = code; |
+ outSink = new StringBuffer(); |
+ errorSink = new StringBuffer(); |
}); |
tearDown(() { |
+ outSink = savedOutSink; |
+ errorSink = savedErrorSink; |
exitCode = savedExitCode; |
exitHandler = savedExitHandler; |
}); |
test('fatal hints', () { |
- Driver driver = new Driver(); |
- driver.start(['--fatal-hints', 'test/data/file_with_hint.dart']); |
+ drive('test/data/file_with_hint.dart', args: ['--fatal-hints']); |
expect(exitCode, 3); |
}); |
test('not fatal hints', () { |
- Driver driver = new Driver(); |
- driver.start(['test/data/file_with_hint.dart']); |
+ drive('test/data/file_with_hint.dart'); |
expect(exitCode, 0); |
}); |
test('fatal errors', () { |
- Driver driver = new Driver(); |
- driver.start(['test/data/file_with_error.dart']); |
+ drive('test/data/file_with_error.dart'); |
expect(exitCode, 3); |
}); |
test('not fatal warnings', () { |
- Driver driver = new Driver(); |
- driver.start(['test/data/file_with_warning.dart']); |
+ drive('test/data/file_with_warning.dart'); |
expect(exitCode, 0); |
}); |
test('fatal warnings', () { |
- Driver driver = new Driver(); |
- driver.start(['--fatal-warnings', 'test/data/file_with_warning.dart']); |
+ drive('test/data/file_with_warning.dart', args: ['--fatal-warnings']); |
expect(exitCode, 3); |
}); |
test('missing options file', () { |
- Driver driver = new Driver(); |
- driver.start([ |
- '--options', |
- 'test/data/NO_OPTIONS_HERE', |
- 'test/data/test_file.dart' |
- ]); |
+ drive('test/data/test_file.dart', options: 'test/data/NO_OPTIONS_HERE'); |
expect(exitCode, 3); |
}); |
test('missing dart file', () { |
- Driver driver = new Driver(); |
- driver.start(['test/data/NO_DART_FILE_HERE.dart']); |
+ drive('test/data/NO_DART_FILE_HERE.dart'); |
expect(exitCode, 3); |
}); |
test('part file', () { |
- Driver driver = new Driver(); |
- driver.start(['test/data/library_and_parts/part2.dart']); |
+ drive('test/data/library_and_parts/part2.dart'); |
expect(exitCode, 3); |
}); |
@@ -167,7 +179,12 @@ main() { |
outSink = new StringBuffer(); |
driver = new Driver(); |
- driver.start(['--lints', 'test/data/linter_project/test_file.dart']); |
+ driver.start([ |
+ '--lints', |
+ 'test/data/linter_project/test_file.dart', |
+ '--options', |
+ 'test/data/linter_project/.analysis_options' |
+ ]); |
}); |
tearDown(() { |
outSink = savedOutSink; |
@@ -188,7 +205,7 @@ main() { |
}); |
}); |
- group('no `--lints` flag', () { |
+ group('no `--lints` flag (none in options)', () { |
StringSink savedOutSink; |
Driver driver; |
@@ -197,7 +214,11 @@ main() { |
outSink = new StringBuffer(); |
driver = new Driver(); |
- driver.start(['test/data/linter_project/test_file.dart']); |
+ driver.start([ |
+ 'test/data/no_lints_project/test_file.dart', |
+ '--options', |
+ 'test/data/no_lints_project/.analysis_options' |
+ ]); |
}); |
tearDown(() { |
outSink = savedOutSink; |
@@ -242,6 +263,44 @@ linter: |
expect(containsLintRuleEntry(options), false); |
}); |
+ group('options processing', () { |
+ group('error filters', () { |
+ StringSink savedOutSink; |
+ Driver driver; |
+ |
+ setUp(() { |
+ savedOutSink = outSink; |
+ outSink = new StringBuffer(); |
+ |
+ driver = new Driver(); |
+ driver.start([ |
+ 'test/data/options_tests_project/test_file.dart', |
+ '--options', |
+ 'test/data/options_tests_project/.analysis_options' |
+ ]); |
+ }); |
+ tearDown(() { |
+ outSink = savedOutSink; |
+ }); |
+ |
+ test('filters', () { |
+ var filters = |
+ driver.context.getConfigurationData(CONFIGURED_ERROR_FILTERS); |
+ expect(filters, hasLength(1)); |
+ |
+ var unused_error = new AnalysisError( |
+ new TestSource(), 0, 1, HintCode.UNUSED_LOCAL_VARIABLE, [ |
+ ['x'] |
+ ]); |
+ expect(filters.any((filter) => filter(unused_error)), isTrue); |
+ }); |
+ |
+ test('language config', () { |
+ expect(driver.context.analysisOptions.enableSuperMixins, isTrue); |
+ }); |
+ }); |
+ }); |
+ |
group('in temp directory', () { |
StringSink savedOutSink, savedErrorSink; |
int savedExitCode; |
@@ -369,6 +428,17 @@ main() {} |
}); |
} |
+const emptyOptionsFile = 'test/data/empty_options.yaml'; |
+ |
+/// Start a driver for the given [source], optionally providing additional |
+/// [args] and an [options] file path. The value of [options] defaults to |
+/// an empty options file to avoid unwanted configuration from an otherwise |
+/// discovered options file. |
+void drive(String source, |
+ {String options: emptyOptionsFile, |
+ List<String> args: const <String>[]}) => |
+ new Driver().start(['--options', options, source]..addAll(args)); |
+ |
Map<String, YamlNode> parseOptions(String src) => |
new AnalysisOptionsProvider().getOptionsFromString(src); |
@@ -405,3 +475,10 @@ class TestProcessor extends OptionsProcessor { |
this.options = options; |
} |
} |
+ |
+class TestSource implements Source { |
+ TestSource(); |
+ |
+ @override |
+ noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); |
+} |