// Copyright (c) 2021, 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 'dart:convert'; import 'dart:io'; import 'package:test/test.dart'; import '../utils.dart'; void main() { group('devtools', devtools, timeout: longTimeout); } void devtools() { late TestProject p; test('--help', () async { p = project(); var result = await p.run(['devtools', '--help']); expect(result.exitCode, 0); expect(result.stderr, isEmpty); expect(result.stdout, contains('Open DevTools')); expect(result.stdout, contains('Usage: dart devtools [arguments] [service protocol uri]')); // Does not show verbose help. expect(result.stdout.contains('--try-ports'), isFalse); }); test('--help --verbose', () async { p = project(); var result = await p.run(['devtools', '--help', '--verbose']); expect(result.exitCode, 0); expect(result.stderr, isEmpty); expect(result.stdout, contains('Open DevTools')); expect( result.stdout, contains( 'Usage: dart [vm-options] devtools [arguments] [service protocol uri]')); // Shows verbose help. expect(result.stdout, contains('--try-ports')); }); group('integration', () { Process? process; tearDown(() { process?.kill(); }); test('serves resources', () async { p = project(); // start the devtools server process = await p.start(['devtools', '--no-launch-browser', '--machine']); process!.stderr.transform(utf8.decoder).listen(print); final Stream inStream = process!.stdout .transform(utf8.decoder) .transform(const LineSplitter()); final line = await inStream.first; final json = jsonDecode(line); // {"event":"server.started","method":"server.started","params":{ // "host":"127.0.0.1","port":9100,"pid":93508,"protocolVersion":"1.1.0" // }} expect(json['event'], 'server.started'); expect(json['params'], isNotNull); final host = json['params']['host']; final port = json['params']['port']; expect(host, isA()); expect(port, isA()); // Connect to the port and confirm we can load a devtools resource. HttpClient client = HttpClient(); final httpRequest = await client.get(host, port, 'index.html'); final httpResponse = await httpRequest.close(); final contents = (await httpResponse.transform(utf8.decoder).toList()).join(); client.close(); expect(contents, contains('DevTools')); // kill the process process!.kill(); process = null; }); }); }