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

import 'dart:async';

import 'package:test/test.dart';
import 'package:webdev/src/serve/chrome.dart';
import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart';

void main() {
  Chrome chrome;

  Future<void> launchChrome({int port}) async {
    chrome = await Chrome.start([_googleUrl], port: port ?? 0);
  }

  tearDown(() async {
    var tabs = await chrome.chromeConnection.getTabs();
    for (var tab in tabs) {
      await chrome.chromeConnection.getUrl('/json/close/${tab.id}');
    }
    await chrome?.close();
    chrome = null;
  });

  test('can launch chrome', () async {
    await launchChrome();
    expect(chrome, isNotNull);
  });

  test('debugger is working', () async {
    await launchChrome();
    var tabs = await chrome.chromeConnection.getTabs();
    expect(
        tabs,
        contains(const TypeMatcher<ChromeTab>()
            .having((t) => t.url, 'url', _googleUrl)));
  });

  test('uses open debug port if provided port is 0', () async {
    await launchChrome(port: 0);
    expect(chrome.debugPort, isNot(equals(0)));
  });
}

const _googleUrl = 'http://www.google.com/';
