Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(795)

Unified Diff: pkg/scheduled_test/lib/descriptor.dart

Issue 12330062: Add a filesystem descriptor library to scheduled_test. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Code review changes Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | pkg/scheduled_test/lib/src/descriptor/directory.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/scheduled_test/lib/descriptor.dart
diff --git a/pkg/scheduled_test/lib/descriptor.dart b/pkg/scheduled_test/lib/descriptor.dart
new file mode 100644
index 0000000000000000000000000000000000000000..107390fdc8659052aa8eeb97545b8ccd7a2ca755
--- /dev/null
+++ b/pkg/scheduled_test/lib/descriptor.dart
@@ -0,0 +1,98 @@
+// Copyright (c) 2013, 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 library for declaratively describing a filesystem structure, usually for
+/// the purpose of creating or validating it as part of a scheduled test.
+///
+/// You can use [dir] and [file] to define a filesystem structure. Then, you can
+/// call [Entry.create] to schedule a task that will create that structure on
+/// the physical filesystem, or [Entry.validate] to schedule an assertion that
+/// that structure exists. For example:
+///
+/// import 'package:scheduled_test/descriptor.dart' as d;
+/// import 'package:scheduled_test/scheduled_test.dart';
+///
+/// void main() {
+/// test('Directory.rename', () {
+/// d.dir('parent', [
+/// d.file('sibling', 'sibling-contents'),
+/// d.dir('old-name', [
+/// d.file('child', 'child-contents')
+/// ])
+/// ]).create();
+///
+/// schedule(() =>
+/// new Directory('parent/old-name').rename('parent/new-name'));
+///
+/// d.dir('parent', [
+/// d.file('sibling', 'sibling-contents'),
+/// d.dir('new-name', [
+/// d.file('child', 'child-contents')
+/// ])
+/// ]).validate();
+/// })
+/// }
+///
+/// Usually you don't want your tests cluttering up your working directory with
+/// fake filesystem entities. You can set [defaultRoot] to configure where
+/// filesystem descriptors are rooted on the physical filesystem. For example,
+/// to create a temporary directory for each test:
+///
+/// import 'package:scheduled_test/descriptor.dart' as d;
+/// import 'package:scheduled_test/scheduled_test.dart';
+///
+/// void main() {
+/// setUp(() {
+/// var tempDir;
+/// schedule(() {
+/// return new Directory('').createTemp().then((dir) {
+/// tempDir = dir;
+/// d.defaultRoot = tempDir.path;
+/// });
+/// });
+///
+/// currentSchedule.onComplete.schedule(() {
+/// d.defaultRoot = null;
+/// return tempDir.delete(recursive: true);
+/// });
+/// });
+///
+/// // ...
+/// }
+library descriptor;
+
+import 'dart:async';
+
+import 'package:pathos/path.dart' as path;
+
+import 'scheduled_test.dart';
+import 'src/descriptor/directory.dart';
+import 'src/descriptor/entry.dart';
+import 'src/descriptor/file.dart';
+
+export 'src/descriptor/directory.dart';
+export 'src/descriptor/entry.dart';
+export 'src/descriptor/file.dart';
+
+/// The root path for descriptors. Top-level descriptors will be created and
+/// validated at this path. Defaults to the current working directory.
+///
+/// If this is set to `null`, it will reset itself to the current working
+/// directory.
+String get defaultRoot => _defaultRoot == null ? path.current : _defaultRoot;
+set defaultRoot(String value) {
+ _defaultRoot = value;
+}
+String _defaultRoot;
+
+/// Creates a new text [File] descriptor with [name] and [contents].
+File file(Pattern name, [String contents='']) => new File(name, contents);
+
+/// Creates a new binary [File] descriptor with [name] and [contents].
+File binaryFile(Pattern name, List<int> contents) =>
+ new File.binary(name, contents);
+
+/// Creates a new [Directory] descriptor with [name] and [contents].
+Directory dir(Pattern name, [Iterable<Entry> contents]) =>
+ new Directory(name, contents == null ? <Entry>[] : contents);
« no previous file with comments | « no previous file | pkg/scheduled_test/lib/src/descriptor/directory.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698