// 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.

/// @assertion RandomAccessFile openSync({FileMode mode: FileMode.read})
/// Synchronously open the file for random access operations. The result is a
/// RandomAccessFile on which random access operations can be performed. Opened
/// RandomAccessFiles must be closed using the RandomAccessFile.close method.
///
/// See open for information on the mode argument.
///
/// Throws a FileSystemException if the operation fails.
/// @description Checks that this method synchronously open the file for random
/// access operations
/// @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);
  RandomAccessFile raFile = file.openSync();
  Expect.isNotNull(raFile);
  raFile.closeSync();
}
