@@ -310,6 +310,39 @@ describe('workspaceUtils', () => {
310310 )
311311 } )
312312
313+ it ( 'includes gradle-wrapper.jar even when excluded by gitignore' , async function ( ) {
314+ const workspaceFolder = await createTestWorkspaceFolder ( )
315+
316+ const writeFile = ( pathParts : string [ ] , fileContent : string ) => {
317+ return toFile ( fileContent , path . join ( workspaceFolder . uri . fsPath , ...pathParts ) )
318+ }
319+
320+ sandbox . stub ( vscode . workspace , 'workspaceFolders' ) . value ( [ workspaceFolder ] )
321+
322+ // Create .gitignore file that excludes gradle-wrapper.jar
323+ await writeFile ( [ '.gitignore' ] , 'gradle/wrapper/gradle-wrapper.jar' )
324+
325+ // Create gradle-wrapper.jar
326+ await writeFile ( [ 'gradle' , 'wrapper' , 'gradle-wrapper.jar' ] , 'gradle wrapper content' )
327+
328+ // Create another file that should be excluded
329+ await writeFile ( [ 'gradle' , 'wrapper' , 'excluded-file.txt' ] , 'excluded content' )
330+
331+ const result = await collectFiles ( [ workspaceFolder . uri . fsPath ] , [ workspaceFolder ] , true )
332+
333+ assert . strictEqual ( result . length , 2 ) // .gitignore and gradle-wrapper.jar
334+ assert . strictEqual (
335+ result . some ( ( file ) => file . relativeFilePath === path . join ( 'gradle' , 'wrapper' , 'gradle-wrapper.jar' ) ) ,
336+ true ,
337+ 'gradle-wrapper.jar should be included in the result'
338+ )
339+ assert . strictEqual (
340+ result . some ( ( file ) => file . relativeFilePath === path . join ( 'gradle' , 'wrapper' , 'excluded-file.txt' ) ) ,
341+ false ,
342+ 'excluded-file.txt should not be included in the result'
343+ )
344+ } )
345+
313346 it ( 'does not return license files' , async function ( ) {
314347 const workspace = await createTestWorkspaceFolder ( )
315348
0 commit comments