Chromium Code Reviews| Index: pkg/front_end/lib/src/testing/hybrid_file_system.dart |
| diff --git a/pkg/front_end/lib/src/testing/hybrid_file_system.dart b/pkg/front_end/lib/src/testing/hybrid_file_system.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..e69d61d4dde2257e30691116ca9454862f693968 |
| --- /dev/null |
| +++ b/pkg/front_end/lib/src/testing/hybrid_file_system.dart |
| @@ -0,0 +1,55 @@ |
| +// 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. |
| + |
| +/// A memory + physical file system used to mock input for tests but provide |
| +/// sdk sources from disk. |
| +library front_end.src.hybrid_file_system; |
|
Siggi Cherem (dart-lang)
2017/06/06 22:22:29
FYI - this code is the same as before (moved from
ahe
2017/06/07 10:28:59
If this is used or intended for anything else but
|
| + |
| +import 'dart:async'; |
| + |
| +import 'package:front_end/file_system.dart'; |
| +import 'package:front_end/memory_file_system.dart'; |
| +import 'package:front_end/physical_file_system.dart'; |
| + |
| +/// A file system that mixes files from memory and a physical file system. All |
| +/// memory entities take priotity over file system entities. |
| +class HybridFileSystem implements FileSystem { |
| + final MemoryFileSystem memory; |
| + final PhysicalFileSystem physical = PhysicalFileSystem.instance; |
| + |
| + HybridFileSystem(this.memory); |
| + |
| + @override |
| + FileSystemEntity entityForUri(Uri uri) => new HybridFileSystemEntity( |
| + memory.entityForUri(uri), physical.entityForUri(uri)); |
| +} |
| + |
| +/// Entity that delegates to an underlying memory or phisical file system |
| +/// entity. |
| +class HybridFileSystemEntity implements FileSystemEntity { |
| + final FileSystemEntity memory; |
| + final FileSystemEntity physical; |
| + |
| + HybridFileSystemEntity(this.memory, this.physical); |
| + |
| + FileSystemEntity _delegate; |
| + Future<FileSystemEntity> get delegate async { |
| + return _delegate ??= (await memory.exists()) ? memory : physical; |
| + } |
| + |
| + @override |
| + Uri get uri => memory.uri; |
| + |
| + @override |
| + Future<bool> exists() async => (await delegate).exists(); |
| + |
| + @override |
| + Future<DateTime> lastModified() async => (await delegate).lastModified(); |
| + |
| + @override |
| + Future<List<int>> readAsBytes() async => (await delegate).readAsBytes(); |
| + |
| + @override |
| + Future<String> readAsString() async => (await delegate).readAsString(); |
| +} |