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