Index: third_party/WebKit/LayoutTests/fast/events/onchange-js.html |
diff --git a/third_party/WebKit/LayoutTests/fast/events/onchange-js.html b/third_party/WebKit/LayoutTests/fast/events/onchange-js.html |
index 1478587220a750e33c13271009d309143a6e1db6..72110fc39c3c9e54a7bf633177975a605cec9208 100644 |
--- a/third_party/WebKit/LayoutTests/fast/events/onchange-js.html |
+++ b/third_party/WebKit/LayoutTests/fast/events/onchange-js.html |
@@ -4,29 +4,79 @@ |
<script src="../../resources/js-test.js"></script> |
</head> |
<body> |
+<div id=container> |
<input id="input" type="text" onchange="changeHandler()"> |
+<input id="number" type="number" onchange="changeHandler()"> |
+<textarea id="textarea" onchange="changeHandler()"></textarea> |
+</div> |
<script> |
-description('This test verifies that the change event is fired, when value is changed in change event handler.'); |
-var input = document.getElementById('input'); |
+description('This test verifies that the change event is fired, when value is changed by JavaScript code.'); |
var changeEventCounter = 0; |
+// shouldBe*() can refer to only global variables. |
+var element; |
function changeHandler() |
{ |
changeEventCounter++; |
- input.value = ''; |
+ element.value = ''; |
} |
-input.focus(); |
-document.execCommand('InsertText', false, 'foo bar baz'); |
-shouldBeEqualToString('input.value', 'foo bar baz'); |
-input.blur(); |
-shouldBe('changeEventCounter', '1'); |
-shouldBeEqualToString('input.value', ''); |
- |
-input.focus(); |
-document.execCommand('InsertText', false, 'foo bar baz'); |
-shouldBeEqualToString('input.value', 'foo bar baz'); |
-input.blur(); |
-shouldBe('changeEventCounter', '2'); |
+function testValueUpdateOnChange(userInput) { |
+ debug('Value is updated in change event handler.'); |
+ changeEventCounter = 0; |
+ element.focus(); |
+ document.execCommand('InsertText', false, userInput); |
+ shouldBeEqualToString('element.value', userInput); |
+ element.blur(); |
+ shouldBe('changeEventCounter', '1'); |
+ shouldBeEqualToString('element.value', ''); |
+ |
+ element.focus(); |
+ document.execCommand('InsertText', false, userInput); |
+ shouldBeEqualToString('element.value', userInput); |
+ element.blur(); |
+ shouldBe('changeEventCounter', '2'); |
+} |
+ |
+function testValueUpdateWithoutUserEdit(jsInput) { |
+ debug('Value is updated while element is focused.'); |
+ changeEventCounter = 0; |
+ element.value = ''; |
+ element.focus(); |
+ element.value = jsInput; |
+ element.blur(); |
+ shouldBe('changeEventCounter', '0'); |
+} |
+ |
+function testValueUpdateAfterUserEdit(userInput, jsInput) { |
+ debug('Value is updated after a user edit.'); |
+ changeEventCounter = 0; |
+ element.value = '0'; |
+ element.focus(); |
+ document.execCommand('InsertText', false, userInput); |
+ element.value = jsInput; |
+ element.blur(); |
+ shouldBe('changeEventCounter', '1'); |
+} |
+ |
+debug('===> Tests for INPUT[type=text]'); |
+element = document.getElementById('input'); |
+testValueUpdateOnChange('foo bar'); |
+testValueUpdateWithoutUserEdit('FOO BAR'); |
+testValueUpdateAfterUserEdit('foo bar', 'FOO BAR'); |
+ |
+debug('===> Tests for INPUT[type=number]'); |
+element = document.getElementById('number'); |
+testValueUpdateOnChange('123'); |
+testValueUpdateWithoutUserEdit('999'); |
+testValueUpdateAfterUserEdit('123', '999'); |
+ |
+debug('===> Tests for TEXTAREA'); |
+element = document.getElementById('textarea'); |
+testValueUpdateOnChange('foo bar'); |
+testValueUpdateWithoutUserEdit('FOO BAR'); |
+testValueUpdateAfterUserEdit('foo bar', 'FOO BAR'); |
+ |
+document.querySelector('#container').remove(); |
</script> |
</body> |
</html> |