@@ -116,3 +116,63 @@ func TestZipDirectory(t *testing.T) {
116116 }
117117 })
118118}
119+
120+ func TestUnzip (t * testing.T ) {
121+ tmpZip , err := os .CreateTemp ("" , "test-unzip-*.zip" )
122+ if err != nil {
123+ t .Fatalf ("Failed to create temp zip: %v" , err )
124+ }
125+ tmpZip .Close ()
126+ defer os .Remove (tmpZip .Name ())
127+
128+ zw , err := os .Create (tmpZip .Name ())
129+ if err != nil {
130+ t .Fatalf ("Failed to open zip for writing: %v" , err )
131+ }
132+ zipWriter := zip .NewWriter (zw )
133+
134+ testFiles := map [string ]string {
135+ "file1.txt" : "content of file 1" ,
136+ "subdir/file2.txt" : "content of file 2" ,
137+ }
138+
139+ if _ , err := zipWriter .Create ("subdir/" ); err != nil {
140+ t .Fatalf ("Failed to create dir entry: %v" , err )
141+ }
142+
143+ for name , content := range testFiles {
144+ w , err := zipWriter .Create (name )
145+ if err != nil {
146+ t .Fatalf ("Failed to create zip entry %s: %v" , name , err )
147+ }
148+ if _ , err := w .Write ([]byte (content )); err != nil {
149+ t .Fatalf ("Failed to write zip entry %s: %v" , name , err )
150+ }
151+ }
152+ zipWriter .Close ()
153+ zw .Close ()
154+
155+ // Unzip to temp directory
156+ destDir , err := os .MkdirTemp ("" , "test-unzip-dest-*" )
157+ if err != nil {
158+ t .Fatalf ("Failed to create dest dir: %v" , err )
159+ }
160+ defer os .RemoveAll (destDir )
161+
162+ if err := Unzip (tmpZip .Name (), destDir ); err != nil {
163+ t .Fatalf ("Unzip failed: %v" , err )
164+ }
165+
166+ // Verify extracted files
167+ for name , expectedContent := range testFiles {
168+ path := filepath .Join (destDir , name )
169+ content , err := os .ReadFile (path )
170+ if err != nil {
171+ t .Errorf ("Failed to read extracted file %s: %v" , name , err )
172+ continue
173+ }
174+ if string (content ) != expectedContent {
175+ t .Errorf ("File %s: expected %q, got %q" , name , expectedContent , string (content ))
176+ }
177+ }
178+ }
0 commit comments