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

@TestOn("vm")

import 'dart:async';
import 'dart:io';

import 'package:test_descriptor/test_descriptor.dart' as d;

import 'package:test/test.dart';

import '../io.dart';

void main() {
  test("pauses the test runner for each file until the user presses enter",
      () async {
    await d.file("test1.dart", """
import 'package:test/test.dart';

void main() {
  print('loaded test 1!');

  test("success", () {});
}
""").create();

    await d.file("test2.dart", """
import 'package:test/test.dart';

void main() {
  print('loaded test 2!');

  test("success", () {});
}
""").create();

    var test = await runTest(
        ["--pause-after-load", "-p", "dartium", "test1.dart", "test2.dart"]);
    await expectLater(test.stdout, emitsThrough("loaded test 1!"));
    await expectLater(
        test.stdout,
        emitsThrough(emitsInOrder([
          startsWith("Observatory URL: "),
          "The test runner is paused. Open the dev console in Dartium or the "
              "Observatory and set breakpoints. Once you're finished, return "
              "to this terminal and press Enter."
        ])));

    var nextLineFired = false;
    test.stdout.next.then(expectAsync1((line) {
      expect(line, contains("+0: test1.dart: success"));
      nextLineFired = true;
    }));

    // Wait a little bit to be sure that the tests don't start running without
    // our input.
    await new Future.delayed(new Duration(seconds: 2));
    expect(nextLineFired, isFalse);

    test.stdin.writeln();

    await expectLater(test.stdout, emitsThrough("loaded test 2!"));
    await expectLater(
        test.stdout,
        emitsThrough(emitsInOrder([
          startsWith("Observatory URL: "),
          "The test runner is paused. Open the dev console in Dartium or the "
              "Observatory and set breakpoints. Once you're finished, return "
              "to this terminal and press Enter."
        ])));

    nextLineFired = false;
    test.stdout.next.then(expectAsync1((line) {
      expect(line, contains("+1: test2.dart: success"));
      nextLineFired = true;
    }));

    // Wait a little bit to be sure that the tests don't start running without
    // our input.
    await new Future.delayed(new Duration(seconds: 2));
    expect(nextLineFired, isFalse);

    test.stdin.writeln();
    await expectLater(
        test.stdout, emitsThrough(contains("+2: All tests passed!")));
    await test.shouldExit(0);
  }, tags: 'dartium');

  test("pauses the test runner for each platform until the user presses enter",
      () async {
    await d.file("test.dart", """
import 'package:test/test.dart';

void main() {
  print('loaded test!');

  test("success", () {});
}
""").create();

    var test = await runTest(
        ["--pause-after-load", "-p", "dartium", "-p", "chrome", "test.dart"]);
    await expectLater(test.stdout, emitsThrough("loaded test!"));
    await expectLater(
        test.stdout,
        emitsThrough(emitsInOrder([
          startsWith("Observatory URL: "),
          "The test runner is paused. Open the dev console in Dartium or the "
              "Observatory and set breakpoints. Once you're finished, return "
              "to this terminal and press Enter."
        ])));

    var nextLineFired = false;
    test.stdout.next.then(expectAsync1((line) {
      expect(line, contains("+0: [Dartium] success"));
      nextLineFired = true;
    }));

    // Wait a little bit to be sure that the tests don't start running without
    // our input.
    await new Future.delayed(new Duration(seconds: 2));
    expect(nextLineFired, isFalse);

    test.stdin.writeln();

    await expectLater(test.stdout, emitsThrough("loaded test!"));
    await expectLater(
        test.stdout,
        emitsThrough(emitsInOrder([
          "The test runner is paused. Open the dev console in Chrome and set "
              "breakpoints. Once you're finished, return to this terminal and "
              "press Enter."
        ])));

    nextLineFired = false;
    test.stdout.next.then(expectAsync1((line) {
      expect(line, contains("+1: [Chrome] success"));
      nextLineFired = true;
    }));

    // Wait a little bit to be sure that the tests don't start running without
    // our input.
    await new Future.delayed(new Duration(seconds: 2));
    expect(nextLineFired, isFalse);

    test.stdin.writeln();
    await expectLater(
        test.stdout, emitsThrough(contains("+2: All tests passed!")));
    await test.shouldExit(0);
  }, tags: ['dartium', 'chrome']);

  test("prints a warning and doesn't pause for unsupported platforms",
      () async {
    await d.file("test.dart", """
import 'package:test/test.dart';

void main() {
  test("success", () {});
}
""").create();

    var test = await runTest(["--pause-after-load", "-p", "vm", "test.dart"]);
    await expectLater(test.stderr,
        emits("Warning: Debugging is currently unsupported on the Dart VM."));
    await expectLater(
        test.stdout, emitsThrough(contains("+1: All tests passed!")));
    await test.shouldExit(0);
  });

  test("can mix supported and unsupported platforms", () async {
    await d.file("test.dart", """
import 'package:test/test.dart';

void main() {
  print('loaded test!');

  test("success", () {});
}
""").create();

    var test = await runTest(
        ["--pause-after-load", "-p", "dartium", "-p", "vm", "test.dart"]);
    await expectLater(test.stderr,
        emits("Warning: Debugging is currently unsupported on the Dart VM."));

    await expectLater(test.stdout, emitsThrough("loaded test!"));
    await expectLater(
        test.stdout,
        emitsThrough(emitsInOrder([
          startsWith("Observatory URL: "),
          "The test runner is paused. Open the dev console in Dartium or the "
              "Observatory and set breakpoints. Once you're finished, return "
              "to this terminal and press Enter."
        ])));

    var nextLineFired = false;
    test.stdout.next.then(expectAsync1((line) {
      expect(line, contains("+0: [Dartium] success"));
      nextLineFired = true;
    }));

    // Wait a little bit to be sure that the tests don't start running without
    // our input.
    await new Future.delayed(new Duration(seconds: 2));
    expect(nextLineFired, isFalse);

    test.stdin.writeln();

    await expectLater(
        test.stdout,
        containsInOrder(
            ["loaded test!", "+1: [VM] success", "+2: All tests passed!"]));
    await test.shouldExit(0);
  }, tags: 'dartium');

  test("stops immediately if killed while paused", () async {
    await d.file("test.dart", """
import 'package:test/test.dart';

void main() {
  print('loaded test!');

  test("success", () {});
}
""").create();

    var test =
        await runTest(["--pause-after-load", "-p", "dartium", "test.dart"]);
    await expectLater(test.stdout, emitsThrough("loaded test!"));
    await expectLater(
        test.stdout,
        emitsThrough(emitsInOrder([
          startsWith("Observatory URL: "),
          "The test runner is paused. Open the dev console in Dartium or the "
              "Observatory and set breakpoints. Once you're finished, return "
              "to this terminal and press Enter."
        ])));

    test.signal(ProcessSignal.SIGTERM);
    await test.shouldExit();
    await expectLater(test.stderr, emitsDone);
  }, tags: 'dartium', testOn: "!windows");

  test("disables timeouts", () async {
    await d.file("test.dart", """
import 'dart:async';

import 'package:test/test.dart';

void main() {
  print('loaded test 1!');

  test("success", () async {
    await new Future.delayed(Duration.ZERO);
  }, timeout: new Timeout(Duration.ZERO));
}
""").create();

    var test = await runTest(
        ["--pause-after-load", "-p", "dartium", "-n", "success", "test.dart"]);
    await expectLater(test.stdout, emitsThrough("loaded test 1!"));
    await expectLater(
        test.stdout,
        emitsThrough(emitsInOrder([
          startsWith("Observatory URL: "),
          "The test runner is paused. Open the dev console in Dartium or the "
              "Observatory and set breakpoints. Once you're finished, return "
              "to this terminal and press Enter."
        ])));

    var nextLineFired = false;
    test.stdout.next.then(expectAsync1((line) {
      expect(line, contains("+0: success"));
      nextLineFired = true;
    }));

    // Wait a little bit to be sure that the tests don't start running without
    // our input.
    await new Future.delayed(new Duration(seconds: 2));
    expect(nextLineFired, isFalse);

    test.stdin.writeln();
    await expectLater(
        test.stdout, emitsThrough(contains("+1: All tests passed!")));
    await test.shouldExit(0);
  }, tags: 'dartium');

  // Regression test for #304.
  test("supports test name patterns", () async {
    await d.file("test.dart", """
import 'package:test/test.dart';

void main() {
  print('loaded test 1!');

  test("failure 1", () {});
  test("success", () {});
  test("failure 2", () {});
}
""").create();

    var test = await runTest(
        ["--pause-after-load", "-p", "dartium", "-n", "success", "test.dart"]);
    await expectLater(test.stdout, emitsThrough("loaded test 1!"));
    await expectLater(
        test.stdout,
        emitsThrough(emitsInOrder([
          startsWith("Observatory URL: "),
          "The test runner is paused. Open the dev console in Dartium or the "
              "Observatory and set breakpoints. Once you're finished, return "
              "to this terminal and press Enter."
        ])));

    var nextLineFired = false;
    test.stdout.next.then(expectAsync1((line) {
      expect(line, contains("+0: success"));
      nextLineFired = true;
    }));

    // Wait a little bit to be sure that the tests don't start running without
    // our input.
    await new Future.delayed(new Duration(seconds: 2));
    expect(nextLineFired, isFalse);

    test.stdin.writeln();
    await expectLater(
        test.stdout, emitsThrough(contains("+1: All tests passed!")));
    await test.shouldExit(0);
  }, tags: 'dartium');
}
