// Copyright (c) 2015, 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.

// OtherResources=stdio_nonblocking_script.dart

import "dart:convert";
import "dart:io";

import "package:expect/expect.dart";

void main() {
  var script = Platform.script
      .resolve("stdio_nonblocking_script.dart")
      .toFilePath();
  Process.run(
    Platform.executable,
    []
      ..addAll(Platform.executableArguments)
      ..add('--verbosity=warning')
      ..add(script),
    stdoutEncoding: ascii,
    stderrEncoding: ascii,
  ).then((result) {
    print(result.stdout);
    print(result.stderr);
    Expect.equals(1, result.exitCode);
    Expect.equals('stdout\n\ntuodts\nABCDEFGHIJKLM\n', result.stdout);
    Expect.equals('stderr\n\nrredts\nABCDEFGHIJKLM\n', result.stderr);
  });
}
