/*
 * 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 Latin-1 encoding can be used correctly.
 * correctly.
 * @author iarkh@unipro.ru
 */
import "dart:convert";
import "dart:io";
import "test.lib.dart";
import "../file_utils.dart";

List<int> expected = [1, 2, 3, 128, 129, 200, 254, 255];
String str = latin1.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.writeAsBytes(res.codeUnits);
}

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

main(List<String> args) {
  args.length > 0 ? run_process(args[0], latin1) : run_main(run, str);
}
