| // Copyright (c) 2020, 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:_fe_analyzer_shared/src/testing/annotated_code_helper.dart'; | |
| import 'package:_fe_analyzer_shared/src/testing/id_generation.dart'; | |
| import 'package:_fe_analyzer_shared/src/testing/id_testing.dart'; | |
| main() { | |
| testDir('pkg/_fe_analyzer_shared/test/constants/data'); | |
| testDir('pkg/_fe_analyzer_shared/test/flow_analysis/assigned_variables/data'); | |
| testDir( | |
| 'pkg/_fe_analyzer_shared/test/flow_analysis/definite_assignment/data', | |
| ); | |
| testDir('pkg/_fe_analyzer_shared/test/flow_analysis/nullability/data'); | |
| testDir('pkg/_fe_analyzer_shared/test/flow_analysis/reachability/data'); | |
| testDir('pkg/_fe_analyzer_shared/test/flow_analysis/type_promotion/data'); | |
| testDir('pkg/_fe_analyzer_shared/test/flow_analysis/why_not_promoted/data'); | |
| testDir('pkg/_fe_analyzer_shared/test/inheritance/data'); | |
| } | |
| void expectStringEquals(String value1, String value2) { | |
| if (value1 != value2) { | |
| throw StateError('Strings not equal: $value1 != $value2'); | |
| } | |
| } | |
| void testDir(String dataDirPath) { | |
| Directory dataDir = Directory(dataDirPath); | |
| MarkerOptions markerOptions = MarkerOptions.fromDataDir( | |
| dataDir, | |
| shouldFindScript: false, | |
| ); | |
| String relativeDir = dataDir.uri.path.replaceAll(Uri.base.path, ''); | |
| print('Data dir: ${relativeDir}'); | |
| List<FileSystemEntity> entities = dataDir | |
| .listSync() | |
| .where((entity) => !entity.path.endsWith('~')) | |
| .toList(); | |
| for (FileSystemEntity entity in entities) { | |
| print('----------------------------------------------------------------'); | |
| TestData testData = computeTestData( | |
| entity, | |
| supportedMarkers: markerOptions.supportedMarkers, | |
| createTestUri: (Uri uri, String name) => Uri.parse('memory:$name'), | |
| onFailure: (String message) => throw message, | |
| ); | |
| print('Test: ${testData.testFileUri}'); | |
| testData.code.forEach((Uri uri, AnnotatedCode code) { | |
| expectStringEquals(code.annotatedCode, code.toText()); | |
| }); | |
| Map<Uri, List<Annotation>> annotationsPerUri = computeAnnotationsPerUri( | |
| testData.code, | |
| testData.expectedMaps, | |
| testData.entryPoint, | |
| const {}, | |
| const StringDataInterpreter(), | |
| ); | |
| annotationsPerUri.forEach((Uri uri, List<Annotation> annotations) { | |
| AnnotatedCode original = testData.code[uri]!; | |
| AnnotatedCode generated = new AnnotatedCode( | |
| original.annotatedCode, | |
| original.sourceCode, | |
| annotations, | |
| ); | |
| expectStringEquals(generated.annotatedCode, generated.toText()); | |
| }); | |
| } | |
| } |