// Copyright (c) 2016, 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 'dart:io'; import 'package:analyzer/analyzer.dart'; import 'package:analyzer/src/command_line/arguments.dart'; import 'package:analyzer/src/summary/summary_sdk.dart'; import 'package:path/path.dart' as path; import 'package:test/test.dart'; import '../../lib/src/analyzer/context.dart'; import '../../lib/src/analyzer/command.dart'; import '../../lib/src/analyzer/module_compiler.dart'; import '../testing.dart' show repoDirectory, testDirectory; /// The `test/options` directory. final optionsDir = path.join(testDirectory, 'options'); /// Summary file for testing. final sdkSummaryFile = path.join(repoDirectory, 'gen', 'sdk', 'ddc_sdk.sum'); final sdkSummaryArgs = ['--$sdkSummaryPathOption', sdkSummaryFile]; main() { test('basic', () { var options = new AnalyzerOptions.basic(); var compiler = new ModuleCompiler(options, analysisRoot: optionsDir); var processors = compiler.context.analysisOptions.errorProcessors; expect(processors, hasLength(1)); expect(processors[0].code, CompileTimeErrorCode.UNDEFINED_CLASS.name); }); test('basic sdk summary', () { expect(new File(sdkSummaryFile).existsSync(), isTrue); var options = new AnalyzerOptions.basic(dartSdkSummaryPath: sdkSummaryFile); var compiler = new ModuleCompiler(options, analysisRoot: optionsDir); var context = compiler.context; var sdk = context.sourceFactory.dartSdk; expect(sdk, new isInstanceOf()); var processors = context.analysisOptions.errorProcessors; expect(processors, hasLength(1)); expect(processors[0].code, CompileTimeErrorCode.UNDEFINED_CLASS.name); }); test('fromArgs', () { var args = []; //TODO(danrubel) remove sdkSummaryArgs once all SDKs have summary file args.addAll(sdkSummaryArgs); var argResults = ddcArgParser().parse(args); var options = new AnalyzerOptions.fromArguments(argResults); var compiler = new ModuleCompiler(options, analysisRoot: optionsDir); var processors = compiler.context.analysisOptions.errorProcessors; expect(processors, hasLength(1)); expect(processors[0].code, CompileTimeErrorCode.UNDEFINED_CLASS.name); }); test('fromArgs options file 2', () { var optionsFile2 = path.join(optionsDir, 'analysis_options_2.yaml'); expect(new File(optionsFile2).existsSync(), isTrue); var args = ['--$analysisOptionsFileOption', optionsFile2]; //TODO(danrubel) remove sdkSummaryArgs once all SDKs have summary file args.addAll(sdkSummaryArgs); var argResults = ddcArgParser().parse(args); var options = new AnalyzerOptions.fromArguments(argResults); var compiler = new ModuleCompiler(options, analysisRoot: optionsDir); var processors = compiler.context.analysisOptions.errorProcessors; expect(processors, hasLength(1)); expect(processors[0].code, CompileTimeErrorCode.DUPLICATE_DEFINITION.name); }); test('custom module name for summary', () { var args = [ '-snormal', '-scustom/path=module', '-sanother', '--summary=custom/path2=module2' ]; var argResults = ddcArgParser().parse(args); var options = new AnalyzerOptions.fromArguments(argResults); expect(options.summaryPaths, orderedEquals(['normal', 'custom/path', 'another', 'custom/path2'])); expect(options.customSummaryModules['custom/path'], equals('module')); expect(options.customSummaryModules['custom/path2'], equals('module2')); expect(options.customSummaryModules.containsKey('normal'), isFalse); }); }