1 description('This tests that Paste commands fires textInput events.');
3 function toStringLiteral(str
)
5 return "'" + str
+ "'";
8 var willCancelTextInput
= false;
9 var textInputCount
= 0;
10 var expectedTextEventData
= "";
12 function pastingTextInputHandler(evt
)
14 shouldBe("event.data", toStringLiteral(expectedTextEventData
));
16 if (willCancelTextInput
)
20 var testSourceRoot
= document
.createElement("div");
21 document
.body
.appendChild(testSourceRoot
);
23 var testTargetRoot
= document
.createElement("div");
24 testTargetRoot
.innerHTML
+= "<input type='text' id='targetInput' value=''>";
25 testTargetRoot
.innerHTML
+= "<div id='targetEditable' contentEditable>";
26 testTargetRoot
.innerHTML
+= "<textarea id='targetTextarea' ></textarea>";
27 document
.body
.appendChild(testTargetRoot
);
29 testTargetEditable
= document
.getElementById("targetEditable");
30 testTargetEditable
.addEventListener("textInput", pastingTextInputHandler
);
31 testTargetInput
= document
.getElementById("targetInput");
32 testTargetInput
.addEventListener("textInput", pastingTextInputHandler
);
33 testTargetTextarea
= document
.getElementById("targetTextarea");
34 testTargetTextarea
.addEventListener("textInput", pastingTextInputHandler
);
36 var selection
= window
.getSelection();
38 function copyPlainText()
40 testSourceRoot
.innerHTML
= "<input type='text' value='PlainHello' id='src' />";
41 var input
= document
.getElementById("src");
44 selection
.modify("extend", "forward", "line");
45 document
.execCommand("Copy");
48 function copyRichText()
50 testSourceRoot
.innerHTML
= "<div id='src' contentEditable><b>Rich</b>Hello</div>";
51 var editable
= document
.getElementById("src");
52 selection
.setBaseAndExtent(editable
, 0, editable
, 0);
53 selection
.modify("extend", "forward", "line");
54 document
.execCommand("Copy");
57 function pasteToTargetEditable()
59 var editable
= testTargetEditable
;
60 editable
.innerHTML
= "";
61 selection
.setBaseAndExtent(editable
, 0, editable
, 0);
62 document
.execCommand("Paste");
66 function targetEditableShouldHave(value
)
68 shouldBe("testTargetEditable.innerHTML", toStringLiteral(value
));
71 function pasteToTargetInput()
73 var input
= testTargetInput
;
76 document
.execCommand("Paste");
79 function targetInputShouldHave(value
)
81 shouldBe("testTargetInput.value", toStringLiteral(value
));
84 function pasteToTargetTextarea()
86 var textarea
= testTargetTextarea
;
89 document
.execCommand("Paste");
92 function targetTextareaShouldHave(value
)
94 shouldBe("testTargetTextarea.value", toStringLiteral(value
));
97 var proceedingTestCases
= [
98 [copyPlainText
, pasteToTargetTextarea
, targetTextareaShouldHave
, "PlainHello", "PlainHello"],
99 [copyPlainText
, pasteToTargetInput
, targetInputShouldHave
, "PlainHello", "PlainHello"],
100 [copyPlainText
, pasteToTargetEditable
, targetEditableShouldHave
, "PlainHello", ""],
101 [copyRichText
, pasteToTargetTextarea
, targetTextareaShouldHave
, "RichHello", "RichHello"],
102 [copyRichText
, pasteToTargetInput
, targetInputShouldHave
, "RichHello", "RichHello"],
103 [copyRichText
, pasteToTargetEditable
, targetEditableShouldHave
, "<b>Rich</b>Hello", ""],
106 var cancelingTestCases
= [
107 [copyPlainText
, pasteToTargetTextarea
, targetTextareaShouldHave
, "", "PlainHello"],
108 [copyPlainText
, pasteToTargetInput
, targetInputShouldHave
, "", "PlainHello"],
109 [copyPlainText
, pasteToTargetEditable
, targetEditableShouldHave
, "", ""],
110 [copyRichText
, pasteToTargetTextarea
, targetTextareaShouldHave
, "", "RichHello"],
111 [copyRichText
, pasteToTargetInput
, targetInputShouldHave
, "", "RichHello"],
112 [copyRichText
, pasteToTargetEditable
, targetEditableShouldHave
, "", ""],
115 function runSingleTest(caseData
)
117 var copy
= caseData
[0];
118 var paste
= caseData
[1];
119 var verifyFunction
= caseData
[2];
120 var verifyParameter
= caseData
[3];
122 expectedTextEventData
= caseData
[4];
126 verifyFunction(verifyParameter
);
130 willCancelTextInput
= false;
131 for (var i
= 0; i
< proceedingTestCases
.length
; ++i
)
132 runSingleTest(proceedingTestCases
[i
]);
133 shouldBe("textInputCount", "proceedingTestCases.length");
136 willCancelTextInput
= true;
137 for (var i
= 0; i
< cancelingTestCases
.length
; ++i
)
138 runSingleTest(cancelingTestCases
[i
]);
139 shouldBe("textInputCount", "cancelingTestCases.length");
141 // Hides dataset to make dump clean.
142 testTargetRoot
.style
.display
= "none";
143 testSourceRoot
.style
.display
= "none";
145 var successfullyParsed
= true;