| Index: test/runner/signal_test.dart | 
| diff --git a/test/runner/signal_test.dart b/test/runner/signal_test.dart | 
| index 5397d0767b42e9abd8dfc62b79605c65ea010bd1..63e8e7bd22d7e5dea8e489607de5e99548e92ea0 100644 | 
| --- a/test/runner/signal_test.dart | 
| +++ b/test/runner/signal_test.dart | 
| @@ -82,7 +82,11 @@ import 'dart:io'; | 
| import 'package:test/test.dart'; | 
|  | 
| void main() { | 
| -  tearDown(() => new File("output").writeAsStringSync("ran teardown")); | 
| +  tearDownAll(() { | 
| +    new File("output_all").writeAsStringSync("ran tearDownAll"); | 
| +  }); | 
| + | 
| +  tearDown(() => new File("output").writeAsStringSync("ran tearDown")); | 
|  | 
| test("test", () { | 
| print("running test"); | 
| @@ -95,7 +99,34 @@ void main() { | 
| test.stdout.expect(consumeThrough("running test")); | 
| signalAndQuit(test); | 
|  | 
| -      d.file("output", "ran teardown").validate(); | 
| +      d.file("output", "ran tearDown").validate(); | 
| +      d.file("output_all", "ran tearDownAll").validate(); | 
| +      expectTempDirEmpty(); | 
| +    }); | 
| + | 
| +    test("waits for an active tearDownAll to finish running", () { | 
| +      d.file("test.dart", """ | 
| +import 'dart:async'; | 
| +import 'dart:io'; | 
| + | 
| +import 'package:test/test.dart'; | 
| + | 
| +void main() { | 
| +  tearDownAll(() async { | 
| +    print("running tearDownAll"); | 
| +    await new Future.delayed(new Duration(seconds: 1)); | 
| +    new File("output").writeAsStringSync("ran tearDownAll"); | 
| +  }); | 
| + | 
| +  test("test", () {}); | 
| +} | 
| +""").create(); | 
| + | 
| +      var test = _runTest(["test.dart"]); | 
| +      test.stdout.expect(consumeThrough("running tearDownAll")); | 
| +      signalAndQuit(test); | 
| + | 
| +      d.file("output", "ran tearDownAll").validate(); | 
| expectTempDirEmpty(); | 
| }); | 
|  | 
|  |