@@ -34,7 +34,7 @@ tmpdir.refresh();
3434
3535 let seenFile = false ;
3636 let seenIgnored = false ;
37- let watcherClosed = false ;
37+ let interval ;
3838
3939 watcher . on ( 'change' , common . mustCallAtLeast ( ( event , filename ) => {
4040 // On recursive watch, filename includes relative path from watched dir
@@ -45,18 +45,22 @@ tmpdir.refresh();
4545 seenIgnored = true ;
4646 }
4747 if ( seenFile ) {
48+ clearInterval ( interval ) ;
49+ interval = null ;
4850 watcher . close ( ) ;
49- watcherClosed = true ;
5051 }
5152 } , 1 ) ) ;
5253
53- setTimeout ( ( ) => {
54- fs . writeFileSync ( ignoredFile , 'ignored' ) ;
55- fs . writeFileSync ( testFile , 'content' ) ;
56- } , common . platformTimeout ( 200 ) ) ;
54+ // Use setInterval to handle potential event delays on macOS FSEvents
55+ process . nextTick ( common . mustCall ( ( ) => {
56+ interval = setInterval ( ( ) => {
57+ fs . writeFileSync ( ignoredFile , 'ignored' ) ;
58+ fs . writeFileSync ( testFile , 'content-' + Date . now ( ) ) ;
59+ } , 100 ) ;
60+ } ) ) ;
5761
5862 process . on ( 'exit' , ( ) => {
59- assert . strictEqual ( watcherClosed , true ) ;
63+ assert . strictEqual ( interval , null ) ;
6064 assert . strictEqual ( seenFile , true ) ;
6165 assert . strictEqual ( seenIgnored , false ) ;
6266 } ) ;
@@ -80,7 +84,7 @@ tmpdir.refresh();
8084
8185 let seenFile = false ;
8286 let seenIgnored = false ;
83- let watcherClosed = false ;
87+ let interval ;
8488
8589 watcher . on ( 'change' , common . mustCallAtLeast ( ( event , filename ) => {
8690 if ( filename && filename . endsWith ( 'keep.txt' ) ) {
@@ -90,18 +94,22 @@ tmpdir.refresh();
9094 seenIgnored = true ;
9195 }
9296 if ( seenFile ) {
97+ clearInterval ( interval ) ;
98+ interval = null ;
9399 watcher . close ( ) ;
94- watcherClosed = true ;
95100 }
96101 } , 1 ) ) ;
97102
98- setTimeout ( ( ) => {
99- fs . writeFileSync ( ignoredFile , 'ignored' ) ;
100- fs . writeFileSync ( testFile , 'content' ) ;
101- } , common . platformTimeout ( 200 ) ) ;
103+ // Use setInterval to handle potential event delays on macOS FSEvents
104+ process . nextTick ( common . mustCall ( ( ) => {
105+ interval = setInterval ( ( ) => {
106+ fs . writeFileSync ( ignoredFile , 'ignored' ) ;
107+ fs . writeFileSync ( testFile , 'content-' + Date . now ( ) ) ;
108+ } , 100 ) ;
109+ } ) ) ;
102110
103111 process . on ( 'exit' , ( ) => {
104- assert . strictEqual ( watcherClosed , true ) ;
112+ assert . strictEqual ( interval , null ) ;
105113 assert . strictEqual ( seenFile , true ) ;
106114 assert . strictEqual ( seenIgnored , false ) ;
107115 } ) ;
@@ -127,7 +135,7 @@ tmpdir.refresh();
127135
128136 let seenFile = false ;
129137 let seenIgnored = false ;
130- let watcherClosed = false ;
138+ let interval ;
131139
132140 watcher . on ( 'change' , common . mustCallAtLeast ( ( event , filename ) => {
133141 if ( filename && filename . endsWith ( 'app.js' ) ) {
@@ -137,18 +145,22 @@ tmpdir.refresh();
137145 seenIgnored = true ;
138146 }
139147 if ( seenFile ) {
148+ clearInterval ( interval ) ;
149+ interval = null ;
140150 watcher . close ( ) ;
141- watcherClosed = true ;
142151 }
143152 } , 1 ) ) ;
144153
145- setTimeout ( ( ) => {
146- fs . writeFileSync ( ignoredFile , '{}' ) ;
147- fs . writeFileSync ( testFile , 'console.log("hello")' ) ;
148- } , common . platformTimeout ( 200 ) ) ;
154+ // Use setInterval to handle potential event delays on macOS FSEvents
155+ process . nextTick ( common . mustCall ( ( ) => {
156+ interval = setInterval ( ( ) => {
157+ fs . writeFileSync ( ignoredFile , '{}' ) ;
158+ fs . writeFileSync ( testFile , 'console.log("hello-' + Date . now ( ) + '")' ) ;
159+ } , 100 ) ;
160+ } ) ) ;
149161
150162 process . on ( 'exit' , ( ) => {
151- assert . strictEqual ( watcherClosed , true ) ;
163+ assert . strictEqual ( interval , null ) ;
152164 assert . strictEqual ( seenFile , true ) ;
153165 assert . strictEqual ( seenIgnored , false ) ;
154166 } ) ;
@@ -180,7 +192,7 @@ tmpdir.refresh();
180192 let seenLog = false ;
181193 let seenTmp = false ;
182194 let seenHidden = false ;
183- let watcherClosed = false ;
195+ let interval ;
184196
185197 watcher . on ( 'change' , common . mustCallAtLeast ( ( event , filename ) => {
186198 if ( filename && filename . endsWith ( 'visible.txt' ) ) {
@@ -191,20 +203,24 @@ tmpdir.refresh();
191203 if ( filename && filename . endsWith ( '.gitignore' ) ) seenHidden = true ;
192204
193205 if ( seenFile ) {
206+ clearInterval ( interval ) ;
207+ interval = null ;
194208 watcher . close ( ) ;
195- watcherClosed = true ;
196209 }
197210 } , 1 ) ) ;
198211
199- setTimeout ( ( ) => {
200- fs . writeFileSync ( ignoredLog , 'ignored' ) ;
201- fs . writeFileSync ( ignoredTmp , 'ignored' ) ;
202- fs . writeFileSync ( ignoredHidden , 'ignored' ) ;
203- fs . writeFileSync ( testFile , 'content' ) ;
204- } , common . platformTimeout ( 200 ) ) ;
212+ // Use setInterval to handle potential event delays on macOS FSEvents
213+ process . nextTick ( common . mustCall ( ( ) => {
214+ interval = setInterval ( ( ) => {
215+ fs . writeFileSync ( ignoredLog , 'ignored' ) ;
216+ fs . writeFileSync ( ignoredTmp , 'ignored' ) ;
217+ fs . writeFileSync ( ignoredHidden , 'ignored' ) ;
218+ fs . writeFileSync ( testFile , 'content-' + Date . now ( ) ) ;
219+ } , 100 ) ;
220+ } ) ) ;
205221
206222 process . on ( 'exit' , ( ) => {
207- assert . strictEqual ( watcherClosed , true ) ;
223+ assert . strictEqual ( interval , null ) ;
208224 assert . strictEqual ( seenFile , true ) ;
209225 assert . strictEqual ( seenLog , false ) ;
210226 assert . strictEqual ( seenTmp , false ) ;
0 commit comments