-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathmobi_test.go
73 lines (61 loc) · 1.42 KB
/
mobi_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package mobi_test
import (
"bytes"
"encoding/binary"
"testing"
"time"
"github.com/leotaku/mobi/pdb"
)
func TestPDBHeaderLength(t *testing.T) {
length := measure(pdb.PalmDBHeader{})
assertEq(t, length, pdb.PalmDBHeaderLength)
}
func TestRecordHeaderLength(t *testing.T) {
length := measure(pdb.RecordHeader{})
assertEq(t, length, pdb.RecordHeaderLength)
}
func TestReadWrite(t *testing.T) {
// Write
w := bytes.NewBuffer(nil)
db := pdb.NewDatabase("Test Book", time.Unix(0, 0))
db.AddRecord(pdb.RawRecord("dog"))
db.AddRecord(pdb.RawRecord("cat"))
db.AddRecord(pdb.RawRecord("fish"))
db.AddRecord(pdb.RawRecord("penguin"))
err := db.Write(w)
if err != nil {
t.Fatal(err)
}
// Read
r := bytes.NewReader(w.Bytes())
rdb, _ := pdb.ReadDatabase(r)
// Compare
assertEq(t, db.Name, rdb.Name)
assertEq(t, len(db.Records), len(rdb.Records))
for i := 0; i < len(db.Records); i++ {
bs := writeRecord(db.Records[i])
rbs := writeRecord(rdb.Records[i])
assertEq(t, string(bs), string(rbs))
}
}
func assertEq(t *testing.T, v1 interface{}, v2 interface{}) {
if v1 != v2 {
t.Errorf("Not equal: %v, %v", v1, v2)
}
}
func writeRecord(r pdb.Record) []byte {
buf := bytes.NewBuffer(nil)
err := r.Write(buf)
if err != nil {
panic(err)
}
return buf.Bytes()
}
func measure(v interface{}) int {
buf := bytes.NewBuffer(nil)
err := binary.Write(buf, pdb.Endian, v)
if err != nil {
panic(err)
}
return len(buf.Bytes())
}