| Index: tests/standalone/io/file_blocking_lock_script.dart
|
| diff --git a/tests/standalone/io/file_blocking_lock_script.dart b/tests/standalone/io/file_blocking_lock_script.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..5c955c49e70959ae3ad42a74c77fa1c51421b22b
|
| --- /dev/null
|
| +++ b/tests/standalone/io/file_blocking_lock_script.dart
|
| @@ -0,0 +1,50 @@
|
| +// Copyright (c) 2016, 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.
|
| +//
|
| +// Script used by the file_lock_test.dart test.
|
| +
|
| +import "dart:async";
|
| +import "dart:io";
|
| +
|
| +Future<int> testLockWholeFile(File file, int len) async {
|
| + var raf = await file.open(mode: APPEND);
|
| + await raf.setPosition(0);
|
| + int nextToWrite = 1;
|
| + while (nextToWrite <= len) {
|
| + await raf.lock(FileLock.BLOCKING_EXCLUSIVE, 0, len);
|
| +
|
| + int at;
|
| + int p;
|
| + while (true) {
|
| + p = await raf.position();
|
| + at = await raf.readByte();
|
| + if (at == 0 || at == -1) break;
|
| + nextToWrite++;
|
| + }
|
| + await raf.setPosition(p);
|
| + await raf.writeByte(nextToWrite);
|
| + await raf.flush();
|
| + nextToWrite++;
|
| + await raf.unlock(0, len);
|
| + }
|
| +
|
| + await raf.lock(FileLock.BLOCKING_EXCLUSIVE, 0, len);
|
| + await raf.setPosition(0);
|
| + for (int i = 1; i <= len; i++) {
|
| + if ((await raf.readByte()) != i) {
|
| + await raf.unlock(0, len);
|
| + await raf.close();
|
| + return 1;
|
| + }
|
| + }
|
| + await raf.unlock(0, len);
|
| + await raf.close();
|
| + return 0;
|
| +}
|
| +
|
| +main(List<String> args) async {
|
| + File file = new File(args[0]);
|
| + int len = int.parse(args[1]);
|
| + exit(await testLockWholeFile(file, len));
|
| +}
|
|
|