// 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')
@Tags(['pub'])
@Skip('https://github.com/dart-lang/test/issues/821')

import 'dart:io';

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

import 'package:test/test.dart';

import '../io.dart';

/// The `--pub-serve` argument for the test process, based on [pubServePort].
String get _pubServeArg => '--pub-serve=$pubServePort';

void main() {
  setUp(() async {
    await d.file('pubspec.yaml', '''
name: myapp
dependencies:
  barback: any
  test: {path: ${p.current}}
transformers:
- myapp:
    \$include: test/**_test.dart
''').create();

    await d.dir('test', [
      d.file('my_test.dart', '''
import 'package:test/test.dart';

void main() {
  test("test", () => expect(true, isTrue));
}
''')
    ]).create();

    await d.dir('lib', [
      d.file('myapp.dart', '''
import 'package:barback/barback.dart';

class MyTransformer extends Transformer {
  final allowedExtensions = '.dart';

  MyTransformer.asPlugin();

  Future apply(Transform transform) async {
    var contents = await transform.primaryInput.readAsString();
    transform.addOutput(Asset.fromString(
        transform.primaryInput.id,
        contents.replaceAll("isFalse", "isTrue")));
  }
}
''')
    ]).create();

    await (await runPub(['get'])).shouldExit(0);
  });

  group('with transformed tests', () {
    setUp(() async {
      // Give the test a failing assertion that the transformer will convert to
      // a passing assertion.
      await d.file('test/my_test.dart', '''
import 'package:test/test.dart';

void main() {
  test("test", () => expect(true, isFalse));
}
''').create();
    });

    test('runs those tests in the VM', () async {
      var pub = await runPubServe();
      var test = await runTest([_pubServeArg]);
      expect(test.stdout, emitsThrough(contains('+1: All tests passed!')));
      await test.shouldExit(0);
      await pub.kill();
    });

    testWithCompiler('runs those tests on Chrome', (compilerArgs) async {
      var pub = await runPubServe(args: compilerArgs);
      var test = await runTest([_pubServeArg, '-p', 'chrome']);
      expect(test.stdout, emitsThrough(contains('+1: All tests passed!')));
      await test.shouldExit(0);
      await pub.kill();
    }, tags: 'chrome');

    test('runs those tests on Node', () async {
      var pub = await runPubServe();
      var test = await runTest([_pubServeArg, '-p', 'node']);
      expect(test.stdout, emitsThrough(contains('+1: All tests passed!')));
      await test.shouldExit(0);
      await pub.kill();
    }, tags: 'node');

    test(
        'gracefully handles pub serve running on the wrong directory for '
        'VM tests', () async {
      await d.dir('web').create();

      var pub = await runPubServe(args: ['web']);
      var test = await runTest([_pubServeArg]);
      expect(
          test.stdout,
          containsInOrder([
            '-1: loading ${p.join("test", "my_test.dart")} [E]',
            'Failed to load "${p.join("test", "my_test.dart")}":',
            '404 Not Found',
            'Make sure "pub serve" is serving the test/ directory.'
          ]));
      await test.shouldExit(1);

      await pub.kill();
    });

    group(
        'gracefully handles pub serve running on the wrong directory for '
        'browser tests', () {
      testWithCompiler('when run on Chrome', (compilerArgs) async {
        await d.dir('web').create();

        var pub = await runPubServe(args: ['web', ...compilerArgs]);
        var test = await runTest([_pubServeArg, '-p', 'chrome']);
        expect(
            test.stdout,
            containsInOrder([
              '-1: compiling ${p.join("test", "my_test.dart")} [E]',
              'Failed to load "${p.join("test", "my_test.dart")}":',
              '404 Not Found',
              'Make sure "pub serve" is serving the test/ directory.'
            ]));
        await test.shouldExit(1);

        await pub.kill();
      }, tags: 'chrome');
    });

    test(
        'gracefully handles pub serve running on the wrong directory for Node '
        'tests', () async {
      await d.dir('web').create();

      var pub = await runPubServe(args: ['web']);
      var test = await runTest([_pubServeArg, '-p', 'node']);
      expect(
          test.stdout,
          containsInOrder([
            '-1: compiling ${p.join("test", "my_test.dart")} [E]',
            'Failed to load "${p.join("test", "my_test.dart")}":',
            '404 Not Found',
            'Make sure "pub serve" is serving the test/ directory.'
          ]));
      await test.shouldExit(1);

      await pub.kill();
    }, tags: 'node');
  });

  group('uses a custom HTML file', () {
    setUp(() async {
      await d.dir('test', [
        d.file('test.dart', '''
import 'dart:html';

import 'package:test/test.dart';

void main() {
  test("failure", () {
    expect(document.querySelector('#foo'), isNull);
  });
}
'''),
        d.file('test.html', '''
<html>
<head>
  <link rel='x-dart-test' href='test.dart'>
  <script src="packages/test/dart.js"></script>
</head>
<body>
  <div id="foo"></div>
</body>
''')
      ]).create();
    });

    testWithCompiler('on Chrome', (compilerArgs) async {
      var pub = await runPubServe(args: compilerArgs);
      var test = await runTest([_pubServeArg, '-p', 'chrome']);
      expect(test.stdout, emitsThrough(contains('+1: All tests passed!')));
      await test.shouldExit(0);
      await pub.kill();
    }, tags: 'chrome');
  });

  group('with a failing test', () {
    setUp(() async {
      await d.file('test/my_test.dart', '''
import 'dart:html';

import 'package:test/test.dart';

void main() {
  test("failure", () => throw 'oh no');
}
''').create();
    });

    group('dartifies stack traces for JS-compiled tests by default', () {
      test('on a browser', () async {
        var pub = await runPubServe();
        var test =
            await runTest([_pubServeArg, '-p', 'chrome', '--verbose-trace']);
        expect(
            test.stdout,
            containsInOrder(
                [' main.<fn>', 'package:test', 'dart:async/zone.dart']));
        await test.shouldExit(1);
        await pub.kill();
      }, tags: 'chrome');

      test('on Node', () async {
        var pub = await runPubServe();
        var test =
            await runTest([_pubServeArg, '-p', 'node', '--verbose-trace']);
        expect(
            test.stdout,
            containsInOrder(
                [' main.<fn>', 'package:test', 'dart:async/zone.dart']));
        await test.shouldExit(1);
        await pub.kill();
      }, tags: 'node');
    });

    group("doesn't dartify stack traces for JS-compiled tests with --js-trace",
        () {
      test('on a browser', () async {
        var pub = await runPubServe();
        var test = await runTest(
            [_pubServeArg, '-p', 'chrome', '--js-trace', '--verbose-trace']);

        expect(test.stdoutStream(), neverEmits(endsWith(' main.<fn>')));
        expect(test.stdoutStream(), neverEmits(contains('package:test')));
        expect(
            test.stdoutStream(), neverEmits(contains('dart:async/zone.dart')));
        expect(test.stdout, emitsThrough(contains('-1: Some tests failed.')));
        await test.shouldExit(1);

        await pub.kill();
      }, tags: 'chrome');

      test('on Node', () async {
        var pub = await runPubServe();
        var test = await runTest(
            [_pubServeArg, '-p', 'node', '--js-trace', '--verbose-trace']);

        expect(test.stdoutStream(), neverEmits(endsWith(' main.<fn>')));
        expect(test.stdoutStream(), neverEmits(contains('package:test')));
        expect(
            test.stdoutStream(), neverEmits(contains('dart:async/zone.dart')));
        expect(test.stdout, emitsThrough(contains('-1: Some tests failed.')));
        await test.shouldExit(1);

        await pub.kill();
      }, tags: 'node');
    });
  });

  test('gracefully handles pub serve not running for VM tests', () async {
    var test = await runTest(['--pub-serve=54321']);
    expect(
        test.stdout,
        containsInOrder([
          '-1: loading ${p.join("test", "my_test.dart")} [E]',
          'Failed to load "${p.join("test", "my_test.dart")}":',
          'Error getting http://localhost:54321/my_test.dart.vm_test.dart: '
              'Connection refused',
          'Make sure "pub serve" is running.'
        ]));
    await test.shouldExit(1);
  });

  test('gracefully handles pub serve not running for browser tests', () async {
    var test = await runTest(['--pub-serve=54321', '-p', 'chrome']);
    var message = Platform.isWindows
        ? 'The remote computer refused the network connection.'
        : 'Connection refused (errno ';

    expect(
        test.stdout,
        containsInOrder([
          '-1: compiling ${p.join("test", "my_test.dart")} [E]',
          'Failed to load "${p.join("test", "my_test.dart")}":',
          'Error getting http://localhost:54321/my_test.dart.browser_test.dart.js'
              '.map: $message',
          'Make sure "pub serve" is running.'
        ]));
    await test.shouldExit(1);
  }, tags: 'chrome');

  test('gracefully handles pub serve not running for Node tests', () async {
    var test = await runTest(['--pub-serve=54321', '-p', 'node']);
    var message = Platform.isWindows
        ? 'The remote computer refused the network connection.'
        : 'Connection refused (errno ';

    expect(
        test.stdout,
        containsInOrder([
          '-1: compiling ${p.join("test", "my_test.dart")} [E]',
          'Failed to load "${p.join("test", "my_test.dart")}":',
          'Error getting http://localhost:54321/my_test.dart.node_test.dart.js:'
              ' $message',
          'Make sure "pub serve" is running.'
        ]));
    await test.shouldExit(1);
  }, tags: 'node');

  test('gracefully handles a test file not being in test/', () async {
    File(p.join(d.sandbox, 'test/my_test.dart'))
        .copySync(p.join(d.sandbox, 'my_test.dart'));

    var test = await runTest(['--pub-serve=54321', 'my_test.dart']);
    expect(
        test.stdout,
        containsInOrder([
          '-1: loading my_test.dart [E]',
          'Failed to load "my_test.dart": When using "pub serve", all test files '
              'must be in test/.'
        ]));
    await test.shouldExit(1);
  });
}

/// The list of supported compilers for the current [Platform.version].
final Iterable<String> _compilers = ['dart2js', 'dartdevc'];

/// Runs the test described by [testFn] once for each supported compiler on the
/// current [Platform.version], passing the relevant compiler args for pub serve
/// as the first argument.
void testWithCompiler(
    String name, dynamic Function(List<String> compilerArgs) testFn,
    {tags}) {
  for (var compiler in _compilers) {
    var compilerArgs = ['--web-compiler', compiler];
    test('$name with $compiler', () => testFn(compilerArgs), tags: tags);
  }
}
