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
|
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
// Test that getFontPreviewData of the style utils generates font previews.
const TEST_URI = "data:text/html,<title>Test getFontPreviewData</title>";
add_task(async function () {
await addTab(TEST_URI);
await SpecialPowers.spawn(gBrowser.selectedBrowser, [], async function () {
const { require } = ChromeUtils.importESModule(
"resource://devtools/shared/loader/Loader.sys.mjs"
);
const {
getFontPreviewData,
} = require("resource://devtools/server/actors/utils/style-utils.js");
const font = Services.appinfo.OS === "WINNT" ? "Arial" : "Liberation Sans";
let fontPreviewData = getFontPreviewData(font, content.document);
ok(
fontPreviewData?.dataURL,
"Returned a font preview with a valid dataURL"
);
// Create <img> element and load the generated preview into it
// to check whether the image is valid and get its dimensions
const image = content.document.createElement("img");
let imageLoaded = new Promise(loaded =>
image.addEventListener("load", loaded, { once: true })
);
image.src = fontPreviewData.dataURL;
await imageLoaded;
const { naturalWidth: widthImage1, naturalHeight: heightImage1 } = image;
ok(widthImage1 > 0, "Preview width is greater than 0");
ok(heightImage1 > 0, "Preview height is greater than 0");
// Create a preview with different text and compare
// its dimensions with the first one
fontPreviewData = getFontPreviewData(font, content.document, {
previewText: "Abcdef",
});
ok(
fontPreviewData?.dataURL,
"Returned a font preview with a valid dataURL"
);
imageLoaded = new Promise(loaded =>
image.addEventListener("load", loaded, { once: true })
);
image.src = fontPreviewData.dataURL;
await imageLoaded;
const { naturalWidth: widthImage2, naturalHeight: heightImage2 } = image;
// Check whether the width is greater than with the default parameters
// and that the height is the same
ok(
widthImage2 > widthImage1,
"Preview width is greater than with default parameters"
);
ok(
heightImage2 === heightImage1,
"Preview height is the same as with default parameters"
);
// Create a preview with smaller font size and compare
// its dimensions with the first one
fontPreviewData = getFontPreviewData(font, content.document, {
previewFontSize: 20,
});
ok(
fontPreviewData?.dataURL,
"Returned a font preview with a valid dataURL"
);
imageLoaded = new Promise(loaded =>
image.addEventListener("load", loaded, { once: true })
);
image.src = fontPreviewData.dataURL;
await imageLoaded;
const { naturalWidth: widthImage3, naturalHeight: heightImage3 } = image;
// Check whether the width and height are smaller than with the default parameters
ok(
widthImage3 < widthImage1,
"Preview width is smaller than with default parameters"
);
ok(
heightImage3 < heightImage1,
"Preview height is smaller than with default parameters"
);
// Create a preview with multiple lines and compare
// its dimensions with the first one
fontPreviewData = getFontPreviewData(font, content.document, {
previewText: "Abc\ndef",
});
ok(
fontPreviewData?.dataURL,
"Returned a font preview with a valid dataURL"
);
imageLoaded = new Promise(loaded =>
image.addEventListener("load", loaded, { once: true })
);
image.src = fontPreviewData.dataURL;
await imageLoaded;
const { naturalWidth: widthImage4, naturalHeight: heightImage4 } = image;
// Check whether the width is the same as with the default parameters
// and that the height is greater
ok(
widthImage4 === widthImage1,
"Preview width is the same as with default parameters"
);
ok(
heightImage4 > heightImage1,
"Preview height is greater than with default parameters"
);
});
});
|