Changeset 85373 in webkit


Ignore:
Timestamp:
Apr 29, 2011 5:15:01 PM (13 years ago)
Author:
eae@chromium.org
Message:

2011-04-29 Emil A Eklund <eae@chromium.org>

Reviewed by Dimitri Glazkov.

Onchange on text fields has an incoherent behavior
https://bugs.webkit.org/show_bug.cgi?id=57330

Add tests for typing and then deleting text from an empty field.

  • fast/events/onchange-text-form-field-expected.txt:
  • fast/events/onchange-text-form-field.html:
  • platform/gtk/fast/events/onchange-text-form-field-expected.txt: Removed.

2011-04-29 Emil A Eklund <eae@chromium.org>

Reviewed by Dimitri Glazkov.

Onchange on text fields has an incoherent behavior
https://bugs.webkit.org/show_bug.cgi?id=57330

  • html/HTMLFormControlElement.cpp: (WebCore::HTMLTextFormControlElement::insertedIntoDocument): Initialize m_textAsOfLastFormControlChangeEvent to empty string rather than null for empty fields.
Location:
trunk
Files:
1 deleted
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r85367 r85373  
     12011-04-29  Emil A Eklund  <eae@chromium.org>
     2
     3        Reviewed by Dimitri Glazkov.
     4
     5        Onchange on text fields has an incoherent behavior
     6        https://bugs.webkit.org/show_bug.cgi?id=57330
     7
     8        Add tests for typing and then deleting text from an empty field.
     9
     10        * fast/events/onchange-text-form-field-expected.txt:
     11        * fast/events/onchange-text-form-field.html:
     12        * platform/gtk/fast/events/onchange-text-form-field-expected.txt: Removed.
     13
    1142011-04-29  Kenneth Russell  <kbr@google.com>
    215
  • trunk/LayoutTests/fast/events/onchange-text-form-field-expected.txt

    r81978 r85373  
    1      
    2 PASS simulateTextEntry(elements[0], '', true); is false
    3 PASS simulateTextEntry(elements[0], 'fo', true); is true
    4 PASS simulateTextEntry(elements[0], 'o', false); is true
    5 PASS simulateTextEntry(elements[0], 'foo', true); is false
    6 PASS simulateTextEntry(elements[0], 'foo', true); is false
    7 PASS simulateTextEntry(elements[0], ' ', false); is true
    8 PASS simulateTextEntry(elements[0], 'foo bar', true); is true
    9 PASS simulateTextEntry(elements[0], 'foo bar', true); is false
     1PASS simulateTextEntry(elements[0], '', BEFORE); is false
     2PASS simulateTextEntry(elements[0], 'fo', BEFORE); is true
     3PASS simulateTextEntry(elements[0], 'o'); is true
     4PASS simulateTextEntry(elements[0], 'foo', BEFORE); is false
     5PASS simulateTextEntry(elements[0], 'foo', BEFORE); is false
     6PASS simulateTextEntry(elements[0], ' '); is true
     7PASS simulateTextEntry(elements[0], 'foo bar', BEFORE); is true
     8PASS simulateTextEntry(elements[0], 'foo bar', BEFORE); is false
    109PASS setTextValue(elements[0], 'foo'); is false
    11 PASS simulateTextEntry(elements[0], 'foo bar', true); is true
    12 PASS simulateTextEntry(elements[1], '', true); is true
    13 PASS simulateTextEntry(elements[1], 'fo', true); is true
    14 PASS simulateTextEntry(elements[1], 'o', false); is true
    15 PASS simulateTextEntry(elements[1], 'foo', true); is false
    16 PASS simulateTextEntry(elements[2], '', true); is false
    17 PASS simulateTextEntry(elements[2], 'fo', true); is true
    18 PASS simulateTextEntry(elements[2], 'o', false); is true
    19 PASS simulateTextEntry(elements[2], 'foo', true); is false
    20 PASS simulateTextEntry(elements[3], 'foo', true); is false
    21 PASS simulateTextEntry(elements[3], 'foo', true); is false
     10PASS simulateTextEntry(elements[0], 'foo bar', BEFORE); is true
     11PASS simulateTextEntry(elements[1], '', BEFORE); is true
     12PASS simulateTextEntry(elements[1], 'fo', BEFORE); is true
     13PASS simulateTextEntry(elements[1], 'o'); is true
     14PASS simulateTextEntry(elements[1], 'foo', BEFORE); is false
     15PASS simulateTextEntry(elements[2], 'wee', AFTER); is false
     16PASS simulateTextEntry(elements[2], 'foo', BEFORE | AFTER); is false
     17PASS simulateTextEntry(elements[2], 'fo', BEFORE); is true
     18PASS simulateTextEntry(elements[2], 'o'); is true
     19PASS simulateTextEntry(elements[2], 'foo', BEFORE); is false
     20PASS simulateTextEntry(elements[3], 'foo', BEFORE); is false
     21PASS simulateTextEntry(elements[3], 'foo', BEFORE); is false
    2222PASS setTextValue(elements[3], ''); is false
    23 PASS simulateTextEntry(elements[3], 'fo', true); is true
    24 PASS simulateTextEntry(elements[3], 'o', false); is true
    25 PASS simulateTextEntry(elements[3], 'foo', true); is false
     23PASS simulateTextEntry(elements[3], 'fo', BEFORE); is true
     24PASS simulateTextEntry(elements[3], 'o'); is true
     25PASS simulateTextEntry(elements[3], 'foo', BEFORE); is false
     26PASS simulateTextEntry(elements[4], 'foo', AFTER); is false
     27PASS simulateTextEntry(elements[4], 'foo'); is true
     28PASS simulateTextEntry(elements[4], 'foo', BEFORE); is false
     29PASS simulateTextEntry(elements[4], 'foo', BEFORE | AFTER); is true
     30PASS simulateTextEntry(elements[4], '', AFTER); is false
     31PASS simulateTextEntry(elements[4], 'foo', AFTER); is false
    2632
  • trunk/LayoutTests/fast/events/onchange-text-form-field.html

    r81978 r85373  
    88        <textarea></textarea>
    99        <textarea>foo</textarea>
     10        <input type="text">
    1011    </div>
    1112    <div id="console"></div>
     
    1314<script>
    1415
    15     function simulateTextEntry(element, text, opt_clear) {
     16    var BEFORE = 1;
     17    var AFTER = 2;
     18
     19    function simulateTextEntry(element, text, opt_clear)
     20    {
    1621        if (!window.eventSender)
    1722            return null;
     
    2328        element.addEventListener('change', listener, false);
    2429        element.focus();
    25         if (opt_clear) {
     30        if (opt_clear & BEFORE) {
    2631            element.select();
    2732            eventSender.keyDown('delete');
     
    2934        for (var i = 0; i < text.length; i++) {
    3035            eventSender.keyDown(text.charAt(i));
     36        }
     37        if (opt_clear & AFTER) {
     38            element.select();
     39            eventSender.keyDown('delete');
    3140        }
    3241        element.blur();
     
    3645
    3746
    38     function setTextValue(element, text) {
     47    function setTextValue(element, text)
     48    {
    3949        var firedEvent = false;
    4050        function listener(event) {
     
    5161    var elements = document.getElementById('test').getElementsByTagName('*');
    5262
    53     shouldBe("simulateTextEntry(elements[0], '', true);", "false");
    54     shouldBe("simulateTextEntry(elements[0], 'fo', true);", "true");
    55     shouldBe("simulateTextEntry(elements[0], 'o', false);", "true");
    56     shouldBe("simulateTextEntry(elements[0], 'foo', true); ", "false");
    57     shouldBe("simulateTextEntry(elements[0], 'foo', true); ", "false");
    58     shouldBe("simulateTextEntry(elements[0], ' ', false); ", "true");
    59     shouldBe("simulateTextEntry(elements[0], 'foo bar', true); ", "true");
    60     shouldBe("simulateTextEntry(elements[0], 'foo bar', true); ", "false");
     63    shouldBe("simulateTextEntry(elements[0], '', BEFORE);", "false");
     64    shouldBe("simulateTextEntry(elements[0], 'fo', BEFORE);", "true");
     65    shouldBe("simulateTextEntry(elements[0], 'o');", "true");
     66    shouldBe("simulateTextEntry(elements[0], 'foo', BEFORE); ", "false");
     67    shouldBe("simulateTextEntry(elements[0], 'foo', BEFORE); ", "false");
     68    shouldBe("simulateTextEntry(elements[0], ' '); ", "true");
     69    shouldBe("simulateTextEntry(elements[0], 'foo bar', BEFORE); ", "true");
     70    shouldBe("simulateTextEntry(elements[0], 'foo bar', BEFORE); ", "false");
    6171    shouldBe("setTextValue(elements[0], 'foo'); ", "false");
    62     shouldBe("simulateTextEntry(elements[0], 'foo bar', true);", "true");
     72    shouldBe("simulateTextEntry(elements[0], 'foo bar', BEFORE);", "true");
    6373
    64     shouldBe("simulateTextEntry(elements[1], '', true);", "true");
    65     shouldBe("simulateTextEntry(elements[1], 'fo', true);", "true");
    66     shouldBe("simulateTextEntry(elements[1], 'o', false);", "true");
    67     shouldBe("simulateTextEntry(elements[1], 'foo', true); ", "false");
     74    shouldBe("simulateTextEntry(elements[1], '', BEFORE);", "true");
     75    shouldBe("simulateTextEntry(elements[1], 'fo', BEFORE);", "true");
     76    shouldBe("simulateTextEntry(elements[1], 'o');", "true");
     77    shouldBe("simulateTextEntry(elements[1], 'foo', BEFORE); ", "false");
    6878
    69     shouldBe("simulateTextEntry(elements[2], '', true);", "false");
    70     shouldBe("simulateTextEntry(elements[2], 'fo', true);", "true");
    71     shouldBe("simulateTextEntry(elements[2], 'o', false);", "true");
    72     shouldBe("simulateTextEntry(elements[2], 'foo', true); ", "false");
     79    shouldBe("simulateTextEntry(elements[2], 'wee', AFTER);", "false");
     80    shouldBe("simulateTextEntry(elements[2], 'foo', BEFORE | AFTER);", "false");
     81    shouldBe("simulateTextEntry(elements[2], 'fo', BEFORE);", "true");
     82    shouldBe("simulateTextEntry(elements[2], 'o');", "true");
     83    shouldBe("simulateTextEntry(elements[2], 'foo', BEFORE); ", "false");
    7384
    74     shouldBe("simulateTextEntry(elements[3], 'foo', true);", "false");
    75     shouldBe("simulateTextEntry(elements[3], 'foo', true);", "false");
     85    shouldBe("simulateTextEntry(elements[3], 'foo', BEFORE);", "false");
     86    shouldBe("simulateTextEntry(elements[3], 'foo', BEFORE);", "false");
    7687    shouldBe("setTextValue(elements[3], ''); ", "false");
    77     shouldBe("simulateTextEntry(elements[3], 'fo', true);", "true");
    78     shouldBe("simulateTextEntry(elements[3], 'o', false);", "true");
    79     shouldBe("simulateTextEntry(elements[3], 'foo', true); ", "false");
     88    shouldBe("simulateTextEntry(elements[3], 'fo', BEFORE);", "true");
     89    shouldBe("simulateTextEntry(elements[3], 'o');", "true");
     90    shouldBe("simulateTextEntry(elements[3], 'foo', BEFORE); ", "false");
     91
     92    shouldBe("simulateTextEntry(elements[4], 'foo', AFTER);", "false");
     93    shouldBe("simulateTextEntry(elements[4], 'foo');", "true");
     94    shouldBe("simulateTextEntry(elements[4], 'foo', BEFORE);", "false");
     95    shouldBe("simulateTextEntry(elements[4], 'foo', BEFORE | AFTER);", "true");
     96    shouldBe("simulateTextEntry(elements[4], '', AFTER);", "false");
     97    shouldBe("simulateTextEntry(elements[4], 'foo', AFTER);", "false");
     98
     99    // Hide test elements after run to avoid whitespace differences across platforms in the results.
     100    document.getElementById('test').style.display = 'none';
    80101</script>
    81102</html>
  • trunk/Source/WebCore/ChangeLog

    r85357 r85373  
     12011-04-29  Emil A Eklund  <eae@chromium.org>
     2
     3        Reviewed by Dimitri Glazkov.
     4
     5        Onchange on text fields has an incoherent behavior
     6        https://bugs.webkit.org/show_bug.cgi?id=57330
     7
     8        * html/HTMLFormControlElement.cpp:
     9        (WebCore::HTMLTextFormControlElement::insertedIntoDocument):
     10        Initialize m_textAsOfLastFormControlChangeEvent to empty string rather
     11        than null for empty fields.
     12
    1132011-04-29  Csaba Osztrogonác  <ossy@webkit.org>
    214
  • trunk/Source/WebCore/html/HTMLFormControlElement.cpp

    r85094 r85373  
    556556{
    557557    HTMLFormControlElement::insertedIntoDocument();
    558     setTextAsOfLastFormControlChangeEvent(value());
     558    String initialValue = value();
     559    setTextAsOfLastFormControlChangeEvent(initialValue.isNull() ? String("") : initialValue);
    559560}
    560561
Note: See TracChangeset for help on using the changeset viewer.