Skip to content

Commit 78f5190

Browse files
authored
Skip legacy capability inference for updated managers (#1955)
Skips method-based capability inference (legacy) when a manager advertises its capabilities.
1 parent 9c7cf04 commit 78f5190

2 files changed

Lines changed: 42 additions & 0 deletions

File tree

‎src/legacyCapabilities.ts‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ export async function getLegacyPackageManagerCapability(
2121
packageManager: PackageManager,
2222
capability: PackageManagerCapability,
2323
): Promise<Support> {
24+
// Skip legacy method inspection when the package manager advertises capabilities.
25+
if (packageManager.capabilities) {
26+
return unsupportedCapability({});
27+
}
2428
switch (capability) {
2529
case PackageCapability.List:
2630
return getMethodSupport(packageManager.getPackages, packageManager.refresh);
@@ -48,6 +52,10 @@ export async function getLegacyEnvironmentManagerCapability(
4852
environmentManager: EnvironmentManager,
4953
capability: EnvironmentManagerCapability,
5054
): Promise<Support> {
55+
// Skip legacy method inspection when the environment manager advertises capabilities.
56+
if (environmentManager.capabilities) {
57+
return unsupportedCapability({});
58+
}
5159
switch (capability) {
5260
case EnvironmentCapability.List:
5361
return getMethodSupport(environmentManager.getEnvironments, environmentManager.refresh);

‎src/test/legacyCapabilities.unit.test.ts‎

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import type { EnvironmentManagerCapability, PackageManagerCapability } from '../
77
import { EnvironmentCapability, PackageCapability } from '../capabilities';
88
import { getLegacyEnvironmentManagerCapability, getLegacyPackageManagerCapability } from '../legacyCapabilities';
99
import type { EnvironmentManager, PackageManager } from '../types';
10+
import { allSupportedEnvironmentCapabilities, allSupportedPackageCapabilities } from './capabilityFixtures';
1011

1112
function unexpectedOperation(): never {
1213
throw new Error('Legacy capability inference must not invoke operations');
@@ -16,6 +17,39 @@ const legacySupported = { supported: true, isLegacy: true };
1617
const legacyUnsupported = { supported: false, reason: l10n.t('Capability not implemented'), isLegacy: true };
1718

1819
suite('Legacy manager capabilities', () => {
20+
test('package capability advertisements disable legacy inference even when methods are present', async () => {
21+
const manager: PackageManager = {
22+
name: 'advertised',
23+
manage: unexpectedOperation,
24+
refresh: unexpectedOperation,
25+
getPackages: unexpectedOperation,
26+
capabilities: allSupportedPackageCapabilities,
27+
};
28+
29+
assert.deepStrictEqual(await getLegacyPackageManagerCapability(manager, PackageCapability.Install), {
30+
supported: false,
31+
reason: l10n.t('Capability not implemented'),
32+
});
33+
});
34+
35+
test('environment capability advertisements disable legacy inference even when methods are present', async () => {
36+
const manager: EnvironmentManager = {
37+
name: 'advertised',
38+
preferredPackageManagerId: 'advertised:packages',
39+
refresh: unexpectedOperation,
40+
getEnvironments: unexpectedOperation,
41+
get: unexpectedOperation,
42+
set: unexpectedOperation,
43+
resolve: unexpectedOperation,
44+
capabilities: allSupportedEnvironmentCapabilities,
45+
};
46+
47+
assert.deepStrictEqual(await getLegacyEnvironmentManagerCapability(manager, EnvironmentCapability.List), {
48+
supported: false,
49+
reason: l10n.t('Capability not implemented'),
50+
});
51+
});
52+
1953
test('package capabilities require their callable methods without executing them', async () => {
2054
const manager: PackageManager = {
2155
name: 'legacy',

0 commit comments

Comments
 (0)