126 lines
2.7 KiB
Go
126 lines
2.7 KiB
Go
package wpdf
|
|
|
|
import (
|
|
"bytes"
|
|
"image"
|
|
"image/color"
|
|
"image/png"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func makeTestPNG(t *testing.T, w, h int) []byte {
|
|
t.Helper()
|
|
img := image.NewRGBA(image.Rect(0, 0, w, h))
|
|
for y := range h {
|
|
for x := range w {
|
|
img.Set(x, y, color.RGBA{R: uint8(x), G: uint8(y), B: 128, A: 255})
|
|
}
|
|
}
|
|
var buf bytes.Buffer
|
|
if err := png.Encode(&buf, img); err != nil {
|
|
t.Fatalf("png encode: %v", err)
|
|
}
|
|
return buf.Bytes()
|
|
}
|
|
|
|
func TestRegisterImageDetectsPNG(t *testing.T) {
|
|
b := NewPDFBuilder(Portrait, SizeA4, false)
|
|
b.AddPage()
|
|
|
|
bin := makeTestPNG(t, 16, 16)
|
|
ref := b.RegisterImage(bin)
|
|
|
|
if ref == nil {
|
|
t.Fatal("RegisterImage returned nil")
|
|
}
|
|
if !strings.HasPrefix(ref.Name, "fpdf_img_") {
|
|
t.Errorf("default name not prefixed: %q", ref.Name)
|
|
}
|
|
if ref.Mime != "image/png" {
|
|
t.Errorf("mime = %q, want image/png", ref.Mime)
|
|
}
|
|
if ref.Info == nil {
|
|
t.Error("info is nil")
|
|
}
|
|
if !bytes.Equal(ref.Bin, bin) {
|
|
t.Error("Bin not stored correctly")
|
|
}
|
|
}
|
|
|
|
func TestRegisterImageWithCustomName(t *testing.T) {
|
|
b := NewPDFBuilder(Portrait, SizeA4, false)
|
|
b.AddPage()
|
|
|
|
bin := makeTestPNG(t, 8, 8)
|
|
ref := b.RegisterImage(bin, NewPDFImageRegisterOpt().Name("custom_image"))
|
|
|
|
if ref.Name != "custom_image" {
|
|
t.Errorf("custom name not used: %q", ref.Name)
|
|
}
|
|
}
|
|
|
|
func TestRegisterImageWithExplicitType(t *testing.T) {
|
|
b := NewPDFBuilder(Portrait, SizeA4, false)
|
|
b.AddPage()
|
|
|
|
bin := makeTestPNG(t, 8, 8)
|
|
ref := b.RegisterImage(bin, NewPDFImageRegisterOpt().ImageType("PNG"))
|
|
|
|
if ref.Info == nil {
|
|
t.Error("info is nil")
|
|
}
|
|
}
|
|
|
|
func TestRegisterImageLargeBuffer(t *testing.T) {
|
|
b := NewPDFBuilder(Portrait, SizeA4, false)
|
|
b.AddPage()
|
|
|
|
// Larger than 512 bytes to exercise that branch in detection.
|
|
bin := makeTestPNG(t, 256, 256)
|
|
if len(bin) <= 512 {
|
|
t.Fatalf("test png unexpectedly small: %d bytes", len(bin))
|
|
}
|
|
ref := b.RegisterImage(bin)
|
|
|
|
if ref.Mime != "image/png" {
|
|
t.Errorf("mime = %q, want image/png", ref.Mime)
|
|
}
|
|
}
|
|
|
|
func TestImageDrawing(t *testing.T) {
|
|
b := NewPDFBuilder(Portrait, SizeA4, false)
|
|
b.AddPage()
|
|
|
|
bin := makeTestPNG(t, 16, 16)
|
|
ref := b.RegisterImage(bin)
|
|
|
|
b.Image(ref, NewPDFImageOpt().X(10).Y(10).Width(20).Height(20))
|
|
|
|
out, err := b.Build()
|
|
if err != nil {
|
|
t.Fatalf("Build error: %v", err)
|
|
}
|
|
if !bytes.HasPrefix(out, []byte("%PDF-")) {
|
|
t.Error("output not a PDF")
|
|
}
|
|
}
|
|
|
|
func TestImageDrawingDefaults(t *testing.T) {
|
|
b := NewPDFBuilder(Portrait, SizeA4, false)
|
|
b.AddPage()
|
|
|
|
bin := makeTestPNG(t, 16, 16)
|
|
ref := b.RegisterImage(bin)
|
|
|
|
b.Image(ref) // no opts: use info defaults
|
|
|
|
out, err := b.Build()
|
|
if err != nil {
|
|
t.Fatalf("Build error: %v", err)
|
|
}
|
|
if !bytes.HasPrefix(out, []byte("%PDF-")) {
|
|
t.Error("output not a PDF")
|
|
}
|
|
}
|