|
5 | 5 | validateVersion, |
6 | 6 | validateEngineCompatibility, |
7 | 7 | validateVSCodeTypesCompatibility, |
| 8 | + validateExtensionDependencies, |
8 | 9 | } from '../validation'; |
9 | 10 |
|
10 | 11 | describe('validatePublisher', () => { |
@@ -135,3 +136,53 @@ describe('validateVSCodeTypesCompatibility', () => { |
135 | 136 | assert.throws(() => validateVSCodeTypesCompatibility('1.5', '1.30')); |
136 | 137 | }); |
137 | 138 | }); |
| 139 | + |
| 140 | +describe('validateExtensionDependencies', () => { |
| 141 | + it('should allow empty or undefined dependencies', () => { |
| 142 | + validateExtensionDependencies(undefined, 'extensionDependencies'); |
| 143 | + validateExtensionDependencies([], 'extensionDependencies'); |
| 144 | + }); |
| 145 | + |
| 146 | + it('should allow lowercase extension IDs', () => { |
| 147 | + validateExtensionDependencies(['publisher.extension'], 'extensionDependencies'); |
| 148 | + validateExtensionDependencies(['publisher.extension-name'], 'extensionDependencies'); |
| 149 | + validateExtensionDependencies(['publisher-name.extension-name'], 'extensionDependencies'); |
| 150 | + validateExtensionDependencies(['pub123.ext456'], 'extensionDependencies'); |
| 151 | + validateExtensionDependencies( |
| 152 | + ['publisher1.extension1', 'publisher2.extension2'], |
| 153 | + 'extensionDependencies' |
| 154 | + ); |
| 155 | + }); |
| 156 | + |
| 157 | + it('should reject uppercase letters in extension IDs', () => { |
| 158 | + assert.throws(() => validateExtensionDependencies(['Publisher.extension'], 'extensionDependencies')); |
| 159 | + assert.throws(() => validateExtensionDependencies(['publisher.Extension'], 'extensionDependencies')); |
| 160 | + assert.throws(() => validateExtensionDependencies(['Publisher.Extension'], 'extensionDependencies')); |
| 161 | + assert.throws(() => validateExtensionDependencies(['PUBLISHER.EXTENSION'], 'extensionDependencies')); |
| 162 | + }); |
| 163 | + |
| 164 | + it('should reject mixed case in extension IDs', () => { |
| 165 | + assert.throws(() => validateExtensionDependencies(['MyPublisher.my-extension'], 'extensionDependencies')); |
| 166 | + assert.throws(() => validateExtensionDependencies(['my-publisher.MyExtension'], 'extensionDependencies')); |
| 167 | + }); |
| 168 | + |
| 169 | + it('should work with extensionPack field', () => { |
| 170 | + validateExtensionDependencies(['publisher.extension'], 'extensionPack'); |
| 171 | + assert.throws(() => validateExtensionDependencies(['Publisher.Extension'], 'extensionPack')); |
| 172 | + }); |
| 173 | + |
| 174 | + it('should list all invalid dependencies in error message', () => { |
| 175 | + try { |
| 176 | + validateExtensionDependencies( |
| 177 | + ['valid.extension', 'Invalid.Extension', 'another.Invalid', 'Another.Invalid'], |
| 178 | + 'extensionDependencies' |
| 179 | + ); |
| 180 | + assert.fail('Should have thrown an error'); |
| 181 | + } catch (error: any) { |
| 182 | + assert.ok(error.message.includes('Invalid.Extension')); |
| 183 | + assert.ok(error.message.includes('Another.Invalid')); |
| 184 | + assert.ok(error.message.includes('another.Invalid')); |
| 185 | + assert.ok(!error.message.includes('valid.extension')); |
| 186 | + } |
| 187 | + }); |
| 188 | +}); |
0 commit comments