// 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 Future<File> writeAsString(
///  String contents, {
///  FileMode mode: FileMode.write,
///  Encoding encoding: utf8,
///  bool flush: false
///  })
/// Write a string to a file.
///
/// Opens the file, writes the string in the given encoding, and closes the file.
/// Returns a Future<File> that completes with this File object once the entire
/// operation has completed.
///
/// By default writeAsString creates the file for writing and truncates the file
/// if it already exists. In order to append the bytes to an existing file, pass
/// FileMode.append as the optional mode parameter.
///
/// If the argument flush is set to true, the data written will be flushed to the
/// file system before the returned future completes.
/// @description Checks that this method writes a string to a file in a utf8
/// encoding
/// @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);
  String toWrite = "File content: Кириллица прекрасна";
  asyncStart();
  await file.writeAsString(toWrite).then((f) {
    Expect.equals(toWrite, f.readAsStringSync());
    Expect.equals(toWrite, file.readAsStringSync());
    asyncEnd();
  });
}
