Repository navigation
Expand file tree
/
Copy pathconversion_for_unit_test.go
More file actions
159 lines (148 loc) · 4.44 KB
/
Copy pathconversion_for_unit_test.go
File metadata and controls
159 lines (148 loc) · 4.44 KB
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
package gopdf
import (
"bytes"
"strings"
"testing"
)
// Config.ConversionForUnit is documented to replace the built-in factor for
// Config.Unit. Start already honours it for Config.PageSize and Config.TrimBox,
// so the per-call sizes must honour it too.
func TestConversionForUnitAppliesToPageOptionAndImage(t *testing.T) {
newDoc := func(conversion float64) *GoPdf {
pdf := new(GoPdf)
pdf.Start(Config{
Unit: UnitPT,
ConversionForUnit: conversion,
PageSize: Rect{W: 100, H: 200},
})
pdf.SetCompressLevel(0)
return pdf
}
t.Run("AddPageWithOption page size", func(t *testing.T) {
for _, conversion := range []float64{0, 2} {
conversion := conversion
pdf := newDoc(conversion)
pdf.AddPageWithOption(PageOption{PageSize: &Rect{W: 100, H: 200}})
var buf bytes.Buffer
if _, err := pdf.WriteTo(&buf); err != nil {
t.Fatalf("conversion %v: %v", conversion, err)
}
// The last MediaBox is the page added through PageOption.
boxes := mediaBoxes(buf.String())
if len(boxes) == 0 {
t.Fatalf("conversion %v: no MediaBox written", conversion)
}
want := "0 0 100.00 200.00"
if conversion != 0 {
want = "0 0 200.00 400.00"
}
if got := boxes[len(boxes)-1]; got != want {
t.Errorf("conversion %v: MediaBox = %q, want %q", conversion, got, want)
}
}
})
t.Run("Image rect", func(t *testing.T) {
for _, conversion := range []float64{0, 2} {
conversion := conversion
pdf := newDoc(conversion)
pdf.AddPage()
if err := pdf.Image("test/res/gopher01.jpg", 10, 10, &Rect{W: 50, H: 50}); err != nil {
t.Fatalf("conversion %v: %v", conversion, err)
}
var buf bytes.Buffer
if _, err := pdf.WriteTo(&buf); err != nil {
t.Fatalf("conversion %v: %v", conversion, err)
}
// The image matrix carries the rect size and the placement together.
want := " 50.00 10.00 140.00 cm /I"
if conversion != 0 {
want = " 100.00 20.00 280.00 cm /I"
}
if !strings.Contains(buf.String(), want) {
t.Errorf("conversion %v: image matrix %q not found", conversion, want)
}
}
})
}
func mediaBoxes(s string) []string {
var out []string
for _, part := range strings.Split(s, "/MediaBox [ ")[1:] {
if end := strings.Index(part, " ]"); end >= 0 {
out = append(out, part[:end])
}
}
return out
}
// The same option must reach the other rect-taking entry points.
func TestConversionForUnitAppliesToImageHolders(t *testing.T) {
for _, tc := range []struct {
name string
draw func(*GoPdf)
}{
{"ImageByHolder", func(p *GoPdf) {
h, err := ImageHolderByPath("test/res/gopher01.jpg")
if err != nil {
t.Fatal(err)
}
if err := p.ImageByHolder(h, 10, 10, &Rect{W: 50, H: 50}); err != nil {
t.Fatal(err)
}
}},
{"ImageByHolderWithOptions", func(p *GoPdf) {
h, err := ImageHolderByPath("test/res/gopher01.jpg")
if err != nil {
t.Fatal(err)
}
if err := p.ImageByHolderWithOptions(h, ImageOptions{X: 10, Y: 10, Rect: &Rect{W: 50, H: 50}}); err != nil {
t.Fatal(err)
}
}},
} {
tc := tc
t.Run(tc.name, func(t *testing.T) {
for _, conversion := range []float64{0, 2} {
conversion := conversion
pdf := new(GoPdf)
pdf.Start(Config{Unit: UnitPT, ConversionForUnit: conversion, PageSize: Rect{W: 100, H: 200}})
pdf.SetCompressLevel(0)
pdf.AddPage()
tc.draw(pdf)
var buf bytes.Buffer
if _, err := pdf.WriteTo(&buf); err != nil {
t.Fatal(err)
}
want := " 50.00 10.00 140.00 cm /I"
if conversion != 0 {
want = " 100.00 20.00 280.00 cm /I"
}
if !strings.Contains(buf.String(), want) {
t.Errorf("conversion %v: image matrix %q not found", conversion, want)
}
}
})
}
}
// AddPageWithOption must convert the trim box as well as the page size.
func TestConversionForUnitAppliesToPageOptionTrimBox(t *testing.T) {
for _, conversion := range []float64{0, 2} {
conversion := conversion
pdf := new(GoPdf)
pdf.Start(Config{Unit: UnitPT, ConversionForUnit: conversion, PageSize: Rect{W: 100, H: 200}})
pdf.SetCompressLevel(0)
pdf.AddPageWithOption(PageOption{
PageSize: &Rect{W: 100, H: 200},
TrimBox: &Box{Left: 5, Top: 5, Right: 10, Bottom: 10},
})
var buf bytes.Buffer
if _, err := pdf.WriteTo(&buf); err != nil {
t.Fatal(err)
}
want := "/TrimBox [ 5.00 5.00 10.00 10.00 ]"
if conversion != 0 {
want = "/TrimBox [ 10.00 10.00 20.00 20.00 ]"
}
if !strings.Contains(buf.String(), want) {
t.Errorf("conversion %v: %q not found", conversion, want)
}
}
}