unipdf/pdf/extractor/image_test.go

104 lines
2.0 KiB
Go
Raw Normal View History

2019-01-22 13:44:20 +00:00
package extractor
import (
"os"
"reflect"
"testing"
"github.com/unidoc/unidoc/pdf/model"
)
// TODO(gunnsth): Create test cases, specifically:
// 1. Basic test (one XObject image at specific position).
// 2. Test transform matrix handling (nested cms).
// 3. Inline image extraction.
// 4. Check caching.
// 5. Benchmark.
func loadPageFromPDFFile(filePath string, pageNum int) (*model.PdfPage, error) {
f, err := os.Open(filePath)
if err != nil {
return nil, err
}
defer f.Close()
pdfReader, err := model.NewPdfReader(f)
if err != nil {
return nil, err
}
return pdfReader.GetPage(pageNum)
}
func TestImageExtractionBasic(t *testing.T) {
type expectedImage struct {
X float64
Y float64
Width float64
Height float64
Angle int
}
testcases := []struct {
Name string
PageNum int
Path string
Expected []ImageMark
}{
{
"basic xobject",
1,
"./testdata/basic_xobject.pdf",
[]ImageMark{
{
Image: nil,
X: 0,
Y: 294.865385,
Width: 612,
Height: 197.134615,
Angle: 0,
},
},
},
}
for _, tcase := range testcases {
page, err := loadPageFromPDFFile(tcase.Path, tcase.PageNum)
if err != nil {
t.Fatalf("Error: %v", err)
}
pageExtractor, err := New(page)
if err != nil {
t.Fatalf("Error: %v", err)
}
pageImages, err := pageExtractor.ExtractPageImages()
if err != nil {
t.Fatalf("Error: %v", err)
}
if len(pageImages.Images) != len(tcase.Expected) {
t.Fatalf("%d != %d", len(pageImages.Images), len(tcase.Expected))
}
for i, img := range pageImages.Images {
img.Image = nil // Discard image data.
if !reflect.DeepEqual(img, tcase.Expected[i]) {
t.Fatalf("i: %d - %#v != %#v", i, img, tcase.Expected[i])
}
}
}
}
// Test position extraction with nest transform matrices.
func TestImageExtractionNestedCM(t *testing.T) {
}
func TestImageExtractionInline(t *testing.T) {
}
func TestImageExtractionCaching(t *testing.T) {
}
func BenchmarkImageExtraction(b *testing.B) {
}