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

import 'package:test/test.dart';

import '../descriptor.dart' as d;
import '../test_pub.dart';

main() {
  test('the spawned application can read line-by-line from stdin', () async {
    await d.dir(appPath, [
      d.appPubspec(),
      d.dir("bin", [
        d.file("script.dart", """
          import 'dart:io';

          main() {
            print("started");
            var line1 = stdin.readLineSync();
            print("between");
            var line2 = stdin.readLineSync();
            print(line1);
            print(line2);
          }
        """)
      ])
    ]).create();

    await pubGet();
    var pub = await pubRun(args: ["bin/script"]);

    await expectLater(pub.stdout, emits("started"));
    pub.stdin.writeln("first");
    await expectLater(pub.stdout, emits("between"));
    pub.stdin.writeln("second");
    expect(pub.stdout, emits("first"));
    expect(pub.stdout, emits("second"));
    await pub.shouldExit(0);
  });

  test('the spawned application can read streamed from stdin', () async {
    await d.dir(appPath, [
      d.appPubspec(),
      d.dir("bin", [
        d.file("script.dart", """
          import 'dart:io';

          main() {
            print("started");
            stdin.listen(stdout.add);
          }
        """)
      ])
    ]).create();

    await pubGet();
    var pub = await pubRun(args: ["bin/script"]);

    await expectLater(pub.stdout, emits("started"));
    pub.stdin.writeln("first");
    await expectLater(pub.stdout, emits("first"));
    pub.stdin.writeln("second");
    await expectLater(pub.stdout, emits("second"));
    pub.stdin.writeln("third");
    await expectLater(pub.stdout, emits("third"));
    pub.stdin.close();
    await pub.shouldExit(0);
  });
}
