Dart 2 fixes (#113)
Fixes https://github.com/google/file.dart/issues/88
diff --git a/packages/file/CHANGELOG.md b/packages/file/CHANGELOG.md
index 0537523..b6749b7 100644
--- a/packages/file/CHANGELOG.md
+++ b/packages/file/CHANGELOG.md
@@ -1,3 +1,7 @@
+#### 5.0.5
+
+* Dart 2 fixes
+
#### 5.0.4
* Update SDK constraint to 2.0.0-dev.67.0, remove workaround in
diff --git a/packages/file/lib/src/backends/record_replay/codecs.dart b/packages/file/lib/src/backends/record_replay/codecs.dart
index 651be60..67236e7 100644
--- a/packages/file/lib/src/backends/record_replay/codecs.dart
+++ b/packages/file/lib/src/backends/record_replay/codecs.dart
@@ -549,6 +549,17 @@
List<T> convert(List<S> input) => input.map(_delegate.convert).toList();
}
+/// Converts a `List<S>` into a `List<T>` by casting it to the appropriate
+/// type. The list must contain only elements of type `T`, or a runtime error
+/// will be thrown.
+class CastList<S, T> extends Converter<List<S>, List<T>> {
+ /// Creates a new [CastList].
+ const CastList();
+
+ @override
+ List<T> convert(List<S> input) => input.cast<T>();
+}
+
/// Converts a [List] of elements into a [Stream] of the same elements.
class ToStream<T> extends Converter<List<T>, Stream<T>> {
/// Creates a new [ToStream].
diff --git a/packages/file/lib/src/backends/record_replay/replay_directory.dart b/packages/file/lib/src/backends/record_replay/replay_directory.dart
index d444e8a..74473f5 100644
--- a/packages/file/lib/src/backends/record_replay/replay_directory.dart
+++ b/packages/file/lib/src/backends/record_replay/replay_directory.dart
@@ -23,9 +23,12 @@
reviveDirectory.fuse(const ToFuture<Directory>());
Converter<String, FileSystemEntity> reviveEntity =
new ReviveFileSystemEntity(fileSystem);
- Converter<List<String>, List<FileSystemEntity>> reviveEntities =
- new ConvertElements<String, FileSystemEntity>(reviveEntity);
- Converter<List<String>, Stream<FileSystemEntity>> reviveEntitiesAsStream =
+ Converter<List<dynamic>, List<String>> dynamicToString =
+ const CastList<dynamic, String>();
+ Converter<List<dynamic>, List<FileSystemEntity>> reviveEntities =
+ dynamicToString.fuse<List<FileSystemEntity>>(
+ new ConvertElements<String, FileSystemEntity>(reviveEntity));
+ Converter<List<dynamic>, Stream<FileSystemEntity>> reviveEntitiesAsStream =
reviveEntities
.fuse<Stream<FileSystemEntity>>(const ToStream<FileSystemEntity>());
diff --git a/packages/file/pubspec.yaml b/packages/file/pubspec.yaml
index 2082c4d..3a9de9d 100644
--- a/packages/file/pubspec.yaml
+++ b/packages/file/pubspec.yaml
@@ -1,5 +1,5 @@
name: file
-version: 5.0.4
+version: 5.0.5
authors:
- Matan Lurey <matanl@google.com>
- Yegor Jbanov <yjbanov@google.com>
diff --git a/packages/file/test/recording_test.dart b/packages/file/test/recording_test.dart
index d485cfa..03286fe 100644
--- a/packages/file/test/recording_test.dart
+++ b/packages/file/test/recording_test.dart
@@ -545,7 +545,7 @@
recording.events,
contains(invokesMethod('create')
.on(isDirectory)
- .withNoNamedArguments()
+ .withNamedArgument('recursive', false)
.withResult(isDirectory)));
});
@@ -555,7 +555,7 @@
recording.events,
contains(invokesMethod('createSync')
.on(isDirectory)
- .withNoNamedArguments()
+ .withNamedArgument('recursive', false)
.withResult(isNull)));
});
@@ -569,7 +569,8 @@
recording.events,
contains(invokesMethod('list')
.on(isDirectory)
- .withNoNamedArguments()
+ .withNamedArgument('recursive', false)
+ .withNamedArgument('followLinks', true)
.withResult(hasLength(3))),
);
});
@@ -612,7 +613,7 @@
recording.events,
contains(invokesMethod('openRead')
.on(isFile)
- .withPositionalArguments(isEmpty)
+ .withPositionalArguments([null, null])
.withNoNamedArguments()
.withResult(isList)));
await recording.flush();
@@ -624,7 +625,7 @@
containsPair('type', 'invoke'),
containsPair('method', 'openRead'),
containsPair('object', matches(r'^RecordingFile@[0-9]+$')),
- containsPair('positionalArguments', isEmpty),
+ containsPair('positionalArguments', [null, null]),
containsPair('namedArguments', isEmpty),
containsPair('result', matches(r'^![0-9]+.foo$')),
));
@@ -769,7 +770,7 @@
recording.events,
contains(invokesMethod('readAsLines')
.on(isFile)
- .withNoNamedArguments()
+ .withNamedArgument('encoding', utf8)
.withResult(<String>['Hello', 'World'])));
await recording.flush();
List<Map<String, dynamic>> manifest = _loadManifest(recording);
@@ -782,7 +783,7 @@
containsPair('object', matches(r'^RecordingFile@[0-9]+$')),
containsPair('positionalArguments', isEmpty),
containsPair('result', matches(r'^![0-9]+.foo$')),
- containsPair('namedArguments', isEmpty),
+ containsPair('namedArguments', {'encoding': 'utf-8'}),
));
File file = _getRecordingFile(recording, manifest[1]['result']);
expect(file, exists);
@@ -797,7 +798,7 @@
recording.events,
contains(invokesMethod('readAsLinesSync')
.on(isFile)
- .withNoNamedArguments()
+ .withNamedArgument('encoding', utf8)
.withResult(<String>['Hello', 'World'])));
await recording.flush();
List<Map<String, dynamic>> manifest = _loadManifest(recording);
@@ -810,7 +811,7 @@
containsPair('object', matches(r'^RecordingFile@[0-9]+$')),
containsPair('positionalArguments', isEmpty),
containsPair('result', matches(r'^![0-9]+.foo$')),
- containsPair('namedArguments', isEmpty),
+ containsPair('namedArguments', {'encoding': 'utf-8'}),
));
File file = _getRecordingFile(recording, manifest[1]['result']);
expect(file, exists);