Skip to content

Commit 24260e8

Browse files
committed
web: Add device_fonts_metrics integration test
This test verifies whether text using device fonts has proper metrics.
1 parent 57b21d6 commit 24260e8

File tree

4 files changed

+143
-0
lines changed

4 files changed

+143
-0
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package {
2+
3+
import flash.display.*;
4+
import flash.text.*;
5+
6+
[SWF(width="100", height="100")]
7+
public class Test extends MovieClip {
8+
public function Test() {
9+
var text:TextField = createTextField();
10+
addChild(text);
11+
12+
trace("Loaded test!");
13+
14+
trace("Displayed text metrics:");
15+
trace(text.textWidth);
16+
trace(text.textHeight);
17+
trace(text.getCharBoundaries(0).x);
18+
trace(text.getCharBoundaries(0).width);
19+
trace(text.getCharBoundaries(1).x);
20+
trace(text.getCharBoundaries(1).width);
21+
trace(text.getCharBoundaries(2).x);
22+
trace(text.getCharBoundaries(2).width);
23+
24+
if (text.getCharBoundaries(3) == null) {
25+
trace("null");
26+
trace("null");
27+
} else {
28+
trace(text.getCharBoundaries(3).x);
29+
trace(text.getCharBoundaries(3).width);
30+
}
31+
}
32+
33+
private function createTextField():TextField {
34+
var text:TextField = new TextField();
35+
text.text = "MxT體";
36+
text.x = 10;
37+
text.y = 10;
38+
text.width = 80;
39+
text.height = 80;
40+
return text;
41+
}
42+
}
43+
44+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<!doctype html>
2+
<html>
3+
4+
<head>
5+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6+
7+
<script>
8+
const urlParams = new URLSearchParams(window.location.search);
9+
window.RufflePlayer = window.RufflePlayer || {};
10+
window.RufflePlayer.config = {
11+
"deviceFontRenderer": urlParams.get('deviceFontRenderer'),
12+
};
13+
</script>
14+
</head>
15+
16+
<body>
17+
<div>
18+
<object type="application/x-shockwave-flash" data="test.swf" width="100" height="100" id="objectElement"></object>
19+
</div>
20+
</body>
21+
22+
</html>
Binary file not shown.
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
/* eslint-disable @typescript-eslint/no-unused-expressions */
2+
3+
import {
4+
assertNoMoreTraceOutput,
5+
expectTraceOutput,
6+
getTraceOutput,
7+
hideHardwareAccelerationModal,
8+
injectRuffleAndWait,
9+
openTest,
10+
playAndMonitor,
11+
} from "../../utils.js";
12+
import { expect, use } from "chai";
13+
import chaiHtml from "chai-html";
14+
15+
use(chaiHtml);
16+
17+
const deviceFontRenderers = ["embedded", "canvas"];
18+
19+
describe("Device Fonts: Metrics", () => {
20+
for (const deviceFontRenderer of deviceFontRenderers) {
21+
it(`load the test: ${deviceFontRenderer}`, async () => {
22+
await openTest(
23+
browser,
24+
"integration_tests/device_fonts_metrics",
25+
`index.html?deviceFontRenderer=${deviceFontRenderer}`,
26+
);
27+
await injectRuffleAndWait(browser);
28+
const player = await browser.$("<ruffle-object>");
29+
await playAndMonitor(browser, player, ["Loaded test!"]);
30+
await hideHardwareAccelerationModal(browser, player);
31+
});
32+
33+
it("check metrics", async () => {
34+
const player = await browser.$("#objectElement");
35+
36+
await expectTraceOutput(browser, player, [
37+
"Displayed text metrics:",
38+
]);
39+
40+
const messages = await getTraceOutput(browser, player, 10);
41+
42+
const textWidth = Number(messages[0]);
43+
const textHeight = Number(messages[1]);
44+
const char0x = Number(messages[2]) - 2;
45+
const char0w = Number(messages[3]);
46+
const char1x = Number(messages[4]) - char0x;
47+
const char1w = Number(messages[5]);
48+
const char2x = Number(messages[6]) - char1x;
49+
const char2w = Number(messages[7]);
50+
const char3x = Number(messages[8]) - char2x;
51+
const char3w = Number(messages[9]);
52+
53+
expect(textWidth).to.be.greaterThan(0);
54+
expect(textHeight).to.be.greaterThan(0);
55+
expect(char0x).to.equal(0);
56+
expect(char0w).to.be.greaterThan(0);
57+
expect(char1x).to.be.greaterThan(0);
58+
expect(char1w).to.be.greaterThan(0);
59+
expect(char2x).to.be.greaterThan(0);
60+
expect(char2w).to.be.greaterThan(0);
61+
62+
if (deviceFontRenderer === "embedded") {
63+
// Embedded renderer does not support CJK characters by default
64+
expect(char3x).to.be.NaN;
65+
expect(char3w).to.be.NaN;
66+
} else {
67+
expect(char3x).to.be.greaterThan(0);
68+
expect(char3w).to.be.greaterThan(0);
69+
}
70+
});
71+
72+
it("no more traces", async function () {
73+
const player = await browser.$("#objectElement");
74+
assertNoMoreTraceOutput(browser, player);
75+
});
76+
}
77+
});

0 commit comments

Comments
 (0)