Index: LayoutTests/svg/text/select-svg-text-with-collapsed-whitespace.html |
diff --git a/LayoutTests/svg/text/select-svg-text-with-collapsed-whitespace.html b/LayoutTests/svg/text/select-svg-text-with-collapsed-whitespace.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e376729b999c316d60f0a2731160c39f856be9de |
--- /dev/null |
+++ b/LayoutTests/svg/text/select-svg-text-with-collapsed-whitespace.html |
@@ -0,0 +1,118 @@ |
+<!DOCTYPE html> |
+<title>Test for selection with collapsed whitespace</title> |
+<body> |
+This test checks that characters can be selected correctly with collapsed whitespace. |
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" height="300"> |
+ <text id="text1" x="20" y="20"> happy debugging !!</text> |
+ <text id="text2" x="20" y="40"> <tspan id="tspan1" style="font-weight: bold;">happy</tspan> debugging !!</text> |
+ <text id="text3" x="20" y="80"> <tspan id="tspan2" style="font-size: 25px;">happy</tspan> debugging !!</text> |
+ <text id="text4" x="20" y="230" fill="black" transform="scale(0.5)" font-size="40"> happy debugging !!</text> |
+</svg> |
+<div id="passfail"> |
fs
2015/04/28 08:57:03
I don't see this <div> used for anything.
|
+</div> |
+<script src="../../resources/js-test.js"></script> |
+<script src="resources/SelectionTestCase.js"></script> |
+<script type="text/javascript"> |
+var range; |
+var a, b; |
fs
2015/04/28 08:57:03
What uses 'a' and 'b'? Remove?
|
+function runTest() { |
+ var text1 = document.getElementById('text1'); |
+ var text2 = document.getElementById('text2'); |
+ var text3 = document.getElementById('text3'); |
+ var text4 = document.getElementById('text4'); |
+ |
+ if (!window.testRunner) |
+ return; |
+ |
+ var startPos = text1.getStartPositionOfChar(0); |
fs
2015/04/28 08:57:03
You could roll these chunks of code into a functio
|
+ var endPos = text1.getEndPositionOfChar(3); |
+ var absStartPos = toAbsoluteCoordinates(startPos, text1); |
+ var absEndPos = toAbsoluteCoordinates(endPos, text1); |
+ eventSender.mouseMoveTo(absStartPos.x, absStartPos.y); |
+ eventSender.mouseDown(); |
+ eventSender.mouseMoveTo(absEndPos.x, absEndPos.y); |
+ eventSender.mouseUp(); |
+ verify("5", "9"); |
+ |
+ var startPos = text1.getStartPositionOfChar(0); |
+ var endPos = text1.getEndPositionOfChar(8); |
+ var absStartPos = toAbsoluteCoordinates(startPos, text1); |
+ var absEndPos = toAbsoluteCoordinates(endPos, text1); |
+ eventSender.mouseMoveTo(absStartPos.x, absStartPos.y); |
+ eventSender.mouseDown(); |
+ eventSender.mouseMoveTo(absEndPos.x, absEndPos.y); |
+ eventSender.mouseUp(); |
+ verify("5", "24"); |
+ |
+ var startPos = text2.getStartPositionOfChar(0); |
+ var endPos = text2.getEndPositionOfChar(3); |
+ var absStartPos = toAbsoluteCoordinates(startPos, text2); |
+ var absEndPos = toAbsoluteCoordinates(endPos, text2); |
+ eventSender.mouseMoveTo(absStartPos.x, absStartPos.y); |
+ eventSender.mouseDown(); |
+ eventSender.mouseMoveTo(absEndPos.x, absEndPos.y); |
+ eventSender.mouseUp(); |
+ verify("0", "4"); |
+ |
+ var startPos = text2.getStartPositionOfChar(0); |
+ var endPos = text2.getEndPositionOfChar(8); |
+ var absStartPos = toAbsoluteCoordinates(startPos, text2); |
+ var absEndPos = toAbsoluteCoordinates(endPos, text2); |
+ eventSender.mouseMoveTo(absStartPos.x, absStartPos.y); |
+ eventSender.mouseDown(); |
+ eventSender.mouseMoveTo(absEndPos.x, absEndPos.y); |
+ eventSender.mouseUp(); |
+ verify("0", "14"); |
+ |
+ var startPos = text3.getStartPositionOfChar(0); |
+ var endPos = text3.getEndPositionOfChar(3); |
+ var absStartPos = toAbsoluteCoordinates(startPos, text3); |
+ var absEndPos = toAbsoluteCoordinates(endPos, text3); |
+ eventSender.mouseMoveTo(absStartPos.x, absStartPos.y); |
+ eventSender.mouseDown(); |
+ eventSender.mouseMoveTo(absEndPos.x, absEndPos.y); |
+ eventSender.mouseUp(); |
+ verify("0", "4"); |
+ |
+ var startPos = text3.getStartPositionOfChar(0); |
+ var endPos = text3.getEndPositionOfChar(10); |
+ var absStartPos = toAbsoluteCoordinates(startPos, text3); |
+ var absEndPos = toAbsoluteCoordinates(endPos, text3); |
+ eventSender.mouseMoveTo(absStartPos.x, absStartPos.y); |
+ eventSender.mouseDown(); |
+ eventSender.mouseMoveTo(absEndPos.x, absEndPos.y); |
+ eventSender.mouseUp(); |
+ verify("0", "15"); |
+ |
+ var startPos = text4.getStartPositionOfChar(0); |
+ var endPos = text4.getEndPositionOfChar(3); |
+ var absStartPos = toAbsoluteCoordinates(startPos, text4); |
+ var absEndPos = toAbsoluteCoordinates(endPos, text4); |
+ eventSender.mouseMoveTo(absStartPos.x, absStartPos.y - 15); |
fs
2015/04/28 08:57:03
Why does this (and the following) need to subtract
|
+ eventSender.mouseDown(); |
+ eventSender.mouseMoveTo(absEndPos.x, absEndPos.y - 15); |
+ eventSender.mouseUp(); |
+ verify("5", "9"); |
+ |
+ var startPos = text4.getStartPositionOfChar(0); |
+ var endPos = text4.getEndPositionOfChar(8); |
+ var absStartPos = toAbsoluteCoordinates(startPos, text4); |
+ var absEndPos = toAbsoluteCoordinates(endPos, text4); |
+ eventSender.mouseMoveTo(absStartPos.x, absStartPos.y - 15); |
+ eventSender.mouseDown(); |
+ eventSender.mouseMoveTo(absEndPos.x, absEndPos.y - 15); |
+ eventSender.mouseUp(); |
+ verify("5", "24"); |
+} |
+ |
+function verify(start, end) { |
+ range = window.getSelection().getRangeAt(0); |
+ shouldBe("range.startOffset", start); |
+ shouldBe("range.endOffset", end); |
+ eventSender.mouseMoveTo(0,0); |
+ eventSender.mouseDown(); |
+ eventSender.mouseUp(); |
+} |
+ |
+runTest(); |
+</script> |