1+ import t from 'tap'
2+ import { glob } from '../dist/esm/index.js'
3+
4+ t . test ( 'square brackets in folder names' , async t => {
5+ // Set up test files in directories with square brackets
6+ const cwd = t . testdir ( {
7+ 'app' : {
8+ 'api' : {
9+ '[id]' : {
10+ 'route.spec.js' : 'export const test = true;'
11+ } ,
12+ '[slug]' : {
13+ 'page.spec.js' : 'export const test = true;'
14+ } ,
15+ 'normal' : {
16+ 'file.spec.js' : 'export const test = true;'
17+ }
18+ }
19+ }
20+ } )
21+
22+ t . test ( 'escaped brackets should match literal brackets in folders' , async t => {
23+ const results = await glob ( 'app/api/\\[id\\]/*.spec.js' , { cwd } )
24+ t . equal ( results . length , 1 )
25+ t . match ( results [ 0 ] , / \[ i d \] \/ r o u t e \. s p e c \. j s $ / )
26+ } )
27+
28+ t . test ( 'unescaped brackets should not match literal bracket folders' , async t => {
29+ const results = await glob ( 'app/api/[id]/*.spec.js' , { cwd } )
30+ t . equal ( results . length , 0 )
31+ } )
32+
33+ t . test ( 'wildcard should match all directories including bracketed ones' , async t => {
34+ const results = await glob ( 'app/api/*/*.spec.js' , { cwd } )
35+ t . equal ( results . length , 3 ) // [id], [slug], and normal
36+ } )
37+
38+ t . test ( 'globstar should find all spec files' , async t => {
39+ const results = await glob ( '**/*.spec.js' , { cwd } )
40+ t . equal ( results . length , 3 )
41+ } )
42+
43+ t . test ( 'literalBrackets option should auto-escape brackets' , async t => {
44+ const results = await glob ( 'app/api/[id]/*.spec.js' , { cwd, literalBrackets : true } )
45+ t . equal ( results . length , 1 )
46+ t . match ( results [ 0 ] , / \[ i d \] \/ r o u t e \. s p e c \. j s $ / )
47+ } )
48+
49+ t . test ( 'literalBrackets should work with multiple patterns' , async t => {
50+ const patterns = [ 'app/api/[id]/*.spec.js' , 'app/api/[slug]/*.spec.js' ]
51+ const results = await glob ( patterns , { cwd, literalBrackets : true } )
52+ t . equal ( results . length , 2 )
53+ t . match ( results [ 0 ] , / \[ i d \] \/ r o u t e \. s p e c \. j s $ / )
54+ t . match ( results [ 1 ] , / \[ s l u g \] \/ p a g e \. s p e c \. j s $ / )
55+ } )
56+
57+ t . test ( 'literalBrackets should not affect normal brackets used as character classes' , async t => {
58+ // Create files that would match character classes
59+ const testCwd = t . testdir ( {
60+ 'i' : { 'test.js' : 'content' } ,
61+ 'd' : { 'test.js' : 'content' } ,
62+ 'normal' : { 'test.js' : 'content' }
63+ } )
64+
65+ // Without literalBrackets, [id] should match directories named 'i' or 'd'
66+ const results = await glob ( '[id]/test.js' , { cwd : testCwd } )
67+ t . equal ( results . length , 2 ) // Should match 'i' and 'd' directories
68+
69+ // With literalBrackets, [id] should be treated literally and match nothing
70+ const literalResults = await glob ( '[id]/test.js' , { cwd : testCwd , literalBrackets : true } )
71+ t . equal ( literalResults . length , 0 ) // Should not match any directory
72+ } )
73+ } )
0 commit comments