// 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<RandomAccessFile> writeString(
///     String string, {
///     Encoding encoding: utf8
/// })
/// Writes a string to the file using the given Encoding.
///
/// @description Checks that method writeString writes a string to the file using
/// the given Encoding ASCII.
/// @author ngl@unipro.ru

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

check(String s) {
  File file = getTempFileSync();
  asyncStart();
  Future<RandomAccessFile> raFile = file.open(mode: FileMode.write);
  raFile.then((RandomAccessFile rf) {
    var f = rf.writeString(s, encoding: ascii);
    f.then((RandomAccessFile file) {
      var flen = file.lengthSync();
      rf.setPositionSync(0);
      List<int> l = file.readSync(flen);
      var ed = new AsciiCodec();
      String s1 = ed.decode(l);
      Expect.equals(s, s1);
      asyncEnd();
    }).whenComplete(() {
      rf.closeSync();
      file.deleteSync();
    });
  });
}

main() {
  check("");
  check("abc");
  check('abcdefjhigklmnopqrstuvwxyz1234567890');
}
