Add Windows-specific tests for path matching with backslashes
Co-authored-by: salmanmkc <32169182+salmanmkc@users.noreply.github.com>
This commit is contained in:
@@ -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)
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user