// Copyright (c) 2018, 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 String readLineSync({
///   Encoding encoding: systemEncoding,
///   bool retainNewlines: false
///   })
/// The argument [encoding] can be used to changed how the input should be
/// decoded.
/// @description Checks that input string with utf8 encoding is correctly passed.
/// @author iarkh@unipro.ru

import "dart:convert";
import "dart:io";
import "test.lib.dart";

List<int> expected = utf8.encode("TESTME Тест для проверки 1âã");
String str = utf8.decode(expected);

void run_process(String filename, Encoding enc) async {
  String? res = stdin.readLineSync(encoding : enc);
  res = res ?? "";
  File fl = new File(filename);
  await fl.writeAsString(res);
}

void run(Process process) { process.stdin.writeln(str); }

main(List<String> args) {
  if (args.length > 0) {
    run_process(args[0], utf8);
  } else {
    run_main(run, str);
  }
}
