@@ -125,6 +125,33 @@ async function buildArchive(entries, comment) {
125125 assert . strictEqual ( await archiveVfs . promises . readFile ( '/renamed-dir/b.txt' , 'utf8' ) , 'nested' ) ;
126126 }
127127
128+ // Renaming an explicit directory also renames its children.
129+ {
130+ const archive = await buildArchive ( [
131+ await zlib . ZipEntry . create ( 'async-dir/' , Buffer . alloc ( 0 ) ) ,
132+ await zlib . ZipEntry . create ( 'async-dir/child.txt' , Buffer . from ( 'async' ) ) ,
133+ await zlib . ZipEntry . create ( 'sync-dir/' , Buffer . alloc ( 0 ) ) ,
134+ await zlib . ZipEntry . create ( 'sync-dir/child.txt' , Buffer . from ( 'sync' ) ) ,
135+ ] ) ;
136+ const zip = new zlib . ZipBuffer ( archive ) ;
137+ const archiveVfs = vfs . create ( new vfs . ZipProvider ( zip ) ) ;
138+
139+ await archiveVfs . promises . rename ( '/async-dir' , '/renamed-async-dir' ) ;
140+ assert . strictEqual ( zip . has ( 'async-dir/' ) , false ) ;
141+ assert . strictEqual ( zip . has ( 'async-dir/child.txt' ) , false ) ;
142+ assert . strictEqual ( zip . has ( 'renamed-async-dir/' ) , true ) ;
143+ assert . strictEqual (
144+ await archiveVfs . promises . readFile ( '/renamed-async-dir/child.txt' , 'utf8' ) ,
145+ 'async' ,
146+ ) ;
147+
148+ archiveVfs . renameSync ( '/sync-dir' , '/renamed-sync-dir' ) ;
149+ assert . strictEqual ( zip . has ( 'sync-dir/' ) , false ) ;
150+ assert . strictEqual ( zip . has ( 'sync-dir/child.txt' ) , false ) ;
151+ assert . strictEqual ( zip . has ( 'renamed-sync-dir/' ) , true ) ;
152+ assert . strictEqual ( archiveVfs . readFileSync ( '/renamed-sync-dir/child.txt' , 'utf8' ) , 'sync' ) ;
153+ }
154+
128155 // --- ZipFile-backed, read-only: writes rejected with EROFS ----------------
129156 {
130157 const archive = await buildArchive ( [ await zlib . ZipEntry . create ( 'a.txt' , Buffer . from ( 'x' ) ) ] ) ;
0 commit comments