151 lines
2.5 KiB
Go
151 lines
2.5 KiB
Go
|
package zim
|
||
|
|
||
|
import (
|
||
|
"log"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/pkg/errors"
|
||
|
)
|
||
|
|
||
|
var Z *ZimReader
|
||
|
|
||
|
func init() {
|
||
|
var err error
|
||
|
Z, err = NewReader("testdata/wikibooks_af_all_maxi_2023-06.zim")
|
||
|
if err != nil {
|
||
|
log.Panicf("Can't read %v", err)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestOpen(t *testing.T) {
|
||
|
if Z.ArticleCount == 0 {
|
||
|
t.Errorf("No article found")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestMime(t *testing.T) {
|
||
|
if len(Z.MimeTypes()) == 0 {
|
||
|
t.Errorf("No mime types found")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestDisplayInfost(t *testing.T) {
|
||
|
info := Z.String()
|
||
|
if len(info) < 0 {
|
||
|
t.Errorf("Can't read infos")
|
||
|
}
|
||
|
t.Log(info)
|
||
|
}
|
||
|
|
||
|
func TestURLAtIdx(t *testing.T) {
|
||
|
// addr 0 is a redirect
|
||
|
p, _ := Z.OffsetAtURLIdx(5)
|
||
|
a, _ := Z.ArticleAt(p)
|
||
|
if a == nil {
|
||
|
t.Errorf("Can't find 1st url")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestDisplayArticle(t *testing.T) {
|
||
|
// addr 0 is a redirect
|
||
|
p, _ := Z.OffsetAtURLIdx(5)
|
||
|
a, _ := Z.ArticleAt(p)
|
||
|
if a == nil {
|
||
|
t.Errorf("Can't find 1st url")
|
||
|
}
|
||
|
|
||
|
t.Log(a)
|
||
|
}
|
||
|
|
||
|
func TestPageNoIndex(t *testing.T) {
|
||
|
a, _ := Z.GetPageNoIndex("A/Dracula:Capitol_1.html")
|
||
|
if a == nil {
|
||
|
t.Errorf("Can't find existing url")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestListArticles(t *testing.T) {
|
||
|
if testing.Short() {
|
||
|
t.Skip("skipping test in short mode.")
|
||
|
}
|
||
|
|
||
|
var i uint32
|
||
|
|
||
|
for a := range Z.ListArticles() {
|
||
|
i++
|
||
|
t.Log(a.String())
|
||
|
}
|
||
|
|
||
|
if i == 0 {
|
||
|
t.Errorf("Can't find any urls")
|
||
|
}
|
||
|
|
||
|
if i != Z.ArticleCount-1 {
|
||
|
t.Errorf("Can't find the exact ArticleCount urls %d vs %d", i, Z.ArticleCount)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestMainPage(t *testing.T) {
|
||
|
a, _ := Z.MainPage()
|
||
|
if a == nil {
|
||
|
t.Errorf("Can't find the mainpage article")
|
||
|
}
|
||
|
|
||
|
t.Log(a)
|
||
|
}
|
||
|
|
||
|
func TestFavicon(t *testing.T) {
|
||
|
favicon, err := Z.Favicon()
|
||
|
if err != nil {
|
||
|
t.Errorf("%+v", errors.WithStack(err))
|
||
|
}
|
||
|
if favicon == nil {
|
||
|
t.Errorf("Can't find the favicon article")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestMetadata(t *testing.T) {
|
||
|
metadata, err := Z.Metadata()
|
||
|
if err != nil {
|
||
|
t.Errorf("%+v", errors.WithStack(err))
|
||
|
}
|
||
|
if metadata == nil {
|
||
|
t.Errorf("Can't find the metadata")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestData(t *testing.T) {
|
||
|
// addr 0 is a redirect
|
||
|
p, _ := Z.OffsetAtURLIdx(2)
|
||
|
a, _ := Z.ArticleAt(p)
|
||
|
b, _ := a.Data()
|
||
|
data := string(b)
|
||
|
if a.EntryType != RedirectEntry {
|
||
|
if len(data) == 0 {
|
||
|
t.Error("can't read data")
|
||
|
}
|
||
|
}
|
||
|
t.Log(a.String())
|
||
|
t.Log(data)
|
||
|
}
|
||
|
|
||
|
func BenchmarkArticleBytes(b *testing.B) {
|
||
|
// addr 0 is a redirect
|
||
|
p, _ := Z.OffsetAtURLIdx(5)
|
||
|
a, _ := Z.ArticleAt(p)
|
||
|
if a == nil {
|
||
|
b.Errorf("Can't find 1st url")
|
||
|
}
|
||
|
data, err := a.Data()
|
||
|
if err != nil {
|
||
|
b.Error(err)
|
||
|
}
|
||
|
|
||
|
b.SetBytes(int64(len(data)))
|
||
|
b.ResetTimer()
|
||
|
for i := 0; i < b.N; i++ {
|
||
|
a.Data()
|
||
|
bcache.Purge() // prevent memiozing value
|
||
|
}
|
||
|
}
|