| // 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. |
| // |
| // Dart test program for testing file I/O. |
| |
| // @dart = 2.9 |
| |
| import 'dart:async'; |
| import 'dart:io'; |
| |
| import "package:async_helper/async_helper.dart"; |
| import "package:expect/expect.dart"; |
| |
| Future withTempDir(String prefix, Future<void> test(Directory dir)) async { |
| var tempDir = Directory.systemTemp.createTempSync(prefix); |
| try { |
| await test(tempDir); |
| } finally { |
| tempDir.deleteSync(recursive: true); |
| } |
| } |
| |
| void withTempDirSync(String prefix, void test(Directory dir)) { |
| var tempDir = Directory.systemTemp.createTempSync(prefix); |
| try { |
| test(tempDir); |
| } finally { |
| tempDir.deleteSync(recursive: true); |
| } |
| } |
| |
| Future expectThrowsAsync(Future future, String message) { |
| return future.then((r) => Expect.fail(message)).catchError((e) {}); |
| } |
| |
| Future write(Directory dir) async { |
| var f = new File("${dir.path}${Platform.pathSeparator}write"); |
| var raf = await f.open(mode: FileMode.writeOnly); |
| await raf.writeString('Hello'); |
| await raf.setPosition(0); |
| await raf.writeString('Hello'); |
| await raf.setPosition(0); |
| await expectThrowsAsync( |
| raf.readByte(), 'Read from write only file succeeded'); |
| await raf.close(); |
| raf = await f.open(mode: FileMode.writeOnlyAppend); |
| await raf.writeString('Hello'); |
| await expectThrowsAsync( |
| raf.readByte(), 'Read from write only file succeeded'); |
| await raf.setPosition(0); |
| await raf.writeString('Hello'); |
| await raf.close(); |
| Expect.equals(f.lengthSync(), 10); |
| } |
| |
| void writeSync(Directory dir) { |
| var f = new File("${dir.path}${Platform.pathSeparator}write_sync"); |
| var raf = f.openSync(mode: FileMode.writeOnly); |
| raf.writeStringSync('Hello'); |
| raf.setPositionSync(0); |
| raf.writeStringSync('Hello'); |
| raf.setPositionSync(0); |
| Expect.throws(() => raf.readByteSync()); |
| raf.closeSync(); |
| } |
| |
| Future openWrite(Directory dir) async { |
| var f = new File("${dir.path}${Platform.pathSeparator}open_write"); |
| var sink = f.openWrite(mode: FileMode.writeOnly); |
| sink.write('Hello'); |
| await sink.close(); |
| sink = await f.openWrite(mode: FileMode.writeOnlyAppend); |
| sink.write('Hello'); |
| await sink.close(); |
| Expect.equals(f.lengthSync(), 10); |
| } |
| |
| main() async { |
| asyncStart(); |
| await withTempDir('file_write_only_test_1_', write); |
| withTempDirSync('file_write_only_test_2_', writeSync); |
| await withTempDir('file_write_only_test_3_', openWrite); |
| asyncEnd(); |
| } |