| Index: tests/standalone/io/file_error_test.dart | 
| diff --git a/tests/standalone/io/file_error_test.dart b/tests/standalone/io/file_error_test.dart | 
| index 6aef13af9f7691a865fb769ae31775e01c5c42b5..57ffce261c46cbcddc09401b4d54fd498446d42f 100644 | 
| --- a/tests/standalone/io/file_error_test.dart | 
| +++ b/tests/standalone/io/file_error_test.dart | 
| @@ -8,9 +8,7 @@ | 
| #import("dart:isolate"); | 
|  | 
| Directory tempDir() { | 
| -  var d = new Directory(''); | 
| -  d.createTempSync(); | 
| -  return d; | 
| +  return new Directory('').createTempSync(); | 
| } | 
|  | 
|  | 
| @@ -62,11 +60,13 @@ void testOpenNonExistent() { | 
| Expect.throws(() => file.openSync(), | 
| (e) => checkOpenNonExistentFileException(e)); | 
|  | 
| -  file.open(FileMode.READ, (raf) => Expect.fail("Unreachable code")); | 
| -  file.onError = (e) { | 
| +  var openFuture = file.open(FileMode.READ); | 
| +  openFuture.then((raf) => Expect.fail("Unreachable code")); | 
| +  openFuture.handleException((e) { | 
| checkOpenNonExistentFileException(e); | 
| p.toSendPort().send(null); | 
| -  }; | 
| +    return true; | 
| +  }); | 
| } | 
|  | 
|  | 
| @@ -83,11 +83,13 @@ void testDeleteNonExistent() { | 
| Expect.throws(() => file.deleteSync(), | 
| (e) => checkDeleteNonExistentFileException(e)); | 
|  | 
| -  file.delete(() => Expect.fail("Unreachable code")); | 
| -  file.onError = (e) { | 
| +  var delete = file.delete(); | 
| +  delete.then((ignore) => Expect.fail("Unreachable code")); | 
| +  delete.handleException((e) { | 
| checkDeleteNonExistentFileException(e); | 
| p.toSendPort().send(null); | 
| -  }; | 
| +    return true; | 
| +  }); | 
| } | 
|  | 
|  | 
| @@ -104,11 +106,13 @@ void testLengthNonExistent() { | 
| Expect.throws(() => file.lengthSync(), | 
| (e) => checkLengthNonExistentFileException(e)); | 
|  | 
| -  file.length((len) => Expect.fail("Unreachable code")); | 
| -  file.onError = (e) { | 
| +  var lenFuture = file.length(); | 
| +  lenFuture.then((len) => Expect.fail("Unreachable code")); | 
| +  lenFuture.handleException((e) { | 
| checkLengthNonExistentFileException(e); | 
| p.toSendPort().send(null); | 
| -  }; | 
| +    return true; | 
| +  }); | 
| } | 
|  | 
|  | 
| @@ -145,11 +149,13 @@ void testCreateInNonExistentDirectory() { | 
| Expect.throws(() => file.createSync(), | 
| (e) => checkCreateInNonExistentDirectoryException(e)); | 
|  | 
| -  file.create(() => Expect.fail("Unreachable code")); | 
| -  file.onError = (e) { | 
| +  var create = file.create(); | 
| +  create.then((ignore) => Expect.fail("Unreachable code")); | 
| +  create.handleException((e) { | 
| checkCreateInNonExistentDirectoryException(e); | 
| p.toSendPort().send(null); | 
| -  }; | 
| +    return true; | 
| +  }); | 
| } | 
|  | 
| bool checkFullPathOnNonExistentDirectoryException(e) { | 
| @@ -184,11 +190,13 @@ void testFullPathOnNonExistentDirectory() { | 
| Expect.throws(() => file.fullPathSync(), | 
| (e) => checkFullPathOnNonExistentDirectoryException(e)); | 
|  | 
| -  file.fullPath((path) => Expect.fail("Unreachable code $path")); | 
| -  file.onError = (e) { | 
| +  var fullPathFuture = file.fullPath(); | 
| +  fullPathFuture.then((path) => Expect.fail("Unreachable code $path")); | 
| +  fullPathFuture.handleException((e) { | 
| checkFullPathOnNonExistentDirectoryException(e); | 
| p.toSendPort().send(null); | 
| -  }; | 
| +    return true; | 
| +  }); | 
| } | 
|  | 
| bool checkDirectoryInNonExistentDirectoryException(e) { | 
| @@ -224,11 +232,13 @@ void testDirectoryInNonExistentDirectory() { | 
| Expect.throws(() => file.directorySync(), | 
| (e) => checkDirectoryInNonExistentDirectoryException(e)); | 
|  | 
| -  file.directory((directory) => Expect.fail("Unreachable code")); | 
| -  file.onError = (e) { | 
| +  var dirFuture = file.directory(); | 
| +  dirFuture.then((directory) => Expect.fail("Unreachable code")); | 
| +  dirFuture.handleException((e) { | 
| checkDirectoryInNonExistentDirectoryException(e); | 
| p.toSendPort().send(null); | 
| -  }; | 
| +    return true; | 
| +  }); | 
| } | 
|  | 
| void testReadAsBytesNonExistent() { | 
| @@ -244,11 +254,13 @@ void testReadAsBytesNonExistent() { | 
| Expect.throws(() => file.readAsBytesSync(), | 
| (e) => checkOpenNonExistentFileException(e)); | 
|  | 
| -  file.readAsBytes((data) => Expect.fail("Unreachable code")); | 
| -  file.onError = (e) { | 
| +  var readAsBytesFuture = file.readAsBytes(); | 
| +  readAsBytesFuture.then((data) => Expect.fail("Unreachable code")); | 
| +  readAsBytesFuture.handleException((e) { | 
| checkOpenNonExistentFileException(e); | 
| p.toSendPort().send(null); | 
| -  }; | 
| +    return true; | 
| +  }); | 
| } | 
|  | 
| void testReadAsTextNonExistent() { | 
| @@ -264,11 +276,13 @@ void testReadAsTextNonExistent() { | 
| Expect.throws(() => file.readAsTextSync(), | 
| (e) => checkOpenNonExistentFileException(e)); | 
|  | 
| -  file.readAsText(Encoding.ASCII, (data) => Expect.fail("Unreachable code")); | 
| -  file.onError = (e) { | 
| +  var readAsTextFuture = file.readAsText(Encoding.ASCII); | 
| +  readAsTextFuture.then((data) => Expect.fail("Unreachable code")); | 
| +  readAsTextFuture.handleException((e) { | 
| checkOpenNonExistentFileException(e); | 
| p.toSendPort().send(null); | 
| -  }; | 
| +    return true; | 
| +  }); | 
| } | 
|  | 
| testReadAsLinesNonExistent() { | 
| @@ -284,11 +298,13 @@ testReadAsLinesNonExistent() { | 
| Expect.throws(() => file.readAsLinesSync(), | 
| (e) => checkOpenNonExistentFileException(e)); | 
|  | 
| -  file.readAsLines(Encoding.ASCII, (data) => Expect.fail("Unreachable code")); | 
| -  file.onError = (e) { | 
| +  var readAsLinesFuture = file.readAsLines(Encoding.ASCII); | 
| +  readAsLinesFuture.then((data) => Expect.fail("Unreachable code")); | 
| +  readAsLinesFuture.handleException((e) { | 
| checkOpenNonExistentFileException(e); | 
| p.toSendPort().send(null); | 
| -  }; | 
| +    return true; | 
| +  }); | 
| } | 
|  | 
| bool checkWriteReadOnlyFileException(e) { | 
| @@ -318,17 +334,18 @@ createTestFile(callback) { | 
|  | 
| testWriteByteToReadOnlyFile() { | 
| createTestFile((file, port) { | 
| -      var openedFile = file.openSync(FileMode.READ); | 
| +    var openedFile = file.openSync(FileMode.READ); | 
|  | 
| -      // Writing to read only file should throw an exception. | 
| -      Expect.throws(() => openedFile.writeByteSync(0), | 
| -                    (e) => checkWriteReadOnlyFileException(e)); | 
| +    // Writing to read only file should throw an exception. | 
| +    Expect.throws(() => openedFile.writeByteSync(0), | 
| +                  (e) => checkWriteReadOnlyFileException(e)); | 
|  | 
| -      openedFile.writeByte(0); | 
| -      openedFile.onError = (e) { | 
| -        checkWriteReadOnlyFileException(e); | 
| -        openedFile.close(() => port.send(null)); | 
| -    }; | 
| +    var writeByteFuture = openedFile.writeByte(0); | 
| +    writeByteFuture.handleException((e) { | 
| +      checkWriteReadOnlyFileException(e); | 
| +      openedFile.close().then((ignore) => port.send(null)); | 
| +      return true; | 
| +    }); | 
| }); | 
| } | 
|  | 
| @@ -341,11 +358,12 @@ testWriteListToReadOnlyFile() { | 
| Expect.throws(() => openedFile.writeListSync(data, 0, data.length), | 
| (e) => checkWriteReadOnlyFileException(e)); | 
|  | 
| -    openedFile.writeList(data, 0, data.length); | 
| -    openedFile.onError = (e) { | 
| +    var writeListFuture = openedFile.writeList(data, 0, data.length); | 
| +    writeListFuture.handleException((e) { | 
| checkWriteReadOnlyFileException(e); | 
| -      openedFile.close(() => port.send(null)); | 
| -    }; | 
| +      openedFile.close().then((ignore) => port.send(null)); | 
| +      return true; | 
| +    }); | 
| }); | 
| } | 
|  | 
| @@ -360,11 +378,13 @@ testTruncateReadOnlyFile() { | 
| Expect.throws(() => openedFile.truncateSync(0), | 
| (e) => checkWriteReadOnlyFileException(e)); | 
|  | 
| -    openedFile.truncate(0, () => Expect.fail("Unreachable code")); | 
| -    openedFile.onError = (e) { | 
| +    var truncateFuture = openedFile.truncate(0); | 
| +    truncateFuture.then((ignore) => Expect.fail("Unreachable code")); | 
| +    truncateFuture.handleException((e) { | 
| checkWriteReadOnlyFileException(e); | 
| -      openedFile.close(() => port.send(null)); | 
| -    }; | 
| +      openedFile.close().then((ignore) => port.send(null)); | 
| +      return true; | 
| +    }); | 
| }); | 
| } | 
|  | 
| @@ -403,46 +423,69 @@ testOperateOnClosedFile() { | 
| (e) => checkFileClosedException(e)); | 
|  | 
| var errorCount = 0; | 
| -    openedFile.readByte((byte) => Expect.fail("Unreachable code")); | 
| + | 
| +    _errorHandler(e) { | 
| +      checkFileClosedException(e); | 
| +      if (--errorCount == 0) { | 
| +        port.send(null); | 
| +      } | 
| +      return true; | 
| +    } | 
| + | 
| +    var readByteFuture = openedFile.readByte(); | 
| +    readByteFuture.then((byte) => Expect.fail("Unreachable code")); | 
| +    readByteFuture.handleException(_errorHandler); | 
| errorCount++; | 
| -    openedFile.writeByte(0); | 
| +    var writeByteFuture = openedFile.writeByte(0); | 
| +    writeByteFuture.then((ignore) => Expect.fail("Unreachable code")); | 
| +    writeByteFuture.handleException(_errorHandler); | 
| errorCount++; | 
| -    openedFile.readList( | 
| -        data, 0, data.length, (bytesRead) => Expect.fail("Unreachable code")); | 
| +    var readListFuture = openedFile.readList(data, 0, data.length); | 
| +    readListFuture.then((bytesRead) => Expect.fail("Unreachable code")); | 
| +    readListFuture.handleException(_errorHandler); | 
| errorCount++; | 
| -    openedFile.writeList(data, 0, data.length); | 
| +    var writeListFuture = openedFile.writeList(data, 0, data.length); | 
| +    writeListFuture.then((ignore) => Expect.fail("Unreachable code")); | 
| +    writeListFuture.handleException(_errorHandler); | 
| errorCount++; | 
| -    openedFile.writeString("Hello"); | 
| +    var writeStringFuture = openedFile.writeString("Hello"); | 
| +    writeStringFuture.then((ignore) => Expect.fail("Unreachable code")); | 
| +    writeStringFuture.handleException(_errorHandler); | 
| errorCount++; | 
| -    openedFile.position((position) => Expect.fail("Unreachable code")); | 
| +    var positionFuture = openedFile.position(); | 
| +    positionFuture.then((position) => Expect.fail("Unreachable code")); | 
| +    positionFuture.handleException(_errorHandler); | 
| errorCount++; | 
| -    openedFile.setPosition(0, () => Expect.fail("Unreachable code")); | 
| +    var setPositionFuture = openedFile.setPosition(0); | 
| +    setPositionFuture.then((ignore) => Expect.fail("Unreachable code")); | 
| +    setPositionFuture.handleException(_errorHandler); | 
| errorCount++; | 
| -    openedFile.truncate(0, () => Expect.fail("Unreachable code")); | 
| +    var truncateFuture = openedFile.truncate(0); | 
| +    truncateFuture.then((ignore) => Expect.fail("Unreachable code")); | 
| +    truncateFuture.handleException(_errorHandler); | 
| errorCount++; | 
| -    openedFile.length((length) => Expect.fail("Unreachable code")); | 
| +    var lenFuture = openedFile.length(); | 
| +    lenFuture.then((length) => Expect.fail("Unreachable code")); | 
| +    lenFuture.handleException(_errorHandler); | 
| errorCount++; | 
| -    openedFile.flush(() => Expect.fail("Unreachable code")); | 
| +    var flushFuture = openedFile.flush(); | 
| +    flushFuture.then((ignore) => Expect.fail("Unreachable code")); | 
| +    flushFuture.handleException(_errorHandler); | 
| errorCount++; | 
| - | 
| -    openedFile.onError = (e) { | 
| -      checkFileClosedException(e); | 
| -      if (--errorCount == 0) { | 
| -        port.send(null); | 
| -      } | 
| -    }; | 
| }); | 
| } | 
|  | 
| testRepeatedlyCloseFile() { | 
| createTestFile((file, port) { | 
| var openedFile = file.openSync(); | 
| -    openedFile.close(() { | 
| -      openedFile.onError = (e) { | 
| +    openedFile.close().then((ignore) { | 
| +      var closeFuture = openedFile.close(); | 
| +      closeFuture.handleException((e) { | 
| Expect.isTrue(e is FileIOException); | 
| port.send(null); | 
| -      }; | 
| -      openedFile.close(() => null); | 
| +        return true; | 
| +      }); | 
| +      closeFuture.then((ignore) => null); | 
| }); | 
| }); | 
| } | 
|  |