[🤖] Add Unit-Tests
Build Docker and Deploy / Run goext test-suite (push) Successful in 1m34s

This commit is contained in:
2026-04-27 10:46:08 +02:00
parent dad0e3240d
commit 02d6894ec6
116 changed files with 18795 additions and 1 deletions
+455
View File
@@ -0,0 +1,455 @@
package wpdf
import (
"testing"
)
func TestPDFCellOptBuilders(t *testing.T) {
opt := NewPDFCellOpt().
Width(100).
Height(20).
Border(BorderFull).
LnPos(BreakToRight).
Align(AlignHorzCenter).
FillBackground(true).
Link(5).
LinkStr("https://example.com").
Font(FontTimes, Bold, 14).
LnAfter(2).
X(15).
AutoWidth().
AutoWidthPaddingX(3).
TextColor(1, 2, 3).
BorderColor(4, 5, 6).
FillColor(7, 8, 9).
Alpha(0.5, BlendMultiply).
Debug(true)
if opt.width == nil || *opt.width != 100 {
t.Error("width not set")
}
if opt.height == nil || *opt.height != 20 {
t.Error("height not set")
}
if opt.border == nil || *opt.border != BorderFull {
t.Error("border not set")
}
if opt.ln == nil || *opt.ln != BreakToRight {
t.Error("ln not set")
}
if opt.align == nil || *opt.align != AlignHorzCenter {
t.Error("align not set")
}
if opt.fill == nil || *opt.fill != true {
t.Error("fill not set")
}
if opt.link == nil || *opt.link != 5 {
t.Error("link not set")
}
if opt.linkStr == nil || *opt.linkStr != "https://example.com" {
t.Error("linkStr not set")
}
if opt.fontNameOverride == nil || *opt.fontNameOverride != FontTimes {
t.Error("fontNameOverride not set")
}
if opt.fontStyleOverride == nil || *opt.fontStyleOverride != Bold {
t.Error("fontStyleOverride not set")
}
if opt.fontSizeOverride == nil || *opt.fontSizeOverride != 14 {
t.Error("fontSizeOverride not set")
}
if opt.extraLn == nil || *opt.extraLn != 2 {
t.Error("extraLn not set")
}
if opt.x == nil || *opt.x != 15 {
t.Error("x not set")
}
if opt.autoWidth == nil || *opt.autoWidth != true {
t.Error("autoWidth not set")
}
if opt.autoWidthPaddingX == nil || *opt.autoWidthPaddingX != 3 {
t.Error("autoWidthPaddingX not set")
}
if opt.textColor == nil || *opt.textColor != (PDFColor{R: 1, G: 2, B: 3}) {
t.Error("textColor not set")
}
if opt.borderColor == nil || *opt.borderColor != (PDFColor{R: 4, G: 5, B: 6}) {
t.Error("borderColor not set")
}
if opt.fillColor == nil || *opt.fillColor != (PDFColor{R: 7, G: 8, B: 9}) {
t.Error("fillColor not set")
}
if opt.alphaOverride == nil || opt.alphaOverride.V1 != 0.5 || opt.alphaOverride.V2 != BlendMultiply {
t.Error("alphaOverride not set")
}
if opt.debug == nil || *opt.debug != true {
t.Error("debug not set")
}
}
func TestPDFCellOptHexColors(t *testing.T) {
opt := NewPDFCellOpt().
TextColorHex(0xFF0000).
BorderColorHex(0x00FF00).
FillColorHex(0x0000FF)
if *opt.textColor != (PDFColor{R: 0xFF, G: 0, B: 0}) {
t.Errorf("textColorHex got %+v", opt.textColor)
}
if *opt.borderColor != (PDFColor{R: 0, G: 0xFF, B: 0}) {
t.Errorf("borderColorHex got %+v", opt.borderColor)
}
if *opt.fillColor != (PDFColor{R: 0, G: 0, B: 0xFF}) {
t.Errorf("fillColorHex got %+v", opt.fillColor)
}
}
func TestPDFCellOptBoldItalic(t *testing.T) {
opt := NewPDFCellOpt().Bold()
if opt.fontStyleOverride == nil || *opt.fontStyleOverride != Bold {
t.Error("Bold() should set fontStyleOverride to Bold")
}
opt2 := NewPDFCellOpt().Italic()
if opt2.fontStyleOverride == nil || *opt2.fontStyleOverride != Italic {
t.Error("Italic() should set fontStyleOverride to Italic")
}
}
func TestPDFCellOptIndividualFontSetters(t *testing.T) {
opt := NewPDFCellOpt().FontName(FontCourier).FontStyle(Italic).FontSize(11)
if *opt.fontNameOverride != FontCourier {
t.Error("FontName")
}
if *opt.fontStyleOverride != Italic {
t.Error("FontStyle")
}
if *opt.fontSizeOverride != 11 {
t.Error("FontSize")
}
}
func TestPDFCellOptCopy(t *testing.T) {
orig := NewPDFCellOpt().Width(50).Height(10)
cp := orig.Copy()
if cp == orig {
t.Error("Copy() returned same pointer")
}
if *cp.width != 50 || *cp.height != 10 {
t.Error("copied opt does not match original")
}
cp.Width(99)
if *orig.width != 50 {
t.Errorf("modifying copy affected original: orig.width=%v", *orig.width)
}
}
func TestPDFCellOptToMulti(t *testing.T) {
cell := NewPDFCellOpt().
Width(100).
Height(20).
Border(BorderTop).
Align(AlignRight).
FillBackground(true).
Font(FontTimes, Bold, 14).
LnAfter(3).
X(5).
TextColor(1, 2, 3).
BorderColor(4, 5, 6).
FillColor(7, 8, 9)
multi := cell.ToMulti()
if multi == nil {
t.Fatal("ToMulti returned nil")
}
if *multi.width != 100 {
t.Error("width not transferred")
}
if *multi.height != 20 {
t.Error("height not transferred")
}
if *multi.border != BorderTop {
t.Error("border not transferred")
}
if *multi.align != AlignRight {
t.Error("align not transferred")
}
if !*multi.fill {
t.Error("fill not transferred")
}
if *multi.fontNameOverride != FontTimes {
t.Error("fontName not transferred")
}
if *multi.fontStyleOverride != Bold {
t.Error("fontStyle not transferred")
}
if *multi.fontSizeOverride != 14 {
t.Error("fontSize not transferred")
}
if *multi.extraLn != 3 {
t.Error("extraLn not transferred")
}
if *multi.x != 5 {
t.Error("x not transferred")
}
if *multi.textColor != (PDFColor{R: 1, G: 2, B: 3}) {
t.Error("textColor not transferred")
}
if *multi.borderColor != (PDFColor{R: 4, G: 5, B: 6}) {
t.Error("borderColor not transferred")
}
if *multi.fillColor != (PDFColor{R: 7, G: 8, B: 9}) {
t.Error("fillColor not transferred")
}
}
func TestPDFMultiCellOptBuilders(t *testing.T) {
opt := NewPDFMultiCellOpt().
Width(80).
Height(10).
Border(BorderFull).
Align(AlignLeft).
FillBackground(true).
Font(FontTimes, Italic, 11).
LnAfter(1).
X(5).
TextColor(10, 20, 30).
BorderColor(40, 50, 60).
FillColor(70, 80, 90).
Alpha(0.7, BlendScreen).
Debug(true)
if *opt.width != 80 || *opt.height != 10 || *opt.border != BorderFull {
t.Error("base opts not set")
}
if *opt.align != AlignLeft || !*opt.fill {
t.Error("align/fill not set")
}
if *opt.fontNameOverride != FontTimes || *opt.fontStyleOverride != Italic || *opt.fontSizeOverride != 11 {
t.Error("font not set")
}
if *opt.extraLn != 1 || *opt.x != 5 {
t.Error("layout opts not set")
}
if *opt.textColor != (PDFColor{R: 10, G: 20, B: 30}) {
t.Error("textColor not set")
}
if *opt.borderColor != (PDFColor{R: 40, G: 50, B: 60}) {
t.Error("borderColor not set")
}
if *opt.fillColor != (PDFColor{R: 70, G: 80, B: 90}) {
t.Error("fillColor not set")
}
if opt.alphaOverride.V1 != 0.7 || opt.alphaOverride.V2 != BlendScreen {
t.Error("alpha not set")
}
if !*opt.debug {
t.Error("debug not set")
}
}
func TestPDFMultiCellOptHexColors(t *testing.T) {
opt := NewPDFMultiCellOpt().
TextColorHex(0xAABBCC).
BorderColorHex(0x112233).
FillColorHex(0x445566)
if *opt.textColor != (PDFColor{R: 0xAA, G: 0xBB, B: 0xCC}) {
t.Error("textColorHex")
}
if *opt.borderColor != (PDFColor{R: 0x11, G: 0x22, B: 0x33}) {
t.Error("borderColorHex")
}
if *opt.fillColor != (PDFColor{R: 0x44, G: 0x55, B: 0x66}) {
t.Error("fillColorHex")
}
}
func TestPDFMultiCellOptBoldItalic(t *testing.T) {
if *NewPDFMultiCellOpt().Bold().fontStyleOverride != Bold {
t.Error("MultiCell Bold")
}
if *NewPDFMultiCellOpt().Italic().fontStyleOverride != Italic {
t.Error("MultiCell Italic")
}
}
func TestPDFMultiCellOptIndividualFontSetters(t *testing.T) {
opt := NewPDFMultiCellOpt().FontName(FontCourier).FontStyle(Bold).FontSize(11)
if *opt.fontNameOverride != FontCourier {
t.Error("FontName")
}
if *opt.fontStyleOverride != Bold {
t.Error("FontStyle")
}
if *opt.fontSizeOverride != 11 {
t.Error("FontSize")
}
}
func TestPDFMultiCellOptCopy(t *testing.T) {
orig := NewPDFMultiCellOpt().Width(50)
cp := orig.Copy()
if cp == orig {
t.Error("Copy() returned same pointer")
}
cp.Width(99)
if *orig.width != 50 {
t.Error("modifying copy affected original")
}
}
func TestPDFRectOptBuilders(t *testing.T) {
opt := NewPDFRectOpt().
X(5).Y(6).
LineWidth(0.3).
DrawColor(10, 20, 30).
FillColor(40, 50, 60).
Alpha(0.4, BlendOverlay).
Rounded(2).
Debug(true)
if *opt.x != 5 || *opt.y != 6 {
t.Error("x/y not set")
}
if *opt.lineWidth != 0.3 {
t.Error("lineWidth not set")
}
if *opt.drawColor != (PDFColor{R: 10, G: 20, B: 30}) {
t.Error("drawColor not set")
}
if *opt.fillColor != (PDFColor{R: 40, G: 50, B: 60}) {
t.Error("fillColor not set")
}
if opt.alpha.V1 != 0.4 || opt.alpha.V2 != BlendOverlay {
t.Error("alpha not set")
}
if *opt.radiusTL != 2 || *opt.radiusTR != 2 || *opt.radiusBL != 2 || *opt.radiusBR != 2 {
t.Error("Rounded did not set all four corners")
}
if !*opt.debug {
t.Error("debug not set")
}
}
func TestPDFRectOptIndividualRadii(t *testing.T) {
opt := NewPDFRectOpt().RadiusTL(1).RadiusTR(2).RadiusBR(3).RadiusBL(4)
if *opt.radiusTL != 1 || *opt.radiusTR != 2 || *opt.radiusBR != 3 || *opt.radiusBL != 4 {
t.Errorf("individual radii not set: TL=%v TR=%v BR=%v BL=%v",
*opt.radiusTL, *opt.radiusTR, *opt.radiusBR, *opt.radiusBL)
}
}
func TestPDFRectOptHexColors(t *testing.T) {
opt := NewPDFRectOpt().DrawColorHex(0xABCDEF).FillColorHex(0x123456)
if *opt.drawColor != (PDFColor{R: 0xAB, G: 0xCD, B: 0xEF}) {
t.Error("drawColorHex")
}
if *opt.fillColor != (PDFColor{R: 0x12, G: 0x34, B: 0x56}) {
t.Error("fillColorHex")
}
}
func TestPDFLineOptBuilders(t *testing.T) {
opt := NewPDFLineOpt().
LineWidth(0.5).
DrawColor(10, 20, 30).
Alpha(0.3, BlendDarken).
CapButt().
Debug(true)
if *opt.lineWidth != 0.5 {
t.Error("lineWidth not set")
}
if *opt.drawColor != (PDFColor{R: 10, G: 20, B: 30}) {
t.Error("drawColor not set")
}
if opt.alpha.V1 != 0.3 || opt.alpha.V2 != BlendDarken {
t.Error("alpha not set")
}
if *opt.capStyle != CapButt {
t.Error("capStyle CapButt not set")
}
if !*opt.debug {
t.Error("debug not set")
}
}
func TestPDFLineOptCapStyles(t *testing.T) {
if *NewPDFLineOpt().CapButt().capStyle != CapButt {
t.Error("CapButt")
}
if *NewPDFLineOpt().CapRound().capStyle != CapRound {
t.Error("CapRound")
}
if *NewPDFLineOpt().CapSquare().capStyle != CapSquare {
t.Error("CapSquare")
}
}
func TestPDFLineOptHexColor(t *testing.T) {
opt := NewPDFLineOpt().DrawColorHex(0xFEDCBA)
if *opt.drawColor != (PDFColor{R: 0xFE, G: 0xDC, B: 0xBA}) {
t.Error("drawColorHex")
}
}
func TestPDFImageRegisterOptBuilders(t *testing.T) {
opt := NewPDFImageRegisterOpt().
ImageType("PNG").
ReadDpi(true).
AllowNegativePosition(true).
Name("custom_name")
if *opt.imageType != "PNG" {
t.Error("imageType not set")
}
if !*opt.readDpi {
t.Error("readDpi not set")
}
if !*opt.allowNegativePosition {
t.Error("allowNegativePosition not set")
}
if *opt.name != "custom_name" {
t.Error("name not set")
}
}
func TestPDFImageOptBuilders(t *testing.T) {
opt := NewPDFImageOpt().
X(1).Y(2).Width(30).Height(40).
Flow(false).
Link(7).LinkStr("foo").
ImageType("PNG").
ReadDpi(true).
AllowNegativePosition(true).
Crop(0.1, 0.2, 0.3, 0.4).
Alpha(0.6, BlendMultiply).
Debug(true)
if *opt.x != 1 || *opt.y != 2 || *opt.width != 30 || *opt.height != 40 {
t.Error("position/size not set")
}
if *opt.flow != false {
t.Error("flow not set")
}
if *opt.link != 7 || *opt.linkStr != "foo" {
t.Error("link not set")
}
if *opt.imageType != "PNG" || !*opt.readDpi || !*opt.allowNegativePosition {
t.Error("image options not set")
}
if opt.crop == nil || opt.crop.CropX != 0.1 || opt.crop.CropY != 0.2 || opt.crop.CropWidth != 0.3 || opt.crop.CropHeight != 0.4 {
t.Errorf("crop not set: %+v", opt.crop)
}
if opt.alphaOverride.V1 != 0.6 || opt.alphaOverride.V2 != BlendMultiply {
t.Error("alpha not set")
}
if !*opt.debug {
t.Error("debug not set")
}
}