Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(40)

Unified Diff: third_party/WebKit/LayoutTests/fast/forms/textfield-change-event.html

Issue 2796853002: Update text field 'change' event logic to match to Firefox. (Closed)
Patch Set: . Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | third_party/WebKit/Source/core/html/HTMLInputElement.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/LayoutTests/fast/forms/textfield-change-event.html
diff --git a/third_party/WebKit/LayoutTests/fast/forms/textfield-change-event.html b/third_party/WebKit/LayoutTests/fast/forms/textfield-change-event.html
index 88bfe29dc2f4872f9d46eac98195c9c0d9423d67..ff2658e9762edbf0c8edaddf18161b73033d675d 100644
--- a/third_party/WebKit/LayoutTests/fast/forms/textfield-change-event.html
+++ b/third_party/WebKit/LayoutTests/fast/forms/textfield-change-event.html
@@ -20,6 +20,36 @@ function elementDesc(element) {
return 'INPUT[type=' + element.type + ']';
}
+function escape(str) {
+ if (str === null || str === undefined)
+ return 'null';
+ var result ='\x22';
+ for (var i = 0; i < str.length; ++i) {
+ if (str[i] == '\b')
+ result += '\\b';
+ else if (str[i] == '\x22')
+ result += '\\\x22';
+ else
+ result += str[i];
+ }
+ return result + '\x22';
+}
+
+function typeAsUser(userInput) {
+ if (!userInput)
+ return;
+ if (userInput.indexOf('\b') < 0) {
+ document.execCommand('InsertText', false, userInput);
+ return;
+ }
+ for (var i = 0; i < userInput.length; ++i) {
+ if (userInput[i] == '\b')
+ document.execCommand('Delete', false, '');
+ else
+ document.execCommand('InsertText', false, userInput[i]);
+ }
+}
+
function testValueUpdateOnChange(element, userInput) {
test(() => {
changeEventCounter = 0;
@@ -38,42 +68,56 @@ function testValueUpdateOnChange(element, userInput) {
}, elementDesc(element) + ': Updating value in a CHANGE event handler');
}
-function testValueUpdateWithoutUserEdit(element, jsInput) {
- test(() => {
- changeEventCounter = 0;
- element.value = '';
- element.focus();
- element.value = jsInput;
- element.blur();
- assert_equals(changeEventCounter, 0);
- }, elementDesc(element) + ': Updating value while element is focused');
-}
-
-function testValueUpdateAfterUserEdit(element, userInput, jsInput) {
+function testUserEditSetValueUserEdit(element, initial, userInput1, jsInput, userInput2, expectation) {
test(() => {
changeEventCounter = 0;
- element.value = '0';
+ element.value = initial;
element.focus();
- document.execCommand('InsertText', false, userInput);
+ typeAsUser(userInput1);
element.value = jsInput;
+ typeAsUser(userInput2);
element.blur();
- assert_equals(changeEventCounter, 1);
- }, elementDesc(element) + ': Updating value after a user edit');
+ assert_equals(changeEventCounter, expectation ? 1 : 0);
+ }, `${elementDesc(element)}: Sequence of User-edit ${escape(userInput1)}, element.value=${escape(jsInput)}, User-edit ${escape(userInput2)} should dispatch ${expectation ? 'a' : 'no'} CHANGE event.`);
}
var element = document.getElementById('input');
testValueUpdateOnChange(element, 'foo bar');
-testValueUpdateWithoutUserEdit(element, 'FOO BAR');
-testValueUpdateAfterUserEdit(element, 'foo bar', 'FOO BAR');
+testUserEditSetValueUserEdit(element, '', null, 'FOO BAR', null, false);
+testUserEditSetValueUserEdit(element, '0', 'foo bar', 'FOO BAR', null, true);
+testUserEditSetValueUserEdit(element, '', null, 'hello', '\b\b\b\b\b', true);
+testUserEditSetValueUserEdit(element, '', null, 'hello', 'abc\b\b\b', false);
+testUserEditSetValueUserEdit(element, '', 'foo', 'hello', null, true);
+testUserEditSetValueUserEdit(element, '', 'hello', 'hello', null, true);
+testUserEditSetValueUserEdit(element, '', 'foo', 'hello', '\b\b\b\b\b', false);
+testUserEditSetValueUserEdit(element, '', 'foo\b\b\b', 'hello', null, false);
+testUserEditSetValueUserEdit(element, '', 'foo', '', null, false);
+testUserEditSetValueUserEdit(element, '0', 'foo', '', '0', false);
element = document.getElementById('number');
testValueUpdateOnChange(element, '123');
-testValueUpdateWithoutUserEdit(element, '999');
-testValueUpdateAfterUserEdit(element, '123', '999');
+testUserEditSetValueUserEdit(element, '', null, '999', null, false);
+testUserEditSetValueUserEdit(element, '0', '123', '999', null, true);
+testUserEditSetValueUserEdit(element, '', null, '234', '\b\b\b', true);
+testUserEditSetValueUserEdit(element, '', null, '234', '56\b\b', false);
+testUserEditSetValueUserEdit(element, '', '1', '234', null, true);
+testUserEditSetValueUserEdit(element, '', '234', '234', null, true);
+testUserEditSetValueUserEdit(element, '', '1', '234', '\b\b\b', false);
+testUserEditSetValueUserEdit(element, '', '1\b', '234', null, false);
+testUserEditSetValueUserEdit(element, '', '1', '', null, false);
+testUserEditSetValueUserEdit(element, '0', '1', '', '0', false);
element = document.getElementById('textarea');
testValueUpdateOnChange(element, 'foo bar');
-testValueUpdateWithoutUserEdit(element, 'FOO BAR');
-testValueUpdateAfterUserEdit(element, 'foo bar', 'FOO BAR');
+testUserEditSetValueUserEdit(element, '', null, 'FOO BAR', null, false);
+testUserEditSetValueUserEdit(element, '0', 'foo bar', 'FOO BAR', null, true);
+testUserEditSetValueUserEdit(element, '', null, 'hello', '\b\b\b\b\b', true);
+testUserEditSetValueUserEdit(element, '', null, 'hello', 'abc\b\b\b', false);
+testUserEditSetValueUserEdit(element, '', 'foo', 'hello', null, true);
+testUserEditSetValueUserEdit(element, '', 'hello', 'hello', null, true);
+testUserEditSetValueUserEdit(element, '', 'foo', 'hello', '\b\b\b\b\b', false);
+testUserEditSetValueUserEdit(element, '', 'foo\b\b\b', 'hello', null, false);
+testUserEditSetValueUserEdit(element, '', 'foo', '', null, false);
+testUserEditSetValueUserEdit(element, '0', 'foo', '', '0', false);
</script>
</body>
« no previous file with comments | « no previous file | third_party/WebKit/Source/core/html/HTMLInputElement.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698