| // Copyright (c) 2023, 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:collection'; |
| |
| import 'package:analyzer/file_system/file_system.dart'; |
| import 'package:analyzer/file_system/physical_file_system.dart'; |
| import 'package:analyzer/src/util/file_paths.dart' as file_paths; |
| import 'package:analyzer_utilities/package_root.dart'; |
| import 'package:test/test.dart'; |
| |
| // TODO(scheglov): Remove it after SDK 3.1 published. |
| void main() { |
| group('_fe_analyzer_shared', () { |
| buildTests(packagePath: '_fe_analyzer_shared'); |
| }); |
| |
| group('analyzer', () { |
| buildTests(packagePath: 'analyzer'); |
| }); |
| } |
| |
| void buildTests({required String packagePath}) { |
| var provider = PhysicalResourceProvider.INSTANCE; |
| var pathContext = provider.pathContext; |
| var pkgRootPath = pathContext.normalize(packageRoot); |
| |
| var libFolder = provider |
| .getFolder(pkgRootPath) |
| .getChildAssumingFolder(packagePath) |
| .getChildAssumingFolder('lib'); |
| |
| for (var file in libFolder.allFiles) { |
| if (file_paths.isDart(pathContext, file.path)) { |
| test(file.path, () { |
| var content = file.readAsStringSync(); |
| if (content.contains('utf8.encode(')) { |
| fail('Should not use `utf8.encode` before SDK 3.1'); |
| } |
| }); |
| } |
| } |
| } |
| |
| extension on Folder { |
| Iterable<File> get allFiles sync* { |
| var queue = Queue<Folder>(); |
| queue.add(this); |
| while (queue.isNotEmpty) { |
| var current = queue.removeFirst(); |
| var children = current.getChildren(); |
| for (var child in children) { |
| if (child is File) { |
| yield child; |
| } else if (child is Folder) { |
| queue.add(child); |
| } |
| } |
| } |
| } |
| } |