Skip to content

Commit 2b5d07b

Browse files
committed
Finish writer
1 parent 94c1ba0 commit 2b5d07b

File tree

5 files changed

+90
-19
lines changed

5 files changed

+90
-19
lines changed

.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ rmapi
88
# Test binary, build with `go test -c`
99
*.test
1010

11+
# Test artifacts
12+
test_writer.zip
13+
1114
# Output of the go coverage tool, specifically when used with LiteIDE
1215
*.out
1316

archive/reader_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package archive
33
import "testing"
44

55
func TestOpenReader(t *testing.T) {
6-
r, err := OpenReader("test.zip")
6+
r, err := OpenReader("test_reader.zip")
77
if err != nil {
88
t.Error(err)
99
}
File renamed without changes.

archive/writer.go

+17-18
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ func NewWriter(w io.Writer, uuid string) *Writer {
2323
return &Writer{archive, uuid}
2424
}
2525

26+
// Close finishes writing the zip file.
27+
func (w *Writer) Close() error {
28+
return w.zipw.Close()
29+
}
30+
2631
// CreateContent is for writing a content file.
2732
func (w *Writer) CreateContent() (io.Writer, error) {
2833
fn := fmt.Sprintf("%s.content", w.uuid)
@@ -47,26 +52,20 @@ func (w *Writer) CreateEpub() (io.Writer, error) {
4752
return w.create(fn)
4853
}
4954

50-
// CreatePage is for writing a page.
55+
// CreatePage is for writing a page data.
5156
// The argument idx serves for file names.
52-
// The functions returns two io.Writer.
53-
// - The first one is for the data
54-
// - The second is for metadata
55-
func (w *Writer) CreatePage(idx int) (io.Writer, io.Writer, error) {
56-
data := fmt.Sprintf("%d.rm", idx)
57-
metadata := fmt.Sprintf("%d-metadata.json", idx)
58-
59-
dataWriter, err := w.create(filepath.Join(w.uuid, "", data))
60-
if err != nil {
61-
return nil, nil, err
62-
}
63-
64-
metadataWriter, err := w.create(filepath.Join(w.uuid, "", metadata))
65-
if err != nil {
66-
return nil, nil, err
67-
}
57+
func (w *Writer) CreatePage(idx int) (io.Writer, error) {
58+
name := fmt.Sprintf("%d.rm", idx)
59+
fn := filepath.Join(w.uuid, name)
60+
return w.create(fn)
61+
}
6862

69-
return dataWriter, metadataWriter, nil
63+
// CreatePageMetadata is for writing a page metadata.
64+
// The argument idx serves for file names.
65+
func (w *Writer) CreatePageMetadata(idx int) (io.Writer, error) {
66+
name := fmt.Sprintf("%d-metadata.json", idx)
67+
fn := filepath.Join(w.uuid, name)
68+
return w.create(fn)
7069
}
7170

7271
// CreateThumbnail is for writing a thumbnail file.

archive/writer_test.go

+69
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package archive
2+
3+
import (
4+
"io"
5+
"os"
6+
"strings"
7+
"testing"
8+
)
9+
10+
func TestWriter(t *testing.T) {
11+
zipFile, err := os.Create("test_writer.zip")
12+
if err != nil {
13+
t.Error(err)
14+
}
15+
defer zipFile.Close()
16+
17+
archive := NewWriter(zipFile, "384327f5-133e-49c8-82ff-30aa19f3cfa4")
18+
defer archive.Close()
19+
20+
// Content
21+
contentWriter, err := archive.CreateContent()
22+
if err != nil {
23+
t.Error(err)
24+
}
25+
_, err = io.Copy(contentWriter, strings.NewReader("content"))
26+
if err != nil {
27+
t.Error(err)
28+
}
29+
30+
// Pagedata
31+
pageDataWriter, err := archive.CreatePagedata()
32+
if err != nil {
33+
t.Error(err)
34+
}
35+
_, err = io.Copy(pageDataWriter, strings.NewReader("pagedata"))
36+
if err != nil {
37+
t.Error(err)
38+
}
39+
40+
// Thumbnail
41+
thumbnailWriter, err := archive.CreateThumbnail(0)
42+
if err != nil {
43+
t.Error(err)
44+
}
45+
_, err = io.Copy(thumbnailWriter, strings.NewReader("thumbnail"))
46+
if err != nil {
47+
t.Error(err)
48+
}
49+
50+
// Page
51+
pageWriter, err := archive.CreatePage(0)
52+
if err != nil {
53+
t.Error(err)
54+
}
55+
_, err = io.Copy(pageWriter, strings.NewReader("page data"))
56+
if err != nil {
57+
t.Error(err)
58+
}
59+
60+
// Page metadata
61+
pageMetadataWriter, err := archive.CreatePageMetadata(0)
62+
if err != nil {
63+
t.Error(err)
64+
}
65+
_, err = io.Copy(pageMetadataWriter, strings.NewReader("page metadata"))
66+
if err != nil {
67+
t.Error(err)
68+
}
69+
}

0 commit comments

Comments
 (0)