blob: dec331669756f561d6e615847a4766c4ab05f6e2 [file] [log] [blame]
// 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:io';
import 'package:dds/src/dap/protocol_generated.dart';
import 'package:test/test.dart';
import 'test_client.dart';
import 'test_scripts.dart';
import 'test_support.dart';
main() {
late DapTestSession dap;
setUp(() async {
dap = await DapTestSession.setUp();
});
tearDown(() => dap.tearDown());
group('noDebug mode', () {
test('runs a simple script', () async {
final testFile = dap.createTestFile(r'''
void main(List<String> args) async {
print('Hello!');
print('World!');
print('args: $args');
}
''');
final outputEvents = await dap.client.collectOutput(
launch: () => dap.client.launch(
testFile.path,
noDebug: true,
args: ['one', 'two'],
),
);
final output = outputEvents.map((e) => e.output).join();
expectLines(output, [
'Hello!',
'World!',
'args: [one, two]',
'',
'Exited.',
]);
});
test('runs a simple script using the runInTerminal request', () async {
final testFile = dap.createTestFile(emptyProgram);
// Set up a handler to handle the server calling the clients runInTerminal
// request and capture the args.
RunInTerminalRequestArguments? runInTerminalArgs;
dap.client.handleRequest(
'runInTerminal',
(args) {
runInTerminalArgs = RunInTerminalRequestArguments.fromJson(
args as Map<String, Object?>,
);
return RunInTerminalResponseBody();
},
);
// Run the script until we get a TerminatedEvent.
await Future.wait([
dap.client.event('terminated'),
dap.client.initialize(supportsRunInTerminalRequest: true),
dap.client.launch(
testFile.path,
noDebug: true,
console: "terminal",
),
], eagerError: true);
expect(runInTerminalArgs, isNotNull);
expect(
runInTerminalArgs!.args,
containsAllInOrder([Platform.resolvedExecutable, testFile.path]),
);
});
// These tests can be slow due to starting up the external server process.
}, timeout: Timeout.none);
}