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

// @dart = 2.9

/// @assertion void writeCharCode(int charCode)
/// Writes the character of [charCode].
/// This method is equivalent to [write(new String.fromCharCode(charCode))].
/// This operation is non-blocking. See [flush] or [done] for how to get any
/// errors generated by this call.
/// @description Checks that correct char code is written to the result stream
/// and operation is non-blocking.
/// for the [0...127] range.
/// @author iarkh@unipro.ru

import "../../../Utils/expect.dart";
import "dart:io";

String getExpected() {
  String res = "";
  for(int i = 0; i < 128; i++) res += new String.fromCharCode(i);
  return res;
}

run_process(IOSink sink) {
  for(int i = 0; i < 128; i++) {
    sink.writeCharCode(i);
  };
}

run_main(String mode) async {
  String executable = Platform.resolvedExecutable;
  String eScript = Platform.script.toString();
  int called = 0;
  await Process.run(executable, [eScript, mode]).then((ProcessResult results) {
    Expect.equals(getExpected(),
        mode == "err" ? results.stderr : results.stdout);
    called++;
  });
  Expect.equals(1, called);
}

main(List<String> args) {
  if(args.length > 0)
    run_process(args[0] == "err" ? stderr : stdout);
  else {
    run_main("out");
    run_main("err");
  }
}
