package bookfile import ( "archive/zip" "bytes" "testing" ) func TestCBZCoverIsFirstPage(t *testing.T) { buf := &bytes.Buffer{} zw := zip.NewWriter(buf) w, _ := zw.Create("02.jpg") w.Write([]byte("second")) w, _ = zw.Create("01.jpg") w.Write([]byte("first")) zw.Close() r := bytes.NewReader(buf.Bytes()) img, ext, err := CBZCover(r, int64(r.Len())) if err != nil || string(img) != "first" || ext != ".jpg" { t.Fatalf("%q %q %v", img, ext, err) } } func zipEntries(t *testing.T, kv map[string]string) *bytes.Reader { t.Helper() buf := &bytes.Buffer{} zw := zip.NewWriter(buf) for name, data := range kv { w, _ := zw.Create(name) w.Write([]byte(data)) } zw.Close() return bytes.NewReader(buf.Bytes()) } const containerXML = `` func opf(manifest, spine string) string { return `` + spine + `` + manifest + `` } func TestEPUBCoverProperties(t *testing.T) { r := zipEntries(t, map[string]string{ "META-INF/container.xml": containerXML, "OEBPS/content.opf": opf(``, ""), "OEBPS/img/cover one.png": "PNGDATA", }) img, ext, err := EPUBCover(r, int64(r.Len())) if err != nil || string(img) != "PNGDATA" || ext != ".png" { t.Fatalf("%q %q %v", img, ext, err) } } func TestEPUBCoverMetaID(t *testing.T) { r := zipEntries(t, map[string]string{ "META-INF/container.xml": containerXML, "OEBPS/content.opf": opf(``, ``), "OEBPS/art.jpg": "JPGDATA", }) img, _, err := EPUBCover(r, int64(r.Len())) if err != nil || string(img) != "JPGDATA" { t.Fatalf("%q %v", img, err) } } func TestEPUBNoCover(t *testing.T) { r := zipEntries(t, map[string]string{ "META-INF/container.xml": containerXML, "OEBPS/content.opf": opf(``, ""), }) if _, _, err := EPUBCover(r, int64(r.Len())); err == nil { t.Fatal("want no-cover error") } }