2010-02-11 Kent Tamura <tkent@chromium.org>
[WebKit.git] / LayoutTests / fast / forms / script-tests / ValidityState-tooLong-textarea.js
1 description('Tests for tooLong flag with &lt;textarea> elements.');
2
3 var textarea = document.createElement('textarea');
4 document.body.appendChild(textarea);
5
6 debug('No maxlength and no value');
7 shouldBeFalse('textarea.validity.tooLong');
8
9 debug('');
10 debug('Non-dirty value');
11 textarea.defaultValue = 'abcde';
12 textarea.maxLength = 3;
13 shouldBe('textarea.value.length', '5');
14 shouldBeFalse('textarea.validity.tooLong');
15
16 textarea.defaultValue = 'abcdef';
17 shouldBe('textarea.value.length', '6');
18 shouldBeFalse('textarea.validity.tooLong');
19
20 debug('');
21 debug('Dirty value and longer than maxLength');
22 textarea = document.createElement('textarea');
23 document.body.appendChild(textarea);
24 textarea.defaultValue = 'abcde';
25 textarea.maxLength = 3;
26 textarea.focus();
27 textarea.setSelectionRange(5, 5);  // Move the cursor at the end.
28 document.execCommand('delete');
29 shouldBe('textarea.value.length', '4');
30 shouldBeTrue('textarea.validity.tooLong');
31 // Make the value <=maxLength.
32 document.execCommand('delete');
33 shouldBeFalse('textarea.validity.tooLong');
34
35 debug('');
36 debug('Sets a value via DOM property');
37 textarea = document.createElement('textarea');
38 document.body.appendChild(textarea);
39 textarea.maxLength = 3;
40 textarea.value = 'abcde';
41 shouldBeTrue('textarea.validity.tooLong');
42
43 debug('');
44 debug('Grapheme length is not greater than maxLength though character length is greater');
45 // fancyX should be treated as 1 grapheme.
46 // U+0305 COMBINING OVERLINE
47 // U+0332 COMBINING LOW LINE
48 var fancyX = "x\u0305\u0332";
49 textarea = document.createElement('textarea');
50 document.body.appendChild(textarea);
51 textarea.value = fancyX; // 3 characters, 1 grapheme cluster.
52 textarea.maxLength = 1;
53 shouldBeFalse('textarea.validity.tooLong');
54
55 debug('');
56 debug('A value set by resetting a form or by a child node change doesn\'t make tooLong true.');
57 // Make a dirty textarea.
58 var parent = document.createElement('div');
59 document.body.appendChild(parent);
60 parent.innerHTML = '<form><textarea maxlength=2>abc</textarea></form>';
61 textarea = parent.firstChild.firstChild;
62 textarea.value = 'def';
63 shouldBeTrue('textarea.validity.tooLong');
64 parent.firstChild.reset();
65 shouldBe('textarea.value', '"abc"');
66 shouldBeFalse('textarea.validity.tooLong');
67
68 parent.innerHTML = '<textarea maxlength=2>abc</textarea>';
69 textarea = parent.firstChild;
70 textarea.value = 'def';
71 shouldBeTrue('textarea.validity.tooLong');
72 parent.firstChild.innerHTML = 'abcdef';
73 shouldBe('textarea.value', '"abcdef"');
74 shouldBeFalse('textarea.validity.tooLong');
75
76 var successfullyParsed = true;