blob: 34d7d0fc79dcd0c7a6a1016ac11f46d59c452eee [file] [log] [blame]
// 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));
}