| // Copyright 2014 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // @dart = 2.8 |
| |
| import 'package:file/file.dart'; |
| import 'package:file/memory.dart'; |
| import 'package:flutter_tools/src/cache.dart'; |
| import 'package:flutter_tools/src/commands/analyze_base.dart'; |
| import 'package:flutter_tools/src/dart/analysis.dart'; |
| |
| import '../../src/common.dart'; |
| |
| const String _kFlutterRoot = '/data/flutter'; |
| |
| void main() { |
| testWithoutContext('analyze generate correct errors message', () async { |
| expect( |
| AnalyzeBase.generateErrorsMessage( |
| issueCount: 0, |
| seconds: '0.1', |
| ), |
| 'No issues found! (ran in 0.1s)', |
| ); |
| |
| expect( |
| AnalyzeBase.generateErrorsMessage( |
| issueCount: 3, |
| issueDiff: 2, |
| files: 1, |
| seconds: '0.1', |
| ), |
| '3 issues found. (2 new) • analyzed 1 file (ran in 0.1s)', |
| ); |
| }); |
| |
| testWithoutContext('analyze inRepo', () { |
| final FileSystem fileSystem = MemoryFileSystem.test(); |
| fileSystem.directory(_kFlutterRoot).createSync(recursive: true); |
| final Directory tempDir = fileSystem.systemTempDirectory |
| .createTempSync('flutter_analysis_test.'); |
| Cache.flutterRoot = _kFlutterRoot; |
| |
| // Absolute paths |
| expect(inRepo(<String>[tempDir.path], fileSystem), isFalse); |
| expect(inRepo(<String>[fileSystem.path.join(tempDir.path, 'foo')], fileSystem), isFalse); |
| expect(inRepo(<String>[Cache.flutterRoot], fileSystem), isTrue); |
| expect(inRepo(<String>[fileSystem.path.join(Cache.flutterRoot, 'foo')], fileSystem), isTrue); |
| |
| // Relative paths |
| fileSystem.currentDirectory = Cache.flutterRoot; |
| expect(inRepo(<String>['.'], fileSystem), isTrue); |
| expect(inRepo(<String>['foo'], fileSystem), isTrue); |
| fileSystem.currentDirectory = tempDir.path; |
| expect(inRepo(<String>['.'], fileSystem), isFalse); |
| expect(inRepo(<String>['foo'], fileSystem), isFalse); |
| |
| // Ensure no exceptions |
| inRepo(null, fileSystem); |
| inRepo(<String>[], fileSystem); |
| }); |
| |
| testWithoutContext('AnalysisError from json write correct', () { |
| final Map<String, dynamic> json = <String, dynamic>{ |
| 'severity': 'INFO', |
| 'type': 'TODO', |
| 'location': <String, dynamic>{ |
| 'file': '/Users/.../lib/test.dart', |
| 'offset': 362, |
| 'length': 72, |
| 'startLine': 15, |
| 'startColumn': 4, |
| }, |
| 'message': 'Prefer final for variable declarations if they are not reassigned.', |
| 'hasFix': false, |
| }; |
| expect(WrittenError.fromJson(json).toString(), |
| '[info] Prefer final for variable declarations if they are not reassigned (/Users/.../lib/test.dart:15:4)'); |
| }); |
| } |
| |
| bool inRepo(List<String> fileList, FileSystem fileSystem) { |
| if (fileList == null || fileList.isEmpty) { |
| fileList = <String>[fileSystem.path.current]; |
| } |
| final String root = fileSystem.path.normalize(fileSystem.path.absolute(Cache.flutterRoot)); |
| final String prefix = root + fileSystem.path.separator; |
| for (String file in fileList) { |
| file = fileSystem.path.normalize(fileSystem.path.absolute(file)); |
| if (file == root || file.startsWith(prefix)) { |
| return true; |
| } |
| } |
| return false; |
| } |