| // 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; | |
| setUpAll(() async { | |
| await testController.runPubGet(); | |
| }); | |
| setUp(() async { | |
| await testController.setUp(withApp: false); | |
| 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)); | |
| } |