blob: 2d264e5a48ae73cee548c63e005592cdcee7f7b0 [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,
});
properties.addAll(<Symbol, Converter<dynamic, dynamic>>{
#absolute: reviveDirectory,
});
}
}