Add Windows-specific tests for path matching with backslashes

Co-authored-by: salmanmkc <32169182+salmanmkc@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2025-12-10 23:33:20 +00:00
parent 0483fce47e
commit c050f7bc2e
@@ -0,0 +1,80 @@
/**
* Test to validate that glob works correctly on Windows with backslash paths
* This test validates the fix for: https://github.com/actions/toolkit/issues/<issue_number>
*/
import * as path from 'path'
import {MatchKind} from '../src/internal-match-kind'
import {Pattern} from '../src/internal-pattern'
const IS_WINDOWS = process.platform === 'win32'
describe('Windows path matching', () => {
it('matches paths with backslashes on Windows', () => {
if (!IS_WINDOWS) {
// This test is only relevant on Windows
return
}
// Test basic pattern matching with Windows paths
const pattern = new Pattern('C:\\Users\\test\\*')
// The itemPath would come from fs.readdir with backslashes on Windows
const itemPath = 'C:\\Users\\test\\file.txt'
// This should match because the pattern and path both refer to the same file
expect(pattern.match(itemPath)).toBe(MatchKind.All)
})
it('partial matches work with backslashes on Windows', () => {
if (!IS_WINDOWS) {
return
}
// Test partial matching with Windows paths
const pattern = new Pattern('C:\\Users\\test\\**')
// Should partially match parent directory
expect(pattern.partialMatch('C:\\Users')).toBe(true)
expect(pattern.partialMatch('C:\\Users\\test')).toBe(true)
})
it('matches globstar patterns with backslashes on Windows', () => {
if (!IS_WINDOWS) {
return
}
const pattern = new Pattern('C:\\foo\\**')
// Should match the directory itself and descendants
expect(pattern.match('C:\\foo')).toBe(MatchKind.All)
expect(pattern.match('C:\\foo\\bar')).toBe(MatchKind.All)
expect(pattern.match('C:\\foo\\bar\\baz.txt')).toBe(MatchKind.All)
})
it('matches wildcard patterns with mixed separators on Windows', () => {
if (!IS_WINDOWS) {
return
}
// Pattern might be specified with forward slashes by user
const pattern = new Pattern('C:/Users/*/file.txt')
// But the actual path from filesystem will have backslashes
expect(pattern.match('C:\\Users\\test\\file.txt')).toBe(MatchKind.All)
})
it('handles complex patterns with backslashes on Windows', () => {
if (!IS_WINDOWS) {
return
}
const currentDrive = process.cwd().substr(0, 2)
const pattern = new Pattern(`${currentDrive}\\**\\*.txt`)
// Should match .txt files at any depth
expect(pattern.match(`${currentDrive}\\file.txt`)).toBe(MatchKind.All)
expect(pattern.match(`${currentDrive}\\foo\\bar\\test.txt`)).toBe(MatchKind.All)
expect(pattern.match(`${currentDrive}\\foo\\bar\\test.js`)).toBe(MatchKind.None)
})
})