Test LocalFileSystem without using ChrootFileSystem (#23)

While the original intent of ChrootFileSystem was inspired by the
idea that we could use it to test LocalFileSystem (chroot'ed to a
tmp folder), it turns out that ChrootFileSystem adds too much
abstraction and gets in the way of actually testing LocalFileSystem.

ChrootFileSystem is still valuable in its own right, but this change
updates local_test.dart to test LocalFileSystem without the need
for ChrootFileSystem, by factoring common_tests.dart to accept a
root folder argument and do all its work in that folder.
2 files changed
tree: ee68d5456e0dbe8d167d751d786f47e9de53c3ea
  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.

This package is currently experimental and subject to change

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

Unlike dart:io, package:file:

  • Does not mix synchronous and asynchronous API in one. It is up to users to choose one, the other, or both.
  • Has explicit factory classes for different implementations.
  • Can be used to implement custom file systems.
  • Comes with 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/file.dart';

var fs = new InMemoryFileSystem();

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

import 'package:file/io.dart';

var fs = const LocalFileSystem();

The synchronous counterparts can be imported from:

// API and in-memory implementation
import `package:file/sync.dart`;
// Implementation based on "dart:io"
import `package:file/sync_io.dart`;