// Copyright (c) 2017, 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 = 2.9

/// @assertion Future<RandomAccessFile> open({FileMode mode: FileMode.read})
/// Open the file for random access operations. Returns a
/// Future<RandomAccessFile> that completes with the opened random access file.
/// RandomAccessFiles must be closed using the RandomAccessFile.close method.
///
/// Files can be opened in three modes:
/// FileMode.read: open the file for reading.
/// FileMode.write: open the file for both reading and writing and truncate the
/// file to length zero. If the file does not exist the file is created.
///
/// FileMode.append: same as FileMode.write except that the file is not
/// truncated.
/// @description Checks that this method returns a Future<RandomAccessFile> that
/// completes with the opened random access file. Test WRITE mode
/// @author sgrekhov@unipro.ru

import "dart:io";
import "../../../Utils/expect.dart";
import "../file_utils.dart";

main() async {
  await inSandbox(_main);
}

_main(Directory sandbox) async {
  File file = getTempFileSync(parent: sandbox);
  file.writeAsBytesSync([0, 1, 2, 3, 4]);
  asyncStart();
  await file.open(mode: FileMode.write).then((RandomAccessFile raFile) {
    try {
      Expect.equals(0, raFile.lengthSync());
      raFile.writeByteSync(0);
      raFile.writeByteSync(1);
      raFile.writeByteSync(2);
      raFile.writeByteSync(3);
      raFile.setPositionSync(1);
      raFile.writeByteSync(0);
      raFile.setPositionSync(0);
      Expect.equals(0, raFile.readByteSync());
      Expect.equals(0, raFile.readByteSync());
      Expect.equals(2, raFile.readByteSync());
      Expect.equals(3, raFile.readByteSync());
      asyncEnd();
    } finally {
      raFile.closeSync();
    }
  });
}
