4 https://bugzilla.mozilla.org/show_bug.cgi?id=569722
8 <title>Test for Bug
569722</title>
9 <script src=
"/tests/SimpleTest/SimpleTest.js"></script>
10 <link rel=
"stylesheet" type=
"text/css" href=
"/tests/SimpleTest/test.css" />
13 <a target=
"_blank" href=
"https://bugzilla.mozilla.org/show_bug.cgi?id=569722">Mozilla Bug
569722</a>
16 <svg width=
"400" height=
"200">
17 <text x=
"0" y=
"100" style=
"font: 16px sans-serif">aaa
</text>
22 <script class=
"testbody" type=
"application/javascript">
23 SimpleTest.waitForExplicitFinish();
25 function close(x, y, message) {
26 ok(Math.abs(x - y) <
1e-4, message);
30 var text = document.querySelector(
"text");
32 // get the original length
33 var length = text.getComputedTextLength();
35 // get the original glyph positions
36 var startPositions = [],
39 for (let i =
0; i <
3; i++) {
40 startPositions.push(text.getStartPositionOfChar(i));
41 endPositions.push(text.getEndPositionOfChar(i));
42 extents.push(text.getExtentOfChar(i));
45 // widths should all be the same
46 is(extents[
0].width, extents[
1].width);
47 is(extents[
0].width, extents[
2].width);
49 var checkCharNumAtPosition = function(x, y, i) {
50 var p = document.querySelector(
"svg").createSVGPoint();
53 is(text.getCharNumAtPosition(p), i,
"getCharNumAtPosition(" + i +
")");
56 var checkPositions = function(start, end, width) {
57 for (let i =
0; i <
3; i++) {
58 // check their positions
59 close(text.getStartPositionOfChar(i).x, start[i],
"start position of glyph " + i);
60 close(text.getEndPositionOfChar(i).x, end[i],
"end position of glyph " + i);
61 close(text.getExtentOfChar(i).x, start[i],
"left edge of extent of glyph " + i);
62 close(text.getExtentOfChar(i).width, width,
"width of glyph " + i);
63 checkCharNumAtPosition((start[i] + end[i]) /
2,
100, i);
67 var w = extents[
0].width;
69 var doLengthAdjustSpacingTest = function() {
70 // getComputedTextLength should return the sum of the advances, and since
71 // we are just changing the positions of the glyphs, it should be the same
72 // as without a
textLength=
"" attribute
73 close(text.getComputedTextLength(), length,
"getComputedTextLength when lengthAdjust=\"spacing\
"");
75 // expected start and end positions of the glyphs
76 var start = [
0,
50 - w /
2,
100 - w];
77 var end = [w,
50 + w /
2,
100];
78 checkPositions(start, end, w);
81 // switch to adjust glyph positions, using the default value of
lengthAdjust=
""
82 text.setAttribute(
"textLength",
"100");
83 doLengthAdjustSpacingTest();
84 // then with an explicit
lengthAdjust=
"spacing"
85 text.setAttribute(
"lengthAdjust",
"spacing");
86 doLengthAdjustSpacingTest();
88 // now test with
lengthAdjust=
"spacingAndGlyphs"
89 text.setAttribute(
"lengthAdjust",
"spacingAndGlyphs");
91 // now that each glyph is stretched, the total advance should be the textLength
92 close(text.getComputedTextLength(),
100,
"getComputedTextLength when lengthAdjust=\"spacingAndGlyphs\
"");
94 // expected start and end positions of the glyphs
95 var start = [
0,
33.3333,
66.6666];
96 var end = [
33.3333,
66.6666,
100];
97 checkPositions(start, end,
33.3333);
102 window.addEventListener(
"load", runTest);