Add ResultReference<T> to record_replay library. (#18)

This introduces a level of indirection that will allow
recording objects to differentiate between the invocation
result return value, the recorded result value, and the
serialized result value.

This is used to provide "special handling" of certain
invocation results (such as byte arrays) to make recordings
more human-readable & editable.

This design also yields more technical correctness over
the previous design. This is because we used to delay
recording an invocation whose result was a Future until
that future completed. Now, we record the invocation
immediately and late-record future results (with support
for awaiting those futures when serializing a recoridng).

Another step in #11
9 files changed
tree: 9bc222ed125ed32524ff46236595591e314a80ee
  1. contrib/
  2. lib/
  3. test/
  4. tool/
  5. .analysis_options
  6. .gitignore
  7. .travis.yml
  8. CHANGELOG.md
  9. LICENSE
  10. pubspec.yaml
  11. README.md
README.md

Build Status Coverage Status

File

A generic file system abstraction for Dart.

Like dart:io, package:file supplies a rich Dart-idiomatic API for accessing a file system.

Unlike dart:io, package:file:

  • Can be used to implement custom file systems.
  • Comes with an in-memory implementation out-of-the-box, making it super-easy to test code that works with the file system.
  • Allows using multiple file systems simultaneously. A file system is a first-class object. Instantiate however many you want and use them all.

Usage

Implement your own custom file system:

import 'package:file/file.dart';

class FooBarFileSystem implements FileSystem { ... }

Use the in-memory file system:

import 'package:file/memory.dart';

var fs = new MemoryFileSystem();

Use the local file system (requires dart:io access):

import 'package:file/local.dart';

var fs = const LocalFileSystem();