WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED DUPLICATE of
bug 17078
17332
SVGTextElement.getSubStringLength returns wrong result (affects Acid3)
https://bugs.webkit.org/show_bug.cgi?id=17332
Summary
SVGTextElement.getSubStringLength returns wrong result (affects Acid3)
Eric Seidel (no email)
Reported
2008-02-12 12:46:58 PST
SVGTextElement.getSubStringLength returns wrong result (affects Acid3) Now that the SVGDocument mimetype issue has been fixed, we fail Test 78 in a new way: Test 78: expected: 42, got: 65 - getSubStringLength #1 failed. function () { // test 78: external SVG fonts, from Erik Dahlstrom // // SVGFonts are described here[3], and the relevant DOM methods // used in the test are defined here[4]. // // Note that in order to be more predictable the svg should be // visible, so that clause "For non-rendering environments, the // user agent shall make reasonable assumptions about glyph // metrics." doesn't influence the results. We use 'opacity:0' // to hide the SVG, but arguably it's still a "rendering // environment". // // The font-size 4000 was chosen because that matches the // unitsPerEm value in the svgfont, which makes it easy to check // the glyph advances since they will then be exactly what was // specified in the svgfont. // // [3]
http://www.w3.org/TR/SVG11/fonts.html
// [4]
http://www.w3.org/TR/SVG11/text.html#InterfaceSVGTextContentElement
var svgns = "
http://www.w3.org/2000/svg
"; var xlinkns = "
http://www.w3.org/1999/xlink
"; var svgdoc = kungFuDeathGrip.firstChild.contentDocument; assert(svgdoc, "contentDocument failed on <object> for svg document."); var svg = svgdoc.documentElement; var text = svgdoc.createElementNS(svgns, "text"); text.setAttribute("y", "1em"); text.setAttribute("font-size", "4000"); text.setAttribute("font-family", "ACID3svgfont"); var textContent = svgdoc.createTextNode("abc"); text.appendChild(textContent); svg.appendChild(text); // The font-size 4000 was chosen because that matches the unitsPerEm value in the svgfont, // which makes it easy to check the glyph advances since they will then be exactly what was specified in the svgfont. assert(text.getNumberOfChars, "SVGTextContentElement.getNumberOfChars() not supported."); assertEquals(text.getNumberOfChars(), 3, "getNumberOfChars returned incorrect string length."); assertEquals(text.getComputedTextLength(), 4711+42+23, "getComputedTextLength failed."); assertEquals(text.getSubStringLength(0,1), 42, "getSubStringLength #1 failed."); assertEquals(text.getSubStringLength(0,2), 42+23, "getSubStringLength #2 failed."); assertEquals(text.getSubStringLength(1,1), 23, "getSubStringLength #3 failed."); assertEquals(text.getSubStringLength(1,0), 0, "getSubStringLength #4 failed."); var code = -1000; try { var sl = text.getSubStringLength(1,3); } catch(e) { code = e.code; } assertEquals(code, DOMException.INDEX_SIZE_ERR, "getSubStringLength #1 didn't throw exception."); code = -1000; try { var sl = text.getSubStringLength(0,3); } catch(e) { code = e.code; } assertEquals(code, DOMException.INDEX_SIZE_ERR, "getSubStringLength #2 didn't throw exception."); code = -1000; try { var sl = text.getSubStringLength(1,2); } catch(e) { code = e.code; } assertEquals(code, DOMException.INDEX_SIZE_ERR, "getSubStringLength #3 didn't throw exception."); code = -1000; try { var sl = text.getSubStringLength(-17,20); } catch(e) { code = e.code; } assertEquals(code, DOMException.INDEX_SIZE_ERR, "getSubStringLength #4 didn't throw exception."); code = -1000; try { var sl = text.getSubStringLength(1,2); } catch(e) { code = e.code; } assertEquals(code, DOMException.INDEX_SIZE_ERR, "getSubStringLength #5 didn't throw exception."); assertEquals(text.getStartPositionOfChar(0).x, 0, "getStartPositionOfChar(0).x returned invalid value."); assertEquals(text.getStartPositionOfChar(1).x, 42, "getStartPositionOfChar(1).x returned invalid value."); assertEquals(text.getStartPositionOfChar(2).x, 42+23, "getStartPositionOfChar(2).x returned invalid value."); assertEquals(text.getStartPositionOfChar(0).y, 4000, "getStartPositionOfChar(0).y returned invalid value."); code = -1000; try { var val = text.getStartPositionOfChar(-1); } catch(e) { code = e.code; } assertEquals(code, DOMException.INDEX_SIZE_ERR, "getStartPositionOfChar #1 exception failed."); code = -1000; try { var val = text.getStartPositionOfChar(4); } catch(e) { code = e.code; } assertEquals(code, DOMException.INDEX_SIZE_ERR, "getStartPositionOfChar #2 exception failed."); assertEquals(text.getEndPositionOfChar(0).x, 42, "getEndPositionOfChar(0).x returned invalid value."); assertEquals(text.getEndPositionOfChar(1).x, 42+23, "getEndPositionOfChar(1).x returned invalid value."); assertEquals(text.getEndPositionOfChar(2).x, 42+23+4711, "getEndPositionOfChar(2).x returned invalid value."); code = -1000; try { var val = text.getEndPositionOfChar(-17); } catch(e) { code = e.code; } assertEquals(code, DOMException.INDEX_SIZE_ERR, "getEndPositionOfChar #1 exception failed."); code = -1000; try { var val = text.getEndPositionOfChar(4); } catch(e) { code = e.code; } assertEquals(code, DOMException.INDEX_SIZE_ERR, "getEndPositionOfChar #2 exception failed."); return 5; },
Attachments
Add attachment
proposed patch, testcase, etc.
Eric Seidel (no email)
Comment 1
2008-02-29 14:17:09 PST
*** This bug has been marked as a duplicate of
17078
***
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug