| // Copyright 2019 The Chromium Authors. 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:async'; |
| |
| import 'package:flutter_tools/src/base/file_system.dart'; |
| import 'package:flutter_tools/src/cache.dart'; |
| import 'package:flutter_tools/src/dart/analysis.dart'; |
| import 'package:flutter_tools/src/dart/pub.dart'; |
| import 'package:flutter_tools/src/dart/sdk.dart'; |
| |
| import '../../src/common.dart'; |
| import '../../src/context.dart'; |
| |
| void main() { |
| testSampleProject('ui', 'Window'); |
| testSampleProject('html', 'HttpStatus'); |
| testSampleProject('js', 'allowInterop'); |
| testSampleProject('js_util', 'jsify'); |
| } |
| |
| void testSampleProject(String lib, String member) { |
| testUsingContext('contains dart:$lib', () async { |
| Cache.disableLocking(); |
| final Directory projectDirectory = fs.systemTempDirectory.createTempSync('flutter_sdk_validation_${lib}_test.').absolute; |
| |
| try { |
| final File pubspecFile = fs.file(fs.path.join(projectDirectory.path, 'pubspec.yaml')); |
| pubspecFile.writeAsStringSync(''' |
| name: ${lib}_project |
| dependencies: |
| flutter: |
| sdk: flutter |
| '''); |
| |
| final File dartFile = fs.file(fs.path.join(projectDirectory.path, 'lib', 'main.dart')); |
| dartFile.parent.createSync(); |
| dartFile.writeAsStringSync(''' |
| import 'dart:$lib' as $lib; |
| void main() { |
| // ignore: unnecessary_statements |
| $lib.$member; |
| } |
| '''); |
| |
| await pub.get(context: PubContext.flutterTests, directory: projectDirectory.path); |
| final AnalysisServer server = AnalysisServer(dartSdkPath, <String>[projectDirectory.path]); |
| try { |
| final int errorCount = await analyze(server); |
| expect(errorCount, 0); |
| } finally { |
| await server.dispose(); |
| } |
| } finally { |
| tryToDelete(projectDirectory); |
| Cache.enableLocking(); |
| } |
| }, skip: true); |
| } |
| |
| Future<int> analyze(AnalysisServer server) async { |
| int errorCount = 0; |
| final Future<bool> onDone = server.onAnalyzing.where((bool analyzing) => analyzing == false).first; |
| server.onErrors.listen((FileAnalysisErrors result) { |
| for (AnalysisError error in result.errors) { |
| print(error.toString().trim()); |
| } |
| errorCount += result.errors.length; |
| }); |
| |
| await server.start(); |
| await onDone; |
| |
| return errorCount; |
| } |