1 package main 2 3 import ( 4 "archive/zip" 5 "bytes" 6 "errors" 7 "io/fs" 8 "testing" 9 ) 10 11 var _ filesystem = &zipFS{} 12 13 func TestZipFS(t *testing.T) { 14 var buf bytes.Buffer 15 16 zw := zip.NewWriter(&buf) 17 18 w, _ := zw.Create("package/a.txt") 19 w.Write([]byte("12345")) 20 21 w, _ = zw.Create("package/b.txt") 22 w.Write([]byte("abcdefgh")) 23 24 zw.Close() 25 26 zr, _ := zip.NewReader(bytes.NewReader(buf.Bytes()), int64(buf.Len())) 27 28 z := &zipFS{zr, ""} 29 30 if entries, err := z.ReadDir("not-a-dir"); !errors.Is(err, fs.ErrNotExist) { 31 t.Errorf("expecting error ErrNotExist, got %v", err) 32 } else if entries != nil { 33 t.Errorf("expecting nil entries, got %v", entries) 34 } else if entries, err := z.ReadDir("."); err != nil { 35 t.Errorf("expecting nil error, got %s", err) 36 } else if len(entries) != 1 { 37 t.Errorf("expecting 1 entry, got %d", len(entries)) 38 } else if n := entries[0].Name(); n != "package" { 39 t.Errorf("expecting entry name %q, got %q", "package", n) 40 } else if entries, _ := z.ReadDir("package"); len(entries) != 2 { 41 t.Errorf("expecting 2 entries, got %d", len(entries)) 42 } else if n := entries[0].Name(); n != "a.txt" { 43 t.Errorf("expecting entry name %q, got %q", "a.txt", n) 44 } else if n := entries[1].Name(); n != "b.txt" { 45 t.Errorf("expecting entry name %q, got %q", "b.txt", n) 46 } 47 48 if id := z.IsDir("not-a-file"); id { 49 t.Errorf("expecting IsDir = false, got %v", id) 50 } else if id = z.IsDir("package/"); !id { 51 t.Errorf("expecting IsDir = true, got %v", id) 52 } 53 54 if data, err := z.ReadFile("not-a-file"); !errors.Is(err, fs.ErrNotExist) { 55 t.Errorf("expecting error ErrNotExists, got %v", err) 56 } else if data != nil { 57 t.Errorf("expecting nil data, got %v", data) 58 } else if data, err = z.ReadFile("package/a.txt"); err != nil { 59 t.Errorf("expecting nil error, got %s", err) 60 } else if string(data) != "12345" { 61 t.Errorf("expecting to read %q, got %q", "12345", data) 62 } else if data, err = z.ReadFile("package/b.txt"); err != nil { 63 t.Errorf("expecting nil error, got %s", err) 64 } else if string(data) != "abcdefgh" { 65 t.Errorf("expecting to read %q, got %q", "abcdefgh", data) 66 } 67 } 68