blob: d06688ae120bf5c26d4ecce94cc9a9f3c651811c [file] [log] [blame]
// Copyright (c) 2022, 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 'package:test/test.dart';
import 'test_support.dart';
main() {
group('validates arguments', () {
group('for Dart CLI adapter', () {
late DapTestSession dap;
setUp(() async {
dap = await DapTestSession.setUp();
});
tearDown(() => dap.tearDown());
String errorMessage(
String field,
String request,
String expectedType,
Object? actual,
) =>
'"$field" argument in $request configuration must be a $expectedType '
'but provided value was a ${actual.runtimeType} ($actual)';
group('for launchRequest', () {
Future<void> expectError(
Map<String, Object?> args,
String expectedError,
) async {
final response = await dap.client.sendRequest(
args,
overrideCommand: 'launch',
allowFailure: true,
);
expect(response.success, isFalse);
expect(response.message, expectedError);
}
test('when a non-String is supplied for a String', () async {
await expectError(
{
'program': true,
},
errorMessage('program', 'launch', 'String', true),
);
});
test('when a non-Map is supplied for a Map', () async {
await expectError(
{
'program': '',
'env': 'test',
},
errorMessage('env', 'launch/attach', 'Map<String, String>', 'test'),
);
});
test('when an invalid type is supplied for a Map value', () async {
await expectError(
{
'program': '',
'env': {'FOO': true}
},
errorMessage('env', 'launch/attach', 'Map<String, String>',
<String, dynamic>{'FOO': true}),
);
});
});
group('for attachRequest', () {
Future<void> expectError(
Map<String, Object?> args,
String expectedError,
) async {
final response = await dap.client.sendRequest(
args,
overrideCommand: 'attach',
allowFailure: true,
);
expect(response.success, isFalse);
expect(response.message, expectedError);
}
test('when a non-String is supplied for a String?', () async {
await expectError(
{
'vmServiceUri': true,
},
errorMessage('vmServiceUri', 'attach', 'String?', true),
);
});
test('when a non-Map is supplied for a Map', () async {
await expectError(
{
'program': '',
'env': 'test',
},
errorMessage('env', 'launch/attach', 'Map<String, String>', 'test'),
);
});
test('when an invalid type is supplied for a Map value', () async {
await expectError(
{
'program': '',
'env': {'FOO': true}
},
errorMessage('env', 'launch/attach', 'Map<String, String>',
<String, dynamic>{'FOO': true}),
);
});
});
});
group('for Dart Test adapter', () {
late DapTestSession dap;
setUp(() async {
dap = await DapTestSession.setUp(additionalArgs: ['--test']);
});
tearDown(() => dap.tearDown());
group('for launchRequest', () {
Future<void> expectError(
Map<String, Object?> args,
String expectedError,
) async {
final response = await dap.client.sendRequest(
args,
overrideCommand: 'launch',
allowFailure: true,
);
expect(response.success, isFalse);
expect(response.message, expectedError);
}
test('when a non-String is supplied for a String', () async {
await expectError(
{
'program': true,
},
'"program" argument in launch configuration must be a String but provided value was a bool (true)',
);
});
test('when a non-Map is supplied for a Map', () async {
await expectError(
{
'program': '',
'env': 'test',
},
'"env" argument in launch/attach configuration must be a Map<String, String> but provided value was a String (test)',
);
});
test('when an invalid type is supplied for a Map value', () async {
await expectError(
{
'program': '',
'env': {'FOO': true}
},
'"env" argument in launch/attach configuration must be a Map<String, String> but provided value was a _Map<String, dynamic> ({FOO: true})',
);
});
});
group('for attachRequest', () {
Future<void> expectError(
Map<String, Object?> args,
String expectedError,
) async {
final response = await dap.client.sendRequest(
args,
overrideCommand: 'attach',
allowFailure: true,
);
expect(response.success, isFalse);
expect(response.message, expectedError);
}
test('when a non-String is supplied for a String?', () async {
await expectError(
{
'vmServiceUri': true,
},
'"vmServiceUri" argument in attach configuration must be a String? but provided value was a bool (true)',
);
});
test('when a non-Map is supplied for a Map', () async {
await expectError(
{
'program': '',
'env': 'test',
},
'"env" argument in launch/attach configuration must be a Map<String, String> but provided value was a String (test)',
);
});
test('when an invalid type is supplied for a Map value', () async {
await expectError(
{
'program': '',
'env': {'FOO': true}
},
'"env" argument in launch/attach configuration must be a Map<String, String> but provided value was a _Map<String, dynamic> ({FOO: true})',
);
});
});
});
// These tests can be slow due to starting up the external server process.
}, timeout: Timeout.none);
}