blob: b6130beabbad00ff8c8fc60f04ff462d5f477b44 [file] [log] [blame]
// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:async';
import 'dart:convert';
import 'package:file/file.dart';
import 'codecs.dart';
import 'replay_file_system.dart';
import 'replay_file_system_entity.dart';
/// [Directory] implementation that replays all invocation activity from a
/// prior recording.
class ReplayDirectory extends ReplayFileSystemEntity implements Directory {
/// Creates a new `ReplayDirectory`.
ReplayDirectory(ReplayFileSystemImpl fileSystem, String identifier)
: super(fileSystem, identifier) {
Converter<String, Directory> reviveDirectory =
new ReviveDirectory(fileSystem);
Converter<String, Future<Directory>> reviveFutureDirectory =
reviveDirectory.fuse(const ToFuture<Directory>());
Converter<String, FileSystemEntity> reviveEntity =
new ReviveFileSystemEntity(fileSystem);
Converter<List<String>, List<FileSystemEntity>> reviveEntities =
new ConvertElements<String, FileSystemEntity>(reviveEntity);
methods.addAll(<Symbol, Converter<dynamic, dynamic>>{
#rename: reviveFutureDirectory,
#renameSync: reviveDirectory,
#delete: reviveFutureDirectory,
#create: reviveFutureDirectory,
#createSync: const Passthrough<Null>(),
#createTemp: reviveFutureDirectory,
#createTempSync: reviveDirectory,
#list: reviveEntities.fuse(const ToStream<FileSystemEntity>()),
#listSync: reviveEntities,
#childDirectory: reviveDirectory,
#childFile: new ReviveFile(fileSystem),
#childLink: new ReviveLink(fileSystem),
});
properties.addAll(<Symbol, Converter<dynamic, dynamic>>{
#absolute: reviveDirectory,
});
}
}