-
-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathindex.test.js
133 lines (111 loc) · 3.21 KB
/
index.test.js
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
import test from 'ava'
import { temporaryFile } from 'tempy'
import rmfr from 'rmfr'
import sharp from 'sharp'
import { renderText } from './index.js'
function inDelta(actual, expected, delta) {
return expected - delta <= actual && actual <= expected + delta
}
test('"hello world" builtin font', async (t) => {
const output0 = temporaryFile({ extension: 'png' })
const output1 = temporaryFile({ extension: 'png' })
await renderText({
text: 'hello world',
output: output0,
style: {
fontFamily: 'segue ui',
fontSize: 64
}
})
await renderText({
text: 'hello world',
output: output1,
style: {
fontFamily: 'segue ui',
fontSize: 64,
padding: 16
}
})
const image0 = await sharp(output0).metadata()
t.true(inDelta(image0.width, 293, 5))
t.true(inDelta(image0.height, 74, 3))
t.is(image0.channels, 4)
t.is(image0.format, 'png')
const image1 = await sharp(output1).metadata()
t.true(inDelta(image1.width, 293 + 16 * 2, 5))
t.true(inDelta(image1.height, 74 + 16 * 2, 3))
t.is(image1.channels, 4)
t.is(image1.format, 'png')
await rmfr(output0)
await rmfr(output1)
})
test('"foobar > barfoo" google font Roboto', async (t) => {
const output0 = temporaryFile({ extension: 'png' })
await renderText({
text: 'foobar > barfoo',
output: output0,
style: {
fontFamily: 'Roboto',
fontSize: '8em'
},
loadGoogleFont: true
})
const image0 = await sharp(output0).metadata()
t.true(inDelta(image0.width, 881, 5))
t.true(inDelta(image0.height, 150, 5))
t.is(image0.channels, 4)
t.is(image0.format, 'png')
await rmfr(output0)
})
test('"lots of words to wrap" test word wrapping', async (t) => {
const output0 = temporaryFile({ extension: 'png' })
const output1 = temporaryFile({ extension: 'png' })
// this version should wrap because we give it a max width
await renderText({
text: 'lots of words to wrap',
output: output0,
width: 400,
style: {
fontSize: 64
}
})
// this version should not wrap
await renderText({
text: 'lots of words to wrap',
output: output1,
style: {
fontSize: 64
}
})
const image0 = await sharp(output0).metadata()
t.true(inDelta(image0.width, 400, 5))
t.true(inDelta(image0.height, 148, 3))
t.is(image0.channels, 4)
t.is(image0.format, 'png')
const image1 = await sharp(output1).metadata()
t.true(inDelta(image1.width, 543, 5))
t.true(inDelta(image1.height, 74, 3))
t.is(image1.channels, 4)
t.is(image1.format, 'png')
await rmfr(output0)
await rmfr(output1)
})
test('"puppeteer-render-text 😊" html with multiple google fonts', async (t) => {
const output0 = temporaryFile({ extension: 'png' })
await renderText({
text: 'puppeteer-<span style="font-family: \'Permanent Marker\'">render</span>-<span style="color: red">text</span> 😊',
output: output0,
style: {
fontFamily: 'Gloria Hallelujah, Permanent Marker',
fontSize: 40
},
loadGoogleFont: true
})
const image0 = await sharp(output0).metadata()
console.log(image0)
t.true(inDelta(image0.width, 502, 20))
t.true(inDelta(image0.height, 79, 5))
t.is(image0.channels, 4)
t.is(image0.format, 'png')
await rmfr(output0)
})