Deprecate the package. (#37)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 40bfbdb..96e5e7d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,11 +1,16 @@
+## 0.12.11+1
+
+* **This package is now deprecated** and will not be maintained going forward.
+  See [the README][] for details.
+
+[the README]: https://pub.dartlang.org/packages/scheduled_test
+
 ## 0.12.11
 
 * Fix most strong mode errors and warnings.
 * Support `test` version `0.12.20`
 * Minimum Dart SDK version is now `1.22.0`.
 
-## 0.12.10+1
-
 * Hide the `StreamMatcher` class from the `test` package.
 
 ## 0.12.10
diff --git a/README.md b/README.md
index d9d8225..e7f23ec 100644
--- a/README.md
+++ b/README.md
@@ -1,103 +1,27 @@
-A package for writing readable tests of asynchronous behavior.
+**This package is deprecated.** It will not be maintained going forward.
 
-This package works by building up a queue of asynchronous tasks called a
-"schedule", then executing those tasks in order. This allows the tests to
-read like synchronous, linear code, despite executing asynchronously.
+The `scheduled_test` package was originally created before Dart supported
+`async` and `await`, as a way to make it possible to write readable asynchronous
+tests. Now that `async` and `await` exist, this purpose is no longer relevant.
 
-The `scheduled_test` package is built on top of the `test` package, and should
-be imported instead of `test`. It provides its own version of `group()`,
-`test()`, `setUp()`, and `tearDown()`, and re-exports most other APIs from
-`test`.
+Most of the features of `scheduled_test` are now available in other packages
+that use normal `Future`- and `Stream`-based APIs.
 
-To schedule a task, call the `schedule()` function. For example:
+* The `scheduled_test/descriptor` library is replaced by the
+  [`test_descriptor`][test_descriptor] package.
 
-```dart
-import 'package:scheduled_test/scheduled_test.dart';
+* The `scheduled_test/scheduled_process` library is replaced by the
+  [`test_process`][test_process] package.
 
-void main() {
-  test('writing to a file and reading it back should work', () {
-    schedule(() {
-      // The schedule won't proceed until the returned Future has
-      // completed.
-      return new File("output.txt").writeAsString("contents");
-    });
+* The `scheduled_test/scheduled_stream` library is replaced by the
+  [`StreamQueue`][StreamQueue] in the `async` package as well as the
+  [stream matchers][] in the `test` package.
 
-    schedule(() async {
-      var contents = await new File("output.txt").readAsString();
+* The `scheduled_test/scheduled_server` library is replaced by the
+  [`shelf_test_handler`][shelf_test_handler] package.
 
-      // The normal unittest matchers can still be used.
-      expect(contents, equals("contents"));
-    });
-  });
-}
-```
-
-## Setting up and tearing down
-
-The `scheduled_test` package defines its own `setUp()` method that works just
-like the one in `test`. Tasks can be scheduled in `setUp()`; they'll be run
-before the tasks scheduled by tests in that group. `currentSchedule` is also set
-in the `setUp()` callback.
-
-Similarly, tasks to run after all the tests in the group can be scheduled using
-`tearDown()`. However, the best way to clean up after a test is to add callbacks
-to the `onComplete` queue. This queue will always run after the test, whether or
-not it succeeded. For example:
-
-```dart
-import 'package:scheduled_test/scheduled_test.dart';
-
-void main() {
-  var tempDir;
-  setUp(() {
-    schedule(() async {
-      tempDir = await createTempDir();
-    });
-
-    currentSchedule.onComplete.schedule(() => deleteDir(tempDir));
-  });
-
-  // ...
-}
-```
-
-## Passing values between tasks
-
-It's often useful to use values computed in one task in other tasks that are
-scheduled afterwards. There are two ways to do this. The most
-straightforward is just to define a local variable and assign to it. For
-example:
-
-```dart
-import 'package:scheduled_test/scheduled_test.dart';
-
-void main() {
-  test('computeValue returns 12', () {
-    var value;
-
-    schedule(() async {
-      value = await computeValue();
-    });
-
-    schedule(() => expect(value, equals(12)));
-  });
-}
-```
-
-However, this doesn't scale well, especially when you start factoring out calls
-to `schedule()` into library methods. For that reason, `schedule()` returns a
-`Future` that will complete to the same value as the return value of the task.
-For example:
-
-```dart
-import 'package:scheduled_test/scheduled_test.dart';
-
-void main() {
-  test('computeValue returns 12', () {
-    var valueFuture = schedule(() => computeValue());
-    schedule(() {
-      expect(valueFuture, completion(equals(12)));
-    });
-  });
-}
-```
+[test_descriptor]: https://pub.dartlang.org/packages/test_descriptor
+[test_process]: https://pub.dartlang.org/packages/test_process
+[StreamQueue]: https://www.dartdocs.org/documentation/async/1.13.3/async/StreamQueue-class.html
+[stream matchers]: https://github.com/dart-lang/test#stream-matchers
+[shelf_test_handler]: https://pub.dartlang.org/packages/shelf_test_handler
diff --git a/lib/descriptor.dart b/lib/descriptor.dart
index 71bbe64..e864f96 100644
--- a/lib/descriptor.dart
+++ b/lib/descriptor.dart
@@ -2,68 +2,12 @@
 // 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.
+/// This package is deprecated. See [the README][] for details.
 ///
-/// You can use [dir] and [file] to define a filesystem structure. Then, you can
-/// call [Descriptor.create] to schedule a task that will create that structure
-/// on the physical filesystem, or [Descriptor.validate] to schedule an
-/// assertion that that structure exists. For example:
-///
-///     import 'dart:io';
-///
-///     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 Directory.systemTemp
-///                           .createTemp('my_temp_dir_')
-///                           .then((dir) {
-///             tempDir = dir;
-///             d.defaultRoot = tempDir.path;
-///           });
-///         });
-///
-///         currentSchedule.onComplete.schedule(() {
-///           d.defaultRoot = null;
-///           return tempDir.delete(recursive: true);
-///         });
-///       });
-///
-///       // ...
-///     }
+/// [the README]: https://pub.dartlang.org/packages/scheduled_test
+@deprecated
+library scheduled_test.descriptor;
+
 import 'dart:async';
 
 import 'package:path/path.dart' as path;
diff --git a/lib/scheduled_process.dart b/lib/scheduled_process.dart
index 9fdfb29..5d72c0b 100644
--- a/lib/scheduled_process.dart
+++ b/lib/scheduled_process.dart
@@ -2,6 +2,12 @@
 // 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.
 
+/// This package is deprecated. See [the README][] for details.
+///
+/// [the README]: https://pub.dartlang.org/packages/scheduled_test
+@deprecated
+library scheduled_test.scheduled_process;
+
 import 'dart:async';
 import 'dart:convert';
 import 'dart:io';
diff --git a/lib/scheduled_server.dart b/lib/scheduled_server.dart
index fc66674..6a13ec0 100644
--- a/lib/scheduled_server.dart
+++ b/lib/scheduled_server.dart
@@ -2,6 +2,12 @@
 // 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.
 
+/// This package is deprecated. See [the README][] for details.
+///
+/// [the README]: https://pub.dartlang.org/packages/scheduled_test
+@deprecated
+library scheduled_test.scheduled_server;
+
 import 'dart:async';
 import 'dart:collection';
 import 'dart:io';
diff --git a/lib/scheduled_stream.dart b/lib/scheduled_stream.dart
index d16e504..0f3d99f 100644
--- a/lib/scheduled_stream.dart
+++ b/lib/scheduled_stream.dart
@@ -2,6 +2,12 @@
 // 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.
 
+/// This package is deprecated. See [the README][] for details.
+///
+/// [the README]: https://pub.dartlang.org/packages/scheduled_test
+@deprecated
+library scheduled_test.scheduled_stream;
+
 import 'dart:async';
 import 'dart:collection';
 
diff --git a/lib/scheduled_test.dart b/lib/scheduled_test.dart
index 48dc68b..af71087 100644
--- a/lib/scheduled_test.dart
+++ b/lib/scheduled_test.dart
@@ -2,6 +2,12 @@
 // 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.
 
+/// This package is deprecated. See [the README][] for details.
+///
+/// [the README]: https://pub.dartlang.org/packages/scheduled_test
+@deprecated
+library scheduled_test;
+
 // TODO(nweiz): Add support for calling [schedule] while the schedule is already
 // running.
 // TODO(nweiz): Port the non-Pub-specific scheduled test libraries from Pub.
diff --git a/pubspec.yaml b/pubspec.yaml
index 2447856..6fc1ce0 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,13 +1,7 @@
 name: scheduled_test
-version: 0.12.11
+version: 0.12.11+1
 author: Dart Team <misc@dartlang.org>
-description: >
-  A package for writing readable tests of asynchronous behavior.
-
-  This package works by building up a queue of asynchronous tasks called a
-  "schedule", then executing those tasks in order. This allows the tests to
-  read like synchronous, linear code, despite executing asynchronously.
-
+description: This package is deprecated. See the README for details.
 homepage: https://github.com/dart-lang/scheduled_test
 environment:
   sdk: '>=1.22.0 <2.0.0'