No scheduled test (#23)

* Stop using scheduled_test

* delete test/test_all.dart

* cleanup travis file

* review comments
diff --git a/.travis.yml b/.travis.yml
index 93b8adb..63f5e5e 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,14 +1,22 @@
 language: dart
-sudo: false
+
 dart:
   - dev
   - stable
-  - 1.23.0
-  - 1.22.1
-cache:
-  directories:
-    - $HOME/.pub-cache
+
 dart_task:
-  - test: --platform vm
-  - dartfmt
+  - test
   - dartanalyzer
+
+matrix:
+  include:
+    - dart: dev
+      dart_task: dartfmt
+
+# Only building master means that we don't run two builds for each pull request.
+branches:
+  only: [master]
+
+cache:
+ directories:
+   - $HOME/.pub-cache
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0586420..a9a3f4f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,6 @@
-## 0.2.6-dev
+## 0.2.7
 
-* Remove unused imports. 
+* Require at least Dart SDK 1.24.0.
 
 ## 0.2.6
 
diff --git a/pubspec.yaml b/pubspec.yaml
index 9861dcb..5b4a206 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,10 +1,10 @@
 name: shelf_static
-version: 0.2.6
+version: 0.2.7-dev
 author: Dart Team <misc@dartlang.org>
 description: Static file server support for Shelf
 homepage: https://github.com/dart-lang/shelf_static
 environment:
-  sdk: '>=1.22.0 <2.0.0'
+  sdk: '>=1.24.0 <2.0.0'
 dependencies:
   convert: '>=1.0.0 <3.0.0'
   http_parser: '>=0.0.2+2 <4.0.0'
@@ -12,6 +12,7 @@
   path: '>=1.1.0 <2.0.0'
   shelf: '>=0.5.7 <0.8.0'
 dev_dependencies:
-  args: '>=0.12.0 <0.14.0'
-  scheduled_test: '>=0.12.0 <0.13.0'
+  args: '^1.0.0'
   test: '>=0.12.0 <0.13.0'
+  test_descriptor: '^1.0.0'
+
diff --git a/test/alternative_root_test.dart b/test/alternative_root_test.dart
index 4b7852d..a1095a1 100644
--- a/test/alternative_root_test.dart
+++ b/test/alternative_root_test.dart
@@ -3,94 +3,66 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:io';
-import 'package:scheduled_test/descriptor.dart' as d;
-import 'package:scheduled_test/scheduled_test.dart';
+import 'package:test_descriptor/test_descriptor.dart' as d;
+import 'package:test/test.dart';
 
 import 'package:shelf_static/shelf_static.dart';
 import 'test_util.dart';
 
 void main() {
-  setUp(() {
-    var tempDir;
-    schedule(() {
-      return Directory.systemTemp.createTemp('shelf_static-test-').then((dir) {
-        tempDir = dir;
-        d.defaultRoot = tempDir.path;
-      });
-    });
-
-    d.file('root.txt', 'root txt').create();
-    d.dir('files', [
+  setUp(() async {
+    await d.file('root.txt', 'root txt').create();
+    await d.dir('files', [
       d.file('test.txt', 'test txt content'),
       d.file('with space.txt', 'with space content')
     ]).create();
-
-    currentSchedule.onComplete.schedule(() {
-      d.defaultRoot = null;
-      return tempDir.delete(recursive: true);
-    });
   });
 
-  test('access root file', () {
-    schedule(() {
-      var handler = createStaticHandler(d.defaultRoot);
+  test('access root file', () async {
+    var handler = createStaticHandler(d.sandbox);
 
-      return makeRequest(handler, '/static/root.txt', handlerPath: 'static')
-          .then((response) {
-        expect(response.statusCode, HttpStatus.OK);
-        expect(response.contentLength, 8);
-        expect(response.readAsString(), completion('root txt'));
-      });
-    });
+    var response =
+        await makeRequest(handler, '/static/root.txt', handlerPath: 'static');
+    expect(response.statusCode, HttpStatus.OK);
+    expect(response.contentLength, 8);
+    expect(response.readAsString(), completion('root txt'));
   });
 
-  test('access root file with space', () {
-    schedule(() {
-      var handler = createStaticHandler(d.defaultRoot);
+  test('access root file with space', () async {
+    var handler = createStaticHandler(d.sandbox);
 
-      return makeRequest(handler, '/static/files/with%20space.txt',
-          handlerPath: 'static').then((response) {
-        expect(response.statusCode, HttpStatus.OK);
-        expect(response.contentLength, 18);
-        expect(response.readAsString(), completion('with space content'));
-      });
-    });
+    var response = await makeRequest(handler, '/static/files/with%20space.txt',
+        handlerPath: 'static');
+    expect(response.statusCode, HttpStatus.OK);
+    expect(response.contentLength, 18);
+    expect(response.readAsString(), completion('with space content'));
   });
 
-  test('access root file with unencoded space', () {
-    schedule(() {
-      var handler = createStaticHandler(d.defaultRoot);
+  test('access root file with unencoded space', () async {
+    var handler = createStaticHandler(d.sandbox);
 
-      return makeRequest(handler, '/static/files/with%20space.txt',
-          handlerPath: 'static').then((response) {
-        expect(response.statusCode, HttpStatus.OK);
-        expect(response.contentLength, 18);
-        expect(response.readAsString(), completion('with space content'));
-      });
-    });
+    var response = await makeRequest(handler, '/static/files/with%20space.txt',
+        handlerPath: 'static');
+    expect(response.statusCode, HttpStatus.OK);
+    expect(response.contentLength, 18);
+    expect(response.readAsString(), completion('with space content'));
   });
 
-  test('access file under directory', () {
-    schedule(() {
-      var handler = createStaticHandler(d.defaultRoot);
+  test('access file under directory', () async {
+    var handler = createStaticHandler(d.sandbox);
 
-      return makeRequest(handler, '/static/files/test.txt',
-          handlerPath: 'static').then((response) {
-        expect(response.statusCode, HttpStatus.OK);
-        expect(response.contentLength, 16);
-        expect(response.readAsString(), completion('test txt content'));
-      });
-    });
+    var response = await makeRequest(handler, '/static/files/test.txt',
+        handlerPath: 'static');
+    expect(response.statusCode, HttpStatus.OK);
+    expect(response.contentLength, 16);
+    expect(response.readAsString(), completion('test txt content'));
   });
 
-  test('file not found', () {
-    schedule(() {
-      var handler = createStaticHandler(d.defaultRoot);
+  test('file not found', () async {
+    var handler = createStaticHandler(d.sandbox);
 
-      return makeRequest(handler, '/static/not_here.txt', handlerPath: 'static')
-          .then((response) {
-        expect(response.statusCode, HttpStatus.NOT_FOUND);
-      });
-    });
+    var response = await makeRequest(handler, '/static/not_here.txt',
+        handlerPath: 'static');
+    expect(response.statusCode, HttpStatus.NOT_FOUND);
   });
 }
diff --git a/test/basic_file_test.dart b/test/basic_file_test.dart
index 4511243..17f8018 100644
--- a/test/basic_file_test.dart
+++ b/test/basic_file_test.dart
@@ -8,25 +8,17 @@
 import 'package:http_parser/http_parser.dart';
 import 'package:mime/mime.dart' as mime;
 import 'package:path/path.dart' as p;
-import 'package:scheduled_test/descriptor.dart' as d;
-import 'package:scheduled_test/scheduled_test.dart';
+import 'package:test_descriptor/test_descriptor.dart' as d;
+import 'package:test/test.dart';
 
 import 'package:shelf_static/shelf_static.dart';
 import 'test_util.dart';
 
 void main() {
-  setUp(() {
-    var tempDir;
-    schedule(() {
-      return Directory.systemTemp.createTemp('shelf_static-test-').then((dir) {
-        tempDir = dir;
-        d.defaultRoot = tempDir.path;
-      });
-    });
-
-    d.file('index.html', '<html></html>').create();
-    d.file('root.txt', 'root txt').create();
-    d.file('random.unknown', 'no clue').create();
+  setUp(() async {
+    await d.file('index.html', '<html></html>').create();
+    await d.file('root.txt', 'root txt').create();
+    await d.file('random.unknown', 'no clue').create();
 
     var pngBytesContent =
         r"iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAABmJLR0QA/wD/AP+gvae"
@@ -39,213 +31,163 @@
     var webpBytesContent =
         r"UklGRiQAAABXRUJQVlA4IBgAAAAwAQCdASoBAAEAAQAcJaQAA3AA/v3AgAA=";
 
-    d.dir('files', [
+    await d.dir('files', [
       d.file('test.txt', 'test txt content'),
       d.file('with space.txt', 'with space content'),
-      d.binaryFile('header_bytes_test_image', BASE64.decode(pngBytesContent)),
-      d.binaryFile('header_bytes_test_webp', BASE64.decode(webpBytesContent))
+      d.file('header_bytes_test_image', BASE64.decode(pngBytesContent)),
+      d.file('header_bytes_test_webp', BASE64.decode(webpBytesContent))
     ]).create();
-
-    currentSchedule.onComplete.schedule(() {
-      d.defaultRoot = null;
-      return tempDir.delete(recursive: true);
-    });
   });
 
-  test('access root file', () {
-    schedule(() {
-      var handler = createStaticHandler(d.defaultRoot);
+  test('access root file', () async {
+    var handler = createStaticHandler(d.sandbox);
 
-      return makeRequest(handler, '/root.txt').then((response) {
-        expect(response.statusCode, HttpStatus.OK);
-        expect(response.contentLength, 8);
-        expect(response.readAsString(), completion('root txt'));
-      });
-    });
+    var response = await makeRequest(handler, '/root.txt');
+    expect(response.statusCode, HttpStatus.OK);
+    expect(response.contentLength, 8);
+    expect(response.readAsString(), completion('root txt'));
   });
 
-  test('access root file with space', () {
-    schedule(() {
-      var handler = createStaticHandler(d.defaultRoot);
+  test('access root file with space', () async {
+    var handler = createStaticHandler(d.sandbox);
 
-      return makeRequest(handler, '/files/with%20space.txt').then((response) {
-        expect(response.statusCode, HttpStatus.OK);
-        expect(response.contentLength, 18);
-        expect(response.readAsString(), completion('with space content'));
-      });
-    });
+    var response = await makeRequest(handler, '/files/with%20space.txt');
+    expect(response.statusCode, HttpStatus.OK);
+    expect(response.contentLength, 18);
+    expect(response.readAsString(), completion('with space content'));
   });
 
-  test('access root file with unencoded space', () {
-    schedule(() {
-      var handler = createStaticHandler(d.defaultRoot);
+  test('access root file with unencoded space', () async {
+    var handler = createStaticHandler(d.sandbox);
 
-      return makeRequest(handler, '/files/with%20space.txt').then((response) {
-        expect(response.statusCode, HttpStatus.OK);
-        expect(response.contentLength, 18);
-        expect(response.readAsString(), completion('with space content'));
-      });
-    });
+    var response = await makeRequest(handler, '/files/with%20space.txt');
+    expect(response.statusCode, HttpStatus.OK);
+    expect(response.contentLength, 18);
+    expect(response.readAsString(), completion('with space content'));
   });
 
-  test('access file under directory', () {
-    schedule(() {
-      var handler = createStaticHandler(d.defaultRoot);
+  test('access file under directory', () async {
+    var handler = createStaticHandler(d.sandbox);
 
-      return makeRequest(handler, '/files/test.txt').then((response) {
-        expect(response.statusCode, HttpStatus.OK);
-        expect(response.contentLength, 16);
-        expect(response.readAsString(), completion('test txt content'));
-      });
-    });
+    var response = await makeRequest(handler, '/files/test.txt');
+    expect(response.statusCode, HttpStatus.OK);
+    expect(response.contentLength, 16);
+    expect(response.readAsString(), completion('test txt content'));
   });
 
-  test('file not found', () {
-    schedule(() {
-      var handler = createStaticHandler(d.defaultRoot);
+  test('file not found', () async {
+    var handler = createStaticHandler(d.sandbox);
 
-      return makeRequest(handler, '/not_here.txt').then((response) {
-        expect(response.statusCode, HttpStatus.NOT_FOUND);
-      });
-    });
+    var response = await makeRequest(handler, '/not_here.txt');
+    expect(response.statusCode, HttpStatus.NOT_FOUND);
   });
 
-  test('last modified', () {
-    schedule(() {
-      var handler = createStaticHandler(d.defaultRoot);
+  test('last modified', () async {
+    var handler = createStaticHandler(d.sandbox);
 
-      var rootPath = p.join(d.defaultRoot, 'root.txt');
-      var modified = new File(rootPath).statSync().changed.toUtc();
+    var rootPath = p.join(d.sandbox, 'root.txt');
+    var modified = new File(rootPath).statSync().changed.toUtc();
 
-      return makeRequest(handler, '/root.txt').then((response) {
-        expect(response.lastModified, atSameTimeToSecond(modified));
-      });
-    });
+    var response = await makeRequest(handler, '/root.txt');
+    expect(response.lastModified, atSameTimeToSecond(modified));
   });
 
   group('if modified since', () {
-    test('same as last modified', () {
-      schedule(() {
-        var handler = createStaticHandler(d.defaultRoot);
+    test('same as last modified', () async {
+      var handler = createStaticHandler(d.sandbox);
 
-        var rootPath = p.join(d.defaultRoot, 'root.txt');
-        var modified = new File(rootPath).statSync().changed.toUtc();
+      var rootPath = p.join(d.sandbox, 'root.txt');
+      var modified = new File(rootPath).statSync().changed.toUtc();
 
-        var headers = {HttpHeaders.IF_MODIFIED_SINCE: formatHttpDate(modified)};
+      var headers = {HttpHeaders.IF_MODIFIED_SINCE: formatHttpDate(modified)};
 
-        return makeRequest(handler, '/root.txt', headers: headers)
-            .then((response) {
-          expect(response.statusCode, HttpStatus.NOT_MODIFIED);
-          expect(response.contentLength, 0);
-        });
-      });
+      var response = await makeRequest(handler, '/root.txt', headers: headers);
+      expect(response.statusCode, HttpStatus.NOT_MODIFIED);
+      expect(response.contentLength, 0);
     });
 
-    test('before last modified', () {
-      schedule(() {
-        var handler = createStaticHandler(d.defaultRoot);
+    test('before last modified', () async {
+      var handler = createStaticHandler(d.sandbox);
 
-        var rootPath = p.join(d.defaultRoot, 'root.txt');
-        var modified = new File(rootPath).statSync().changed.toUtc();
+      var rootPath = p.join(d.sandbox, 'root.txt');
+      var modified = new File(rootPath).statSync().changed.toUtc();
 
-        var headers = {
-          HttpHeaders.IF_MODIFIED_SINCE:
-              formatHttpDate(modified.subtract(const Duration(seconds: 1)))
-        };
+      var headers = {
+        HttpHeaders.IF_MODIFIED_SINCE:
+            formatHttpDate(modified.subtract(const Duration(seconds: 1)))
+      };
 
-        return makeRequest(handler, '/root.txt', headers: headers)
-            .then((response) {
-          expect(response.statusCode, HttpStatus.OK);
-          expect(response.lastModified, atSameTimeToSecond(modified));
-        });
-      });
+      var response = await makeRequest(handler, '/root.txt', headers: headers);
+      expect(response.statusCode, HttpStatus.OK);
+      expect(response.lastModified, atSameTimeToSecond(modified));
     });
 
-    test('after last modified', () {
-      schedule(() {
-        var handler = createStaticHandler(d.defaultRoot);
+    test('after last modified', () async {
+      var handler = createStaticHandler(d.sandbox);
 
-        var rootPath = p.join(d.defaultRoot, 'root.txt');
-        var modified = new File(rootPath).statSync().changed.toUtc();
+      var rootPath = p.join(d.sandbox, 'root.txt');
+      var modified = new File(rootPath).statSync().changed.toUtc();
 
-        var headers = {
-          HttpHeaders.IF_MODIFIED_SINCE:
-              formatHttpDate(modified.add(const Duration(seconds: 1)))
-        };
+      var headers = {
+        HttpHeaders.IF_MODIFIED_SINCE:
+            formatHttpDate(modified.add(const Duration(seconds: 1)))
+      };
 
-        return makeRequest(handler, '/root.txt', headers: headers)
-            .then((response) {
-          expect(response.statusCode, HttpStatus.NOT_MODIFIED);
-          expect(response.contentLength, 0);
-        });
-      });
+      var response = await makeRequest(handler, '/root.txt', headers: headers);
+      expect(response.statusCode, HttpStatus.NOT_MODIFIED);
+      expect(response.contentLength, 0);
     });
   });
 
   group('content type', () {
-    test('root.txt should be text/plain', () {
-      schedule(() {
-        var handler = createStaticHandler(d.defaultRoot);
+    test('root.txt should be text/plain', () async {
+      var handler = createStaticHandler(d.sandbox);
 
-        return makeRequest(handler, '/root.txt').then((response) {
-          expect(response.mimeType, 'text/plain');
-        });
-      });
+      var response = await makeRequest(handler, '/root.txt');
+      expect(response.mimeType, 'text/plain');
     });
 
-    test('index.html should be text/html', () {
-      schedule(() {
-        var handler = createStaticHandler(d.defaultRoot);
+    test('index.html should be text/html', () async {
+      var handler = createStaticHandler(d.sandbox);
 
-        return makeRequest(handler, '/index.html').then((response) {
-          expect(response.mimeType, 'text/html');
-        });
-      });
+      var response = await makeRequest(handler, '/index.html');
+      expect(response.mimeType, 'text/html');
     });
 
-    test('random.unknown should be null', () {
-      schedule(() {
-        var handler = createStaticHandler(d.defaultRoot);
+    test('random.unknown should be null', () async {
+      var handler = createStaticHandler(d.sandbox);
 
-        return makeRequest(handler, '/random.unknown').then((response) {
-          expect(response.mimeType, isNull);
-        });
-      });
+      var response = await makeRequest(handler, '/random.unknown');
+      expect(response.mimeType, isNull);
     });
 
-    test('header_bytes_test_image should be image/png', () {
-      schedule(() {
-        final dynamic handler = createStaticHandler(d.defaultRoot,
-            useHeaderBytesForContentType: true);
+    test('header_bytes_test_image should be image/png', () async {
+      final handler =
+          createStaticHandler(d.sandbox, useHeaderBytesForContentType: true);
 
-        return makeRequest(handler, '/files/header_bytes_test_image')
-            .then((response) {
-          expect(response.mimeType, "image/png");
-        });
-      });
+      var response =
+          await makeRequest(handler, '/files/header_bytes_test_image');
+      expect(response.mimeType, "image/png");
     });
 
-    test('header_bytes_test_webp should be image/webp', () {
-      schedule(() {
-        final mime.MimeTypeResolver resolver = new mime.MimeTypeResolver();
-        resolver.addMagicNumber(
-            <int>[
-              0x52, 0x49, 0x46, 0x46, 0x00, 0x00, //
-              0x00, 0x00, 0x57, 0x45, 0x42, 0x50
-            ],
-            "image/webp",
-            mask: <int>[
-              0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, //
-              0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF
-            ]);
-        final dynamic handler = createStaticHandler(d.defaultRoot,
-            useHeaderBytesForContentType: true, contentTypeResolver: resolver);
+    test('header_bytes_test_webp should be image/webp', () async {
+      final mime.MimeTypeResolver resolver = new mime.MimeTypeResolver();
+      resolver.addMagicNumber(
+          <int>[
+            0x52, 0x49, 0x46, 0x46, 0x00, 0x00, //
+            0x00, 0x00, 0x57, 0x45, 0x42, 0x50
+          ],
+          "image/webp",
+          mask: <int>[
+            0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, //
+            0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF
+          ]);
+      final handler = createStaticHandler(d.sandbox,
+          useHeaderBytesForContentType: true, contentTypeResolver: resolver);
 
-        return makeRequest(handler, '/files/header_bytes_test_webp')
-            .then((response) {
-          expect(response.mimeType, "image/webp");
-        });
-      });
+      var response =
+          await makeRequest(handler, '/files/header_bytes_test_webp');
+      expect(response.mimeType, "image/webp");
     });
   });
 }
diff --git a/test/create_file_handler_test.dart b/test/create_file_handler_test.dart
index 676ab57..26a6da9 100644
--- a/test/create_file_handler_test.dart
+++ b/test/create_file_handler_test.dart
@@ -5,107 +5,81 @@
 import 'dart:io';
 
 import 'package:path/path.dart' as p;
-import 'package:scheduled_test/descriptor.dart' as d;
-import 'package:scheduled_test/scheduled_test.dart';
+import 'package:test_descriptor/test_descriptor.dart' as d;
+import 'package:test/test.dart';
 
 import 'package:shelf_static/shelf_static.dart';
 import 'test_util.dart';
 
 void main() {
-  var tempDir;
-  setUp(() {
-    schedule(() async {
-      tempDir =
-          (await Directory.systemTemp.createTemp('shelf_static-test-')).path;
-      d.defaultRoot = tempDir;
-    });
-
-    d.file('file.txt', 'contents').create();
-    d.file('random.unknown', 'no clue').create();
-
-    currentSchedule.onComplete.schedule(() async {
-      d.defaultRoot = null;
-      await new Directory(tempDir).delete(recursive: true);
-    });
+  setUp(() async {
+    await d.file('file.txt', 'contents').create();
+    await d.file('random.unknown', 'no clue').create();
   });
 
-  test('serves the file contents', () {
-    schedule(() async {
-      var handler = createFileHandler(p.join(tempDir, 'file.txt'));
-      var response = await makeRequest(handler, '/file.txt');
-      expect(response.statusCode, equals(HttpStatus.OK));
-      expect(response.contentLength, equals(8));
-      expect(response.readAsString(), completion(equals('contents')));
-    });
+  test('serves the file contents', () async {
+    var handler = createFileHandler(p.join(d.sandbox, 'file.txt'));
+    var response = await makeRequest(handler, '/file.txt');
+    expect(response.statusCode, equals(HttpStatus.OK));
+    expect(response.contentLength, equals(8));
+    expect(response.readAsString(), completion(equals('contents')));
   });
 
-  test('serves a 404 for a non-matching URL', () {
-    schedule(() async {
-      var handler = createFileHandler(p.join(tempDir, 'file.txt'));
-      var response = await makeRequest(handler, '/foo/file.txt');
-      expect(response.statusCode, equals(HttpStatus.NOT_FOUND));
-    });
+  test('serves a 404 for a non-matching URL', () async {
+    var handler = createFileHandler(p.join(d.sandbox, 'file.txt'));
+    var response = await makeRequest(handler, '/foo/file.txt');
+    expect(response.statusCode, equals(HttpStatus.NOT_FOUND));
   });
 
-  test('serves the file contents under a custom URL', () {
-    schedule(() async {
-      var handler =
-          createFileHandler(p.join(tempDir, 'file.txt'), url: 'foo/bar');
-      var response = await makeRequest(handler, '/foo/bar');
-      expect(response.statusCode, equals(HttpStatus.OK));
-      expect(response.contentLength, equals(8));
-      expect(response.readAsString(), completion(equals('contents')));
-    });
+  test('serves the file contents under a custom URL', () async {
+    var handler =
+        createFileHandler(p.join(d.sandbox, 'file.txt'), url: 'foo/bar');
+    var response = await makeRequest(handler, '/foo/bar');
+    expect(response.statusCode, equals(HttpStatus.OK));
+    expect(response.contentLength, equals(8));
+    expect(response.readAsString(), completion(equals('contents')));
   });
 
-  test("serves a 404 if the custom URL isn't matched", () {
-    schedule(() async {
-      var handler =
-          createFileHandler(p.join(tempDir, 'file.txt'), url: 'foo/bar');
-      var response = await makeRequest(handler, '/file.txt');
-      expect(response.statusCode, equals(HttpStatus.NOT_FOUND));
-    });
+  test("serves a 404 if the custom URL isn't matched", () async {
+    var handler =
+        createFileHandler(p.join(d.sandbox, 'file.txt'), url: 'foo/bar');
+    var response = await makeRequest(handler, '/file.txt');
+    expect(response.statusCode, equals(HttpStatus.NOT_FOUND));
   });
 
   group('the content type header', () {
-    test('is inferred from the file path', () {
-      schedule(() async {
-        var handler = createFileHandler(p.join(tempDir, 'file.txt'));
-        var response = await makeRequest(handler, '/file.txt');
-        expect(response.statusCode, equals(HttpStatus.OK));
-        expect(response.mimeType, equals('text/plain'));
-      });
+    test('is inferred from the file path', () async {
+      var handler = createFileHandler(p.join(d.sandbox, 'file.txt'));
+      var response = await makeRequest(handler, '/file.txt');
+      expect(response.statusCode, equals(HttpStatus.OK));
+      expect(response.mimeType, equals('text/plain'));
     });
 
-    test("is omitted if it can't be inferred", () {
-      schedule(() async {
-        var handler = createFileHandler(p.join(tempDir, 'random.unknown'));
-        var response = await makeRequest(handler, '/random.unknown');
-        expect(response.statusCode, equals(HttpStatus.OK));
-        expect(response.mimeType, isNull);
-      });
+    test("is omitted if it can't be inferred", () async {
+      var handler = createFileHandler(p.join(d.sandbox, 'random.unknown'));
+      var response = await makeRequest(handler, '/random.unknown');
+      expect(response.statusCode, equals(HttpStatus.OK));
+      expect(response.mimeType, isNull);
     });
 
-    test('comes from the contentType parameter', () {
-      schedule(() async {
-        var handler = createFileHandler(p.join(tempDir, 'file.txt'),
-            contentType: 'something/weird');
-        var response = await makeRequest(handler, '/file.txt');
-        expect(response.statusCode, equals(HttpStatus.OK));
-        expect(response.mimeType, equals('something/weird'));
-      });
+    test('comes from the contentType parameter', () async {
+      var handler = createFileHandler(p.join(d.sandbox, 'file.txt'),
+          contentType: 'something/weird');
+      var response = await makeRequest(handler, '/file.txt');
+      expect(response.statusCode, equals(HttpStatus.OK));
+      expect(response.mimeType, equals('something/weird'));
     });
   });
 
   group('throws an ArgumentError for', () {
     test("a file that doesn't exist", () {
-      expect(() => createFileHandler(p.join(tempDir, 'nothing.txt')),
+      expect(() => createFileHandler(p.join(d.sandbox, 'nothing.txt')),
           throwsArgumentError);
     });
 
     test("an absolute URL", () {
       expect(
-          () => createFileHandler(p.join(tempDir, 'nothing.txt'),
+          () => createFileHandler(p.join(d.sandbox, 'nothing.txt'),
               url: '/foo/bar'),
           throwsArgumentError);
     });
diff --git a/test/default_document_test.dart b/test/default_document_test.dart
index 39943a4..d7e2906 100644
--- a/test/default_document_test.dart
+++ b/test/default_document_test.dart
@@ -5,33 +5,20 @@
 import 'dart:io';
 //import 'package:http_parser/http_parser.dart';
 //import 'package:path/path.dart' as p;
-import 'package:scheduled_test/descriptor.dart' as d;
-import 'package:scheduled_test/scheduled_test.dart';
+import 'package:test_descriptor/test_descriptor.dart' as d;
+import 'package:test/test.dart';
 
 import 'package:shelf_static/shelf_static.dart';
 import 'test_util.dart';
 
 void main() {
-  setUp(() {
-    var tempDir;
-    schedule(() {
-      return Directory.systemTemp.createTemp('shelf_static-test-').then((dir) {
-        tempDir = dir;
-        d.defaultRoot = tempDir.path;
-      });
-    });
-
-    d.file('index.html', '<html></html>').create();
-    d.file('root.txt', 'root txt').create();
-    d.dir('files', [
+  setUp(() async {
+    await d.file('index.html', '<html></html>').create();
+    await d.file('root.txt', 'root txt').create();
+    await d.dir('files', [
       d.file('index.html', '<html><body>files</body></html>'),
       d.file('with space.txt', 'with space content')
     ]).create();
-
-    currentSchedule.onComplete.schedule(() {
-      d.defaultRoot = null;
-      return tempDir.delete(recursive: true);
-    });
   });
 
   group('default document value', () {
@@ -45,111 +32,87 @@
       ];
 
       for (var val in invalidValues) {
-        expect(() => createStaticHandler(d.defaultRoot, defaultDocument: val),
+        expect(() => createStaticHandler(d.sandbox, defaultDocument: val),
             throwsArgumentError);
       }
     });
   });
 
   group('no default document specified', () {
-    test('access "/index.html"', () {
-      schedule(() {
-        var handler = createStaticHandler(d.defaultRoot);
+    test('access "/index.html"', () async {
+      var handler = createStaticHandler(d.sandbox);
 
-        return makeRequest(handler, '/index.html').then((response) {
-          expect(response.statusCode, HttpStatus.OK);
-          expect(response.contentLength, 13);
-          expect(response.readAsString(), completion('<html></html>'));
-        });
-      });
+      var response = await makeRequest(handler, '/index.html');
+      expect(response.statusCode, HttpStatus.OK);
+      expect(response.contentLength, 13);
+      expect(response.readAsString(), completion('<html></html>'));
     });
 
-    test('access "/"', () {
-      schedule(() {
-        var handler = createStaticHandler(d.defaultRoot);
+    test('access "/"', () async {
+      var handler = createStaticHandler(d.sandbox);
 
-        return makeRequest(handler, '/').then((response) {
-          expect(response.statusCode, HttpStatus.NOT_FOUND);
-        });
-      });
+      var response = await makeRequest(handler, '/');
+      expect(response.statusCode, HttpStatus.NOT_FOUND);
     });
 
-    test('access "/files"', () {
-      schedule(() {
-        var handler = createStaticHandler(d.defaultRoot);
+    test('access "/files"', () async {
+      var handler = createStaticHandler(d.sandbox);
 
-        return makeRequest(handler, '/files').then((response) {
-          expect(response.statusCode, HttpStatus.NOT_FOUND);
-        });
-      });
+      var response = await makeRequest(handler, '/files');
+      expect(response.statusCode, HttpStatus.NOT_FOUND);
     });
 
-    test('access "/files/" dir', () {
-      schedule(() {
-        var handler = createStaticHandler(d.defaultRoot);
+    test('access "/files/" dir', () async {
+      var handler = createStaticHandler(d.sandbox);
 
-        return makeRequest(handler, '/files/').then((response) {
-          expect(response.statusCode, HttpStatus.NOT_FOUND);
-        });
-      });
+      var response = await makeRequest(handler, '/files/');
+      expect(response.statusCode, HttpStatus.NOT_FOUND);
     });
   });
 
   group('default document specified', () {
-    test('access "/index.html"', () {
-      schedule(() {
-        var handler =
-            createStaticHandler(d.defaultRoot, defaultDocument: 'index.html');
+    test('access "/index.html"', () async {
+      var handler =
+          createStaticHandler(d.sandbox, defaultDocument: 'index.html');
 
-        return makeRequest(handler, '/index.html').then((response) {
-          expect(response.statusCode, HttpStatus.OK);
-          expect(response.contentLength, 13);
-          expect(response.readAsString(), completion('<html></html>'));
-          expect(response.mimeType, 'text/html');
-        });
-      });
+      var response = await makeRequest(handler, '/index.html');
+      expect(response.statusCode, HttpStatus.OK);
+      expect(response.contentLength, 13);
+      expect(response.readAsString(), completion('<html></html>'));
+      expect(response.mimeType, 'text/html');
     });
 
-    test('access "/"', () {
-      schedule(() {
-        var handler =
-            createStaticHandler(d.defaultRoot, defaultDocument: 'index.html');
+    test('access "/"', () async {
+      var handler =
+          createStaticHandler(d.sandbox, defaultDocument: 'index.html');
 
-        return makeRequest(handler, '/').then((response) {
-          expect(response.statusCode, HttpStatus.OK);
-          expect(response.contentLength, 13);
-          expect(response.readAsString(), completion('<html></html>'));
-          expect(response.mimeType, 'text/html');
-        });
-      });
+      var response = await makeRequest(handler, '/');
+      expect(response.statusCode, HttpStatus.OK);
+      expect(response.contentLength, 13);
+      expect(response.readAsString(), completion('<html></html>'));
+      expect(response.mimeType, 'text/html');
     });
 
-    test('access "/files"', () {
-      schedule(() {
-        var handler =
-            createStaticHandler(d.defaultRoot, defaultDocument: 'index.html');
+    test('access "/files"', () async {
+      var handler =
+          createStaticHandler(d.sandbox, defaultDocument: 'index.html');
 
-        return makeRequest(handler, '/files').then((response) {
-          expect(response.statusCode, HttpStatus.MOVED_PERMANENTLY);
-          expect(response.headers,
-              containsPair(HttpHeaders.LOCATION, 'http://localhost/files/'));
-        });
-      });
+      var response = await makeRequest(handler, '/files');
+      expect(response.statusCode, HttpStatus.MOVED_PERMANENTLY);
+      expect(response.headers,
+          containsPair(HttpHeaders.LOCATION, 'http://localhost/files/'));
     });
 
-    test('access "/files/" dir', () {
-      schedule(() {
-        var handler =
-            createStaticHandler(d.defaultRoot, defaultDocument: 'index.html');
+    test('access "/files/" dir', () async {
+      var handler =
+          createStaticHandler(d.sandbox, defaultDocument: 'index.html');
 
-        return makeRequest(handler, '/files/').then((response) {
-          expect(response.statusCode, HttpStatus.OK);
-          expect(response.contentLength, 31);
-          expect(response.readAsString(),
-              completion('<html><body>files</body></html>'));
-          expect(response.mimeType, 'text/html');
-        });
-      });
+      var response = await makeRequest(handler, '/files/');
+      expect(response.statusCode, HttpStatus.OK);
+      expect(response.contentLength, 31);
+      expect(response.readAsString(),
+          completion('<html><body>files</body></html>'));
+      expect(response.mimeType, 'text/html');
     });
   });
 }
diff --git a/test/directory_listing_test.dart b/test/directory_listing_test.dart
index 192691e..c939c5f 100644
--- a/test/directory_listing_test.dart
+++ b/test/directory_listing_test.dart
@@ -4,94 +4,64 @@
 
 import 'dart:io';
 
-import 'package:scheduled_test/descriptor.dart' as d;
-import 'package:scheduled_test/scheduled_test.dart';
+import 'package:test_descriptor/test_descriptor.dart' as d;
+import 'package:test/test.dart';
 import 'package:shelf_static/shelf_static.dart';
 
 import 'test_util.dart';
 
 void main() {
-  setUp(() {
-    var tempDir;
-    schedule(() {
-      return Directory.systemTemp.createTemp('shelf_static-test-').then((dir) {
-        tempDir = dir;
-        d.defaultRoot = tempDir.path;
-      });
-    });
-
-    d.file('index.html', '<html></html>').create();
-    d.file('root.txt', 'root txt').create();
-    d.dir('files', [
+  setUp(() async {
+    await d.file('index.html', '<html></html>').create();
+    await d.file('root.txt', 'root txt').create();
+    await d.dir('files', [
       d.file('index.html', '<html><body>files</body></html>'),
       d.file('with space.txt', 'with space content'),
       d.dir('empty subfolder', []),
     ]).create();
-
-    currentSchedule.onComplete.schedule(() {
-      d.defaultRoot = null;
-      return tempDir.delete(recursive: true);
-    });
   });
 
-  group('list directories', () {
-    test('access "/"', () {
-      schedule(() async {
-        var handler = createStaticHandler(d.defaultRoot, listDirectories: true);
+  test('access "/"', () async {
+    var handler = createStaticHandler(d.sandbox, listDirectories: true);
 
-        return makeRequest(handler, '/').then((response) {
-          expect(response.statusCode, HttpStatus.OK);
-          expect(response.readAsString(), completes);
-        });
-      });
-    });
+    var response = await makeRequest(handler, '/');
+    expect(response.statusCode, HttpStatus.OK);
+    expect(response.readAsString(), completes);
+  });
 
-    test('access "/files"', () {
-      schedule(() async {
-        var handler = createStaticHandler(d.defaultRoot, listDirectories: true);
+  test('access "/files"', () async {
+    var handler = createStaticHandler(d.sandbox, listDirectories: true);
 
-        return makeRequest(handler, '/files').then((response) {
-          expect(response.statusCode, HttpStatus.MOVED_PERMANENTLY);
-          expect(response.headers,
-              containsPair(HttpHeaders.LOCATION, 'http://localhost/files/'));
-        });
-      });
-    });
+    var response = await makeRequest(handler, '/files');
+    expect(response.statusCode, HttpStatus.MOVED_PERMANENTLY);
+    expect(response.headers,
+        containsPair(HttpHeaders.LOCATION, 'http://localhost/files/'));
+  });
 
-    test('access "/files/"', () {
-      schedule(() async {
-        var handler = createStaticHandler(d.defaultRoot, listDirectories: true);
+  test('access "/files/"', () async {
+    var handler = createStaticHandler(d.sandbox, listDirectories: true);
 
-        return makeRequest(handler, '/files/').then((response) {
-          expect(response.statusCode, HttpStatus.OK);
-          expect(response.readAsString(), completes);
-        });
-      });
-    });
+    var response = await makeRequest(handler, '/files/');
+    expect(response.statusCode, HttpStatus.OK);
+    expect(response.readAsString(), completes);
+  });
 
-    test('access "/files/empty subfolder"', () {
-      schedule(() async {
-        var handler = createStaticHandler(d.defaultRoot, listDirectories: true);
+  test('access "/files/empty subfolder"', () async {
+    var handler = createStaticHandler(d.sandbox, listDirectories: true);
 
-        return makeRequest(handler, '/files/empty subfolder').then((response) {
-          expect(response.statusCode, HttpStatus.MOVED_PERMANENTLY);
-          expect(
-              response.headers,
-              containsPair(HttpHeaders.LOCATION,
-                  'http://localhost/files/empty%20subfolder/'));
-        });
-      });
-    });
+    var response = await makeRequest(handler, '/files/empty subfolder');
+    expect(response.statusCode, HttpStatus.MOVED_PERMANENTLY);
+    expect(
+        response.headers,
+        containsPair(
+            HttpHeaders.LOCATION, 'http://localhost/files/empty%20subfolder/'));
+  });
 
-    test('access "/files/empty subfolder/"', () {
-      schedule(() async {
-        var handler = createStaticHandler(d.defaultRoot, listDirectories: true);
+  test('access "/files/empty subfolder/"', () async {
+    var handler = createStaticHandler(d.sandbox, listDirectories: true);
 
-        return makeRequest(handler, '/files/empty subfolder/').then((response) {
-          expect(response.statusCode, HttpStatus.OK);
-          expect(response.readAsString(), completes);
-        });
-      });
-    });
+    var response = await makeRequest(handler, '/files/empty subfolder/');
+    expect(response.statusCode, HttpStatus.OK);
+    expect(response.readAsString(), completes);
   });
 }
diff --git a/test/get_handler_test.dart b/test/get_handler_test.dart
index bdb150b..1c1a510 100644
--- a/test/get_handler_test.dart
+++ b/test/get_handler_test.dart
@@ -2,59 +2,36 @@
 // 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.
 
-import 'dart:io';
 import 'package:path/path.dart' as p;
-import 'package:scheduled_test/descriptor.dart' as d;
-import 'package:scheduled_test/scheduled_test.dart';
+import 'package:test_descriptor/test_descriptor.dart' as d;
+import 'package:test/test.dart';
 
 import 'package:shelf_static/shelf_static.dart';
 
 void main() {
-  setUp(() {
-    var tempDir;
-    schedule(() {
-      return Directory.systemTemp.createTemp('shelf_static-test-').then((dir) {
-        tempDir = dir;
-        d.defaultRoot = tempDir.path;
-      });
-    });
-
-    d.file('root.txt', 'root txt').create();
-    d.dir('files', [
+  setUp(() async {
+    await d.file('root.txt', 'root txt').create();
+    await d.dir('files', [
       d.file('test.txt', 'test txt content'),
       d.file('with space.txt', 'with space content')
     ]).create();
-
-    currentSchedule.onComplete.schedule(() {
-      d.defaultRoot = null;
-      return tempDir.delete(recursive: true);
-    });
   });
 
-  test('non-existent relative path', () {
-    schedule(() {
-      expect(() => createStaticHandler('random/relative'), throwsArgumentError);
-    });
+  test('non-existent relative path', () async {
+    expect(() => createStaticHandler('random/relative'), throwsArgumentError);
   });
 
-  test('existing relative path', () {
-    schedule(() {
-      var existingRelative = p.relative(d.defaultRoot);
-      expect(() => createStaticHandler(existingRelative), returnsNormally);
-    });
+  test('existing relative path', () async {
+    var existingRelative = p.relative(d.sandbox);
+    expect(() => createStaticHandler(existingRelative), returnsNormally);
   });
 
   test('non-existent absolute path', () {
-    schedule(() {
-      var nonExistingAbsolute = p.join(d.defaultRoot, 'not_here');
-      expect(
-          () => createStaticHandler(nonExistingAbsolute), throwsArgumentError);
-    });
+    var nonExistingAbsolute = p.join(d.sandbox, 'not_here');
+    expect(() => createStaticHandler(nonExistingAbsolute), throwsArgumentError);
   });
 
   test('existing absolute path', () {
-    schedule(() {
-      expect(() => createStaticHandler(d.defaultRoot), returnsNormally);
-    });
+    expect(() => createStaticHandler(d.sandbox), returnsNormally);
   });
 }
diff --git a/test/sample_test.dart b/test/sample_test.dart
index cf4892d..1c4b85f 100644
--- a/test/sample_test.dart
+++ b/test/sample_test.dart
@@ -6,7 +6,7 @@
 import 'dart:io';
 
 import 'package:path/path.dart' as p;
-import 'package:scheduled_test/scheduled_test.dart';
+import 'package:test/test.dart';
 
 import 'package:shelf/shelf.dart';
 import 'package:shelf_static/shelf_static.dart';
@@ -15,38 +15,35 @@
 
 void main() {
   group('/index.html', () {
-    test('body is correct', () {
-      return _testFileContents('index.html');
+    test('body is correct', () async {
+      await _testFileContents('index.html');
     });
 
-    test('mimeType is text/html', () {
-      return _requestFile('index.html').then((response) {
-        expect(response.mimeType, 'text/html');
+    test('mimeType is text/html', () async {
+      var response = await _requestFile('index.html');
+      expect(response.mimeType, 'text/html');
+    });
+
+    group('/favicon.ico', () {
+      test('body is correct', () async {
+        await _testFileContents('favicon.ico');
       });
-    });
-  });
 
-  group('/favicon.ico', () {
-    test('body is correct', () {
-      return _testFileContents('favicon.ico');
-    });
-
-    test('mimeType is text/html', () {
-      return _requestFile('favicon.ico').then((response) {
+      test('mimeType is text/html', () async {
+        var response = await _requestFile('favicon.ico');
         expect(response.mimeType, 'image/x-icon');
       });
     });
   });
 
   group('/dart.png', () {
-    test('body is correct', () {
-      return _testFileContents('dart.png');
+    test('body is correct', () async {
+      await _testFileContents('dart.png');
     });
 
-    test('mimeType is image/png', () {
-      return _requestFile('dart.png').then((response) {
-        expect(response.mimeType, 'image/png');
-      });
+    test('mimeType is image/png', () async {
+      var response = await _requestFile('dart.png');
+      expect(response.mimeType, 'image/png');
     });
   });
 }
@@ -57,30 +54,28 @@
   return _request(new Request('GET', uri));
 }
 
-Future _testFileContents(String filename) {
+Future _testFileContents(String filename) async {
   var filePath = p.join(_samplePath, filename);
   var file = new File(filePath);
   var fileContents = file.readAsBytesSync();
   var fileStat = file.statSync();
 
-  return _requestFile(filename).then((response) {
-    expect(response.contentLength, fileStat.size);
-    expect(response.lastModified, atSameTimeToSecond(fileStat.changed.toUtc()));
-    return _expectCompletesWithBytes(response, fileContents);
-  });
+  var response = await _requestFile(filename);
+  expect(response.contentLength, fileStat.size);
+  expect(response.lastModified, atSameTimeToSecond(fileStat.changed.toUtc()));
+  await _expectCompletesWithBytes(response, fileContents);
 }
 
-Future _expectCompletesWithBytes(Response response, List<int> expectedBytes) {
-  return response.read().toList().then((List<List<int>> bytes) {
-    var flatBytes = bytes.expand((e) => e);
-    expect(flatBytes, orderedEquals(expectedBytes));
-  });
+Future _expectCompletesWithBytes(
+    Response response, List<int> expectedBytes) async {
+  var bytes = await response.read().toList();
+  var flatBytes = bytes.expand((e) => e);
+  expect(flatBytes, orderedEquals(expectedBytes));
 }
 
-Future<Response> _request(Request request) {
+Future<Response> _request(Request request) async {
   var handler = createStaticHandler(_samplePath);
-
-  return new Future.sync(() => handler(request));
+  return await handler(request);
 }
 
 String get _samplePath {
diff --git a/test/symbolic_link_test.dart b/test/symbolic_link_test.dart
index ad2b747..8a95288 100644
--- a/test/symbolic_link_test.dart
+++ b/test/symbolic_link_test.dart
@@ -4,179 +4,132 @@
 
 import 'dart:io';
 import 'package:path/path.dart' as p;
-import 'package:scheduled_test/descriptor.dart' as d;
-import 'package:scheduled_test/scheduled_test.dart';
+import 'package:test_descriptor/test_descriptor.dart' as d;
+import 'package:test/test.dart';
 
 import 'package:shelf_static/shelf_static.dart';
 import 'test_util.dart';
 
 void main() {
-  setUp(() {
-    var tempDir;
-    schedule(() {
-      return Directory.systemTemp.createTemp('shelf_static-test-').then((dir) {
-        tempDir = dir;
-        d.defaultRoot = tempDir.path;
-      });
-    });
-
-    d.dir('originals', [
+  setUp(() async {
+    await d.dir('originals', [
       d.file('index.html', '<html></html>'),
     ]).create();
 
-    d.dir('alt_root').create();
+    await d.dir('alt_root').create();
 
-    schedule(() {
-      var originalsDir = p.join(d.defaultRoot, 'originals');
-      var originalsIndex = p.join(originalsDir, 'index.html');
+    var originalsDir = p.join(d.sandbox, 'originals');
+    var originalsIndex = p.join(originalsDir, 'index.html');
 
-      new Link(p.join(d.defaultRoot, 'link_index.html'))
-          .createSync(originalsIndex);
+    new Link(p.join(d.sandbox, 'link_index.html')).createSync(originalsIndex);
 
-      new Link(p.join(d.defaultRoot, 'link_dir')).createSync(originalsDir);
+    new Link(p.join(d.sandbox, 'link_dir')).createSync(originalsDir);
 
-      new Link(p.join(d.defaultRoot, 'alt_root', 'link_index.html'))
-          .createSync(originalsIndex);
+    new Link(p.join(d.sandbox, 'alt_root', 'link_index.html'))
+        .createSync(originalsIndex);
 
-      new Link(p.join(d.defaultRoot, 'alt_root', 'link_dir'))
-          .createSync(originalsDir);
-    });
-
-    currentSchedule.onComplete.schedule(() {
-      d.defaultRoot = null;
-      return tempDir.delete(recursive: true);
-    });
+    new Link(p.join(d.sandbox, 'alt_root', 'link_dir'))
+        .createSync(originalsDir);
   });
 
   group('access outside of root disabled', () {
-    test('access real file', () {
-      schedule(() {
-        var handler = createStaticHandler(d.defaultRoot);
+    test('access real file', () async {
+      var handler = createStaticHandler(d.sandbox);
 
-        return makeRequest(handler, '/originals/index.html').then((response) {
-          expect(response.statusCode, HttpStatus.OK);
-          expect(response.contentLength, 13);
-          expect(response.readAsString(), completion('<html></html>'));
-        });
-      });
+      var response = await makeRequest(handler, '/originals/index.html');
+      expect(response.statusCode, HttpStatus.OK);
+      expect(response.contentLength, 13);
+      expect(response.readAsString(), completion('<html></html>'));
     });
 
     group('links under root dir', () {
-      test('access sym linked file in real dir', () {
-        schedule(() {
-          var handler = createStaticHandler(d.defaultRoot);
+      test('access sym linked file in real dir', () async {
+        var handler = createStaticHandler(d.sandbox);
 
-          return makeRequest(handler, '/link_index.html').then((response) {
-            expect(response.statusCode, HttpStatus.OK);
-            expect(response.contentLength, 13);
-            expect(response.readAsString(), completion('<html></html>'));
-          });
-        });
+        var response = await makeRequest(handler, '/link_index.html');
+        expect(response.statusCode, HttpStatus.OK);
+        expect(response.contentLength, 13);
+        expect(response.readAsString(), completion('<html></html>'));
       });
 
-      test('access file in sym linked dir', () {
-        schedule(() {
-          var handler = createStaticHandler(d.defaultRoot);
+      test('access file in sym linked dir', () async {
+        var handler = createStaticHandler(d.sandbox);
 
-          return makeRequest(handler, '/link_dir/index.html').then((response) {
-            expect(response.statusCode, HttpStatus.OK);
-            expect(response.contentLength, 13);
-            expect(response.readAsString(), completion('<html></html>'));
-          });
-        });
+        var response = await makeRequest(handler, '/link_dir/index.html');
+        expect(response.statusCode, HttpStatus.OK);
+        expect(response.contentLength, 13);
+        expect(response.readAsString(), completion('<html></html>'));
       });
     });
 
     group('links not under root dir', () {
-      test('access sym linked file in real dir', () {
-        schedule(() {
-          var handler = createStaticHandler(p.join(d.defaultRoot, 'alt_root'));
+      test('access sym linked file in real dir', () async {
+        var handler = createStaticHandler(p.join(d.sandbox, 'alt_root'));
 
-          return makeRequest(handler, '/link_index.html').then((response) {
-            expect(response.statusCode, HttpStatus.NOT_FOUND);
-          });
-        });
+        var response = await makeRequest(handler, '/link_index.html');
+        expect(response.statusCode, HttpStatus.NOT_FOUND);
       });
 
-      test('access file in sym linked dir', () {
-        schedule(() {
-          var handler = createStaticHandler(p.join(d.defaultRoot, 'alt_root'));
+      test('access file in sym linked dir', () async {
+        var handler = createStaticHandler(p.join(d.sandbox, 'alt_root'));
 
-          return makeRequest(handler, '/link_dir/index.html').then((response) {
-            expect(response.statusCode, HttpStatus.NOT_FOUND);
-          });
-        });
+        var response = await makeRequest(handler, '/link_dir/index.html');
+        expect(response.statusCode, HttpStatus.NOT_FOUND);
       });
     });
   });
 
   group('access outside of root enabled', () {
-    test('access real file', () {
-      schedule(() {
-        var handler =
-            createStaticHandler(d.defaultRoot, serveFilesOutsidePath: true);
+    test('access real file', () async {
+      var handler = createStaticHandler(d.sandbox, serveFilesOutsidePath: true);
 
-        return makeRequest(handler, '/originals/index.html').then((response) {
-          expect(response.statusCode, HttpStatus.OK);
-          expect(response.contentLength, 13);
-          expect(response.readAsString(), completion('<html></html>'));
-        });
-      });
+      var response = await makeRequest(handler, '/originals/index.html');
+      expect(response.statusCode, HttpStatus.OK);
+      expect(response.contentLength, 13);
+      expect(response.readAsString(), completion('<html></html>'));
     });
 
     group('links under root dir', () {
-      test('access sym linked file in real dir', () {
-        schedule(() {
-          var handler =
-              createStaticHandler(d.defaultRoot, serveFilesOutsidePath: true);
+      test('access sym linked file in real dir', () async {
+        var handler =
+            createStaticHandler(d.sandbox, serveFilesOutsidePath: true);
 
-          return makeRequest(handler, '/link_index.html').then((response) {
-            expect(response.statusCode, HttpStatus.OK);
-            expect(response.contentLength, 13);
-            expect(response.readAsString(), completion('<html></html>'));
-          });
-        });
+        var response = await makeRequest(handler, '/link_index.html');
+        expect(response.statusCode, HttpStatus.OK);
+        expect(response.contentLength, 13);
+        expect(response.readAsString(), completion('<html></html>'));
       });
 
-      test('access file in sym linked dir', () {
-        schedule(() {
-          var handler =
-              createStaticHandler(d.defaultRoot, serveFilesOutsidePath: true);
+      test('access file in sym linked dir', () async {
+        var handler =
+            createStaticHandler(d.sandbox, serveFilesOutsidePath: true);
 
-          return makeRequest(handler, '/link_dir/index.html').then((response) {
-            expect(response.statusCode, HttpStatus.OK);
-            expect(response.contentLength, 13);
-            expect(response.readAsString(), completion('<html></html>'));
-          });
-        });
+        var response = await makeRequest(handler, '/link_dir/index.html');
+        expect(response.statusCode, HttpStatus.OK);
+        expect(response.contentLength, 13);
+        expect(response.readAsString(), completion('<html></html>'));
       });
     });
 
     group('links not under root dir', () {
-      test('access sym linked file in real dir', () {
-        schedule(() {
-          var handler = createStaticHandler(p.join(d.defaultRoot, 'alt_root'),
-              serveFilesOutsidePath: true);
+      test('access sym linked file in real dir', () async {
+        var handler = createStaticHandler(p.join(d.sandbox, 'alt_root'),
+            serveFilesOutsidePath: true);
 
-          return makeRequest(handler, '/link_index.html').then((response) {
-            expect(response.statusCode, HttpStatus.OK);
-            expect(response.contentLength, 13);
-            expect(response.readAsString(), completion('<html></html>'));
-          });
-        });
+        var response = await makeRequest(handler, '/link_index.html');
+        expect(response.statusCode, HttpStatus.OK);
+        expect(response.contentLength, 13);
+        expect(response.readAsString(), completion('<html></html>'));
       });
 
-      test('access file in sym linked dir', () {
-        schedule(() {
-          var handler = createStaticHandler(p.join(d.defaultRoot, 'alt_root'),
-              serveFilesOutsidePath: true);
+      test('access file in sym linked dir', () async {
+        var handler = createStaticHandler(p.join(d.sandbox, 'alt_root'),
+            serveFilesOutsidePath: true);
 
-          return makeRequest(handler, '/link_dir/index.html').then((response) {
-            expect(response.statusCode, HttpStatus.OK);
-            expect(response.contentLength, 13);
-            expect(response.readAsString(), completion('<html></html>'));
-          });
-        });
+        var response = await makeRequest(handler, '/link_dir/index.html');
+        expect(response.statusCode, HttpStatus.OK);
+        expect(response.contentLength, 13);
+        expect(response.readAsString(), completion('<html></html>'));
       });
     });
   });
diff --git a/test/test_all.dart b/test/test_all.dart
deleted file mode 100644
index e2529f4..0000000
--- a/test/test_all.dart
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright (c) 2015, 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.
-
-import 'package:scheduled_test/scheduled_test.dart';
-
-import 'alternative_root_test.dart' as alternative_root;
-import 'basic_file_test.dart' as basic_file;
-import 'default_document_test.dart' as default_document;
-import 'directory_listing_test.dart' as directory_listing;
-import 'get_handler_test.dart' as get_handler;
-import 'sample_test.dart' as sample;
-import 'symbolic_link_test.dart' as symbolic_link;
-
-void main() {
-  group('alternative_root', alternative_root.main);
-  group('basic_file', basic_file.main);
-  group('default_document', default_document.main);
-  group('directory_listing', directory_listing.main);
-  group('get_handler', get_handler.main);
-  group('sample', sample.main);
-  group('symbolic_link', symbolic_link.main);
-}