Files
sdk/pkg/dds/test/devtools_server/vs_code_extensions_test.dart
Danny Tuppeny 5fde2e1534 [dds/devtools_server] Add support for finding VS Code extensions defined in packages
See https://github.com/Dart-Code/Dart-Code/issues/4705

Change-Id: I724c039cd6940dd5939330a6f91f38567db9a179
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/337781
Reviewed-by: Kenzie Davisson <kenzieschmoll@google.com>
Reviewed-by: Ben Konyi <bkonyi@google.com>
Commit-Queue: Kenzie Davisson <kenzieschmoll@google.com>
2023-12-06 20:56:11 +00:00

112 lines
2.9 KiB
Dart

// Copyright 2023 The Chromium Authors. 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:path/path.dart' as path;
import 'package:test/test.dart';
import 'utils/server_driver.dart';
late final DevToolsServerTestController testController;
void main() {
testController = DevToolsServerTestController();
late String emptyDartAppRoot;
late File extensionConfig;
setUp(() async {
await testController.setUp(runPubGet: true);
emptyDartAppRoot = testController.emptyDartAppRoot.toFilePath();
extensionConfig = File(path.join(
testController.packageWithExtensionsRoot.toFilePath(),
'extension',
'vs_code',
'config.yaml'));
extensionConfig
.writeAsStringSync('extension: fake-publisher.fake-extension');
});
tearDown(() async {
await testController.tearDown();
});
group('Server API - VS Code Extensions', () {
test('can list valid extensions', () async {
final results = await testController.send(
'vscode.extensions.discover',
{
'rootPaths': [emptyDartAppRoot]
},
);
expect(
results,
{
emptyDartAppRoot: {
'extensions': [
{
'packageName': 'package_with_extensions',
'extension': 'fake-publisher.fake-extension'
},
],
'parseErrors': [],
},
},
);
}, timeout: const Timeout.factor(10));
test('returns parse errors for extension/vs_code/config.yaml', () async {
extensionConfig.writeAsStringSync('a: b');
final results = await testController.send(
'vscode.extensions.discover',
{
'rootPaths': [emptyDartAppRoot]
},
);
expect(
results,
{
emptyDartAppRoot: {
'extensions': [],
'parseErrors': [
{
'packageName': 'package_with_extensions',
'error': 'Bad state: Missing required fields {extension} '
'in the extension config.yaml.'
}
]
},
},
);
});
test('does not fail on non-existent or non-project folders', () async {
final notExisting = path.join(emptyDartAppRoot, 'does_not_exist');
final notProject = path.join(emptyDartAppRoot, 'bin');
final results = await testController.send(
'vscode.extensions.discover',
{
'rootPaths': [notExisting, notProject]
},
);
expect(
results,
{
notExisting: {
'extensions': [],
'parseErrors': [],
},
notProject: {
'extensions': [],
'parseErrors': [],
},
},
);
});
}, timeout: const Timeout.factor(10));
}