Version 2.18.0-230.0.dev
Merge commit 'bf3652e57f31e8e658ccbe6a3d853266e798d679' into 'dev'
diff --git a/pkg/analyzer/lib/src/dart/analysis/file_state.dart b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
index ab9e741..4f09f27 100644
--- a/pkg/analyzer/lib/src/dart/analysis/file_state.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
@@ -1387,6 +1387,24 @@
return flag;
}
+ /// When printing the state for testing, we want to see all files.
+ @visibleForTesting
+ void pullReferencedFiles() {
+ while (true) {
+ final fileCount = _pathToFile.length;
+ for (final file in _pathToFile.values.toList()) {
+ final kind = file.kind;
+ if (kind is LibraryOrAugmentationFileKind) {
+ kind.imports;
+ kind.exports;
+ }
+ }
+ if (_pathToFile.length == fileCount) {
+ break;
+ }
+ }
+ }
+
/// Remove the file with the given [path].
void removeFile(String path) {
_clearFiles();
@@ -1478,6 +1496,9 @@
FileTestData._(this.file, this.uri);
@override
+ int get hashCode => file.hashCode;
+
+ @override
bool operator ==(Object other) {
return other is FileTestData && other.file == file && other.uri == uri;
}
diff --git a/pkg/analyzer/test/src/dart/analysis/analyzer_state_printer.dart b/pkg/analyzer/test/src/dart/analysis/analyzer_state_printer.dart
index 1a318c2..8acb50c 100644
--- a/pkg/analyzer/test/src/dart/analysis/analyzer_state_printer.dart
+++ b/pkg/analyzer/test/src/dart/analysis/analyzer_state_printer.dart
@@ -14,23 +14,27 @@
class AnalyzerStatePrinter {
final MemoryByteStore byteStore;
+ final FileStateKindIdProvider fileStateKindIdProvider;
final FileStateIdProvider fileStateIdProvider;
final KeyShorter keyShorter;
final LibraryContext libraryContext;
final bool omitSdkFiles;
final ResourceProvider resourceProvider;
final StringSink sink;
+ final bool withKeysGetPut;
String _indent = '';
AnalyzerStatePrinter({
required this.byteStore,
+ required this.fileStateKindIdProvider,
required this.fileStateIdProvider,
required this.keyShorter,
required this.libraryContext,
required this.omitSdkFiles,
required this.resourceProvider,
required this.sink,
+ required this.withKeysGetPut,
});
FileSystemState get fileSystemState => libraryContext.fileSystemState;
@@ -39,7 +43,6 @@
_writeFiles(testData.fileSystem);
_writeLibraryContext(testData.libraryContext);
_writeElementFactory();
- _writeByteStore();
}
void writeFileResolver(FileResolverTestData testData) {
@@ -68,6 +71,15 @@
_indent = indent;
}
+ /// TODO(scheglov) Support unresolved URIs, not augmentations, etc.
+ void _writeAugmentations(LibraryOrAugmentationFileKind kind) {
+ final files = kind.file.augmentationFiles.whereNotNull();
+ if (files.isNotEmpty) {
+ final keys = files.map((e) => fileStateIdProvider[e]).join(' ');
+ _writelnWithIndent('augmentations: $keys');
+ }
+ }
+
void _writeByteStore() {
_writelnWithIndent('byteStore');
_withIndent(() {
@@ -98,48 +110,198 @@
});
}
+ void _writeElements<T>(String name, List<T> elements, void Function(T) f) {
+ if (elements.isNotEmpty) {
+ _writelnWithIndent(name);
+ _withIndent(() {
+ for (var element in elements) {
+ f(element);
+ }
+ });
+ }
+ }
+
void _writeFile(FileState file) {
_withIndent(() {
_writelnWithIndent('id: ${fileStateIdProvider[file]}');
_writeFileKind(file);
+ _writeReferencingFiles(file);
_writeFileUnlinkedKey(file);
});
}
+ void _writeFileExports(LibraryOrAugmentationFileKind file) {
+ _writeElements<ExportDirectiveState>('exports', file.exports, (export) {
+ if (export is ExportDirectiveWithFile) {
+ final file = export.exportedFile;
+ sink.write(_indent);
+
+ final exportedLibrary = export.exportedLibrary;
+ if (exportedLibrary != null) {
+ expect(exportedLibrary.file, file);
+ sink.write(fileStateKindIdProvider[exportedLibrary]);
+ } else {
+ sink.write('notLibrary ${fileStateIdProvider[file]}');
+ }
+
+ if (omitSdkFiles && file.uri.isScheme('dart')) {
+ sink.write(' ${file.uri}');
+ }
+ sink.writeln();
+ } else if (export is ExportDirectiveWithInSummarySource) {
+ sink.write(_indent);
+ sink.write('inSummary ${export.exportedSource.uri}');
+
+ final librarySource = export.exportedLibrarySource;
+ if (librarySource != null) {
+ expect(librarySource, same(export.exportedSource));
+ } else {
+ sink.write(' notLibrary');
+ }
+ sink.writeln();
+ } else {
+ sink.write(_indent);
+ sink.write('uri: ${export.directive.uri}');
+ sink.writeln();
+ }
+ });
+ }
+
+ void _writeFileImports(LibraryOrAugmentationFileKind file) {
+ _writeElements<ImportDirectiveState>('imports', file.imports, (import) {
+ if (import is ImportDirectiveWithFile) {
+ final file = import.importedFile;
+ sink.write(_indent);
+
+ final importedLibrary = import.importedLibrary;
+ if (importedLibrary != null) {
+ expect(importedLibrary.file, file);
+ sink.write(fileStateKindIdProvider[importedLibrary]);
+ } else {
+ sink.write('notLibrary ${fileStateIdProvider[file]}');
+ }
+
+ if (omitSdkFiles && file.uri.isScheme('dart')) {
+ sink.write(' ${file.uri}');
+ }
+
+ if (import.isSyntheticDartCoreImport) {
+ sink.write(' synthetic');
+ }
+ sink.writeln();
+ } else if (import is ImportDirectiveWithInSummarySource) {
+ sink.write(_indent);
+ sink.write('inSummary ${import.importedSource.uri}');
+
+ final librarySource = import.importedLibrarySource;
+ if (librarySource != null) {
+ expect(librarySource, same(import.importedSource));
+ } else {
+ sink.write(' notLibrary');
+ }
+
+ if (import.isSyntheticDartCoreImport) {
+ sink.write(' synthetic');
+ }
+ sink.writeln();
+ } else {
+ sink.write(_indent);
+ sink.write('uri: ${import.directive.uri}');
+ if (import.isSyntheticDartCoreImport) {
+ sink.write(' synthetic');
+ }
+ sink.writeln();
+ }
+ });
+ }
+
void _writeFileKind(FileState file) {
final kind = file.kind;
- if (kind is LibraryFileStateKind) {
- _writelnWithIndent('kind: library');
- expect(kind.library.file, same(file));
- } else if (kind is PartOfNameFileStateKind) {
- _writelnWithIndent('kind: partOfName');
+ expect(kind.file, same(file));
+
+ _writelnWithIndent('kind: ${fileStateKindIdProvider[kind]}');
+ if (kind is AugmentationKnownFileStateKind) {
_withIndent(() {
+ final augmented = kind.augmented;
+ if (augmented != null) {
+ final id = fileStateKindIdProvider[augmented];
+ _writelnWithIndent('augmented: $id');
+ } else {
+ final id = fileStateIdProvider[kind.uriFile];
+ _writelnWithIndent('uriFile: $id');
+ }
+
final library = kind.library;
if (library != null) {
- final id = fileStateIdProvider[library.file];
+ final id = fileStateKindIdProvider[library];
+ _writelnWithIndent('library: $id');
+ }
+
+ _writeFileImports(kind);
+ _writeFileExports(kind);
+ _writeAugmentations(kind);
+ });
+ } else if (kind is AugmentationUnknownFileStateKind) {
+ _withIndent(() {
+ _writelnWithIndent('uri: ${kind.directive.uri}');
+ });
+ } else if (kind is LibraryFileStateKind) {
+ expect(kind.library, same(kind));
+
+ _withIndent(() {
+ final name = kind.name;
+ if (name != null) {
+ _writelnWithIndent('name: $name');
+ }
+
+ _writeFileImports(kind);
+ _writeFileExports(kind);
+ _writeLibraryParts(kind);
+ _writeAugmentations(kind);
+ });
+ } else if (kind is PartOfNameFileStateKind) {
+ _withIndent(() {
+ final libraries = kind.libraries;
+ if (libraries.isNotEmpty) {
+ final keys = libraries
+ .map((library) => fileStateKindIdProvider[library])
+ .sorted(compareNatural)
+ .join(' ');
+ _writelnWithIndent('libraries: $keys');
+ }
+
+ final library = kind.library;
+ if (library != null) {
+ final id = fileStateKindIdProvider[library];
_writelnWithIndent('library: $id');
} else {
_writelnWithIndent('name: ${kind.directive.name}');
}
});
} else if (kind is PartOfUriKnownFileStateKind) {
- _writelnWithIndent('kind: partOfUriKnown');
_withIndent(() {
final library = kind.library;
if (library != null) {
- final id = fileStateIdProvider[library.file];
+ final id = fileStateKindIdProvider[library];
_writelnWithIndent('library: $id');
} else {
final id = fileStateIdProvider[kind.uriFile];
_writelnWithIndent('uriFile: $id');
}
});
+ } else if (kind is PartOfUriUnknownFileStateKind) {
+ _withIndent(() {
+ _writelnWithIndent('uri: ${kind.directive.uri}');
+ expect(kind.library, isNull);
+ });
} else {
throw UnimplementedError('${kind.runtimeType}');
}
}
void _writeFiles(FileSystemTestData testData) {
+ fileSystemState.pullReferencedFiles();
+
final fileDataList = <FileTestData>[];
for (final fileData in testData.files.values) {
if (omitSdkFiles && fileData.uri.isScheme('dart')) {
@@ -163,18 +325,20 @@
final file = fileData.file;
_writelnWithIndent(_posixPath(file));
_withIndent(() {
+ _writelnWithIndent('uri: ${fileData.uri}');
+
final current = fileSystemState.getExisting(file);
if (current != null) {
_writelnWithIndent('current');
_writeFile(current);
}
- final shortGets = keyShorter.shortKeys(fileData.unlinkedKeyGet);
- final shortPuts = keyShorter.shortKeys(fileData.unlinkedKeyPut);
- _writelnWithIndent('unlinkedGet: $shortGets');
- _writelnWithIndent('unlinkedPut: $shortPuts');
-
- _writelnWithIndent('uri: ${fileData.uri}');
+ if (withKeysGetPut) {
+ final shortGets = keyShorter.shortKeys(fileData.unlinkedKeyGet);
+ final shortPuts = keyShorter.shortKeys(fileData.unlinkedKeyPut);
+ _writelnWithIndent('unlinkedGet: $shortGets');
+ _writelnWithIndent('unlinkedPut: $shortPuts');
+ }
});
}
});
@@ -239,11 +403,30 @@
});
}
+ /// TODO(scheglov) Support unresolved URIs, not parts, etc.
+ void _writeLibraryParts(LibraryFileStateKind library) {
+ final parts = library.file.partedFiles.whereNotNull();
+ if (parts.isNotEmpty) {
+ final partKeys = parts.map((e) => fileStateIdProvider[e]).join(' ');
+ _writelnWithIndent('parts: $partKeys');
+ }
+ }
+
void _writelnWithIndent(String line) {
sink.write(_indent);
sink.writeln(line);
}
+ void _writeReferencingFiles(FileState file) {
+ final referencingFiles = file.referencingFiles;
+ if (referencingFiles.isNotEmpty) {
+ final fileIds = referencingFiles
+ .map((e) => fileStateIdProvider[e])
+ .sorted(compareNatural);
+ _writelnWithIndent('referencingFiles: $fileIds');
+ }
+ }
+
void _writeUriList(String name, Iterable<Uri> uriIterable) {
final uriStrList = <String>[];
for (final uri in uriIterable) {
@@ -273,6 +456,28 @@
}
}
+class FileStateKindIdProvider {
+ final Map<FileStateKind, String> _map = Map.identity();
+
+ String operator [](FileStateKind kind) {
+ if (kind is AugmentationKnownFileStateKind) {
+ return _map[kind] ??= 'augmentation_${_map.length}';
+ } else if (kind is AugmentationUnknownFileStateKind) {
+ return _map[kind] ??= 'augmentationUnknown_${_map.length}';
+ } else if (kind is LibraryFileStateKind) {
+ return _map[kind] ??= 'library_${_map.length}';
+ } else if (kind is PartOfNameFileStateKind) {
+ return _map[kind] ??= 'partOfName_${_map.length}';
+ } else if (kind is PartOfUriKnownFileStateKind) {
+ return _map[kind] ??= 'partOfUriKnown_${_map.length}';
+ } else if (kind is PartFileStateKind) {
+ return _map[kind] ??= 'partOfUriUnknown_${_map.length}';
+ } else {
+ throw UnimplementedError('${kind.runtimeType}');
+ }
+ }
+}
+
/// Keys in the byte store are long hashes, which are hard to read.
/// So, we generate short unique versions for them.
class KeyShorter {
diff --git a/pkg/analyzer/test/src/dart/analysis/file_state_test.dart b/pkg/analyzer/test/src/dart/analysis/file_state_test.dart
index 3cf0ed1..690116e 100644
--- a/pkg/analyzer/test/src/dart/analysis/file_state_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/file_state_test.dart
@@ -21,23 +21,22 @@
show AnalysisOptions, AnalysisOptionsImpl;
import 'package:analyzer/src/generated/source.dart';
import 'package:analyzer/src/source/package_map_resolver.dart';
-import 'package:analyzer/src/summary/package_bundle_reader.dart';
import 'package:analyzer/src/test_utilities/mock_sdk.dart';
import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
import 'package:analyzer/src/util/either.dart';
import 'package:analyzer/src/workspace/basic.dart';
-import 'package:analyzer_utilities/check/check.dart';
-import 'package:meta/meta.dart';
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
import '../resolution/context_collection_resolution.dart';
+import '../resolution/node_text_expectations.dart';
main() {
defineReflectiveSuite(() {
defineReflectiveTests(FileSystemStateTest);
defineReflectiveTests(FileSystemState_BazelWorkspaceTest);
defineReflectiveTests(FileSystemState_PubPackageTest);
+ defineReflectiveTests(UpdateNodeTextExpectations);
});
}
@@ -125,18 +124,6 @@
@override
bool get retainDataForTesting => true;
- FileState get _dartAsyncState {
- return fileStateForUriStr('dart:async');
- }
-
- FileState get _dartCoreState {
- return fileStateForUriStr('dart:core');
- }
-
- FileState get _dartMathState {
- return fileStateForUriStr('dart:math');
- }
-
FileState fileStateFor(File file) {
return fsStateFor(file).getFileForPath(file.path);
}
@@ -155,11 +142,11 @@
}
test_newFile_augmentation_augmentationExists_hasImport() async {
- final a = newFile('$testPackageLibPath/a.dart', r'''
+ newFile('$testPackageLibPath/a.dart', r'''
import augment 'b.dart';
''');
- final b = newFile('$testPackageLibPath/b.dart', r'''
+ newFile('$testPackageLibPath/b.dart', r'''
library augment 'a.dart';
import augment 'c.dart';
''');
@@ -168,45 +155,49 @@
library augment 'b.dart';
''');
- final cState = fileStateFor(c);
- // We have not asked for `b.dart` yet, but it was found using URI.
- cState.assertKind((kind) {
- kind as AugmentationKnownFileStateKind;
- expect(kind.uriFile.path, b.path);
- expect(kind.augmented?.file.path, b.path);
- });
+ fileStateFor(c);
- final bState = fileStateFor(b);
- _assertAugmentationFiles(bState, [c]);
- // We have not asked for `a.dart` yet, but it was found using URI.
- bState.assertKind((kind) {
- kind as AugmentationKnownFileStateKind;
- expect(kind.uriFile.path, a.path);
- expect(kind.augmented?.file.path, a.path);
- });
-
- final aState = fileStateFor(a);
- _assertAugmentationFiles(aState, [b]);
-
- // Check `c.dart` again, now using the `b.dart` state.
- cState.assertKind((kind) {
- kind as AugmentationKnownFileStateKind;
- kind.assertAugmented(bState);
- kind.assertLibrary(aState);
- });
-
- // Check `b.dart` again, now using the `a.dart` state.
- bState.assertKind((kind) {
- kind as AugmentationKnownFileStateKind;
- kind.assertAugmented(aState);
- kind.assertLibrary(aState);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ augmentations: file_1
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: augmentation_2
+ augmented: library_0
+ library: library_0
+ imports
+ library_1 dart:core synthetic
+ augmentations: file_2
+ referencingFiles: [file_0]
+ unlinkedKey: k01
+ /home/test/lib/c.dart
+ uri: package:test/c.dart
+ current
+ id: file_2
+ kind: augmentation_3
+ augmented: augmentation_2
+ library: library_0
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_1]
+ unlinkedKey: k02
+libraryCycles
+elementFactory
+''');
}
test_newFile_augmentation_augmentationExists_hasImport_disconnected() async {
- final a = getFile('$testPackageLibPath/a.dart');
-
- final b = newFile('$testPackageLibPath/b.dart', r'''
+ newFile('$testPackageLibPath/b.dart', r'''
library augment 'a.dart';
import augment 'c.dart';
''');
@@ -215,52 +206,51 @@
library augment 'b.dart';
''');
- final cState = fileStateFor(c);
- // We have not asked for `b.dart` yet, but it was found using URI.
- cState.assertKind((kind) {
- kind as AugmentationKnownFileStateKind;
- expect(kind.uriFile.path, b.path);
- expect(kind.augmented?.file.path, b.path);
- });
+ fileStateFor(c);
- final bState = fileStateFor(b);
- _assertAugmentationFiles(bState, [c]);
- // We have not asked for `a.dart` yet, but it was found using URI.
- bState.assertKind((kind) {
- kind as AugmentationKnownFileStateKind;
- expect(kind.uriFile.path, a.path);
- // The file `a.dart` does not exist, so no import, so `null`.
- expect(kind.augmented, isNull);
- expect(kind.library, isNull);
- });
- // Check `c.dart` again, now using the `b.dart` state.
- cState.assertKind((kind) {
- kind as AugmentationKnownFileStateKind;
- kind.assertAugmented(bState);
- expect(kind.library, isNull);
- });
-
- // The file `a.dart` does not exist.
- final aState = fileStateFor(a);
- expect(aState.exists, isFalse);
- _assertAugmentationFiles(aState, []);
- // Check `b.dart` again, now using the `a.dart` state.
- bState.assertKind((kind) {
- kind as AugmentationKnownFileStateKind;
- // The URI can be resolved, it points at `a.dart` file.
- expect(kind.uriFile, same(aState));
- // The file `a.dart` does not exist, so no import, so `null`.
- expect(kind.augmented, isNull);
- expect(kind.library, isNull);
- });
+ // `b.dart` points at `a.dart`, but `a.dart` does not import it.
+ // So, we can resolve the file, but decline to consider it augmented.
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: augmentation_2
+ uriFile: file_0
+ imports
+ library_1 dart:core synthetic
+ augmentations: file_2
+ unlinkedKey: k01
+ /home/test/lib/c.dart
+ uri: package:test/c.dart
+ current
+ id: file_2
+ kind: augmentation_3
+ augmented: augmentation_2
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_1]
+ unlinkedKey: k02
+libraryCycles
+elementFactory
+''');
}
test_newFile_augmentation_augmentationExists_noImport() async {
- final a = newFile('$testPackageLibPath/a.dart', r'''
+ newFile('$testPackageLibPath/a.dart', r'''
import augment 'b.dart';
''');
- final b = newFile('$testPackageLibPath/b.dart', r'''
+ newFile('$testPackageLibPath/b.dart', r'''
library augment 'a.dart';
''');
@@ -268,40 +258,44 @@
library augment 'b.dart';
''');
- // We found `b.dart` from the augmentation file `c.dart`.
- final cState = fileStateFor(c);
- cState.assertKind((kind) {
- kind as AugmentationKnownFileStateKind;
- expect(kind.uriFile.path, b.path);
- // `b.dart` does not import `c.dart` as an augmentation.
- expect(kind.augmented, isNull);
- expect(kind.library, isNull);
- });
+ fileStateFor(c);
- // Reading `a.dart` does not change anything.
- final aState = fileStateFor(a);
- _assertAugmentationFiles(aState, [b]);
- aState.assertKind((kind) {
- kind as LibraryFileStateKind;
- expect(kind.name, isNull);
- });
-
- // `b.dart` does not import `c.dart` as an augmentation.
- final bState = fileStateFor(b);
- _assertAugmentationFiles(bState, []);
- bState.assertKind((kind) {
- kind as AugmentationKnownFileStateKind;
- kind.assertAugmented(aState);
- kind.assertLibrary(aState);
- });
-
- // Check `c.dart` again, now using the `b.dart` state.
- cState.assertKind((kind) {
- kind as AugmentationKnownFileStateKind;
- expect(kind.uriFile, same(bState));
- expect(kind.augmented, isNull);
- expect(kind.library, isNull);
- });
+ // `c.dart` points at `b.dart`, but `b.dart` does not import it.
+ // So, we can resolve the file, but decline to consider it augmented.
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ augmentations: file_1
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: augmentation_2
+ augmented: library_0
+ library: library_0
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_0]
+ unlinkedKey: k01
+ /home/test/lib/c.dart
+ uri: package:test/c.dart
+ current
+ id: file_2
+ kind: augmentation_3
+ uriFile: file_1
+ imports
+ library_1 dart:core synthetic
+ unlinkedKey: k02
+libraryCycles
+elementFactory
+''');
}
test_newFile_augmentation_cycle1_augmentSelf() async {
@@ -309,29 +303,42 @@
import augment 'b.dart';
''');
- final b = newFile('$testPackageLibPath/b.dart', r'''
+ newFile('$testPackageLibPath/b.dart', r'''
library augment 'b.dart';
import augment 'b.dart';
''');
- final aState = fileStateFor(a);
- _assertAugmentationFiles(aState, [b]);
+ fileStateFor(a);
- // We can construct a cycle using augmentations.
- final bState = fileStateFor(b);
- _assertAugmentationFiles(bState, [b]);
- bState.assertKind((bKind) {
- bKind as AugmentationKnownFileStateKind;
- bKind.assertAugmented(bState);
- expect(bKind.library, isNull);
- });
+ // There is a cycle of augmentations from `b.dart` to itself.
+ // This does not lead to a library, so it is absent.
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ augmentations: file_1
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: augmentation_2
+ augmented: augmentation_2
+ imports
+ library_1 dart:core synthetic
+ augmentations: file_1
+ referencingFiles: [file_0, file_1]
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
- // The cycle does not prevent building of the library cycle.
- aState.assertKind((kind) {
- kind as LibraryFileStateKind;
- expect(kind.name, isNull);
- // TODO(scheglov) ask for the cycle signature
- });
+ // The cycle does not prevent building of the library cycle. TODO
}
test_newFile_augmentation_cycle2() async {
@@ -339,43 +346,58 @@
import augment 'b.dart';
''');
- final b = newFile('$testPackageLibPath/b.dart', r'''
+ newFile('$testPackageLibPath/b.dart', r'''
library augment 'a.dart';
import augment 'c.dart';
''');
- final c = newFile('$testPackageLibPath/c.dart', r'''
+ newFile('$testPackageLibPath/c.dart', r'''
library augment 'b.dart';
import augment 'b.dart';
''');
- final aState = fileStateFor(a);
- _assertAugmentationFiles(aState, [b]);
+ fileStateFor(a);
- final bState = fileStateFor(b);
- _assertAugmentationFiles(bState, [c]);
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ augmentations: file_1
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: augmentation_2
+ augmented: library_0
+ library: library_0
+ imports
+ library_1 dart:core synthetic
+ augmentations: file_2
+ referencingFiles: [file_0, file_2]
+ unlinkedKey: k01
+ /home/test/lib/c.dart
+ uri: package:test/c.dart
+ current
+ id: file_2
+ kind: augmentation_3
+ augmented: augmentation_2
+ library: library_0
+ imports
+ library_1 dart:core synthetic
+ augmentations: file_1
+ referencingFiles: [file_1]
+ unlinkedKey: k02
+libraryCycles
+elementFactory
+''');
- final cState = fileStateFor(c);
- _assertAugmentationFiles(cState, [b]);
-
- // We can construct a cycle using augmentations.
- bState.assertKind((kind) {
- kind as AugmentationKnownFileStateKind;
- kind.assertAugmented(aState);
- kind.assertLibrary(aState);
- });
- cState.assertKind((kind) {
- kind as AugmentationKnownFileStateKind;
- kind.assertAugmented(bState);
- kind.assertLibrary(aState);
- });
-
- // The cycle does not prevent building of the library cycle.
- aState.assertKind((kind) {
- kind as LibraryFileStateKind;
- expect(kind.name, isNull);
- // TODO(scheglov) ask for the cycle signature
- });
+ // The cycle does not prevent building of the library cycle. TODO
}
test_newFile_augmentation_invalid() async {
@@ -383,17 +405,25 @@
library augment 'da:';
''');
+ fileStateFor(a);
+
// The URI is invalid, so there is no way to discover the target.
- final aState = fileStateFor(a);
- aState.assertKind((kind) {
- kind as AugmentationUnknownFileStateKind;
- expect(kind.directive.uri, 'da:');
- expect(kind.library, isNull);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: augmentationUnknown_0
+ uri: da:
+ unlinkedKey: k00
+libraryCycles
+elementFactory
+''');
}
test_newFile_augmentation_libraryExists_hasImport() async {
- final a = newFile('$testPackageLibPath/a.dart', r'''
+ newFile('$testPackageLibPath/a.dart', r'''
import augment 'b.dart';
''');
@@ -401,22 +431,33 @@
library augment 'a.dart';
''');
- final bState = fileStateFor(b);
- // We have not asked for `a.dart` yet, but it was found using URI.
- bState.assertKind((kind) {
- kind as AugmentationKnownFileStateKind;
- expect(kind.uriFile.path, a.path);
- expect(kind.augmented?.file.path, a.path);
- });
+ fileStateFor(b);
- final aState = fileStateFor(a);
- _assertAugmentationFiles(aState, [b]);
- // Check `b.dart` again, now using the `a.dart` state.
- bState.assertKind((kind) {
- kind as AugmentationKnownFileStateKind;
- kind.assertAugmented(aState);
- kind.assertLibrary(aState);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ augmentations: file_1
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: augmentation_2
+ augmented: library_0
+ library: library_0
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_0]
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
}
test_newFile_augmentation_libraryExists_noImport() async {
@@ -426,58 +467,90 @@
library augment 'a.dart';
''');
- final aState = fileStateFor(a);
- _assertAugmentationFiles(aState, []);
+ fileStateFor(b);
- final bState = fileStateFor(b);
// We can find `a.dart` using the URI.
- bState.assertKind((kind) {
- kind as AugmentationKnownFileStateKind;
- expect(kind.uriFile, same(aState));
- // But `a.dart` does not import `b.dart`.
- expect(kind.augmented, isNull);
- expect(kind.library, isNull);
- });
+ // But it does not import the augmentation `b.dart`, so we find the
+ // file that corresponds to the URI, but refuse to consider it augmented.
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: augmentation_2
+ uriFile: file_0
+ imports
+ library_1 dart:core synthetic
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
// Refreshing `a.dart` does not change anything.
- aState.refresh();
- _assertAugmentationFiles(aState, []);
- bState.assertKind((kind) {
- kind as AugmentationKnownFileStateKind;
- expect(kind.uriFile, same(aState));
- expect(kind.augmented, isNull);
- expect(kind.library, isNull);
- });
+ fileStateFor(a).refresh();
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_3
+ imports
+ library_1 dart:core synthetic
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: augmentation_2
+ uriFile: file_0
+ imports
+ library_1 dart:core synthetic
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
}
test_newFile_augmentation_targetNotExists() async {
- final a = getFile('$testPackageLibPath/a.dart');
-
final b = newFile('$testPackageLibPath/b.dart', r'''
library augment 'a.dart';
''');
- final bState = fileStateFor(b);
- // We can find `a.dart` from `b.dart` using the URI.
- bState.assertKind((kind) {
- kind as AugmentationKnownFileStateKind;
- expect(kind.uriFile.path, a.path);
- // The file `a.dart` does not exist, so no import.
- expect(kind.augmented, isNull);
- expect(kind.library, isNull);
- });
+ fileStateFor(b);
- // We can get `a.dart`, but it does not exist.
- final aState = fileStateFor(a);
- expect(aState.exists, isFalse);
- _assertAugmentationFiles(aState, []);
- bState.assertKind((kind) {
- kind as AugmentationKnownFileStateKind;
- expect(kind.uriFile, same(aState));
- // The file `a.dart` does not exist, so no import.
- expect(kind.augmented, isNull);
- expect(kind.library, isNull);
- });
+ // We can find `a.dart` from `b.dart` using the URI.
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: augmentation_2
+ uriFile: file_0
+ imports
+ library_1 dart:core synthetic
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
}
test_newFile_augmentation_twoLibraries() async {
@@ -489,93 +562,261 @@
import augment 'c.dart';
''');
- final c = newFile('$testPackageLibPath/c.dart', r'''
+ newFile('$testPackageLibPath/c.dart', r'''
library augment 'a.dart';
''');
final aState = fileStateFor(a);
- _assertAugmentationFiles(aState, [c]);
// We use the URI from `library augment` to find the augmentation target.
- final cState = fileStateFor(c);
- cState.assertKind((kind) {
- kind as AugmentationKnownFileStateKind;
- kind.assertAugmented(aState);
- kind.assertLibrary(aState);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ augmentations: file_1
+ unlinkedKey: k00
+ /home/test/lib/c.dart
+ uri: package:test/c.dart
+ current
+ id: file_1
+ kind: augmentation_2
+ augmented: library_0
+ library: library_0
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_0]
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
// Reading `b.dart` does not update the augmentation.
final bState = fileStateFor(b);
- _assertAugmentationFiles(bState, [c]);
- cState.assertKind((kind) {
- kind as AugmentationKnownFileStateKind;
- kind.assertAugmented(aState);
- kind.assertLibrary(aState);
- });
-
- // Refreshing `a.dart` does not update the augmentation.
- aState.refresh();
- cState.assertKind((kind) {
- kind as AugmentationKnownFileStateKind;
- kind.assertAugmented(aState);
- kind.assertLibrary(aState);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ augmentations: file_1
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_2
+ kind: library_3
+ imports
+ library_1 dart:core synthetic
+ augmentations: file_1
+ unlinkedKey: k00
+ /home/test/lib/c.dart
+ uri: package:test/c.dart
+ current
+ id: file_1
+ kind: augmentation_2
+ augmented: library_0
+ library: library_0
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_0, file_2]
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
// Refreshing `b.dart` does not update the augmentation.
bState.refresh();
- cState.assertKind((kind) {
- kind as AugmentationKnownFileStateKind;
- kind.assertAugmented(aState);
- kind.assertLibrary(aState);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ augmentations: file_1
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_2
+ kind: library_4
+ imports
+ library_1 dart:core synthetic
+ augmentations: file_1
+ unlinkedKey: k00
+ /home/test/lib/c.dart
+ uri: package:test/c.dart
+ current
+ id: file_1
+ kind: augmentation_2
+ augmented: library_0
+ library: library_0
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_0, file_2]
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
// Exclude from `a.dart`, the URI still points at `a.dart`.
// But `c.dart` is not a valid augmentation anymore.
newFile(a.path, '');
aState.refresh();
- _assertAugmentationFiles(aState, []);
- cState.assertKind((kind) {
- kind as AugmentationKnownFileStateKind;
- expect(kind.uriFile, same(aState));
- expect(kind.augmented, isNull);
- expect(kind.library, isNull);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_5
+ imports
+ library_1 dart:core synthetic
+ unlinkedKey: k02
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_2
+ kind: library_4
+ imports
+ library_1 dart:core synthetic
+ augmentations: file_1
+ unlinkedKey: k00
+ /home/test/lib/c.dart
+ uri: package:test/c.dart
+ current
+ id: file_1
+ kind: augmentation_2
+ uriFile: file_0
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_2]
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
// Exclude from `b.dart`, still point at `a.dart`, still not valid.
newFile(b.path, '');
bState.refresh();
- _assertAugmentationFiles(bState, []);
- cState.assertKind((kind) {
- kind as AugmentationKnownFileStateKind;
- expect(kind.uriFile, same(aState));
- expect(kind.augmented, isNull);
- expect(kind.library, isNull);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_5
+ imports
+ library_1 dart:core synthetic
+ unlinkedKey: k02
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_2
+ kind: library_6
+ imports
+ library_1 dart:core synthetic
+ unlinkedKey: k02
+ /home/test/lib/c.dart
+ uri: package:test/c.dart
+ current
+ id: file_1
+ kind: augmentation_2
+ uriFile: file_0
+ imports
+ library_1 dart:core synthetic
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
// Include into `b.dart`, still point at `a.dart`, still not valid.
newFile(b.path, r'''
import augment 'c.dart';
''');
bState.refresh();
- _assertAugmentationFiles(bState, [c]);
- cState.assertKind((kind) {
- kind as AugmentationKnownFileStateKind;
- expect(kind.uriFile, same(aState));
- expect(kind.augmented, isNull);
- expect(kind.library, isNull);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_5
+ imports
+ library_1 dart:core synthetic
+ unlinkedKey: k02
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_2
+ kind: library_7
+ imports
+ library_1 dart:core synthetic
+ augmentations: file_1
+ unlinkedKey: k00
+ /home/test/lib/c.dart
+ uri: package:test/c.dart
+ current
+ id: file_1
+ kind: augmentation_2
+ uriFile: file_0
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_2]
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
// Include into `a.dart`, restore to `a.dart` as the target.
newFile(a.path, r'''
import augment 'c.dart';
''');
aState.refresh();
- _assertAugmentationFiles(aState, [c]);
- cState.assertKind((kind) {
- kind as AugmentationKnownFileStateKind;
- kind.assertAugmented(aState);
- kind.assertLibrary(aState);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_8
+ imports
+ library_1 dart:core synthetic
+ augmentations: file_1
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_2
+ kind: library_7
+ imports
+ library_1 dart:core synthetic
+ augmentations: file_1
+ unlinkedKey: k00
+ /home/test/lib/c.dart
+ uri: package:test/c.dart
+ current
+ id: file_1
+ kind: augmentation_2
+ augmented: library_8
+ library: library_8
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_0, file_2]
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
}
test_newFile_doesNotExist() {
@@ -587,22 +828,65 @@
expect(file.content, '');
expect(file.exists, isFalse);
- file.assertKind((kind) {
- kind as LibraryFileStateKind;
- expect(kind.name, isNull);
- kind.assertLibrary(file);
- check(kind.imports).matches([
- (import) => import
- ..isLibrary(_dartCoreState)
- ..isSyntheticDartCoreImport.isTrue,
- ]);
- check(kind.exports).isEmpty;
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ unlinkedKey: k00
+libraryCycles
+elementFactory
+''');
+ }
- expect(file.exportedFiles, isEmpty);
- expect(file.partedFiles, isEmpty);
- expect(file.libraryFiles, [file]);
- expect(file.isPart, isFalse);
+ test_newFile_library_exports_augmentation() async {
+ newFile('$testPackageLibPath/b.dart', r'''
+library augment 'a.dart';
+''');
+
+ final c = newFile('$testPackageLibPath/c.dart', r'''
+export 'b.dart';
+''');
+
+ fileStateFor(c);
+
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: augmentation_2
+ uriFile: file_0
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_2]
+ unlinkedKey: k01
+ /home/test/lib/c.dart
+ uri: package:test/c.dart
+ current
+ id: file_2
+ kind: library_3
+ imports
+ library_1 dart:core synthetic
+ exports
+ notLibrary file_1
+ unlinkedKey: k02
+libraryCycles
+elementFactory
+''');
}
test_newFile_library_exports_dart() async {
@@ -611,14 +895,24 @@
export 'dart:math';
''');
- final aState = fileStateFor(a);
- aState.assertKind((kind) {
- kind as LibraryFileStateKind;
- check(kind.exports).matches([
- (export) => export.isLibrary(_dartAsyncState),
- (export) => export.isLibrary(_dartMathState),
- ]);
- });
+ fileStateFor(a);
+
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ exports
+ library_2 dart:async
+ library_3 dart:math
+ unlinkedKey: k00
+libraryCycles
+elementFactory
+''');
}
test_newFile_library_exports_inSummary_library() async {
@@ -667,25 +961,36 @@
export 'b.dart';
''');
- final b = getFile('$testPackageLibPath/b.dart');
+ fileStateFor(a);
- final aState = fileStateFor(a);
- final bState = fileStateFor(b);
-
- aState.assertKind((kind) {
- kind as LibraryFileStateKind;
- check(kind.exports).matches([
- (import) {
- final expected = Uri.parse('dart:async');
- import.withInSummaryLibrary(expected);
- },
- (import) {
- final expected = Uri.parse('package:foo/foo.dart');
- import.withInSummaryLibrary(expected);
- },
- (import) => import.isLibrary(bState),
- ]);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ inSummary dart:core synthetic
+ exports
+ inSummary dart:async
+ inSummary package:foo/foo.dart
+ library_1
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: library_1
+ imports
+ inSummary dart:core synthetic
+ referencingFiles: [file_0]
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+ hasReader
+ package:foo/foo.dart
+''');
}
test_newFile_library_exports_inSummary_part() async {
@@ -739,61 +1044,107 @@
export 'b.dart';
''');
- final b = getFile('$testPackageLibPath/b.dart');
+ fileStateFor(a);
- final aState = fileStateFor(a);
- final bState = fileStateFor(b);
-
- aState.assertKind((kind) {
- kind as LibraryFileStateKind;
- check(kind.exports).matches([
- (export) {
- final expected = Uri.parse('package:foo/foo2.dart');
- export.withInSummaryNotLibrary(expected);
- },
- (export) => export.isLibrary(bState),
- ]);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ inSummary dart:core synthetic
+ exports
+ inSummary package:foo/foo2.dart notLibrary
+ library_1
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: library_1
+ imports
+ inSummary dart:core synthetic
+ referencingFiles: [file_0]
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+ hasReader
+ package:foo/foo.dart
+''');
}
test_newFile_library_exports_invalidRelativeUri() async {
final a = newFile('$testPackageLibPath/a.dart', r'''
-export '::net';
+export 'net:';
''');
- final aState = fileStateFor(a);
- aState.assertKind((kind) {
- kind as LibraryFileStateKind;
- check(kind.exports).matches([
- (export) => export.isNotFile(),
- ]);
- });
+ fileStateFor(a);
+
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ exports
+ uri: net:
+ unlinkedKey: k00
+libraryCycles
+elementFactory
+''');
}
test_newFile_library_exports_package() async {
- final a = newFile('$testPackageLibPath/a.dart', '');
- final b = newFile('$testPackageLibPath/b.dart', '');
-
final c = newFile('$testPackageLibPath/c.dart', r'''
export 'a.dart';
export 'package:test/b.dart';
''');
- final aState = fileStateFor(a);
- final bState = fileStateFor(b);
- final cState = fileStateFor(c);
+ fileStateFor(c);
- cState.assertKind((kind) {
- kind as LibraryFileStateKind;
- check(kind.exports).matches([
- (export) => export.isLibrary(aState),
- (export) => export.isLibrary(bState),
- ]);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_2]
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: library_2
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_2]
+ unlinkedKey: k00
+ /home/test/lib/c.dart
+ uri: package:test/c.dart
+ current
+ id: file_2
+ kind: library_3
+ imports
+ library_1 dart:core synthetic
+ exports
+ library_0
+ library_2
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
}
test_newFile_library_exports_part() async {
- final a = newFile('$testPackageLibPath/a.dart', r'''
+ newFile('$testPackageLibPath/a.dart', r'''
part of my.lib;
''');
@@ -801,19 +1152,35 @@
export 'a.dart';
''');
- final aState = fileStateFor(a);
- final bState = fileStateFor(b);
+ fileStateFor(b);
- bState.assertKind((kind) {
- kind as LibraryFileStateKind;
- check(kind.exports).matches([
- (export) => export.isFile(aState),
- ]);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: partOfName_0
+ name: my.lib
+ referencingFiles: [file_1]
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: library_1
+ imports
+ library_2 dart:core synthetic
+ exports
+ notLibrary file_0
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
}
- test_newFile_library_imports_library_augmentation() async {
- final b = newFile('$testPackageLibPath/b.dart', r'''
+ test_newFile_library_imports_augmentation() async {
+ newFile('$testPackageLibPath/b.dart', r'''
library augment 'a.dart';
''');
@@ -821,18 +1188,63 @@
import 'b.dart';
''');
- final bState = fileStateFor(b);
- final cState = fileStateFor(c);
+ fileStateFor(c);
- cState.assertKind((kind) {
- kind as LibraryFileStateKind;
- check(kind.imports).matches([
- (import) => import.isFile(bState),
- (import) => import
- ..isLibrary(_dartCoreState)
- ..isSyntheticDartCoreImport.isTrue,
- ]);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: augmentation_2
+ uriFile: file_0
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_2]
+ unlinkedKey: k01
+ /home/test/lib/c.dart
+ uri: package:test/c.dart
+ current
+ id: file_2
+ kind: library_3
+ imports
+ notLibrary file_1
+ library_1 dart:core synthetic
+ unlinkedKey: k02
+libraryCycles
+elementFactory
+''');
+ }
+
+ test_newFile_library_imports_invalidRelativeUri() async {
+ final a = newFile('$testPackageLibPath/a.dart', r'''
+import 'da:';
+''');
+
+ fileStateFor(a);
+
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ uri: da:
+ library_1 dart:core synthetic
+ unlinkedKey: k00
+libraryCycles
+elementFactory
+''');
}
test_newFile_library_imports_library_dart() async {
@@ -841,17 +1253,23 @@
import 'dart:math';
''');
- final aState = fileStateFor(a);
- aState.assertKind((kind) {
- kind as LibraryFileStateKind;
- check(kind.imports).matches([
- (import) => import.isLibrary(_dartAsyncState),
- (import) => import.isLibrary(_dartMathState),
- (import) => import
- ..isLibrary(_dartCoreState)
- ..isSyntheticDartCoreImport.isTrue,
- ]);
- });
+ fileStateFor(a);
+
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ library_1 dart:async
+ library_2 dart:math
+ library_3 dart:core synthetic
+ unlinkedKey: k00
+libraryCycles
+elementFactory
+''');
}
test_newFile_library_imports_library_dart_explicitDartCore() async {
@@ -860,16 +1278,22 @@
import 'dart:math';
''');
- final aState = fileStateFor(a);
- aState.assertKind((kind) {
- kind as LibraryFileStateKind;
- check(kind.imports).matches([
- (import) => import
- ..isLibrary(_dartCoreState)
- ..isSyntheticDartCoreImport.isFalse,
- (import) => import.isLibrary(_dartMathState),
- ]);
- });
+ fileStateFor(a);
+
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ library_1 dart:core
+ library_2 dart:math
+ unlinkedKey: k00
+libraryCycles
+elementFactory
+''');
}
test_newFile_library_imports_library_inSummary_library() async {
@@ -918,31 +1342,35 @@
import 'b.dart';
''');
- final b = getFile('$testPackageLibPath/b.dart');
+ fileStateFor(a);
- final aState = fileStateFor(a);
- final bState = fileStateFor(b);
-
- aState.assertKind((kind) {
- kind as LibraryFileStateKind;
- check(kind.imports).matches([
- (import) {
- final expected = Uri.parse('dart:async');
- import.withInSummaryLibrary(expected);
- },
- (import) {
- final expected = Uri.parse('package:foo/foo.dart');
- import.withInSummaryLibrary(expected);
- },
- (import) => import.isLibrary(bState),
- (import) {
- final expected = Uri.parse('dart:core');
- import
- ..withInSummaryLibrary(expected)
- ..isSyntheticDartCoreImport.isTrue;
- },
- ]);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ inSummary dart:async
+ inSummary package:foo/foo.dart
+ library_1
+ inSummary dart:core synthetic
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: library_1
+ imports
+ inSummary dart:core synthetic
+ referencingFiles: [file_0]
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+ hasReader
+ package:foo/foo.dart
+''');
}
test_newFile_library_imports_library_inSummary_part() async {
@@ -996,71 +1424,84 @@
import 'b.dart';
''');
- final b = getFile('$testPackageLibPath/b.dart');
+ fileStateFor(a);
- final aState = fileStateFor(a);
- final bState = fileStateFor(b);
-
- aState.assertKind((kind) {
- kind as LibraryFileStateKind;
- check(kind.imports).matches([
- (export) {
- final expected = Uri.parse('package:foo/foo2.dart');
- export.withInSummaryNotLibrary(expected);
- },
- (export) => export.isLibrary(bState),
- (export) {
- final expected = Uri.parse('dart:core');
- export
- ..withInSummaryLibrary(expected)
- ..isSyntheticDartCoreImport.isTrue;
- },
- ]);
- });
- }
-
- test_newFile_library_imports_library_invalidRelativeUri() async {
- final a = newFile('$testPackageLibPath/a.dart', r'''
-import '::net';
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ inSummary package:foo/foo2.dart notLibrary
+ library_1
+ inSummary dart:core synthetic
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: library_1
+ imports
+ inSummary dart:core synthetic
+ referencingFiles: [file_0]
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+ hasReader
+ package:foo/foo.dart
''');
-
- final aState = fileStateFor(a);
- aState.assertKind((kind) {
- kind as LibraryFileStateKind;
- check(kind.imports).matches([
- (import) => import.isNotFile(),
- (import) => import.isLibrary(_dartCoreState),
- ]);
- });
}
test_newFile_library_imports_library_package() async {
- final a = newFile('$testPackageLibPath/a.dart', '');
- final b = newFile('$testPackageLibPath/b.dart', '');
+ newFile('$testPackageLibPath/a.dart', '');
+ newFile('$testPackageLibPath/b.dart', '');
final c = newFile('$testPackageLibPath/c.dart', r'''
import 'a.dart';
import 'package:test/b.dart';
''');
- final aState = fileStateFor(a);
- final bState = fileStateFor(b);
- final cState = fileStateFor(c);
+ fileStateFor(c);
- cState.assertKind((kind) {
- kind as LibraryFileStateKind;
- check(kind.imports).matches([
- (import) => import.isLibrary(aState),
- (import) => import.isLibrary(bState),
- (import) => import
- ..isLibrary(_dartCoreState)
- ..isSyntheticDartCoreImport.isTrue,
- ]);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_2]
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: library_2
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_2]
+ unlinkedKey: k00
+ /home/test/lib/c.dart
+ uri: package:test/c.dart
+ current
+ id: file_2
+ kind: library_3
+ imports
+ library_0
+ library_2
+ library_1 dart:core synthetic
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
}
- test_newFile_library_imports_library_part() async {
- final a = newFile('$testPackageLibPath/a.dart', r'''
+ test_newFile_library_imports_part() async {
+ newFile('$testPackageLibPath/a.dart', r'''
part of my.lib;
''');
@@ -1068,18 +1509,30 @@
import 'a.dart';
''');
- final aState = fileStateFor(a);
- final bState = fileStateFor(b);
+ fileStateFor(b);
- bState.assertKind((kind) {
- kind as LibraryFileStateKind;
- check(kind.imports).matches([
- (import) => import.isFile(aState),
- (import) => import
- ..isLibrary(_dartCoreState)
- ..isSyntheticDartCoreImport.isTrue,
- ]);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: partOfName_0
+ name: my.lib
+ referencingFiles: [file_1]
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: library_1
+ imports
+ notLibrary file_0
+ library_2 dart:core synthetic
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
}
test_newFile_library_includePart_withoutPartOf() async {
@@ -1087,33 +1540,61 @@
part 'b.dart';
''');
- final b = newFile('$testPackageLibPath/b.dart', r'''
+ newFile('$testPackageLibPath/b.dart', r'''
// no part of
''');
final aState = fileStateFor(a);
- aState.assertKind((kind) {
- kind as LibraryFileStateKind;
- expect(kind.name, isNull);
- });
- // Library `a.dart` includes `b.dart` as a part.
- _assertPartedFiles(aState, [b]);
-
- // But `b.dart` thinks that it is a library itself.
- final bState = fileStateFor(b);
- bState.assertKind((kind) {
- kind as LibraryFileStateKind;
- expect(kind.name, isNull);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ parts: file_1
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: library_2
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_0]
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
// Refreshing the library does not change this.
aState.refresh();
- _assertPartedFiles(aState, [b]);
- bState.assertKind((kind) {
- kind as LibraryFileStateKind;
- expect(kind.name, isNull);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_3
+ imports
+ library_1 dart:core synthetic
+ parts: file_1
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: library_2
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_0]
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
}
test_newFile_libraryDirective() async {
@@ -1121,22 +1602,42 @@
library my;
''');
- final aState = fileStateFor(a);
- aState.assertKind((kind) {
- kind as LibraryFileStateKind;
- expect(kind.name, 'my');
- kind.assertLibrary(aState);
- });
+ fileStateFor(a);
+
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ name: my
+ imports
+ library_1 dart:core synthetic
+ unlinkedKey: k00
+libraryCycles
+elementFactory
+''');
}
test_newFile_noDirectives() async {
final a = newFile('$testPackageLibPath/a.dart', '');
- final aState = fileStateFor(a);
- aState.assertKind((kind) {
- kind as LibraryFileStateKind;
- expect(kind.name, isNull);
- });
+ fileStateFor(a);
+
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ unlinkedKey: k00
+libraryCycles
+elementFactory
+''');
}
/// TODO(scheglov) Test discovery of a sibling library
@@ -1150,31 +1651,51 @@
part of my.lib;
''');
- final bState = fileStateFor(b);
+ fileStateFor(b);
// We don't know the library initially.
// Even though the library file exists, we have not seen it yet.
- bState.assertKind((kind) {
- kind as PartOfNameFileStateKind;
- expect(kind.directive.name, 'my.lib');
- expect(kind.libraries, isEmpty);
- expect(kind.library, isNull);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_0
+ kind: partOfName_0
+ name: my.lib
+ unlinkedKey: k00
+libraryCycles
+elementFactory
+''');
// Read the library file.
- final aState = fileStateFor(a);
- aState.assertKind((kind) {
- kind as LibraryFileStateKind;
- expect(kind.name, 'my.lib');
- });
- _assertPartedFiles(aState, [b]);
+ fileStateFor(a);
// Now the part knows its library.
- bState.assertKind((kind) {
- kind as PartOfNameFileStateKind;
- kind.assertLibraries([aState]);
- kind.assertLibrary(aState);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_0
+ kind: partOfName_0
+ libraries: library_1
+ library: library_1
+ referencingFiles: [file_1]
+ unlinkedKey: k00
+ /home/test/lib/nested/a.dart
+ uri: package:test/nested/a.dart
+ current
+ id: file_1
+ kind: library_1
+ name: my.lib
+ imports
+ library_2 dart:core synthetic
+ parts: file_0
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
}
test_newFile_partOfName_differentName() async {
@@ -1187,31 +1708,51 @@
part of other.lib;
''');
- final bState = fileStateFor(b);
+ fileStateFor(b);
// We don't know the library initially.
- bState.assertKind((kind) {
- kind as PartOfNameFileStateKind;
- expect(kind.directive.name, 'other.lib');
- kind.assertLibraries([]);
- expect(kind.library, isNull);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_0
+ kind: partOfName_0
+ name: other.lib
+ referencingFiles: [file_1]
+ unlinkedKey: k00
+libraryCycles
+elementFactory
+''');
// Read the library file.
- final aState = fileStateFor(a);
- aState.assertKind((kind) {
- kind as LibraryFileStateKind;
- expect(kind.name, 'my.lib');
- });
- _assertPartedFiles(aState, [b]);
+ fileStateFor(a);
// We still don't know the library, because the part wants `other.lib`,
// but `a.dart` that includes `b.dart` has the name `my.lib`.
- bState.assertKind((kind) {
- kind as PartOfNameFileStateKind;
- kind.assertLibraries([]);
- expect(kind.library, isNull);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_1
+ kind: library_1
+ name: my.lib
+ imports
+ library_2 dart:core synthetic
+ parts: file_0
+ unlinkedKey: k01
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_0
+ kind: partOfName_0
+ name: other.lib
+ referencingFiles: [file_1]
+ unlinkedKey: k00
+libraryCycles
+elementFactory
+''');
}
test_newFile_partOfName_twoLibraries() async {
@@ -1225,71 +1766,217 @@
part 'c.dart';
''');
- final c = newFile('$testPackageLibPath/c.dart', r'''
+ newFile('$testPackageLibPath/c.dart', r'''
part of my.lib;
''');
final aState = fileStateFor(a);
- aState.assertKind((kind) {
- kind as LibraryFileStateKind;
- expect(kind.name, 'my.lib');
- });
- _assertPartedFiles(aState, [c]);
- // We set the library while reading `a.dart` file.
- final cState = fileStateFor(c);
- cState.assertKind((kind) {
- kind as PartOfNameFileStateKind;
- kind.assertLibraries([aState]);
- kind.assertLibrary(aState);
- });
+ // When reading `a.dart` we also read `c.dart` part.
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ name: my.lib
+ imports
+ library_1 dart:core synthetic
+ parts: file_1
+ unlinkedKey: k00
+ /home/test/lib/c.dart
+ uri: package:test/c.dart
+ current
+ id: file_1
+ kind: partOfName_2
+ libraries: library_0
+ library: library_0
+ referencingFiles: [file_0]
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
- // Reading `b.dart` does not update the part.
+ // After reading `b.dart` the part has two libraries to choose from.
+ // We still keep `a.dart`, because its path is sorted first.
final bState = fileStateFor(b);
- bState.assertKind((kind) {
- kind as LibraryFileStateKind;
- expect(kind.name, 'my.lib');
- });
- _assertPartedFiles(bState, [c]);
- cState.assertKind((kind) {
- kind as PartOfNameFileStateKind;
- kind.assertLibraries([aState, bState]);
- kind.assertLibrary(aState);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ name: my.lib
+ imports
+ library_1 dart:core synthetic
+ parts: file_1
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_2
+ kind: library_3
+ name: my.lib
+ imports
+ library_1 dart:core synthetic
+ parts: file_1
+ unlinkedKey: k00
+ /home/test/lib/c.dart
+ uri: package:test/c.dart
+ current
+ id: file_1
+ kind: partOfName_2
+ libraries: library_0 library_3
+ library: library_0
+ referencingFiles: [file_0, file_2]
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
- // Refreshing `b.dart` does not update the part.
+ // Refresh `b.dart`, the part still uses `a.dart` as the library.
bState.refresh();
- cState.assertKind((kind) {
- kind as PartOfNameFileStateKind;
- kind.assertLibraries([aState, bState]);
- kind.assertLibrary(aState);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ name: my.lib
+ imports
+ library_1 dart:core synthetic
+ parts: file_1
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_2
+ kind: library_4
+ name: my.lib
+ imports
+ library_1 dart:core synthetic
+ parts: file_1
+ unlinkedKey: k00
+ /home/test/lib/c.dart
+ uri: package:test/c.dart
+ current
+ id: file_1
+ kind: partOfName_2
+ libraries: library_0 library_4
+ library: library_0
+ referencingFiles: [file_0, file_2]
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
- // Refreshing `a.dart` does not update the part.
+ // Refresh `a.dart`, the part still uses `a.dart` as the library.
aState.refresh();
- cState.assertKind((kind) {
- kind as PartOfNameFileStateKind;
- kind.assertLibraries([aState, bState]);
- kind.assertLibrary(aState);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_5
+ name: my.lib
+ imports
+ library_1 dart:core synthetic
+ parts: file_1
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_2
+ kind: library_4
+ name: my.lib
+ imports
+ library_1 dart:core synthetic
+ parts: file_1
+ unlinkedKey: k00
+ /home/test/lib/c.dart
+ uri: package:test/c.dart
+ current
+ id: file_1
+ kind: partOfName_2
+ libraries: library_4 library_5
+ library: library_5
+ referencingFiles: [file_0, file_2]
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
// Exclude the part from `a.dart`, switch to `b.dart` instead.
newFile(a.path, '');
aState.refresh();
- cState.assertKind((kind) {
- kind as PartOfNameFileStateKind;
- kind.assertLibraries([bState]);
- kind.assertLibrary(bState);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_6
+ imports
+ library_1 dart:core synthetic
+ unlinkedKey: k02
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_2
+ kind: library_4
+ name: my.lib
+ imports
+ library_1 dart:core synthetic
+ parts: file_1
+ unlinkedKey: k00
+ /home/test/lib/c.dart
+ uri: package:test/c.dart
+ current
+ id: file_1
+ kind: partOfName_2
+ libraries: library_4
+ library: library_4
+ referencingFiles: [file_2]
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
// Exclude the part from `b.dart`, no library.
newFile(b.path, '');
bState.refresh();
- cState.assertKind((kind) {
- kind as PartOfNameFileStateKind;
- kind.assertLibraries([]);
- expect(kind.library, isNull);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_6
+ imports
+ library_1 dart:core synthetic
+ unlinkedKey: k02
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_2
+ kind: library_7
+ imports
+ library_1 dart:core synthetic
+ unlinkedKey: k02
+ /home/test/lib/c.dart
+ uri: package:test/c.dart
+ current
+ id: file_1
+ kind: partOfName_2
+ name: my.lib
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
// Include into `b.dart`, use it as the library.
newFile(b.path, r'''
@@ -1297,11 +1984,38 @@
part 'c.dart';
''');
bState.refresh();
- cState.assertKind((kind) {
- kind as PartOfNameFileStateKind;
- kind.assertLibraries([bState]);
- kind.assertLibrary(bState);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_6
+ imports
+ library_1 dart:core synthetic
+ unlinkedKey: k02
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_2
+ kind: library_8
+ name: my.lib
+ imports
+ library_1 dart:core synthetic
+ parts: file_1
+ unlinkedKey: k00
+ /home/test/lib/c.dart
+ uri: package:test/c.dart
+ current
+ id: file_1
+ kind: partOfName_2
+ libraries: library_8
+ library: library_8
+ referencingFiles: [file_2]
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
// Include into `a.dart`, switch to `a.dart`.
newFile(a.path, r'''
@@ -1309,11 +2023,40 @@
part 'c.dart';
''');
aState.refresh();
- cState.assertKind((kind) {
- kind as PartOfNameFileStateKind;
- kind.assertLibraries([aState, bState]);
- kind.assertLibrary(aState);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_9
+ name: my.lib
+ imports
+ library_1 dart:core synthetic
+ parts: file_1
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_2
+ kind: library_8
+ name: my.lib
+ imports
+ library_1 dart:core synthetic
+ parts: file_1
+ unlinkedKey: k00
+ /home/test/lib/c.dart
+ uri: package:test/c.dart
+ current
+ id: file_1
+ kind: partOfName_2
+ libraries: library_8 library_9
+ library: library_9
+ referencingFiles: [file_0, file_2]
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
}
test_newFile_partOfUri_doesNotExist() async {
@@ -1328,23 +2071,26 @@
// The URI in `part of URI` tells us which library to use.
// However it does not exist, so it does not include the file, so the
// part file will not be analyzed during the library analysis.
- bState.assertKind((kind) {
- kind as PartOfUriKnownFileStateKind;
- expect(kind.uriFile.path, a.path);
- expect(kind.library, isNull);
- });
-
- final aState = fileStateFor(a);
- expect(aState.exists, isFalse);
- _assertPartedFiles(aState, []);
- aState.assertKind((kind) {
- kind as LibraryFileStateKind;
- });
- bState.assertKind((kind) {
- kind as PartOfUriKnownFileStateKind;
- expect(kind.uriFile, same(aState));
- expect(kind.library, isNull);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: partOfUriKnown_2
+ uriFile: file_0
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
// Create `a.dart` that includes the part file.
newFile(a.path, r'''
@@ -1353,27 +2099,61 @@
// The library file has already been read because of `part of uri`.
// So, we explicitly refresh it.
+ final aState = fileStateFor(a);
aState.refresh();
- _assertPartedFiles(aState, [b]);
// Now the part file knows its library.
- bState.assertKind((kind) {
- kind as PartOfUriKnownFileStateKind;
- expect(kind.uriFile, same(aState));
- kind.assertLibrary(aState);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_3
+ imports
+ library_1 dart:core synthetic
+ parts: file_1
+ unlinkedKey: k02
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: partOfUriKnown_2
+ library: library_3
+ referencingFiles: [file_0]
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
// Refreshing the part file does not break the kind.
bState.refresh();
- bState.assertKind((kind) {
- kind as PartOfUriKnownFileStateKind;
- expect(kind.uriFile, same(aState));
- kind.assertLibrary(aState);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_3
+ imports
+ library_1 dart:core synthetic
+ parts: file_1
+ unlinkedKey: k02
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: partOfUriKnown_4
+ library: library_3
+ referencingFiles: [file_0]
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
}
test_newFile_partOfUri_exists_hasPart() async {
- final a = newFile('$testPackageLibPath/a.dart', r'''
+ newFile('$testPackageLibPath/a.dart', r'''
part 'b.dart';
''');
@@ -1382,32 +2162,56 @@
''');
final bState = fileStateFor(b);
+
// We have not read the library file explicitly yet.
// But it was read because of the `part of` directive.
- bState.assertKind((kind) {
- kind as PartOfUriKnownFileStateKind;
- expect(kind.uriFile.path, a.path);
- expect(kind.library?.file.path, a.path);
- });
-
- final aState = fileStateFor(a);
- aState.assertKind((kind) {
- kind as LibraryFileStateKind;
- });
- _assertPartedFiles(aState, [b]);
- bState.assertKind((kind) {
- kind as PartOfUriKnownFileStateKind;
- expect(kind.uriFile, same(aState));
- kind.assertLibrary(aState);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ parts: file_1
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: partOfUriKnown_2
+ library: library_0
+ referencingFiles: [file_0]
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
// Refreshing the part file does not break the kind.
bState.refresh();
- bState.assertKind((kind) {
- kind as PartOfUriKnownFileStateKind;
- expect(kind.uriFile, same(aState));
- kind.assertLibrary(aState);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ parts: file_1
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: partOfUriKnown_3
+ library: library_0
+ referencingFiles: [file_0]
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
}
test_newFile_partOfUri_exists_noPart() async {
@@ -1417,17 +2221,32 @@
part of 'a.dart';
''');
- final aState = fileStateFor(a);
- final bState = fileStateFor(b);
+ fileStateFor(a);
+ fileStateFor(b);
// The URI in `part of URI` tells us which library to use.
// However `a.dart` does not include `b.dart` as a part, so `b.dart` will
// not be analyzed during the library analysis.
- bState.assertKind((kind) {
- kind as PartOfUriKnownFileStateKind;
- expect(kind.uriFile, same(aState));
- expect(kind.library, isNull);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: partOfUriKnown_2
+ uriFile: file_0
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
}
test_newFile_partOfUri_invalid() async {
@@ -1435,29 +2254,50 @@
part of 'da:';
''');
- final bState = fileStateFor(b);
+ fileStateFor(b);
// The URI is invalid, so there is no way to discover the library.
- bState.assertKind((kind) {
- kind as PartOfUriUnknownFileStateKind;
- expect(kind.directive.uri, 'da:');
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_0
+ kind: partOfUriUnknown_0
+ uri: da:
+ unlinkedKey: k00
+libraryCycles
+elementFactory
+''');
// Reading a library that includes this part does not change the fact
// that the URI in the `part of URI` in `b.dart` cannot be resolved.
final a = newFile('$testPackageLibPath/a.dart', r'''
part 'b.dart';
''');
- final aState = fileStateFor(a);
- aState.assertKind((kind) {
- kind as LibraryFileStateKind;
- });
- _assertPartedFiles(aState, [b]);
-
- bState.assertKind((kind) {
- kind as PartOfUriUnknownFileStateKind;
- expect(kind.directive.uri, 'da:');
- });
+ fileStateFor(a);
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_1
+ kind: library_1
+ imports
+ library_2 dart:core synthetic
+ parts: file_0
+ unlinkedKey: k01
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_0
+ kind: partOfUriUnknown_0
+ uri: da:
+ referencingFiles: [file_1]
+ unlinkedKey: k00
+libraryCycles
+elementFactory
+''');
}
test_newFile_partOfUri_twoLibraries() async {
@@ -1477,74 +2317,270 @@
_assertPartedFiles(aState, [c]);
// We set the library while reading `a.dart` file.
- final cState = fileStateFor(c);
- cState.assertKind((kind) {
- kind as PartOfUriKnownFileStateKind;
- kind.assertLibrary(aState);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ parts: file_1
+ unlinkedKey: k00
+ /home/test/lib/c.dart
+ uri: package:test/c.dart
+ current
+ id: file_1
+ kind: partOfUriKnown_2
+ library: library_0
+ referencingFiles: [file_0]
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
// Reading `b.dart` does not update the part.
final bState = fileStateFor(b);
- _assertPartedFiles(bState, [c]);
- cState.assertKind((kind) {
- kind as PartOfUriKnownFileStateKind;
- kind.assertLibrary(aState);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ parts: file_1
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_2
+ kind: library_3
+ imports
+ library_1 dart:core synthetic
+ parts: file_1
+ unlinkedKey: k00
+ /home/test/lib/c.dart
+ uri: package:test/c.dart
+ current
+ id: file_1
+ kind: partOfUriKnown_2
+ library: library_0
+ referencingFiles: [file_0, file_2]
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
// Refreshing `b.dart` does not update the part.
bState.refresh();
- cState.assertKind((kind) {
- kind as PartOfUriKnownFileStateKind;
- kind.assertLibrary(aState);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ parts: file_1
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_2
+ kind: library_4
+ imports
+ library_1 dart:core synthetic
+ parts: file_1
+ unlinkedKey: k00
+ /home/test/lib/c.dart
+ uri: package:test/c.dart
+ current
+ id: file_1
+ kind: partOfUriKnown_2
+ library: library_0
+ referencingFiles: [file_0, file_2]
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
// Refreshing `a.dart` does not update the part.
aState.refresh();
- cState.assertKind((kind) {
- kind as PartOfUriKnownFileStateKind;
- kind.assertLibrary(aState);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_5
+ imports
+ library_1 dart:core synthetic
+ parts: file_1
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_2
+ kind: library_4
+ imports
+ library_1 dart:core synthetic
+ parts: file_1
+ unlinkedKey: k00
+ /home/test/lib/c.dart
+ uri: package:test/c.dart
+ current
+ id: file_1
+ kind: partOfUriKnown_2
+ library: library_5
+ referencingFiles: [file_0, file_2]
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
- // Exclude the part from `a.dart`, but the URI in `part of` still resolves
- // to `a.dart`, so no changes.
+ // Exclude the part from `a.dart`, the URI in `part of` still resolves
+ // to `a.dart`, but it is not the library of the part anymore.
newFile(a.path, '');
aState.refresh();
- cState.assertKind((kind) {
- kind as PartOfUriKnownFileStateKind;
- expect(kind.uriFile, same(aState));
- expect(kind.library, isNull);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_6
+ imports
+ library_1 dart:core synthetic
+ unlinkedKey: k02
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_2
+ kind: library_4
+ imports
+ library_1 dart:core synthetic
+ parts: file_1
+ unlinkedKey: k00
+ /home/test/lib/c.dart
+ uri: package:test/c.dart
+ current
+ id: file_1
+ kind: partOfUriKnown_2
+ uriFile: file_0
+ referencingFiles: [file_2]
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
// Exclude the part from `b.dart`, no changes.
newFile(b.path, '');
bState.refresh();
- cState.assertKind((kind) {
- kind as PartOfUriKnownFileStateKind;
- expect(kind.uriFile, same(aState));
- expect(kind.library, isNull);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_6
+ imports
+ library_1 dart:core synthetic
+ unlinkedKey: k02
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_2
+ kind: library_7
+ imports
+ library_1 dart:core synthetic
+ unlinkedKey: k02
+ /home/test/lib/c.dart
+ uri: package:test/c.dart
+ current
+ id: file_1
+ kind: partOfUriKnown_2
+ uriFile: file_0
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
// Include into `b.dart`, no changes.
newFile(b.path, r'''
part 'c.dart';
''');
bState.refresh();
- cState.assertKind((kind) {
- kind as PartOfUriKnownFileStateKind;
- expect(kind.uriFile, same(aState));
- expect(kind.library, isNull);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_6
+ imports
+ library_1 dart:core synthetic
+ unlinkedKey: k02
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_2
+ kind: library_8
+ imports
+ library_1 dart:core synthetic
+ parts: file_1
+ unlinkedKey: k00
+ /home/test/lib/c.dart
+ uri: package:test/c.dart
+ current
+ id: file_1
+ kind: partOfUriKnown_2
+ uriFile: file_0
+ referencingFiles: [file_2]
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
- // Include into `a.dart`, no changes.
+ // Include into `a.dart`, restore `a.dart` as the library of the part.
newFile(a.path, r'''
part 'c.dart';
''');
aState.refresh();
- cState.assertKind((kind) {
- kind as PartOfUriKnownFileStateKind;
- expect(kind.uriFile, same(aState));
- kind.assertLibrary(aState);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_9
+ imports
+ library_1 dart:core synthetic
+ parts: file_1
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_2
+ kind: library_8
+ imports
+ library_1 dart:core synthetic
+ parts: file_1
+ unlinkedKey: k00
+ /home/test/lib/c.dart
+ uri: package:test/c.dart
+ current
+ id: file_1
+ kind: partOfUriKnown_2
+ library: library_9
+ referencingFiles: [file_0, file_2]
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
}
test_refresh_augmentation_to_library() async {
@@ -1557,31 +2593,87 @@
''');
final aState = fileStateFor(a);
- _assertAugmentationFiles(aState, [b]);
-
- final bState = fileStateFor(b);
- bState.assertKind((kind) {
- kind as AugmentationKnownFileStateKind;
- kind.assertAugmented(aState);
- kind.assertLibrary(aState);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ augmentations: file_1
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: augmentation_2
+ augmented: library_0
+ library: library_0
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_0]
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
// Make it a library.
newFile(b.path, '');
+ fileStateFor(b).refresh();
// Not an augmentation anymore, but a library.
- bState.refresh();
- bState.assertKind((kind) {
- kind as LibraryFileStateKind;
- expect(kind.name, isNull);
- });
-
// But `a.dart` still uses `b.dart` as an augmentation.
- _assertAugmentationFiles(aState, [b]);
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ augmentations: file_1
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: library_3
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_0]
+ unlinkedKey: k02
+libraryCycles
+elementFactory
+''');
// ...even if we attempt to refresh.
aState.refresh();
- _assertAugmentationFiles(aState, [b]);
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_4
+ imports
+ library_1 dart:core synthetic
+ augmentations: file_1
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: library_3
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_0]
+ unlinkedKey: k02
+libraryCycles
+elementFactory
+''');
}
test_refresh_augmentation_to_partOfName() async {
@@ -1595,14 +2687,33 @@
''');
final aState = fileStateFor(a);
- _assertAugmentationFiles(aState, [b]);
- final bState = fileStateFor(b);
- bState.assertKind((kind) {
- kind as AugmentationKnownFileStateKind;
- kind.assertAugmented(aState);
- kind.assertLibrary(aState);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ name: my.lib
+ imports
+ library_1 dart:core synthetic
+ augmentations: file_1
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: augmentation_2
+ augmented: library_0
+ library: library_0
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_0]
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
// Make it a part.
newFile(b.path, r'''
@@ -1612,21 +2723,61 @@
// Not an augmentation anymore, but a part.
// This part can find the referenced library by name `my.lib`.
// But the library does not include this part, so no library.
- bState.refresh();
- bState.assertKind((kind) {
- kind as PartOfNameFileStateKind;
- kind.assertLibraries([aState]);
- expect(kind.library, isNull);
- });
-
+ //
// But `a.dart` still uses `b.dart` as an augmentation.
- _assertAugmentationFiles(aState, [b]);
- _assertPartedFiles(aState, []);
+ final bState = fileStateFor(b);
+ bState.refresh();
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ name: my.lib
+ imports
+ library_1 dart:core synthetic
+ augmentations: file_1
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: partOfName_3
+ libraries: library_0
+ name: my.lib
+ referencingFiles: [file_0]
+ unlinkedKey: k02
+libraryCycles
+elementFactory
+''');
// ...even if we attempt to refresh.
aState.refresh();
- _assertAugmentationFiles(aState, [b]);
- _assertPartedFiles(aState, []);
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_4
+ name: my.lib
+ imports
+ library_1 dart:core synthetic
+ augmentations: file_1
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: partOfName_3
+ libraries: library_4
+ name: my.lib
+ referencingFiles: [file_0]
+ unlinkedKey: k02
+libraryCycles
+elementFactory
+''');
// Now include `b.dart` into `a.dart` as a part.
newFile(a.path, r'''
@@ -1636,13 +2787,30 @@
aState.refresh();
// ...not an augmentation, but a known part.
- _assertAugmentationFiles(aState, []);
- _assertPartedFiles(aState, [b]);
- bState.assertKind((kind) {
- kind as PartOfNameFileStateKind;
- kind.assertLibraries([aState]);
- kind.assertLibrary(aState);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_5
+ name: my.lib
+ imports
+ library_1 dart:core synthetic
+ parts: file_1
+ unlinkedKey: k03
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: partOfName_3
+ libraries: library_5
+ library: library_5
+ referencingFiles: [file_0]
+ unlinkedKey: k02
+libraryCycles
+elementFactory
+''');
}
test_refresh_augmentation_to_partOfUri() async {
@@ -1655,14 +2823,31 @@
''');
final aState = fileStateFor(a);
- _assertAugmentationFiles(aState, [b]);
-
- final bState = fileStateFor(b);
- bState.assertKind((kind) {
- kind as AugmentationKnownFileStateKind;
- kind.assertAugmented(aState);
- kind.assertLibrary(aState);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ augmentations: file_1
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: augmentation_2
+ augmented: library_0
+ library: library_0
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_0]
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
// Make it a part.
newFile(b.path, r'''
@@ -1670,21 +2855,56 @@
''');
// Not an augmentation anymore, but a part.
- bState.refresh();
- bState.assertKind((kind) {
- kind as PartOfUriKnownFileStateKind;
- expect(kind.uriFile, same(aState));
- expect(kind.library, isNull);
- });
-
// But `a.dart` still uses `b.dart` as an augmentation.
- _assertAugmentationFiles(aState, [b]);
- _assertPartedFiles(aState, []);
+ final bState = fileStateFor(b);
+ bState.refresh();
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ augmentations: file_1
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: partOfUriKnown_3
+ uriFile: file_0
+ referencingFiles: [file_0]
+ unlinkedKey: k02
+libraryCycles
+elementFactory
+''');
// ...even if we attempt to refresh.
aState.refresh();
- _assertAugmentationFiles(aState, [b]);
- _assertPartedFiles(aState, []);
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_4
+ imports
+ library_1 dart:core synthetic
+ augmentations: file_1
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: partOfUriKnown_3
+ uriFile: file_0
+ referencingFiles: [file_0]
+ unlinkedKey: k02
+libraryCycles
+elementFactory
+''');
// Now include `b.dart` into `a.dart` as a part.
newFile(a.path, r'''
@@ -1693,21 +2913,36 @@
aState.refresh();
// ...not an augmentation, but a known part.
- _assertAugmentationFiles(aState, []);
- _assertPartedFiles(aState, [b]);
- bState.assertKind((kind) {
- kind as PartOfUriKnownFileStateKind;
- expect(kind.uriFile, same(aState));
- kind.assertLibrary(aState);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_5
+ imports
+ library_1 dart:core synthetic
+ parts: file_1
+ unlinkedKey: k03
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: partOfUriKnown_3
+ library: library_5
+ referencingFiles: [file_0]
+ unlinkedKey: k02
+libraryCycles
+elementFactory
+''');
}
test_refresh_library_removePart_partOfName() async {
- final a = newFile('$testPackageLibPath/a.dart', r'''
+ newFile('$testPackageLibPath/a.dart', r'''
part of my;
''');
- final b = newFile('$testPackageLibPath/b.dart', r'''
+ newFile('$testPackageLibPath/b.dart', r'''
part of my;
''');
@@ -1718,26 +2953,41 @@
''');
final cState = fileStateFor(c);
- cState.assertKind((kind) {
- kind as LibraryFileStateKind;
- expect(kind.name, 'my');
- });
- _assertPartedFiles(cState, [a, b]);
-
- final aState = fileStateFor(a);
- final bState = fileStateFor(b);
// Both part files know the library.
- aState.assertKind((kind) {
- kind as PartOfNameFileStateKind;
- kind.assertLibraries([cState]);
- kind.assertLibrary(cState);
- });
- bState.assertKind((kind) {
- kind as PartOfNameFileStateKind;
- kind.assertLibraries([cState]);
- kind.assertLibrary(cState);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: partOfName_0
+ libraries: library_1
+ library: library_1
+ referencingFiles: [file_2]
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: partOfName_2
+ libraries: library_1
+ library: library_1
+ referencingFiles: [file_2]
+ unlinkedKey: k00
+ /home/test/lib/c.dart
+ uri: package:test/c.dart
+ current
+ id: file_2
+ kind: library_1
+ name: my
+ imports
+ library_3 dart:core synthetic
+ parts: file_0 file_1
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
newFile(c.path, r'''
library my;
@@ -1746,58 +2996,87 @@
// Stop referencing `a.dart` part file.
cState.refresh();
- _assertPartedFiles(cState, [b]);
-
- // The library does not include `a.dart` as a part anymore.
- // The part `b.dart` is still connected.
- aState.assertKind((kind) {
- kind as PartOfNameFileStateKind;
- kind.assertLibraries([cState]);
- expect(kind.library, isNull);
- });
- bState.assertKind((kind) {
- kind as PartOfNameFileStateKind;
- kind.assertLibraries([cState]);
- kind.assertLibrary(cState);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: partOfName_0
+ libraries: library_4
+ name: my
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: partOfName_2
+ libraries: library_4
+ library: library_4
+ referencingFiles: [file_2]
+ unlinkedKey: k00
+ /home/test/lib/c.dart
+ uri: package:test/c.dart
+ current
+ id: file_2
+ kind: library_4
+ name: my
+ imports
+ library_3 dart:core synthetic
+ parts: file_1
+ unlinkedKey: k02
+libraryCycles
+elementFactory
+''');
}
test_refresh_library_removePart_partOfUri() async {
- final a = newFile('$testPackageLibPath/a.dart', r'''
+ newFile('$testPackageLibPath/a.dart', r'''
part of 'c.dart';
''');
- final b = newFile('$testPackageLibPath/b.dart', r'''
+ newFile('$testPackageLibPath/b.dart', r'''
part of 'c.dart';
''');
final c = newFile('$testPackageLibPath/c.dart', r'''
-library my;
part 'a.dart';
part 'b.dart';
''');
final cState = fileStateFor(c);
- cState.assertKind((kind) {
- kind as LibraryFileStateKind;
- expect(kind.name, 'my');
- });
- _assertPartedFiles(cState, [a, b]);
-
- final aState = fileStateFor(a);
- final bState = fileStateFor(b);
// Both part files know the library.
- aState.assertKind((kind) {
- kind as PartOfUriKnownFileStateKind;
- expect(kind.uriFile, cState);
- kind.assertLibrary(cState);
- });
- bState.assertKind((kind) {
- kind as PartOfUriKnownFileStateKind;
- expect(kind.uriFile, cState);
- kind.assertLibrary(cState);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: partOfUriKnown_0
+ library: library_1
+ referencingFiles: [file_2]
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: partOfUriKnown_2
+ library: library_1
+ referencingFiles: [file_2]
+ unlinkedKey: k00
+ /home/test/lib/c.dart
+ uri: package:test/c.dart
+ current
+ id: file_2
+ kind: library_1
+ imports
+ library_3 dart:core synthetic
+ parts: file_0 file_1
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
newFile(c.path, r'''
library my;
@@ -1806,20 +3085,36 @@
// Stop referencing `a.dart` part file.
cState.refresh();
- _assertPartedFiles(cState, [b]);
-
- // But the URIs in the `part of URI` are still the same.
- // So, both parts are still linked to the library.
- aState.assertKind((kind) {
- kind as PartOfUriKnownFileStateKind;
- expect(kind.uriFile, same(cState));
- expect(kind.library, isNull);
- });
- bState.assertKind((kind) {
- kind as PartOfUriKnownFileStateKind;
- expect(kind.uriFile, cState);
- kind.assertLibrary(cState);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: partOfUriKnown_0
+ uriFile: file_2
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: partOfUriKnown_2
+ library: library_4
+ referencingFiles: [file_2]
+ unlinkedKey: k00
+ /home/test/lib/c.dart
+ uri: package:test/c.dart
+ current
+ id: file_2
+ kind: library_4
+ name: my
+ imports
+ library_3 dart:core synthetic
+ parts: file_1
+ unlinkedKey: k02
+libraryCycles
+elementFactory
+''');
}
test_refresh_library_to_augmentation() async {
@@ -1831,29 +3126,64 @@
library b;
''');
- final aState = fileStateFor(a);
- _assertAugmentationFiles(aState, [b]);
+ fileStateFor(a);
- // TODO(scheglov) Restore.
- // final aCycle_1 = aState.libraryCycle;
-
- final bState = fileStateFor(b);
- bState.assertKind((kind) {
- kind as LibraryFileStateKind;
- expect(kind.name, 'b');
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ augmentations: file_1
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: library_2
+ name: b
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_0]
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
newFile(b.path, r'''
library augment 'a.dart';
''');
// We will discover the target by URI.
- bState.refresh();
- bState.assertKind((kind) {
- kind as AugmentationKnownFileStateKind;
- kind.assertAugmented(aState);
- kind.assertLibrary(aState);
- });
+ fileStateFor(b).refresh();
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ augmentations: file_1
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: augmentation_3
+ augmented: library_0
+ library: library_0
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_0]
+ unlinkedKey: k02
+libraryCycles
+elementFactory
+''');
// The file `b.dart` was something else, but now it is a known augmentation.
// This affects libraries that include it.
@@ -1872,30 +3202,65 @@
final b = newFile('$testPackageLibPath/b.dart', '');
final aState = fileStateFor(a);
- _assertPartedFiles(aState, [b]);
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ name: my.lib
+ imports
+ library_1 dart:core synthetic
+ parts: file_1
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: library_2
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_0]
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
final aCycle_1 = aState.libraryCycle;
- // No `part of`, so it is a library.
- // It does not matter, that `a.dart` tried to use it as part.
- final bState = fileStateFor(b);
- bState.assertKind((kind) {
- kind as LibraryFileStateKind;
- expect(kind.name, isNull);
- });
-
// Make it a part.
newFile(b.path, r'''
part of my.lib;
''');
// We will discover the library by name.
- bState.refresh();
- bState.assertKind((kind) {
- kind as PartOfNameFileStateKind;
- kind.assertLibraries([aState]);
- kind.assertLibrary(aState);
- });
+ fileStateFor(b).refresh();
+
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ name: my.lib
+ imports
+ library_1 dart:core synthetic
+ parts: file_1
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: partOfName_3
+ libraries: library_0
+ library: library_0
+ referencingFiles: [file_0]
+ unlinkedKey: k02
+libraryCycles
+elementFactory
+''');
// The file `b.dart` was something else, but now it is a known part.
// This affects libraries that include it.
@@ -1909,10 +3274,21 @@
''');
final aState = fileStateFor(a);
- aState.assertKind((kind) {
- kind as LibraryFileStateKind;
- expect(kind.name, 'my');
- });
+
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ name: my
+ imports
+ library_1 dart:core synthetic
+ unlinkedKey: k00
+libraryCycles
+elementFactory
+''');
newFile(a.path, r'''
part of my;
@@ -1921,12 +3297,18 @@
aState.refresh();
// No library that includes it, so it stays unknown.
- aState.assertKind((kind) {
- kind as PartOfNameFileStateKind;
- expect(kind.directive.name, 'my');
- kind.assertLibraries([]);
- expect(kind.library, isNull);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: partOfName_2
+ name: my
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
}
test_refresh_library_to_partOfUri() async {
@@ -1939,27 +3321,62 @@
''');
final aState = fileStateFor(a);
- _assertPartedFiles(aState, [b]);
+
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ parts: file_1
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: library_2
+ name: b
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_0]
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
final aCycle_1 = aState.libraryCycle;
- final bState = fileStateFor(b);
- bState.assertKind((kind) {
- kind as LibraryFileStateKind;
- expect(kind.name, 'b');
- });
-
newFile(b.path, r'''
part of 'a.dart';
''');
// We will discover the library using the URI.
- bState.refresh();
- bState.assertKind((kind) {
- kind as PartOfUriKnownFileStateKind;
- expect(kind.uriFile, same(aState));
- kind.assertLibrary(aState);
- });
+ fileStateFor(b).refresh();
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ parts: file_1
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: partOfUriKnown_3
+ library: library_0
+ referencingFiles: [file_0]
+ unlinkedKey: k02
+libraryCycles
+elementFactory
+''');
// The file `b.dart` was something else, but now it is a known part.
// This affects libraries that include it.
@@ -1984,26 +3401,68 @@
''');
final bState = fileStateFor(b);
- bState.assertKind((kind) {
- kind as LibraryFileStateKind;
- expect(kind.name, 'my.lib');
- });
- _assertPartedFiles(bState, [a]);
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: partOfName_0
+ libraries: library_1
+ library: library_1
+ referencingFiles: [file_1]
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: library_1
+ name: my.lib
+ imports
+ library_2 dart:core synthetic
+ parts: file_0
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
+
+ // Get `c.dart`, not there are two libraries to chose from.
final cState = fileStateFor(c);
- cState.assertKind((kind) {
- kind as LibraryFileStateKind;
- expect(kind.name, 'my.lib');
- });
- _assertPartedFiles(cState, [a]);
-
- final aState = fileStateFor(a);
- aState.assertKind((kind) {
- kind as PartOfNameFileStateKind;
- expect(kind.directive.name, 'my.lib');
- kind.assertLibraries([bState, cState]);
- kind.assertLibrary(bState);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: partOfName_0
+ libraries: library_1 library_3
+ library: library_1
+ referencingFiles: [file_1, file_2]
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: library_1
+ name: my.lib
+ imports
+ library_2 dart:core synthetic
+ parts: file_0
+ unlinkedKey: k01
+ /home/test/lib/c.dart
+ uri: package:test/c.dart
+ current
+ id: file_2
+ kind: library_3
+ name: my.lib
+ imports
+ library_2 dart:core synthetic
+ parts: file_0
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
final bCycle_1 = bState.libraryCycle;
final cCycle_1 = cState.libraryCycle;
@@ -2013,14 +3472,43 @@
part of my.lib;
class A2 {}
''');
- aState.refresh();
+ fileStateFor(a).refresh();
+
// `a.dart` is still a part.
- aState.assertKind((kind) {
- kind as PartOfNameFileStateKind;
- expect(kind.directive.name, 'my.lib');
- kind.assertLibraries([bState, cState]);
- kind.assertLibrary(bState);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: partOfName_4
+ libraries: library_1 library_3
+ library: library_1
+ referencingFiles: [file_1, file_2]
+ unlinkedKey: k02
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: library_1
+ name: my.lib
+ imports
+ library_2 dart:core synthetic
+ parts: file_0
+ unlinkedKey: k01
+ /home/test/lib/c.dart
+ uri: package:test/c.dart
+ current
+ id: file_2
+ kind: library_3
+ name: my.lib
+ imports
+ library_2 dart:core synthetic
+ parts: file_0
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
// ...but the unlinked signature of `a.dart` is different.
// We invalidate `b.dart` it references `a.dart`.
@@ -2042,34 +3530,63 @@
''');
final aState = fileStateFor(a);
- aState.assertKind((kind) {
- kind as LibraryFileStateKind;
- expect(kind.name, isNull);
- });
- _assertPartedFiles(aState, [b]);
+
+ // There is `part of` in `b.dart`, so it is a part.
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ parts: file_1
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: partOfUriKnown_2
+ library: library_0
+ referencingFiles: [file_0]
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
final aCycle_1 = aState.libraryCycle;
- // There is `part of` in `b.dart`, so it is a part.
- final bState = fileStateFor(b);
- bState.assertKind((kind) {
- kind as PartOfUriKnownFileStateKind;
- expect(kind.uriFile, same(aState));
- kind.assertLibrary(aState);
- });
-
- // There are no directives in `b.dart`, so it is a library.
newFile(b.path, r'''
// no part of
''');
- bState.refresh();
- bState.assertKind((kind) {
- kind as LibraryFileStateKind;
- expect(kind.name, isNull);
- });
+ fileStateFor(b).refresh();
+ // There are no directives in `b.dart`, so it is a library.
// Library `a.dart` still considers `b.dart` its part.
- _assertPartedFiles(aState, [b]);
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ parts: file_1
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: library_3
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_0]
+ unlinkedKey: k02
+libraryCycles
+elementFactory
+''');
// The library cycle for `a.dart` is different now.
final aCycle_2 = aState.libraryCycle;
@@ -2091,25 +3608,62 @@
''');
final bState = fileStateFor(b);
- bState.assertKind((kind) {
- kind as LibraryFileStateKind;
- expect(kind.name, isNull);
- });
- _assertPartedFiles(bState, [a]);
+
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: partOfUriKnown_0
+ library: library_1
+ referencingFiles: [file_1]
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: library_1
+ imports
+ library_2 dart:core synthetic
+ parts: file_0
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
final cState = fileStateFor(c);
- cState.assertKind((kind) {
- kind as LibraryFileStateKind;
- expect(kind.name, isNull);
- });
- _assertPartedFiles(cState, [a]);
-
- final aState = fileStateFor(a);
- aState.assertKind((kind) {
- kind as PartOfUriKnownFileStateKind;
- expect(kind.uriFile, same(bState));
- kind.assertLibrary(bState);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: partOfUriKnown_0
+ library: library_1
+ referencingFiles: [file_1, file_2]
+ unlinkedKey: k00
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: library_1
+ imports
+ library_2 dart:core synthetic
+ parts: file_0
+ unlinkedKey: k01
+ /home/test/lib/c.dart
+ uri: package:test/c.dart
+ current
+ id: file_2
+ kind: library_3
+ imports
+ library_2 dart:core synthetic
+ parts: file_0
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
final bCycle_1 = bState.libraryCycle;
final cCycle_1 = cState.libraryCycle;
@@ -2119,33 +3673,53 @@
part of 'b.dart';
class A2 {}
''');
- aState.refresh();
+
+ fileStateFor(a).refresh();
+
// `a.dart` is still a part.
- aState.assertKind((kind) {
- kind as PartOfUriKnownFileStateKind;
- expect(kind.uriFile, same(bState));
- kind.assertLibrary(bState);
- });
+ assertDriverStateString(testFile, r'''
+files
+ /home/test/lib/a.dart
+ uri: package:test/a.dart
+ current
+ id: file_0
+ kind: partOfUriKnown_4
+ library: library_1
+ referencingFiles: [file_1, file_2]
+ unlinkedKey: k02
+ /home/test/lib/b.dart
+ uri: package:test/b.dart
+ current
+ id: file_1
+ kind: library_1
+ imports
+ library_2 dart:core synthetic
+ parts: file_0
+ unlinkedKey: k01
+ /home/test/lib/c.dart
+ uri: package:test/c.dart
+ current
+ id: file_2
+ kind: library_3
+ imports
+ library_2 dart:core synthetic
+ parts: file_0
+ unlinkedKey: k01
+libraryCycles
+elementFactory
+''');
// ...but the unlinked signature of `a.dart` is different.
// We invalidate `b.dart` it references `a.dart`.
// We invalidate `c.dart` it references `a.dart`.
// Even though `a.dart` is not a valid part of `c.dart`.
+ // TODO(scheglov) Change all signature checks to the dump.
final bCycle_2 = bState.libraryCycle;
final cCycle_2 = cState.libraryCycle;
expect(bCycle_2.apiSignature, isNot(bCycle_1.apiSignature));
expect(cCycle_2.apiSignature, isNot(cCycle_1.apiSignature));
}
- void _assertAugmentationFiles(FileState fileState, List<File> expected) {
- final actualFiles = fileState.augmentationFiles.map((part) {
- if (part != null) {
- return getFile(part.path);
- }
- }).toList();
- expect(actualFiles, expected);
- }
-
void _assertPartedFiles(FileState fileState, List<File> expected) {
final actualFiles = fileState.partedFiles.map((part) {
if (part != null) {
@@ -2889,224 +4463,6 @@
}
}
-extension on FileState {
- void assertKind(void Function(FileStateKind kind) f) {
- expect(kind.file, same(this));
- f(kind);
- }
-}
-
-extension on FileStateKind {
- void assertLibrary(FileState expectedLibraryFile) {
- final expectedKind = expectedLibraryFile.kind as LibraryFileStateKind;
- expect(library, same(expectedKind));
- }
-}
-
-extension on AugmentationKnownFileStateKind {
- void assertAugmented(FileState expectedFile) {
- // The expected file must be a valid augmentation target.
- final expectedKind = expectedFile.kind as LibraryOrAugmentationFileKind;
-
- // Any valid augmentation target is always the URI target.
- expect(uriFile, same(expectedFile));
-
- // Check the augmentation target itself.
- expect(augmented, same(expectedKind));
- }
-}
-
-extension on PartOfNameFileStateKind {
- void assertLibraries(Iterable<FileState> expectedFiles) {
- final expectedKinds = expectedFiles.map((e) {
- return e.kind as LibraryFileStateKind;
- }).toList();
- expect(libraries, unorderedEquals(expectedKinds));
- }
-}
-
-extension on CheckTarget<ImportDirectiveState> {
- @useResult
- CheckTarget<Source?> get importedLibrarySource {
- return nest(
- value.importedLibrarySource,
- (selected) => 'importedLibrarySource ${valueStr(selected)}',
- );
- }
-
- @useResult
- CheckTarget<bool> get isSyntheticDartCoreImport {
- return nest(
- value.isSyntheticDartCoreImport,
- (selected) => 'isSyntheticDartCoreImport ${valueStr(selected)}',
- );
- }
-
- /// Is [ImportDirectiveWithFile], but not a library.
- void isFile(FileState expected) {
- this.isA<ImportDirectiveWithFile>()
- ..importedFile.isIdenticalTo(expected)
- ..importedSource.uri.isEqualTo(expected.uri)
- ..importedLibrary.isNull
- ..importedLibrarySource.isNull;
- }
-
- /// Is [ImportDirectiveWithFile], and is a library.
- void isLibrary(FileState expected) {
- final expectedKind = expected.kind as LibraryFileStateKind;
- this.isA<ImportDirectiveWithFile>()
- ..importedFile.isIdenticalTo(expected)
- ..importedSource.uri.isEqualTo(expected.uri)
- ..importedLibrary.isNotNull.isIdenticalTo(expectedKind)
- ..importedLibrarySource.isNotNull.uri.isEqualTo(expected.uri);
- }
-
- /// Exactly [ImportDirectiveState], even the file is not known.
- void isNotFile() {
- hasExactType<ImportDirectiveState>();
- }
-
- void withInSummaryLibrary(Uri expected) {
- this.isA<ImportDirectiveWithInSummarySource>()
- ..importedSource.uri.isEqualTo(expected)
- ..importedLibrarySource.isNotNull.uri.isEqualTo(expected);
- }
-
- void withInSummaryNotLibrary(Uri expected) {
- this.isA<ImportDirectiveWithInSummarySource>()
- ..importedSource.uri.isEqualTo(expected)
- ..importedLibrarySource.isNull;
- }
-}
-
-extension on CheckTarget<ExportDirectiveState> {
- @useResult
- CheckTarget<Source?> get exportedLibrarySource {
- return nest(
- value.exportedLibrarySource,
- (selected) => 'exportedLibrarySource ${valueStr(selected)}',
- );
- }
-
- /// Is [ExportDirectiveWithFile], but not a library.
- void isFile(FileState expected) {
- this.isA<ExportDirectiveWithFile>()
- ..exportedFile.isIdenticalTo(expected)
- ..exportedSource.uri.isEqualTo(expected.uri)
- ..exportedLibrary.isNull
- ..exportedLibrarySource.isNull;
- }
-
- /// Is [ExportDirectiveWithFile], and is a library.
- void isLibrary(FileState expected) {
- final expectedKind = expected.kind as LibraryFileStateKind;
- this.isA<ExportDirectiveWithFile>()
- ..exportedFile.isIdenticalTo(expected)
- ..exportedSource.uri.isEqualTo(expected.uri)
- ..exportedLibrary.isIdenticalTo(expectedKind)
- ..exportedLibrarySource.isNotNull.uri.isEqualTo(expected.uri);
- }
-
- /// Exactly [ExportDirectiveState], even the file is not known.
- void isNotFile() {
- hasExactType<ExportDirectiveState>();
- }
-
- void withInSummaryLibrary(Uri expected) {
- this.isA<ExportDirectiveWithInSummarySource>()
- ..exportedSource.uri.isEqualTo(expected)
- ..exportedLibrarySource.isNotNull.uri.isEqualTo(expected);
- }
-
- void withInSummaryNotLibrary(Uri expected) {
- this.isA<ExportDirectiveWithInSummarySource>()
- ..exportedSource.uri.isEqualTo(expected)
- ..exportedLibrarySource.isNull;
- }
-}
-
-extension on CheckTarget<ImportDirectiveWithFile> {
- @useResult
- CheckTarget<FileState> get importedFile {
- return nest(
- value.importedFile,
- (selected) => 'importedFile ${valueStr(selected)}',
- );
- }
-
- @useResult
- CheckTarget<LibraryFileStateKind?> get importedLibrary {
- return nest(
- value.importedLibrary,
- (selected) => 'importedLibrary ${valueStr(selected)}',
- );
- }
-
- @useResult
- CheckTarget<Source> get importedSource {
- return nest(
- value.importedSource,
- (selected) => 'importedSource ${valueStr(selected)}',
- );
- }
-}
-
-extension on CheckTarget<ExportDirectiveWithFile> {
- @useResult
- CheckTarget<FileState> get exportedFile {
- return nest(
- value.exportedFile,
- (selected) => 'exportedFile ${valueStr(selected)}',
- );
- }
-
- @useResult
- CheckTarget<LibraryFileStateKind?> get exportedLibrary {
- return nest(
- value.exportedLibrary,
- (selected) => 'exportedLibrary ${valueStr(selected)}',
- );
- }
-
- @useResult
- CheckTarget<Source> get exportedSource {
- return nest(
- value.exportedSource,
- (selected) => 'exportedSource ${valueStr(selected)}',
- );
- }
-}
-
-extension on CheckTarget<ImportDirectiveWithInSummarySource> {
- @useResult
- CheckTarget<InSummarySource> get importedSource {
- return nest(
- value.importedSource,
- (selected) => 'importedSource ${valueStr(selected)}',
- );
- }
-}
-
-extension on CheckTarget<ExportDirectiveWithInSummarySource> {
- @useResult
- CheckTarget<InSummarySource> get exportedSource {
- return nest(
- value.exportedSource,
- (selected) => 'exportedSource ${valueStr(selected)}',
- );
- }
-}
-
-extension on CheckTarget<Source> {
- @useResult
- CheckTarget<Uri> get uri {
- return nest(
- value.uri,
- (selected) => 'uri ${valueStr(selected)}',
- );
- }
-}
-
extension _Either2Extension<T1, T2> on Either2<T1, T2> {
T1 get t1 {
late T1 result;
diff --git a/pkg/analyzer/test/src/dart/micro/file_resolution.dart b/pkg/analyzer/test/src/dart/micro/file_resolution.dart
index 85fcdfd..8b7da75 100644
--- a/pkg/analyzer/test/src/dart/micro/file_resolution.dart
+++ b/pkg/analyzer/test/src/dart/micro/file_resolution.dart
@@ -39,6 +39,8 @@
late FileResolver fileResolver;
+ final printer.FileStateKindIdProvider _fileStateKindIdProvider =
+ printer.FileStateKindIdProvider();
final printer.FileStateIdProvider _fileStateIdProvider =
printer.FileStateIdProvider();
final printer.KeyShorter _keyShorter = printer.KeyShorter();
@@ -74,12 +76,14 @@
final buffer = StringBuffer();
printer.AnalyzerStatePrinter(
byteStore: byteStore,
+ fileStateKindIdProvider: _fileStateKindIdProvider,
fileStateIdProvider: _fileStateIdProvider,
keyShorter: _keyShorter,
libraryContext: libraryContext,
omitSdkFiles: omitSdkFiles,
resourceProvider: resourceProvider,
sink: buffer,
+ withKeysGetPut: true,
).writeFileResolver(testData);
final actual = buffer.toString();
diff --git a/pkg/analyzer/test/src/dart/micro/simple_file_resolver_test.dart b/pkg/analyzer/test/src/dart/micro/simple_file_resolver_test.dart
index a65c96b..115aca1 100644
--- a/pkg/analyzer/test/src/dart/micro/simple_file_resolver_test.dart
+++ b/pkg/analyzer/test/src/dart/micro/simple_file_resolver_test.dart
@@ -45,32 +45,44 @@
// First time we refresh everything.
await resolveFile(c.path);
+ // TODO(scheglov) We have duplicates in `referencingFiles`.
+ // The reason is that we temporarily have two ways to access imports.
assertStateString(r'''
files
/workspace/dart/test/lib/a.dart
+ uri: package:dart.test/a.dart
current
id: file_0
- kind: library
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_2, file_2]
unlinkedKey: k00
unlinkedGet: []
unlinkedPut: [k00]
- uri: package:dart.test/a.dart
/workspace/dart/test/lib/b.dart
+ uri: package:dart.test/b.dart
current
id: file_1
- kind: library
+ kind: library_2
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_2, file_2]
unlinkedKey: k01
unlinkedGet: []
unlinkedPut: [k01]
- uri: package:dart.test/b.dart
/workspace/dart/test/lib/c.dart
+ uri: package:dart.test/c.dart
current
id: file_2
- kind: library
+ kind: library_3
+ imports
+ library_0
+ library_2
+ library_1 dart:core synthetic
unlinkedKey: k02
unlinkedGet: []
unlinkedPut: [k02]
- uri: package:dart.test/c.dart
libraryCycles
/workspace/dart/test/lib/a.dart
current
@@ -104,29 +116,39 @@
assertStateString(r'''
files
/workspace/dart/test/lib/a.dart
+ uri: package:dart.test/a.dart
current
id: file_0
- kind: library
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_2, file_2]
unlinkedKey: k00
unlinkedGet: []
unlinkedPut: [k00]
- uri: package:dart.test/a.dart
/workspace/dart/test/lib/b.dart
+ uri: package:dart.test/b.dart
current
id: file_1
- kind: library
+ kind: library_2
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_2, file_2]
unlinkedKey: k01
unlinkedGet: []
unlinkedPut: [k01]
- uri: package:dart.test/b.dart
/workspace/dart/test/lib/c.dart
+ uri: package:dart.test/c.dart
current
id: file_2
- kind: library
+ kind: library_3
+ imports
+ library_0
+ library_2
+ library_1 dart:core synthetic
unlinkedKey: k02
unlinkedGet: []
unlinkedPut: [k02]
- uri: package:dart.test/c.dart
libraryCycles
/workspace/dart/test/lib/a.dart
current
@@ -160,29 +182,39 @@
assertStateString(r'''
files
/workspace/dart/test/lib/a.dart
+ uri: package:dart.test/a.dart
current
id: file_0
- kind: library
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_2, file_2]
unlinkedKey: k00
unlinkedGet: []
unlinkedPut: [k00]
- uri: package:dart.test/a.dart
/workspace/dart/test/lib/b.dart
+ uri: package:dart.test/b.dart
current
id: file_1
- kind: library
+ kind: library_2
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_2, file_2]
unlinkedKey: k01
unlinkedGet: []
unlinkedPut: [k01]
- uri: package:dart.test/b.dart
/workspace/dart/test/lib/c.dart
+ uri: package:dart.test/c.dart
current
id: file_2
- kind: library
+ kind: library_3
+ imports
+ library_0
+ library_2
+ library_1 dart:core synthetic
unlinkedKey: k02
unlinkedGet: []
unlinkedPut: [k02]
- uri: package:dart.test/c.dart
libraryCycles
/workspace/dart/test/lib/a.dart
current
@@ -216,21 +248,24 @@
assertStateString(r'''
files
/workspace/dart/test/lib/a.dart
+ uri: package:dart.test/a.dart
unlinkedGet: []
unlinkedPut: [k00]
- uri: package:dart.test/a.dart
/workspace/dart/test/lib/b.dart
+ uri: package:dart.test/b.dart
current
id: file_1
- kind: library
+ kind: library_2
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_2]
unlinkedKey: k01
unlinkedGet: []
unlinkedPut: [k01]
- uri: package:dart.test/b.dart
/workspace/dart/test/lib/c.dart
+ uri: package:dart.test/c.dart
unlinkedGet: []
unlinkedPut: [k02]
- uri: package:dart.test/c.dart
libraryCycles
/workspace/dart/test/lib/a.dart
get: []
@@ -256,29 +291,39 @@
assertStateString(r'''
files
/workspace/dart/test/lib/a.dart
+ uri: package:dart.test/a.dart
current
id: file_3
- kind: library
+ kind: library_4
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_4, file_4]
unlinkedKey: k00
unlinkedGet: []
unlinkedPut: [k00, k00]
- uri: package:dart.test/a.dart
/workspace/dart/test/lib/b.dart
+ uri: package:dart.test/b.dart
current
id: file_1
- kind: library
+ kind: library_2
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_2, file_4, file_4]
unlinkedKey: k01
unlinkedGet: []
unlinkedPut: [k01]
- uri: package:dart.test/b.dart
/workspace/dart/test/lib/c.dart
+ uri: package:dart.test/c.dart
current
id: file_4
- kind: library
+ kind: library_5
+ imports
+ library_4
+ library_2
+ library_1 dart:core synthetic
unlinkedKey: k02
unlinkedGet: []
unlinkedPut: [k02, k02]
- uri: package:dart.test/c.dart
libraryCycles
/workspace/dart/test/lib/a.dart
current
@@ -427,22 +472,26 @@
assertStateString(r'''
files
/workspace/dart/test/lib/a.dart
+ uri: package:dart.test/a.dart
current
id: file_0
- kind: library
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ parts: file_1
unlinkedKey: k00
unlinkedGet: []
unlinkedPut: [k00]
- uri: package:dart.test/a.dart
/workspace/dart/test/lib/b.dart
+ uri: package:dart.test/b.dart
current
id: file_1
- kind: partOfUriKnown
- library: file_0
+ kind: partOfUriKnown_2
+ library: library_0
+ referencingFiles: [file_0]
unlinkedKey: k01
unlinkedGet: []
unlinkedPut: [k01]
- uri: package:dart.test/b.dart
libraryCycles
/workspace/dart/test/lib/a.dart
current
@@ -462,13 +511,13 @@
assertStateString(r'''
files
/workspace/dart/test/lib/a.dart
+ uri: package:dart.test/a.dart
unlinkedGet: []
unlinkedPut: [k00]
- uri: package:dart.test/a.dart
/workspace/dart/test/lib/b.dart
+ uri: package:dart.test/b.dart
unlinkedGet: []
unlinkedPut: [k01]
- uri: package:dart.test/b.dart
libraryCycles
/workspace/dart/test/lib/a.dart
get: []
@@ -483,22 +532,26 @@
assertStateString(r'''
files
/workspace/dart/test/lib/a.dart
+ uri: package:dart.test/a.dart
current
id: file_2
- kind: library
+ kind: library_3
+ imports
+ library_1 dart:core synthetic
+ parts: file_3
unlinkedKey: k00
unlinkedGet: []
unlinkedPut: [k00, k00]
- uri: package:dart.test/a.dart
/workspace/dart/test/lib/b.dart
+ uri: package:dart.test/b.dart
current
id: file_3
- kind: partOfUriKnown
- library: file_2
+ kind: partOfUriKnown_4
+ library: library_3
+ referencingFiles: [file_2]
unlinkedKey: k01
unlinkedGet: []
unlinkedPut: [k01, k01]
- uri: package:dart.test/b.dart
libraryCycles
/workspace/dart/test/lib/a.dart
current
@@ -535,30 +588,38 @@
assertStateString(r'''
files
/workspace/dart/test/lib/a.dart
+ uri: package:dart.test/a.dart
current
id: file_0
- kind: library
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ parts: file_1
+ referencingFiles: [file_2, file_2]
unlinkedKey: k00
unlinkedGet: []
unlinkedPut: [k00]
- uri: package:dart.test/a.dart
/workspace/dart/test/lib/b.dart
+ uri: package:dart.test/b.dart
current
id: file_1
- kind: partOfUriKnown
- library: file_0
+ kind: partOfUriKnown_2
+ library: library_0
+ referencingFiles: [file_0]
unlinkedKey: k01
unlinkedGet: []
unlinkedPut: [k01]
- uri: package:dart.test/b.dart
/workspace/dart/test/lib/c.dart
+ uri: package:dart.test/c.dart
current
id: file_2
- kind: library
+ kind: library_3
+ imports
+ library_0
+ library_1 dart:core synthetic
unlinkedKey: k02
unlinkedGet: []
unlinkedPut: [k02]
- uri: package:dart.test/c.dart
libraryCycles
/workspace/dart/test/lib/a.dart
current
@@ -585,17 +646,17 @@
assertStateString(r'''
files
/workspace/dart/test/lib/a.dart
+ uri: package:dart.test/a.dart
unlinkedGet: []
unlinkedPut: [k00]
- uri: package:dart.test/a.dart
/workspace/dart/test/lib/b.dart
+ uri: package:dart.test/b.dart
unlinkedGet: []
unlinkedPut: [k01]
- uri: package:dart.test/b.dart
/workspace/dart/test/lib/c.dart
+ uri: package:dart.test/c.dart
unlinkedGet: []
unlinkedPut: [k02]
- uri: package:dart.test/c.dart
libraryCycles
/workspace/dart/test/lib/a.dart
get: []
@@ -613,30 +674,38 @@
assertStateString(r'''
files
/workspace/dart/test/lib/a.dart
+ uri: package:dart.test/a.dart
current
id: file_3
- kind: library
+ kind: library_4
+ imports
+ library_1 dart:core synthetic
+ parts: file_4
+ referencingFiles: [file_5, file_5]
unlinkedKey: k00
unlinkedGet: []
unlinkedPut: [k00, k00]
- uri: package:dart.test/a.dart
/workspace/dart/test/lib/b.dart
+ uri: package:dart.test/b.dart
current
id: file_4
- kind: partOfUriKnown
- library: file_3
+ kind: partOfUriKnown_5
+ library: library_4
+ referencingFiles: [file_3]
unlinkedKey: k01
unlinkedGet: []
unlinkedPut: [k01, k01]
- uri: package:dart.test/b.dart
/workspace/dart/test/lib/c.dart
+ uri: package:dart.test/c.dart
current
id: file_5
- kind: library
+ kind: library_6
+ imports
+ library_4
+ library_1 dart:core synthetic
unlinkedKey: k02
unlinkedGet: []
unlinkedPut: [k02, k02]
- uri: package:dart.test/c.dart
libraryCycles
/workspace/dart/test/lib/a.dart
current
@@ -780,13 +849,15 @@
assertStateString(r'''
files
/workspace/dart/test/lib/a.dart
+ uri: package:dart.test/a.dart
current
id: file_0
- kind: library
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
unlinkedKey: k00
unlinkedGet: []
unlinkedPut: [k00]
- uri: package:dart.test/a.dart
libraryCycles
/workspace/dart/test/lib/a.dart
current
@@ -808,9 +879,9 @@
assertStateString(r'''
files
/workspace/dart/test/lib/a.dart
+ uri: package:dart.test/a.dart
unlinkedGet: []
unlinkedPut: [k00]
- uri: package:dart.test/a.dart
libraryCycles
/workspace/dart/test/lib/a.dart
get: []
@@ -1317,13 +1388,15 @@
assertStateString(r'''
files
/workspace/dart/test/lib/a.dart
+ uri: package:dart.test/a.dart
current
id: file_0
- kind: library
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
unlinkedKey: k00
unlinkedGet: []
unlinkedPut: [k00]
- uri: package:dart.test/a.dart
libraryCycles
/workspace/dart/test/lib/a.dart
current
@@ -1344,13 +1417,15 @@
assertStateString(r'''
files
/workspace/dart/test/lib/a.dart
+ uri: package:dart.test/a.dart
current
id: file_0
- kind: library
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
unlinkedKey: k00
unlinkedGet: []
unlinkedPut: [k00]
- uri: package:dart.test/a.dart
libraryCycles
/workspace/dart/test/lib/a.dart
current
@@ -1375,21 +1450,27 @@
assertStateString(r'''
files
/workspace/dart/test/lib/a.dart
+ uri: package:dart.test/a.dart
current
id: file_0
- kind: library
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_1, file_1]
unlinkedKey: k00
unlinkedGet: []
unlinkedPut: [k00]
- uri: package:dart.test/a.dart
/workspace/dart/test/lib/b.dart
+ uri: package:dart.test/b.dart
current
id: file_1
- kind: library
+ kind: library_2
+ imports
+ library_0
+ library_1 dart:core synthetic
unlinkedKey: k08
unlinkedGet: []
unlinkedPut: [k08]
- uri: package:dart.test/b.dart
libraryCycles
/workspace/dart/test/lib/a.dart
current
@@ -1426,21 +1507,27 @@
assertStateString(r'''
files
/workspace/dart/test/lib/a.dart
+ uri: package:dart.test/a.dart
current
id: file_0
- kind: library
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_1, file_1]
unlinkedKey: k00
unlinkedGet: []
unlinkedPut: [k00]
- uri: package:dart.test/a.dart
/workspace/dart/test/lib/b.dart
+ uri: package:dart.test/b.dart
current
id: file_1
- kind: library
+ kind: library_2
+ imports
+ library_0
+ library_1 dart:core synthetic
unlinkedKey: k08
unlinkedGet: []
unlinkedPut: [k08]
- uri: package:dart.test/b.dart
libraryCycles
/workspace/dart/test/lib/a.dart
current
@@ -1481,13 +1568,15 @@
assertStateString(r'''
files
/workspace/dart/test/lib/test.dart
+ uri: package:dart.test/test.dart
current
id: file_0
- kind: library
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
unlinkedKey: k00
unlinkedGet: []
unlinkedPut: [k00]
- uri: package:dart.test/test.dart
libraryCycles
/workspace/dart/test/lib/test.dart
current
@@ -1514,13 +1603,15 @@
assertStateString(r'''
files
/workspace/dart/test/lib/test.dart
+ uri: package:dart.test/test.dart
current
id: file_0
- kind: library
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
unlinkedKey: k00
unlinkedGet: []
unlinkedPut: [k00]
- uri: package:dart.test/test.dart
libraryCycles
/workspace/dart/test/lib/test.dart
current
@@ -1652,29 +1743,38 @@
assertStateString(r'''
files
/workspace/dart/aaa/lib/a.dart
+ uri: package:dart.aaa/a.dart
current
id: file_0
- kind: library
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_1, file_1, file_2, file_2]
unlinkedKey: k00
unlinkedGet: []
unlinkedPut: [k00]
- uri: package:dart.aaa/a.dart
/workspace/dart/aaa/lib/b.dart
+ uri: package:dart.aaa/b.dart
current
id: file_1
- kind: library
+ kind: library_2
+ imports
+ library_0
+ library_1 dart:core synthetic
unlinkedKey: k01
unlinkedGet: []
unlinkedPut: [k01]
- uri: package:dart.aaa/b.dart
/workspace/dart/aaa/lib/c.dart
+ uri: package:dart.aaa/c.dart
current
id: file_2
- kind: library
+ kind: library_3
+ imports
+ library_0
+ library_1 dart:core synthetic
unlinkedKey: k02
unlinkedGet: []
unlinkedPut: [k02]
- uri: package:dart.aaa/c.dart
libraryCycles
/workspace/dart/aaa/lib/a.dart
current
@@ -1709,25 +1809,31 @@
assertStateString(r'''
files
/workspace/dart/aaa/lib/a.dart
+ uri: package:dart.aaa/a.dart
current
id: file_0
- kind: library
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_1, file_1, file_2, file_2]
unlinkedKey: k00
unlinkedGet: []
unlinkedPut: [k00]
- uri: package:dart.aaa/a.dart
/workspace/dart/aaa/lib/b.dart
+ uri: package:dart.aaa/b.dart
unlinkedGet: []
unlinkedPut: [k01]
- uri: package:dart.aaa/b.dart
/workspace/dart/aaa/lib/c.dart
+ uri: package:dart.aaa/c.dart
current
id: file_2
- kind: library
+ kind: library_3
+ imports
+ library_0
+ library_1 dart:core synthetic
unlinkedKey: k02
unlinkedGet: []
unlinkedPut: [k02]
- uri: package:dart.aaa/c.dart
libraryCycles
/workspace/dart/aaa/lib/a.dart
current
@@ -1785,53 +1891,72 @@
assertStateString(r'''
files
/workspace/dart/aaa/lib/a.dart
+ uri: package:dart.aaa/a.dart
current
id: file_0
- kind: library
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_3, file_3, file_4, file_4]
unlinkedKey: k00
unlinkedGet: []
unlinkedPut: [k00]
- uri: package:dart.aaa/a.dart
/workspace/dart/aaa/lib/b.dart
+ uri: package:dart.aaa/b.dart
current
id: file_1
- kind: library
+ kind: library_2
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_4, file_4]
unlinkedKey: k01
unlinkedGet: []
unlinkedPut: [k01]
- uri: package:dart.aaa/b.dart
/workspace/dart/aaa/lib/c.dart
+ uri: package:dart.aaa/c.dart
current
id: file_2
- kind: library
+ kind: library_3
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_5, file_5]
unlinkedKey: k02
unlinkedGet: []
unlinkedPut: [k02]
- uri: package:dart.aaa/c.dart
/workspace/dart/aaa/lib/d.dart
+ uri: package:dart.aaa/d.dart
current
id: file_3
- kind: library
+ kind: library_4
+ imports
+ library_0
+ library_1 dart:core synthetic
unlinkedKey: k03
unlinkedGet: []
unlinkedPut: [k03]
- uri: package:dart.aaa/d.dart
/workspace/dart/aaa/lib/e.dart
+ uri: package:dart.aaa/e.dart
current
id: file_4
- kind: library
+ kind: library_5
+ imports
+ library_0
+ library_2
+ library_1 dart:core synthetic
unlinkedKey: k04
unlinkedGet: []
unlinkedPut: [k04]
- uri: package:dart.aaa/e.dart
/workspace/dart/aaa/lib/f.dart
+ uri: package:dart.aaa/f.dart
current
id: file_5
- kind: library
+ kind: library_6
+ imports
+ library_3
+ library_1 dart:core synthetic
unlinkedKey: k05
unlinkedGet: []
unlinkedPut: [k05]
- uri: package:dart.aaa/f.dart
libraryCycles
/workspace/dart/aaa/lib/a.dart
current
@@ -1886,45 +2011,57 @@
assertStateString(r'''
files
/workspace/dart/aaa/lib/a.dart
+ uri: package:dart.aaa/a.dart
current
id: file_0
- kind: library
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_3, file_3, file_4, file_4]
unlinkedKey: k00
unlinkedGet: []
unlinkedPut: [k00]
- uri: package:dart.aaa/a.dart
/workspace/dart/aaa/lib/b.dart
+ uri: package:dart.aaa/b.dart
unlinkedGet: []
unlinkedPut: [k01]
- uri: package:dart.aaa/b.dart
/workspace/dart/aaa/lib/c.dart
+ uri: package:dart.aaa/c.dart
current
id: file_2
- kind: library
+ kind: library_3
+ imports
+ library_1 dart:core synthetic
+ referencingFiles: [file_5, file_5]
unlinkedKey: k02
unlinkedGet: []
unlinkedPut: [k02]
- uri: package:dart.aaa/c.dart
/workspace/dart/aaa/lib/d.dart
+ uri: package:dart.aaa/d.dart
current
id: file_3
- kind: library
+ kind: library_4
+ imports
+ library_0
+ library_1 dart:core synthetic
unlinkedKey: k03
unlinkedGet: []
unlinkedPut: [k03]
- uri: package:dart.aaa/d.dart
/workspace/dart/aaa/lib/e.dart
+ uri: package:dart.aaa/e.dart
unlinkedGet: []
unlinkedPut: [k04]
- uri: package:dart.aaa/e.dart
/workspace/dart/aaa/lib/f.dart
+ uri: package:dart.aaa/f.dart
current
id: file_5
- kind: library
+ kind: library_6
+ imports
+ library_3
+ library_1 dart:core synthetic
unlinkedKey: k05
unlinkedGet: []
unlinkedPut: [k05]
- uri: package:dart.aaa/f.dart
libraryCycles
/workspace/dart/aaa/lib/a.dart
current
@@ -1981,13 +2118,15 @@
assertStateString(r'''
files
/workspace/dart/aaa/lib/a.dart
+ uri: package:dart.aaa/a.dart
current
id: file_0
- kind: library
+ kind: library_0
+ imports
+ library_1 dart:core synthetic
unlinkedKey: k00
unlinkedGet: []
unlinkedPut: [k00]
- uri: package:dart.aaa/a.dart
libraryCycles
/workspace/dart/aaa/lib/a.dart
current
diff --git a/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart b/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart
index a32ceaf..dbd3c0e 100644
--- a/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart
+++ b/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart
@@ -32,6 +32,7 @@
import '../../summary/macros_environment.dart';
import '../analysis/analyzer_state_printer.dart';
import 'context_collection_resolution_caching.dart';
+import 'node_text_expectations.dart';
import 'resolution.dart';
export 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
@@ -138,6 +139,8 @@
/// Optional summaries to provide for the collection.
List<File>? librarySummaryFiles;
+ final FileStateKindIdProvider _fileStateKindIdProvider =
+ FileStateKindIdProvider();
final FileStateIdProvider _fileStateIdProvider = FileStateIdProvider();
final KeyShorter _keyShorter = KeyShorter();
@@ -177,17 +180,20 @@
final buffer = StringBuffer();
AnalyzerStatePrinter(
byteStore: _byteStore,
+ fileStateKindIdProvider: _fileStateKindIdProvider,
fileStateIdProvider: _fileStateIdProvider,
keyShorter: _keyShorter,
libraryContext: analysisDriver.libraryContext,
omitSdkFiles: omitSdkFiles,
resourceProvider: resourceProvider,
sink: buffer,
+ withKeysGetPut: false,
).writeAnalysisDriver(analysisDriver.testView!);
final actual = buffer.toString();
if (actual != expected) {
print(actual);
+ NodeTextExpectationsCollector.add(actual);
}
expect(actual, expected);
}
diff --git a/pkg/analyzer/test/src/dart/resolution/node_text_expectations.dart b/pkg/analyzer/test/src/dart/resolution/node_text_expectations.dart
index d528bce..8891963 100644
--- a/pkg/analyzer/test/src/dart/resolution/node_text_expectations.dart
+++ b/pkg/analyzer/test/src/dart/resolution/node_text_expectations.dart
@@ -12,6 +12,7 @@
static const updatingIsEnabled = false;
static const assertMethods = {
+ 'ContextResolutionTest.assertDriverStateString',
'FileResolutionTest.assertStateString',
'ResolutionTest.assertResolvedNodeText',
};
diff --git a/tools/VERSION b/tools/VERSION
index f2b2239..7fe1fe7 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 18
PATCH 0
-PRERELEASE 229
+PRERELEASE 230
PRERELEASE_PATCH 0
\ No newline at end of file