// 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/src/command_line/arguments.dart'; import 'package:analyzer/src/error/codes.dart'; import 'package:analyzer/src/summary/summary_sdk.dart'; import 'package:dev_compiler/src/analyzer/context.dart'; import 'package:dev_compiler/src/analyzer/command.dart'; import 'package:dev_compiler/src/analyzer/driver.dart'; import 'package:dev_compiler/src/analyzer/module_compiler.dart'; import 'package:path/path.dart' as path; import 'package:test/test.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]; void main() { test('basic', () { var options = AnalyzerOptions.basic()..analysisRoot = optionsDir; var driver = CompilerAnalysisDriver(options); var processors = driver.analysisOptions.errorProcessors; expect(processors, hasLength(1)); expect(processors[0].code, CompileTimeErrorCode.UNDEFINED_CLASS.name); }); test('basic sdk summary', () { expect(File(sdkSummaryFile).existsSync(), isTrue); var options = AnalyzerOptions.basic(dartSdkSummaryPath: sdkSummaryFile) ..analysisRoot = optionsDir; var driver = CompilerAnalysisDriver(options); var sdk = driver.dartSdk; expect(sdk, const TypeMatcher()); var processors = driver.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 = AnalyzerOptions.fromArguments(argResults) ..analysisRoot = optionsDir; var driver = CompilerAnalysisDriver(options); var processors = driver.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(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 = AnalyzerOptions.fromArguments(argResults) ..analysisRoot = optionsDir; var driver = CompilerAnalysisDriver(options); var processors = driver.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 = CompilerOptions.fromArguments(argResults); expect(options.summaryModules.keys.toList(), orderedEquals(['normal', 'custom/path', 'another', 'custom/path2'])); expect(options.summaryModules['custom/path'], equals('module')); expect(options.summaryModules['custom/path2'], equals('module2')); expect(options.summaryModules.containsKey('normal'), isFalse); }); }