Make HTMLSelectElement.size behave as per the specification
authorcdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 22 Feb 2016 05:52:07 +0000 (05:52 +0000)
committercdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 22 Feb 2016 05:52:07 +0000 (05:52 +0000)
https://bugs.webkit.org/show_bug.cgi?id=154504

Reviewed by Darin Adler.

LayoutTests/imported/w3c:

Rebaseline now that more checks are passing.

* web-platform-tests/html/dom/reflection-forms-expected.txt:
* web-platform-tests/html/dom/reflection-tabular-expected.txt:

Source/WebCore:

Make HTMLSelectElement.size behave as per the specification:
- https://html.spec.whatwg.org/#htmlselectelement
- https://html.spec.whatwg.org/#dom-select-size
- https://html.spec.whatwg.org/#reflecting-content-attributes-in-idl-attributes:idl-unsigned-long

In particular, it should be unsigned and be in the range [0; 2147483647].

Also update several unsigned long attributes in our HTML implementation to use
parseHTMLNonNegativeInteger() to parse unsigned integers as per the HTML
specification, instead of calling String::toUint().

No new tests, already covered by existing tests.

* html/HTMLInputElement.cpp:
(WebCore::HTMLInputElement::parseAttribute):
(WebCore::HTMLInputElement::size):
(WebCore::HTMLInputElement::setSize):
* html/HTMLInputElement.h:
* html/HTMLSelectElement.cpp:
(WebCore::HTMLSelectElement::parseAttribute):
(WebCore::HTMLSelectElement::setSize):
(WebCore::HTMLSelectElement::namedItem): Deleted.
(WebCore::HTMLSelectElement::item): Deleted.
* html/HTMLSelectElement.h:
(WebCore::HTMLSelectElement::size):
* html/HTMLSelectElement.idl:
* html/HTMLTableColElement.cpp:
(WebCore::HTMLTableColElement::parseAttribute):
(WebCore::HTMLTableColElement::setSpan):
* html/HTMLTextAreaElement.cpp:
(WebCore::HTMLTextAreaElement::parseAttribute):
(WebCore::HTMLTextAreaElement::setCols):
(WebCore::HTMLTextAreaElement::setRows):
* html/parser/HTMLParserIdioms.h:
(WebCore::limitToOnlyHTMLNonNegativeNumbersGreaterThanZero):
(WebCore::limitToOnlyHTMLNonNegative):

LayoutTests:

Update test that was covering the case of an HTMLSelectElement with an
invalid size attribute. The test was expecting the bad "size" attribute
value to get corrected so that the select element looks like a menu list.
This workaround was added back in 2007 to workaround a bug on
www.chainreaction.com (rdar://problem/4697438). This patch drops the
workaround in HTMLSelectElement::parseAttribute() because:
1. This is not standard behavior as per the HTML specification
2. This behavior does not match Firefox either
3. The workaround is no longer needed for www.chainreaction.com.

* fast/forms/select-size-expected.html: Added.
* fast/forms/select-size.html:
* platform/efl/fast/forms/select-size-expected.txt: Removed.
* platform/gtk/fast/forms/select-size-expected.txt: Removed.
* platform/ios-simulator/fast/forms/select-size-expected.txt: Removed.
* platform/mac/fast/forms/select-size-expected.png: Removed.
* platform/mac/fast/forms/select-size-expected.txt: Removed.
* platform/win/fast/forms/select-size-expected.txt: Removed.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@196893 268f45cc-cd09-0410-ab3c-d52691b4dbfc

21 files changed:
LayoutTests/ChangeLog
LayoutTests/fast/forms/select-size-expected.html [new file with mode: 0644]
LayoutTests/fast/forms/select-size.html
LayoutTests/imported/w3c/ChangeLog
LayoutTests/imported/w3c/web-platform-tests/html/dom/reflection-forms-expected.txt
LayoutTests/imported/w3c/web-platform-tests/html/dom/reflection-tabular-expected.txt
LayoutTests/platform/efl/fast/forms/select-size-expected.txt [deleted file]
LayoutTests/platform/gtk/fast/forms/select-size-expected.txt [deleted file]
LayoutTests/platform/ios-simulator/fast/forms/select-size-expected.txt [deleted file]
LayoutTests/platform/mac/fast/forms/select-size-expected.png [deleted file]
LayoutTests/platform/mac/fast/forms/select-size-expected.txt [deleted file]
LayoutTests/platform/win/fast/forms/select-size-expected.txt [deleted file]
Source/WebCore/ChangeLog
Source/WebCore/html/HTMLInputElement.cpp
Source/WebCore/html/HTMLInputElement.h
Source/WebCore/html/HTMLSelectElement.cpp
Source/WebCore/html/HTMLSelectElement.h
Source/WebCore/html/HTMLSelectElement.idl
Source/WebCore/html/HTMLTableColElement.cpp
Source/WebCore/html/HTMLTextAreaElement.cpp
Source/WebCore/html/parser/HTMLParserIdioms.h

index 152313c..42e3501 100644 (file)
@@ -1,3 +1,29 @@
+2016-02-21  Chris Dumez  <cdumez@apple.com>
+
+        Make HTMLSelectElement.size behave as per the specification
+        https://bugs.webkit.org/show_bug.cgi?id=154504
+
+        Reviewed by Darin Adler.
+
+        Update test that was covering the case of an HTMLSelectElement with an
+        invalid size attribute. The test was expecting the bad "size" attribute
+        value to get corrected so that the select element looks like a menu list.
+        This workaround was added back in 2007 to workaround a bug on
+        www.chainreaction.com (rdar://problem/4697438). This patch drops the
+        workaround in HTMLSelectElement::parseAttribute() because:
+        1. This is not standard behavior as per the HTML specification
+        2. This behavior does not match Firefox either
+        3. The workaround is no longer needed for www.chainreaction.com.
+
+        * fast/forms/select-size-expected.html: Added.
+        * fast/forms/select-size.html:
+        * platform/efl/fast/forms/select-size-expected.txt: Removed.
+        * platform/gtk/fast/forms/select-size-expected.txt: Removed.
+        * platform/ios-simulator/fast/forms/select-size-expected.txt: Removed.
+        * platform/mac/fast/forms/select-size-expected.png: Removed.
+        * platform/mac/fast/forms/select-size-expected.txt: Removed.
+        * platform/win/fast/forms/select-size-expected.txt: Removed.
+
 2016-02-21  Daniel Bates  <dabates@apple.com>
 
         CSP: Enable form-action directive by default
diff --git a/LayoutTests/fast/forms/select-size-expected.html b/LayoutTests/fast/forms/select-size-expected.html
new file mode 100644 (file)
index 0000000..9136e71
--- /dev/null
@@ -0,0 +1,14 @@
+<html>
+<head>
+<style>
+.listBox {
+    -webkit-appearance: listbox;
+    border-radius: initial;
+    border: 1px solid gray;
+}
+</style>
+</head>
+<body>
+This tests an HTMLSelectElement with a malformed size attribute<br>
+<select size="1" class="listbox"><option>test</select>
+</body>
index 3ced64c..8737b7e 100644 (file)
@@ -1,3 +1,2 @@
-This tests that a malformed size attribute will be parsed and corrected so that the right
-size attribute value is used to match the style rule that determines whether to use a menu list or a list box.<br>
-<select size= 1"><option>test</select>
+This tests an HTMLSelectElement with a malformed size attribute<br>
+<select style="border: 1px solid gray;" size= 1"><option>test</select>
index 9a72413..ec8cc3c 100644 (file)
@@ -1,5 +1,17 @@
 2016-02-21  Chris Dumez  <cdumez@apple.com>
 
+        Make HTMLSelectElement.size behave as per the specification
+        https://bugs.webkit.org/show_bug.cgi?id=154504
+
+        Reviewed by Darin Adler.
+
+        Rebaseline now that more checks are passing.
+
+        * web-platform-tests/html/dom/reflection-forms-expected.txt:
+        * web-platform-tests/html/dom/reflection-tabular-expected.txt:
+
+2016-02-21  Chris Dumez  <cdumez@apple.com>
+
         Add username / password attributes to HTMLAnchorElement / HTMLAreaElement
         https://bugs.webkit.org/show_bug.cgi?id=154519
 
index 57d0e2e..29b74ce 100644 (file)
@@ -6872,7 +6872,7 @@ PASS input.size: setAttribute() to "1" followed by IDL get
 PASS input.size: setAttribute() to "\t7" followed by getAttribute() 
 PASS input.size: setAttribute() to "\t7" followed by IDL get 
 PASS input.size: setAttribute() to "\v7" followed by getAttribute() 
-FAIL input.size: setAttribute() to "\v7" followed by IDL get assert_equals: expected 20 but got 7
+PASS input.size: setAttribute() to "\v7" followed by IDL get 
 PASS input.size: setAttribute() to "\f7" followed by getAttribute() 
 PASS input.size: setAttribute() to "\f7" followed by IDL get 
 PASS input.size: setAttribute() to " 7" followed by getAttribute() 
@@ -6886,39 +6886,39 @@ PASS input.size: setAttribute() to "\n7" followed by IDL get
 PASS input.size: setAttribute() to "\r7" followed by getAttribute() 
 PASS input.size: setAttribute() to "\r7" followed by IDL get 
 PASS input.size: setAttribute() to "
7" followed by getAttribute() 
-FAIL input.size: setAttribute() to "
7" followed by IDL get assert_equals: expected 20 but got 7
+PASS input.size: setAttribute() to "
7" followed by IDL get 
 PASS input.size: setAttribute() to "
7" followed by getAttribute() 
 PASS input.size: setAttribute() to "
7" followed by IDL get 
 PASS input.size: setAttribute() to " 7" followed by getAttribute() 
-FAIL input.size: setAttribute() to " 7" followed by IDL get assert_equals: expected 20 but got 7
+PASS input.size: setAttribute() to " 7" followed by IDL get 
 PASS input.size: setAttribute() to "᠎7" followed by getAttribute() 
 PASS input.size: setAttribute() to "᠎7" followed by IDL get 
 PASS input.size: setAttribute() to " 7" followed by getAttribute() 
-FAIL input.size: setAttribute() to " 7" followed by IDL get assert_equals: expected 20 but got 7
+PASS input.size: setAttribute() to " 7" followed by IDL get 
 PASS input.size: setAttribute() to " 7" followed by getAttribute() 
-FAIL input.size: setAttribute() to " 7" followed by IDL get assert_equals: expected 20 but got 7
+PASS input.size: setAttribute() to " 7" followed by IDL get 
 PASS input.size: setAttribute() to " 7" followed by getAttribute() 
-FAIL input.size: setAttribute() to " 7" followed by IDL get assert_equals: expected 20 but got 7
+PASS input.size: setAttribute() to " 7" followed by IDL get 
 PASS input.size: setAttribute() to " 7" followed by getAttribute() 
-FAIL input.size: setAttribute() to " 7" followed by IDL get assert_equals: expected 20 but got 7
+PASS input.size: setAttribute() to " 7" followed by IDL get 
 PASS input.size: setAttribute() to " 7" followed by getAttribute() 
-FAIL input.size: setAttribute() to " 7" followed by IDL get assert_equals: expected 20 but got 7
+PASS input.size: setAttribute() to " 7" followed by IDL get 
 PASS input.size: setAttribute() to " 7" followed by getAttribute() 
-FAIL input.size: setAttribute() to " 7" followed by IDL get assert_equals: expected 20 but got 7
+PASS input.size: setAttribute() to " 7" followed by IDL get 
 PASS input.size: setAttribute() to " 7" followed by getAttribute() 
-FAIL input.size: setAttribute() to " 7" followed by IDL get assert_equals: expected 20 but got 7
+PASS input.size: setAttribute() to " 7" followed by IDL get 
 PASS input.size: setAttribute() to " 7" followed by getAttribute() 
-FAIL input.size: setAttribute() to " 7" followed by IDL get assert_equals: expected 20 but got 7
+PASS input.size: setAttribute() to " 7" followed by IDL get 
 PASS input.size: setAttribute() to " 7" followed by getAttribute() 
-FAIL input.size: setAttribute() to " 7" followed by IDL get assert_equals: expected 20 but got 7
+PASS input.size: setAttribute() to " 7" followed by IDL get 
 PASS input.size: setAttribute() to " 7" followed by getAttribute() 
-FAIL input.size: setAttribute() to " 7" followed by IDL get assert_equals: expected 20 but got 7
+PASS input.size: setAttribute() to " 7" followed by IDL get 
 PASS input.size: setAttribute() to " 7" followed by getAttribute() 
-FAIL input.size: setAttribute() to " 7" followed by IDL get assert_equals: expected 20 but got 7
+PASS input.size: setAttribute() to " 7" followed by IDL get 
 PASS input.size: setAttribute() to " 7" followed by getAttribute() 
 PASS input.size: setAttribute() to " 7" followed by IDL get 
 PASS input.size: setAttribute() to " 7" followed by getAttribute() 
-FAIL input.size: setAttribute() to " 7" followed by IDL get assert_equals: expected 20 but got 7
+PASS input.size: setAttribute() to " 7" followed by IDL get 
 PASS input.size: setAttribute() to " \0\x01\x02\x03\x04\x05\x06\x07 \b\t\n\v\f\r\x0e\x0f \x10\x11\x12\x13\x14\x15\x16\x17 \x18\x19\x1a\x1b\x1c\x1d\x1e\x1f  foo " followed by getAttribute() 
 PASS input.size: setAttribute() to " \0\x01\x02\x03\x04\x05\x06\x07 \b\t\n\v\f\r\x0e\x0f \x10\x11\x12\x13\x14\x15\x16\x17 \x18\x19\x1a\x1b\x1c\x1d\x1e\x1f  foo " followed by IDL get 
 PASS input.size: setAttribute() to undefined followed by getAttribute() 
@@ -10847,7 +10847,7 @@ PASS select.required: IDL set to object "test-valueOf" followed by hasAttribute(
 PASS select.required: IDL set to object "test-valueOf" followed by IDL get 
 PASS select.size: typeof IDL attribute 
 PASS select.size: IDL get with DOM attribute unset 
-FAIL select.size: setAttribute() to -2147483649 followed by getAttribute() assert_equals: expected "-2147483649" but got "0"
+PASS select.size: setAttribute() to -2147483649 followed by getAttribute() 
 PASS select.size: setAttribute() to -2147483649 followed by IDL get 
 PASS select.size: setAttribute() to -2147483648 followed by getAttribute() 
 PASS select.size: setAttribute() to -2147483648 followed by IDL get 
@@ -10863,95 +10863,95 @@ PASS select.size: setAttribute() to 257 followed by getAttribute()
 PASS select.size: setAttribute() to 257 followed by IDL get 
 PASS select.size: setAttribute() to 2147483647 followed by getAttribute() 
 PASS select.size: setAttribute() to 2147483647 followed by IDL get 
-FAIL select.size: setAttribute() to 2147483648 followed by getAttribute() assert_equals: expected "2147483648" but got "0"
+PASS select.size: setAttribute() to 2147483648 followed by getAttribute() 
 PASS select.size: setAttribute() to 2147483648 followed by IDL get 
-FAIL select.size: setAttribute() to 4294967295 followed by getAttribute() assert_equals: expected "4294967295" but got "0"
+PASS select.size: setAttribute() to 4294967295 followed by getAttribute() 
 PASS select.size: setAttribute() to 4294967295 followed by IDL get 
-FAIL select.size: setAttribute() to 4294967296 followed by getAttribute() assert_equals: expected "4294967296" but got "0"
+PASS select.size: setAttribute() to 4294967296 followed by getAttribute() 
 PASS select.size: setAttribute() to 4294967296 followed by IDL get 
-FAIL select.size: setAttribute() to "" followed by getAttribute() assert_equals: expected "" but got "0"
+PASS select.size: setAttribute() to "" followed by getAttribute() 
 PASS select.size: setAttribute() to "" followed by IDL get 
 PASS select.size: setAttribute() to "-1" followed by getAttribute() 
 PASS select.size: setAttribute() to "-1" followed by IDL get 
-FAIL select.size: setAttribute() to "-0" followed by getAttribute() assert_equals: expected "-0" but got "0"
+PASS select.size: setAttribute() to "-0" followed by getAttribute() 
 PASS select.size: setAttribute() to "-0" followed by IDL get 
 PASS select.size: setAttribute() to "0" followed by getAttribute() 
 PASS select.size: setAttribute() to "0" followed by IDL get 
 PASS select.size: setAttribute() to "1" followed by getAttribute() 
 PASS select.size: setAttribute() to "1" followed by IDL get 
-FAIL select.size: setAttribute() to "\t7" followed by getAttribute() assert_equals: expected "\t7" but got "7"
+PASS select.size: setAttribute() to "\t7" followed by getAttribute() 
 PASS select.size: setAttribute() to "\t7" followed by IDL get 
-FAIL select.size: setAttribute() to "\v7" followed by getAttribute() assert_equals: expected "\v7" but got "7"
-FAIL select.size: setAttribute() to "\v7" followed by IDL get assert_equals: expected 0 but got 7
-FAIL select.size: setAttribute() to "\f7" followed by getAttribute() assert_equals: expected "\f7" but got "7"
+PASS select.size: setAttribute() to "\v7" followed by getAttribute() 
+PASS select.size: setAttribute() to "\v7" followed by IDL get 
+PASS select.size: setAttribute() to "\f7" followed by getAttribute() 
 PASS select.size: setAttribute() to "\f7" followed by IDL get 
-FAIL select.size: setAttribute() to " 7" followed by getAttribute() assert_equals: expected " 7" but got "7"
+PASS select.size: setAttribute() to " 7" followed by getAttribute() 
 PASS select.size: setAttribute() to " 7" followed by IDL get 
-FAIL select.size: setAttribute() to " 7" followed by getAttribute() assert_equals: expected " 7" but got "0"
+PASS select.size: setAttribute() to " 7" followed by getAttribute() 
 PASS select.size: setAttribute() to " 7" followed by IDL get 
-FAIL select.size: setAttribute() to "7" followed by getAttribute() assert_equals: expected "7" but got "0"
+PASS select.size: setAttribute() to "7" followed by getAttribute() 
 PASS select.size: setAttribute() to "7" followed by IDL get 
-FAIL select.size: setAttribute() to "\n7" followed by getAttribute() assert_equals: expected "\n7" but got "7"
+PASS select.size: setAttribute() to "\n7" followed by getAttribute() 
 PASS select.size: setAttribute() to "\n7" followed by IDL get 
-FAIL select.size: setAttribute() to "\r7" followed by getAttribute() assert_equals: expected "\r7" but got "7"
+PASS select.size: setAttribute() to "\r7" followed by getAttribute() 
 PASS select.size: setAttribute() to "\r7" followed by IDL get 
-FAIL select.size: setAttribute() to "
7" followed by getAttribute() assert_equals: expected "
7" but got "7"
-FAIL select.size: setAttribute() to "
7" followed by IDL get assert_equals: expected 0 but got 7
-FAIL select.size: setAttribute() to "
7" followed by getAttribute() assert_equals: expected "
7" but got "0"
+PASS select.size: setAttribute() to "
7" followed by getAttribute() 
+PASS select.size: setAttribute() to "
7" followed by IDL get 
+PASS select.size: setAttribute() to "
7" followed by getAttribute() 
 PASS select.size: setAttribute() to "
7" followed by IDL get 
-FAIL select.size: setAttribute() to " 7" followed by getAttribute() assert_equals: expected " 7" but got "7"
-FAIL select.size: setAttribute() to " 7" followed by IDL get assert_equals: expected 0 but got 7
-FAIL select.size: setAttribute() to "᠎7" followed by getAttribute() assert_equals: expected "᠎7" but got "0"
+PASS select.size: setAttribute() to " 7" followed by getAttribute() 
+PASS select.size: setAttribute() to " 7" followed by IDL get 
+PASS select.size: setAttribute() to "᠎7" followed by getAttribute() 
 PASS select.size: setAttribute() to "᠎7" followed by IDL get 
-FAIL select.size: setAttribute() to " 7" followed by getAttribute() assert_equals: expected " 7" but got "7"
-FAIL select.size: setAttribute() to " 7" followed by IDL get assert_equals: expected 0 but got 7
-FAIL select.size: setAttribute() to " 7" followed by getAttribute() assert_equals: expected " 7" but got "7"
-FAIL select.size: setAttribute() to " 7" followed by IDL get assert_equals: expected 0 but got 7
-FAIL select.size: setAttribute() to " 7" followed by getAttribute() assert_equals: expected " 7" but got "7"
-FAIL select.size: setAttribute() to " 7" followed by IDL get assert_equals: expected 0 but got 7
-FAIL select.size: setAttribute() to " 7" followed by getAttribute() assert_equals: expected " 7" but got "7"
-FAIL select.size: setAttribute() to " 7" followed by IDL get assert_equals: expected 0 but got 7
-FAIL select.size: setAttribute() to " 7" followed by getAttribute() assert_equals: expected " 7" but got "7"
-FAIL select.size: setAttribute() to " 7" followed by IDL get assert_equals: expected 0 but got 7
-FAIL select.size: setAttribute() to " 7" followed by getAttribute() assert_equals: expected " 7" but got "7"
-FAIL select.size: setAttribute() to " 7" followed by IDL get assert_equals: expected 0 but got 7
-FAIL select.size: setAttribute() to " 7" followed by getAttribute() assert_equals: expected " 7" but got "7"
-FAIL select.size: setAttribute() to " 7" followed by IDL get assert_equals: expected 0 but got 7
-FAIL select.size: setAttribute() to " 7" followed by getAttribute() assert_equals: expected " 7" but got "7"
-FAIL select.size: setAttribute() to " 7" followed by IDL get assert_equals: expected 0 but got 7
-FAIL select.size: setAttribute() to " 7" followed by getAttribute() assert_equals: expected " 7" but got "7"
-FAIL select.size: setAttribute() to " 7" followed by IDL get assert_equals: expected 0 but got 7
-FAIL select.size: setAttribute() to " 7" followed by getAttribute() assert_equals: expected " 7" but got "7"
-FAIL select.size: setAttribute() to " 7" followed by IDL get assert_equals: expected 0 but got 7
-FAIL select.size: setAttribute() to " 7" followed by getAttribute() assert_equals: expected " 7" but got "7"
-FAIL select.size: setAttribute() to " 7" followed by IDL get assert_equals: expected 0 but got 7
-FAIL select.size: setAttribute() to " 7" followed by getAttribute() assert_equals: expected " 7" but got "0"
+PASS select.size: setAttribute() to " 7" followed by getAttribute() 
+PASS select.size: setAttribute() to " 7" followed by IDL get 
+PASS select.size: setAttribute() to " 7" followed by getAttribute() 
+PASS select.size: setAttribute() to " 7" followed by IDL get 
+PASS select.size: setAttribute() to " 7" followed by getAttribute() 
+PASS select.size: setAttribute() to " 7" followed by IDL get 
+PASS select.size: setAttribute() to " 7" followed by getAttribute() 
+PASS select.size: setAttribute() to " 7" followed by IDL get 
+PASS select.size: setAttribute() to " 7" followed by getAttribute() 
+PASS select.size: setAttribute() to " 7" followed by IDL get 
+PASS select.size: setAttribute() to " 7" followed by getAttribute() 
+PASS select.size: setAttribute() to " 7" followed by IDL get 
+PASS select.size: setAttribute() to " 7" followed by getAttribute() 
+PASS select.size: setAttribute() to " 7" followed by IDL get 
+PASS select.size: setAttribute() to " 7" followed by getAttribute() 
+PASS select.size: setAttribute() to " 7" followed by IDL get 
+PASS select.size: setAttribute() to " 7" followed by getAttribute() 
+PASS select.size: setAttribute() to " 7" followed by IDL get 
+PASS select.size: setAttribute() to " 7" followed by getAttribute() 
+PASS select.size: setAttribute() to " 7" followed by IDL get 
+PASS select.size: setAttribute() to " 7" followed by getAttribute() 
+PASS select.size: setAttribute() to " 7" followed by IDL get 
+PASS select.size: setAttribute() to " 7" followed by getAttribute() 
 PASS select.size: setAttribute() to " 7" followed by IDL get 
-FAIL select.size: setAttribute() to " 7" followed by getAttribute() assert_equals: expected " 7" but got "7"
-FAIL select.size: setAttribute() to " 7" followed by IDL get assert_equals: expected 0 but got 7
-FAIL select.size: setAttribute() to " \0\x01\x02\x03\x04\x05\x06\x07 \b\t\n\v\f\r\x0e\x0f \x10\x11\x12\x13\x14\x15\x16\x17 \x18\x19\x1a\x1b\x1c\x1d\x1e\x1f  foo " followed by getAttribute() assert_equals: expected " \0\x01\x02\x03\x04\x05\x06\x07 \b\t\n\v\f\r\x0e\x0f \x10\x11\x12\x13\x14\x15\x16\x17 \x18\x19\x1a\x1b\x1c\x1d\x1e\x1f  foo " but got "0"
+PASS select.size: setAttribute() to " 7" followed by getAttribute() 
+PASS select.size: setAttribute() to " 7" followed by IDL get 
+PASS select.size: setAttribute() to " \0\x01\x02\x03\x04\x05\x06\x07 \b\t\n\v\f\r\x0e\x0f \x10\x11\x12\x13\x14\x15\x16\x17 \x18\x19\x1a\x1b\x1c\x1d\x1e\x1f  foo " followed by getAttribute() 
 PASS select.size: setAttribute() to " \0\x01\x02\x03\x04\x05\x06\x07 \b\t\n\v\f\r\x0e\x0f \x10\x11\x12\x13\x14\x15\x16\x17 \x18\x19\x1a\x1b\x1c\x1d\x1e\x1f  foo " followed by IDL get 
-FAIL select.size: setAttribute() to undefined followed by getAttribute() assert_equals: expected "undefined" but got "0"
+PASS select.size: setAttribute() to undefined followed by getAttribute() 
 PASS select.size: setAttribute() to undefined followed by IDL get 
-FAIL select.size: setAttribute() to 1.5 followed by getAttribute() assert_equals: expected "1.5" but got "1"
+PASS select.size: setAttribute() to 1.5 followed by getAttribute() 
 PASS select.size: setAttribute() to 1.5 followed by IDL get 
-FAIL select.size: setAttribute() to true followed by getAttribute() assert_equals: expected "true" but got "0"
+PASS select.size: setAttribute() to true followed by getAttribute() 
 PASS select.size: setAttribute() to true followed by IDL get 
-FAIL select.size: setAttribute() to false followed by getAttribute() assert_equals: expected "false" but got "0"
+PASS select.size: setAttribute() to false followed by getAttribute() 
 PASS select.size: setAttribute() to false followed by IDL get 
-FAIL select.size: setAttribute() to object "[object Object]" followed by getAttribute() assert_equals: expected "[object Object]" but got "0"
+PASS select.size: setAttribute() to object "[object Object]" followed by getAttribute() 
 PASS select.size: setAttribute() to object "[object Object]" followed by IDL get 
-FAIL select.size: setAttribute() to NaN followed by getAttribute() assert_equals: expected "NaN" but got "0"
+PASS select.size: setAttribute() to NaN followed by getAttribute() 
 PASS select.size: setAttribute() to NaN followed by IDL get 
-FAIL select.size: setAttribute() to Infinity followed by getAttribute() assert_equals: expected "Infinity" but got "0"
+PASS select.size: setAttribute() to Infinity followed by getAttribute() 
 PASS select.size: setAttribute() to Infinity followed by IDL get 
-FAIL select.size: setAttribute() to -Infinity followed by getAttribute() assert_equals: expected "-Infinity" but got "0"
+PASS select.size: setAttribute() to -Infinity followed by getAttribute() 
 PASS select.size: setAttribute() to -Infinity followed by IDL get 
-FAIL select.size: setAttribute() to "\0" followed by getAttribute() assert_equals: expected "\0" but got "0"
+PASS select.size: setAttribute() to "\0" followed by getAttribute() 
 PASS select.size: setAttribute() to "\0" followed by IDL get 
 PASS select.size: setAttribute() to object "2" followed by getAttribute() 
 PASS select.size: setAttribute() to object "2" followed by IDL get 
-FAIL select.size: setAttribute() to object "3" followed by getAttribute() assert_equals: expected "[object Object]" but got "0"
+PASS select.size: setAttribute() to object "3" followed by getAttribute() 
 PASS select.size: setAttribute() to object "3" followed by IDL get 
 PASS select.size: IDL set to 0 should not throw 
 PASS select.size: IDL set to 0 followed by getAttribute() 
@@ -10969,10 +10969,10 @@ PASS select.size: IDL set to "-0" should not throw
 PASS select.size: IDL set to "-0" followed by getAttribute() 
 PASS select.size: IDL set to "-0" followed by IDL get 
 PASS select.size: IDL set to 2147483648 should not throw 
-FAIL select.size: IDL set to 2147483648 followed by getAttribute() assert_equals: expected "0" but got "-2147483648"
+PASS select.size: IDL set to 2147483648 followed by getAttribute() 
 PASS select.size: IDL set to 2147483648 followed by IDL get 
 PASS select.size: IDL set to 4294967295 should not throw 
-FAIL select.size: IDL set to 4294967295 followed by getAttribute() assert_equals: expected "0" but got "-1"
+PASS select.size: IDL set to 4294967295 followed by getAttribute() 
 PASS select.size: IDL set to 4294967295 followed by IDL get 
 FAIL select.itemScope: typeof IDL attribute assert_equals: expected "boolean" but got "undefined"
 FAIL select.itemScope: IDL get with DOM attribute unset assert_equals: expected (boolean) false but got (undefined) undefined
@@ -14544,7 +14544,7 @@ PASS textarea.cols: setAttribute() to "1" followed by IDL get
 PASS textarea.cols: setAttribute() to "\t7" followed by getAttribute() 
 PASS textarea.cols: setAttribute() to "\t7" followed by IDL get 
 PASS textarea.cols: setAttribute() to "\v7" followed by getAttribute() 
-FAIL textarea.cols: setAttribute() to "\v7" followed by IDL get assert_equals: expected 20 but got 7
+PASS textarea.cols: setAttribute() to "\v7" followed by IDL get 
 PASS textarea.cols: setAttribute() to "\f7" followed by getAttribute() 
 PASS textarea.cols: setAttribute() to "\f7" followed by IDL get 
 PASS textarea.cols: setAttribute() to " 7" followed by getAttribute() 
@@ -14558,39 +14558,39 @@ PASS textarea.cols: setAttribute() to "\n7" followed by IDL get
 PASS textarea.cols: setAttribute() to "\r7" followed by getAttribute() 
 PASS textarea.cols: setAttribute() to "\r7" followed by IDL get 
 PASS textarea.cols: setAttribute() to "
7" followed by getAttribute() 
-FAIL textarea.cols: setAttribute() to "
7" followed by IDL get assert_equals: expected 20 but got 7
+PASS textarea.cols: setAttribute() to "
7" followed by IDL get 
 PASS textarea.cols: setAttribute() to "
7" followed by getAttribute() 
 PASS textarea.cols: setAttribute() to "
7" followed by IDL get 
 PASS textarea.cols: setAttribute() to " 7" followed by getAttribute() 
-FAIL textarea.cols: setAttribute() to " 7" followed by IDL get assert_equals: expected 20 but got 7
+PASS textarea.cols: setAttribute() to " 7" followed by IDL get 
 PASS textarea.cols: setAttribute() to "᠎7" followed by getAttribute() 
 PASS textarea.cols: setAttribute() to "᠎7" followed by IDL get 
 PASS textarea.cols: setAttribute() to " 7" followed by getAttribute() 
-FAIL textarea.cols: setAttribute() to " 7" followed by IDL get assert_equals: expected 20 but got 7
+PASS textarea.cols: setAttribute() to " 7" followed by IDL get 
 PASS textarea.cols: setAttribute() to " 7" followed by getAttribute() 
-FAIL textarea.cols: setAttribute() to " 7" followed by IDL get assert_equals: expected 20 but got 7
+PASS textarea.cols: setAttribute() to " 7" followed by IDL get 
 PASS textarea.cols: setAttribute() to " 7" followed by getAttribute() 
-FAIL textarea.cols: setAttribute() to " 7" followed by IDL get assert_equals: expected 20 but got 7
+PASS textarea.cols: setAttribute() to " 7" followed by IDL get 
 PASS textarea.cols: setAttribute() to " 7" followed by getAttribute() 
-FAIL textarea.cols: setAttribute() to " 7" followed by IDL get assert_equals: expected 20 but got 7
+PASS textarea.cols: setAttribute() to " 7" followed by IDL get 
 PASS textarea.cols: setAttribute() to " 7" followed by getAttribute() 
-FAIL textarea.cols: setAttribute() to " 7" followed by IDL get assert_equals: expected 20 but got 7
+PASS textarea.cols: setAttribute() to " 7" followed by IDL get 
 PASS textarea.cols: setAttribute() to " 7" followed by getAttribute() 
-FAIL textarea.cols: setAttribute() to " 7" followed by IDL get assert_equals: expected 20 but got 7
+PASS textarea.cols: setAttribute() to " 7" followed by IDL get 
 PASS textarea.cols: setAttribute() to " 7" followed by getAttribute() 
-FAIL textarea.cols: setAttribute() to " 7" followed by IDL get assert_equals: expected 20 but got 7
+PASS textarea.cols: setAttribute() to " 7" followed by IDL get 
 PASS textarea.cols: setAttribute() to " 7" followed by getAttribute() 
-FAIL textarea.cols: setAttribute() to " 7" followed by IDL get assert_equals: expected 20 but got 7
+PASS textarea.cols: setAttribute() to " 7" followed by IDL get 
 PASS textarea.cols: setAttribute() to " 7" followed by getAttribute() 
-FAIL textarea.cols: setAttribute() to " 7" followed by IDL get assert_equals: expected 20 but got 7
+PASS textarea.cols: setAttribute() to " 7" followed by IDL get 
 PASS textarea.cols: setAttribute() to " 7" followed by getAttribute() 
-FAIL textarea.cols: setAttribute() to " 7" followed by IDL get assert_equals: expected 20 but got 7
+PASS textarea.cols: setAttribute() to " 7" followed by IDL get 
 PASS textarea.cols: setAttribute() to " 7" followed by getAttribute() 
-FAIL textarea.cols: setAttribute() to " 7" followed by IDL get assert_equals: expected 20 but got 7
+PASS textarea.cols: setAttribute() to " 7" followed by IDL get 
 PASS textarea.cols: setAttribute() to " 7" followed by getAttribute() 
 PASS textarea.cols: setAttribute() to " 7" followed by IDL get 
 PASS textarea.cols: setAttribute() to " 7" followed by getAttribute() 
-FAIL textarea.cols: setAttribute() to " 7" followed by IDL get assert_equals: expected 20 but got 7
+PASS textarea.cols: setAttribute() to " 7" followed by IDL get 
 PASS textarea.cols: setAttribute() to " \0\x01\x02\x03\x04\x05\x06\x07 \b\t\n\v\f\r\x0e\x0f \x10\x11\x12\x13\x14\x15\x16\x17 \x18\x19\x1a\x1b\x1c\x1d\x1e\x1f  foo " followed by getAttribute() 
 PASS textarea.cols: setAttribute() to " \0\x01\x02\x03\x04\x05\x06\x07 \b\t\n\v\f\r\x0e\x0f \x10\x11\x12\x13\x14\x15\x16\x17 \x18\x19\x1a\x1b\x1c\x1d\x1e\x1f  foo " followed by IDL get 
 PASS textarea.cols: setAttribute() to undefined followed by getAttribute() 
@@ -15603,7 +15603,7 @@ PASS textarea.rows: setAttribute() to "1" followed by IDL get
 PASS textarea.rows: setAttribute() to "\t7" followed by getAttribute() 
 PASS textarea.rows: setAttribute() to "\t7" followed by IDL get 
 PASS textarea.rows: setAttribute() to "\v7" followed by getAttribute() 
-FAIL textarea.rows: setAttribute() to "\v7" followed by IDL get assert_equals: expected 2 but got 7
+PASS textarea.rows: setAttribute() to "\v7" followed by IDL get 
 PASS textarea.rows: setAttribute() to "\f7" followed by getAttribute() 
 PASS textarea.rows: setAttribute() to "\f7" followed by IDL get 
 PASS textarea.rows: setAttribute() to " 7" followed by getAttribute() 
@@ -15617,39 +15617,39 @@ PASS textarea.rows: setAttribute() to "\n7" followed by IDL get
 PASS textarea.rows: setAttribute() to "\r7" followed by getAttribute() 
 PASS textarea.rows: setAttribute() to "\r7" followed by IDL get 
 PASS textarea.rows: setAttribute() to "
7" followed by getAttribute() 
-FAIL textarea.rows: setAttribute() to "
7" followed by IDL get assert_equals: expected 2 but got 7
+PASS textarea.rows: setAttribute() to "
7" followed by IDL get 
 PASS textarea.rows: setAttribute() to "
7" followed by getAttribute() 
 PASS textarea.rows: setAttribute() to "
7" followed by IDL get 
 PASS textarea.rows: setAttribute() to " 7" followed by getAttribute() 
-FAIL textarea.rows: setAttribute() to " 7" followed by IDL get assert_equals: expected 2 but got 7
+PASS textarea.rows: setAttribute() to " 7" followed by IDL get 
 PASS textarea.rows: setAttribute() to "᠎7" followed by getAttribute() 
 PASS textarea.rows: setAttribute() to "᠎7" followed by IDL get 
 PASS textarea.rows: setAttribute() to " 7" followed by getAttribute() 
-FAIL textarea.rows: setAttribute() to " 7" followed by IDL get assert_equals: expected 2 but got 7
+PASS textarea.rows: setAttribute() to " 7" followed by IDL get 
 PASS textarea.rows: setAttribute() to " 7" followed by getAttribute() 
-FAIL textarea.rows: setAttribute() to " 7" followed by IDL get assert_equals: expected 2 but got 7
+PASS textarea.rows: setAttribute() to " 7" followed by IDL get 
 PASS textarea.rows: setAttribute() to " 7" followed by getAttribute() 
-FAIL textarea.rows: setAttribute() to " 7" followed by IDL get assert_equals: expected 2 but got 7
+PASS textarea.rows: setAttribute() to " 7" followed by IDL get 
 PASS textarea.rows: setAttribute() to " 7" followed by getAttribute() 
-FAIL textarea.rows: setAttribute() to " 7" followed by IDL get assert_equals: expected 2 but got 7
+PASS textarea.rows: setAttribute() to " 7" followed by IDL get 
 PASS textarea.rows: setAttribute() to " 7" followed by getAttribute() 
-FAIL textarea.rows: setAttribute() to " 7" followed by IDL get assert_equals: expected 2 but got 7
+PASS textarea.rows: setAttribute() to " 7" followed by IDL get 
 PASS textarea.rows: setAttribute() to " 7" followed by getAttribute() 
-FAIL textarea.rows: setAttribute() to " 7" followed by IDL get assert_equals: expected 2 but got 7
+PASS textarea.rows: setAttribute() to " 7" followed by IDL get 
 PASS textarea.rows: setAttribute() to " 7" followed by getAttribute() 
-FAIL textarea.rows: setAttribute() to " 7" followed by IDL get assert_equals: expected 2 but got 7
+PASS textarea.rows: setAttribute() to " 7" followed by IDL get 
 PASS textarea.rows: setAttribute() to " 7" followed by getAttribute() 
-FAIL textarea.rows: setAttribute() to " 7" followed by IDL get assert_equals: expected 2 but got 7
+PASS textarea.rows: setAttribute() to " 7" followed by IDL get 
 PASS textarea.rows: setAttribute() to " 7" followed by getAttribute() 
-FAIL textarea.rows: setAttribute() to " 7" followed by IDL get assert_equals: expected 2 but got 7
+PASS textarea.rows: setAttribute() to " 7" followed by IDL get 
 PASS textarea.rows: setAttribute() to " 7" followed by getAttribute() 
-FAIL textarea.rows: setAttribute() to " 7" followed by IDL get assert_equals: expected 2 but got 7
+PASS textarea.rows: setAttribute() to " 7" followed by IDL get 
 PASS textarea.rows: setAttribute() to " 7" followed by getAttribute() 
-FAIL textarea.rows: setAttribute() to " 7" followed by IDL get assert_equals: expected 2 but got 7
+PASS textarea.rows: setAttribute() to " 7" followed by IDL get 
 PASS textarea.rows: setAttribute() to " 7" followed by getAttribute() 
 PASS textarea.rows: setAttribute() to " 7" followed by IDL get 
 PASS textarea.rows: setAttribute() to " 7" followed by getAttribute() 
-FAIL textarea.rows: setAttribute() to " 7" followed by IDL get assert_equals: expected 2 but got 7
+PASS textarea.rows: setAttribute() to " 7" followed by IDL get 
 PASS textarea.rows: setAttribute() to " \0\x01\x02\x03\x04\x05\x06\x07 \b\t\n\v\f\r\x0e\x0f \x10\x11\x12\x13\x14\x15\x16\x17 \x18\x19\x1a\x1b\x1c\x1d\x1e\x1f  foo " followed by getAttribute() 
 PASS textarea.rows: setAttribute() to " \0\x01\x02\x03\x04\x05\x06\x07 \b\t\n\v\f\r\x0e\x0f \x10\x11\x12\x13\x14\x15\x16\x17 \x18\x19\x1a\x1b\x1c\x1d\x1e\x1f  foo " followed by IDL get 
 PASS textarea.rows: setAttribute() to undefined followed by getAttribute() 
index 197c6e7..466bc9c 100644 (file)
@@ -3004,7 +3004,7 @@ PASS colgroup.span: setAttribute() to "1" followed by IDL get
 PASS colgroup.span: setAttribute() to "\t7" followed by getAttribute() 
 PASS colgroup.span: setAttribute() to "\t7" followed by IDL get 
 PASS colgroup.span: setAttribute() to "\v7" followed by getAttribute() 
-FAIL colgroup.span: setAttribute() to "\v7" followed by IDL get assert_equals: expected 1 but got 7
+PASS colgroup.span: setAttribute() to "\v7" followed by IDL get 
 PASS colgroup.span: setAttribute() to "\f7" followed by getAttribute() 
 PASS colgroup.span: setAttribute() to "\f7" followed by IDL get 
 PASS colgroup.span: setAttribute() to " 7" followed by getAttribute() 
@@ -3018,39 +3018,39 @@ PASS colgroup.span: setAttribute() to "\n7" followed by IDL get
 PASS colgroup.span: setAttribute() to "\r7" followed by getAttribute() 
 PASS colgroup.span: setAttribute() to "\r7" followed by IDL get 
 PASS colgroup.span: setAttribute() to "
7" followed by getAttribute() 
-FAIL colgroup.span: setAttribute() to "
7" followed by IDL get assert_equals: expected 1 but got 7
+PASS colgroup.span: setAttribute() to "
7" followed by IDL get 
 PASS colgroup.span: setAttribute() to "
7" followed by getAttribute() 
 PASS colgroup.span: setAttribute() to "
7" followed by IDL get 
 PASS colgroup.span: setAttribute() to " 7" followed by getAttribute() 
-FAIL colgroup.span: setAttribute() to " 7" followed by IDL get assert_equals: expected 1 but got 7
+PASS colgroup.span: setAttribute() to " 7" followed by IDL get 
 PASS colgroup.span: setAttribute() to "᠎7" followed by getAttribute() 
 PASS colgroup.span: setAttribute() to "᠎7" followed by IDL get 
 PASS colgroup.span: setAttribute() to " 7" followed by getAttribute() 
-FAIL colgroup.span: setAttribute() to " 7" followed by IDL get assert_equals: expected 1 but got 7
+PASS colgroup.span: setAttribute() to " 7" followed by IDL get 
 PASS colgroup.span: setAttribute() to " 7" followed by getAttribute() 
-FAIL colgroup.span: setAttribute() to " 7" followed by IDL get assert_equals: expected 1 but got 7
+PASS colgroup.span: setAttribute() to " 7" followed by IDL get 
 PASS colgroup.span: setAttribute() to " 7" followed by getAttribute() 
-FAIL colgroup.span: setAttribute() to " 7" followed by IDL get assert_equals: expected 1 but got 7
+PASS colgroup.span: setAttribute() to " 7" followed by IDL get 
 PASS colgroup.span: setAttribute() to " 7" followed by getAttribute() 
-FAIL colgroup.span: setAttribute() to " 7" followed by IDL get assert_equals: expected 1 but got 7
+PASS colgroup.span: setAttribute() to " 7" followed by IDL get 
 PASS colgroup.span: setAttribute() to " 7" followed by getAttribute() 
-FAIL colgroup.span: setAttribute() to " 7" followed by IDL get assert_equals: expected 1 but got 7
+PASS colgroup.span: setAttribute() to " 7" followed by IDL get 
 PASS colgroup.span: setAttribute() to " 7" followed by getAttribute() 
-FAIL colgroup.span: setAttribute() to " 7" followed by IDL get assert_equals: expected 1 but got 7
+PASS colgroup.span: setAttribute() to " 7" followed by IDL get 
 PASS colgroup.span: setAttribute() to " 7" followed by getAttribute() 
-FAIL colgroup.span: setAttribute() to " 7" followed by IDL get assert_equals: expected 1 but got 7
+PASS colgroup.span: setAttribute() to " 7" followed by IDL get 
 PASS colgroup.span: setAttribute() to " 7" followed by getAttribute() 
-FAIL colgroup.span: setAttribute() to " 7" followed by IDL get assert_equals: expected 1 but got 7
+PASS colgroup.span: setAttribute() to " 7" followed by IDL get 
 PASS colgroup.span: setAttribute() to " 7" followed by getAttribute() 
-FAIL colgroup.span: setAttribute() to " 7" followed by IDL get assert_equals: expected 1 but got 7
+PASS colgroup.span: setAttribute() to " 7" followed by IDL get 
 PASS colgroup.span: setAttribute() to " 7" followed by getAttribute() 
-FAIL colgroup.span: setAttribute() to " 7" followed by IDL get assert_equals: expected 1 but got 7
+PASS colgroup.span: setAttribute() to " 7" followed by IDL get 
 PASS colgroup.span: setAttribute() to " 7" followed by getAttribute() 
-FAIL colgroup.span: setAttribute() to " 7" followed by IDL get assert_equals: expected 1 but got 7
+PASS colgroup.span: setAttribute() to " 7" followed by IDL get 
 PASS colgroup.span: setAttribute() to " 7" followed by getAttribute() 
 PASS colgroup.span: setAttribute() to " 7" followed by IDL get 
 PASS colgroup.span: setAttribute() to " 7" followed by getAttribute() 
-FAIL colgroup.span: setAttribute() to " 7" followed by IDL get assert_equals: expected 1 but got 7
+PASS colgroup.span: setAttribute() to " 7" followed by IDL get 
 PASS colgroup.span: setAttribute() to " \0\x01\x02\x03\x04\x05\x06\x07 \b\t\n\v\f\r\x0e\x0f \x10\x11\x12\x13\x14\x15\x16\x17 \x18\x19\x1a\x1b\x1c\x1d\x1e\x1f  foo " followed by getAttribute() 
 PASS colgroup.span: setAttribute() to " \0\x01\x02\x03\x04\x05\x06\x07 \b\t\n\v\f\r\x0e\x0f \x10\x11\x12\x13\x14\x15\x16\x17 \x18\x19\x1a\x1b\x1c\x1d\x1e\x1f  foo " followed by IDL get 
 PASS colgroup.span: setAttribute() to undefined followed by getAttribute() 
@@ -4271,7 +4271,7 @@ PASS col.span: setAttribute() to "1" followed by IDL get
 PASS col.span: setAttribute() to "\t7" followed by getAttribute() 
 PASS col.span: setAttribute() to "\t7" followed by IDL get 
 PASS col.span: setAttribute() to "\v7" followed by getAttribute() 
-FAIL col.span: setAttribute() to "\v7" followed by IDL get assert_equals: expected 1 but got 7
+PASS col.span: setAttribute() to "\v7" followed by IDL get 
 PASS col.span: setAttribute() to "\f7" followed by getAttribute() 
 PASS col.span: setAttribute() to "\f7" followed by IDL get 
 PASS col.span: setAttribute() to " 7" followed by getAttribute() 
@@ -4285,39 +4285,39 @@ PASS col.span: setAttribute() to "\n7" followed by IDL get
 PASS col.span: setAttribute() to "\r7" followed by getAttribute() 
 PASS col.span: setAttribute() to "\r7" followed by IDL get 
 PASS col.span: setAttribute() to "
7" followed by getAttribute() 
-FAIL col.span: setAttribute() to "
7" followed by IDL get assert_equals: expected 1 but got 7
+PASS col.span: setAttribute() to "
7" followed by IDL get 
 PASS col.span: setAttribute() to "
7" followed by getAttribute() 
 PASS col.span: setAttribute() to "
7" followed by IDL get 
 PASS col.span: setAttribute() to " 7" followed by getAttribute() 
-FAIL col.span: setAttribute() to " 7" followed by IDL get assert_equals: expected 1 but got 7
+PASS col.span: setAttribute() to " 7" followed by IDL get 
 PASS col.span: setAttribute() to "᠎7" followed by getAttribute() 
 PASS col.span: setAttribute() to "᠎7" followed by IDL get 
 PASS col.span: setAttribute() to " 7" followed by getAttribute() 
-FAIL col.span: setAttribute() to " 7" followed by IDL get assert_equals: expected 1 but got 7
+PASS col.span: setAttribute() to " 7" followed by IDL get 
 PASS col.span: setAttribute() to " 7" followed by getAttribute() 
-FAIL col.span: setAttribute() to " 7" followed by IDL get assert_equals: expected 1 but got 7
+PASS col.span: setAttribute() to " 7" followed by IDL get 
 PASS col.span: setAttribute() to " 7" followed by getAttribute() 
-FAIL col.span: setAttribute() to " 7" followed by IDL get assert_equals: expected 1 but got 7
+PASS col.span: setAttribute() to " 7" followed by IDL get 
 PASS col.span: setAttribute() to " 7" followed by getAttribute() 
-FAIL col.span: setAttribute() to " 7" followed by IDL get assert_equals: expected 1 but got 7
+PASS col.span: setAttribute() to " 7" followed by IDL get 
 PASS col.span: setAttribute() to " 7" followed by getAttribute() 
-FAIL col.span: setAttribute() to " 7" followed by IDL get assert_equals: expected 1 but got 7
+PASS col.span: setAttribute() to " 7" followed by IDL get 
 PASS col.span: setAttribute() to " 7" followed by getAttribute() 
-FAIL col.span: setAttribute() to " 7" followed by IDL get assert_equals: expected 1 but got 7
+PASS col.span: setAttribute() to " 7" followed by IDL get 
 PASS col.span: setAttribute() to " 7" followed by getAttribute() 
-FAIL col.span: setAttribute() to " 7" followed by IDL get assert_equals: expected 1 but got 7
+PASS col.span: setAttribute() to " 7" followed by IDL get 
 PASS col.span: setAttribute() to " 7" followed by getAttribute() 
-FAIL col.span: setAttribute() to " 7" followed by IDL get assert_equals: expected 1 but got 7
+PASS col.span: setAttribute() to " 7" followed by IDL get 
 PASS col.span: setAttribute() to " 7" followed by getAttribute() 
-FAIL col.span: setAttribute() to " 7" followed by IDL get assert_equals: expected 1 but got 7
+PASS col.span: setAttribute() to " 7" followed by IDL get 
 PASS col.span: setAttribute() to " 7" followed by getAttribute() 
-FAIL col.span: setAttribute() to " 7" followed by IDL get assert_equals: expected 1 but got 7
+PASS col.span: setAttribute() to " 7" followed by IDL get 
 PASS col.span: setAttribute() to " 7" followed by getAttribute() 
-FAIL col.span: setAttribute() to " 7" followed by IDL get assert_equals: expected 1 but got 7
+PASS col.span: setAttribute() to " 7" followed by IDL get 
 PASS col.span: setAttribute() to " 7" followed by getAttribute() 
 PASS col.span: setAttribute() to " 7" followed by IDL get 
 PASS col.span: setAttribute() to " 7" followed by getAttribute() 
-FAIL col.span: setAttribute() to " 7" followed by IDL get assert_equals: expected 1 but got 7
+PASS col.span: setAttribute() to " 7" followed by IDL get 
 PASS col.span: setAttribute() to " \0\x01\x02\x03\x04\x05\x06\x07 \b\t\n\v\f\r\x0e\x0f \x10\x11\x12\x13\x14\x15\x16\x17 \x18\x19\x1a\x1b\x1c\x1d\x1e\x1f  foo " followed by getAttribute() 
 PASS col.span: setAttribute() to " \0\x01\x02\x03\x04\x05\x06\x07 \b\t\n\v\f\r\x0e\x0f \x10\x11\x12\x13\x14\x15\x16\x17 \x18\x19\x1a\x1b\x1c\x1d\x1e\x1f  foo " followed by IDL get 
 PASS col.span: setAttribute() to undefined followed by getAttribute() 
diff --git a/LayoutTests/platform/efl/fast/forms/select-size-expected.txt b/LayoutTests/platform/efl/fast/forms/select-size-expected.txt
deleted file mode 100644 (file)
index 072582c..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-layer at (0,0) size 800x600
-  RenderView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  RenderBlock {HTML} at (0,0) size 800x600
-    RenderBody {BODY} at (8,8) size 784x584
-      RenderText {#text} at (0,0) size 783x35
-        text run at (0,0) width 783: "This tests that a malformed size attribute will be parsed and corrected so that the right size attribute value is used to match the"
-        text run at (0,18) width 406: "style rule that determines whether to use a menu list or a list box."
-      RenderBR {BR} at (406,32) size 0x0
-      RenderMenuList {SELECT} at (2,38) size 81x38 [bgcolor=#FFFFFF]
-        RenderBlock (anonymous) at (15,10) size 25x18
-          RenderText at (0,0) size 25x17
-            text run at (0,0) width 25: "test"
-      RenderText {#text} at (0,0) size 0x0
diff --git a/LayoutTests/platform/gtk/fast/forms/select-size-expected.txt b/LayoutTests/platform/gtk/fast/forms/select-size-expected.txt
deleted file mode 100644 (file)
index 48731b5..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-layer at (0,0) size 800x600
-  RenderView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  RenderBlock {HTML} at (0,0) size 800x600
-    RenderBody {BODY} at (8,8) size 784x584
-      RenderText {#text} at (0,0) size 783x34
-        text run at (0,0) width 783: "This tests that a malformed size attribute will be parsed and corrected so that the right size attribute value is used to match the"
-        text run at (0,17) width 406: "style rule that determines whether to use a menu list or a list box."
-      RenderBR {BR} at (406,31) size 0x0
-      RenderMenuList {SELECT} at (2,36) size 50x27 [bgcolor=#FFFFFF] [border: (1px solid #000000)]
-        RenderBlock (anonymous) at (1,1) size 48x25
-          RenderText at (4,4) size 25x17
-            text run at (4,4) width 25: "test"
-      RenderText {#text} at (0,0) size 0x0
diff --git a/LayoutTests/platform/ios-simulator/fast/forms/select-size-expected.txt b/LayoutTests/platform/ios-simulator/fast/forms/select-size-expected.txt
deleted file mode 100644 (file)
index b348f33..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-layer at (0,0) size 800x600
-  RenderView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  RenderBlock {HTML} at (0,0) size 800x600
-    RenderBody {BODY} at (8,8) size 784x584
-      RenderText {#text} at (0,0) size 782x39
-        text run at (0,0) width 782: "This tests that a malformed size attribute will be parsed and corrected so that the right size attribute value is used to match"
-        text run at (0,20) width 441: "the style rule that determines whether to use a menu list or a list box."
-      RenderBR {BR} at (440,35) size 1x0
-      RenderMenuList {SELECT} at (2,42) size 50x20 [bgcolor=#FFFFFF02] [border: (1px solid #4C4C4C)]
-        RenderBlock (anonymous) at (6,3) size 38x14
-          RenderText at (0,0) size 18x14
-            text run at (0,0) width 18: "test"
-      RenderText {#text} at (0,0) size 0x0
diff --git a/LayoutTests/platform/mac/fast/forms/select-size-expected.png b/LayoutTests/platform/mac/fast/forms/select-size-expected.png
deleted file mode 100644 (file)
index cae5770..0000000
Binary files a/LayoutTests/platform/mac/fast/forms/select-size-expected.png and /dev/null differ
diff --git a/LayoutTests/platform/mac/fast/forms/select-size-expected.txt b/LayoutTests/platform/mac/fast/forms/select-size-expected.txt
deleted file mode 100644 (file)
index a3394c3..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-layer at (0,0) size 800x600
-  RenderView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  RenderBlock {HTML} at (0,0) size 800x600
-    RenderBody {BODY} at (8,8) size 784x584
-      RenderText {#text} at (0,0) size 782x36
-        text run at (0,0) width 782: "This tests that a malformed size attribute will be parsed and corrected so that the right size attribute value is used to match"
-        text run at (0,18) width 441: "the style rule that determines whether to use a menu list or a list box."
-      RenderBR {BR} at (440,32) size 1x0
-      RenderMenuList {SELECT} at (2,38) size 51x18 [bgcolor=#FFFFFF]
-        RenderBlock (anonymous) at (0,0) size 51x18
-          RenderText at (8,2) size 20x13
-            text run at (8,2) width 20: "test"
-      RenderText {#text} at (0,0) size 0x0
diff --git a/LayoutTests/platform/win/fast/forms/select-size-expected.txt b/LayoutTests/platform/win/fast/forms/select-size-expected.txt
deleted file mode 100644 (file)
index 12058ab..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-layer at (0,0) size 800x600
-  RenderView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  RenderBlock {HTML} at (0,0) size 800x600
-    RenderBody {BODY} at (8,8) size 784x584
-      RenderText {#text} at (0,0) size 783x36
-        text run at (0,0) width 783: "This tests that a malformed size attribute will be parsed and corrected so that the right size attribute value is used to match the"
-        text run at (0,18) width 406: "style rule that determines whether to use a menu list or a list box."
-      RenderBR {BR} at (406,32) size 0x0
-      RenderMenuList {SELECT} at (2,38) size 47x19 [bgcolor=#FFFFFF]
-        RenderBlock (anonymous) at (4,2) size 22x15
-          RenderText at (0,0) size 22x15
-            text run at (0,0) width 22: "test"
-      RenderText {#text} at (0,0) size 0x0
index 55ce956..88c65d8 100644 (file)
@@ -1,3 +1,47 @@
+2016-02-21  Chris Dumez  <cdumez@apple.com>
+
+        Make HTMLSelectElement.size behave as per the specification
+        https://bugs.webkit.org/show_bug.cgi?id=154504
+
+        Reviewed by Darin Adler.
+
+        Make HTMLSelectElement.size behave as per the specification:
+        - https://html.spec.whatwg.org/#htmlselectelement
+        - https://html.spec.whatwg.org/#dom-select-size
+        - https://html.spec.whatwg.org/#reflecting-content-attributes-in-idl-attributes:idl-unsigned-long
+
+        In particular, it should be unsigned and be in the range [0; 2147483647].
+
+        Also update several unsigned long attributes in our HTML implementation to use
+        parseHTMLNonNegativeInteger() to parse unsigned integers as per the HTML
+        specification, instead of calling String::toUint().
+
+        No new tests, already covered by existing tests.
+
+        * html/HTMLInputElement.cpp:
+        (WebCore::HTMLInputElement::parseAttribute):
+        (WebCore::HTMLInputElement::size):
+        (WebCore::HTMLInputElement::setSize):
+        * html/HTMLInputElement.h:
+        * html/HTMLSelectElement.cpp:
+        (WebCore::HTMLSelectElement::parseAttribute):
+        (WebCore::HTMLSelectElement::setSize):
+        (WebCore::HTMLSelectElement::namedItem): Deleted.
+        (WebCore::HTMLSelectElement::item): Deleted.
+        * html/HTMLSelectElement.h:
+        (WebCore::HTMLSelectElement::size):
+        * html/HTMLSelectElement.idl:
+        * html/HTMLTableColElement.cpp:
+        (WebCore::HTMLTableColElement::parseAttribute):
+        (WebCore::HTMLTableColElement::setSpan):
+        * html/HTMLTextAreaElement.cpp:
+        (WebCore::HTMLTextAreaElement::parseAttribute):
+        (WebCore::HTMLTextAreaElement::setCols):
+        (WebCore::HTMLTextAreaElement::setRows):
+        * html/parser/HTMLParserIdioms.h:
+        (WebCore::limitToOnlyHTMLNonNegativeNumbersGreaterThanZero):
+        (WebCore::limitToOnlyHTMLNonNegative):
+
 2016-02-21  Daniel Bates  <dabates@apple.com>
 
         CSP: Enable form-action directive by default
index fd5cefd..b246285 100644 (file)
@@ -684,8 +684,8 @@ void HTMLInputElement::parseAttribute(const QualifiedName& name, const AtomicStr
     } else if (name == maxlengthAttr)
         parseMaxLengthAttribute(value);
     else if (name == sizeAttr) {
-        int oldSize = m_size;
-        m_size = limitToOnlyNonNegativeNumbersGreaterThanZero(value.string().toUInt(), defaultSize);
+        unsigned oldSize = m_size;
+        m_size = limitToOnlyHTMLNonNegativeNumbersGreaterThanZero(value, defaultSize);
         if (m_size != oldSize && renderer())
             renderer()->setNeedsLayoutAndPrefWidthsRecalc();
     } else if (name == altAttr)
@@ -896,7 +896,7 @@ void HTMLInputElement::setIndeterminate(bool newValue)
         renderer()->theme().stateChanged(*renderer(), ControlStates::CheckedState);
 }
 
-int HTMLInputElement::size() const
+unsigned HTMLInputElement::size() const
 {
     return m_size;
 }
@@ -1274,7 +1274,7 @@ bool HTMLInputElement::multiple() const
 
 void HTMLInputElement::setSize(unsigned size)
 {
-    setUnsignedIntegralAttribute(sizeAttr, limitToOnlyNonNegativeNumbersGreaterThanZero(size, defaultSize));
+    setUnsignedIntegralAttribute(sizeAttr, limitToOnlyHTMLNonNegativeNumbersGreaterThanZero(size, defaultSize));
 }
 
 void HTMLInputElement::setSize(unsigned size, ExceptionCode& ec)
index 747fe10..d1d0d57 100644 (file)
@@ -161,7 +161,7 @@ public:
     bool shouldAppearChecked() const;
     virtual bool shouldAppearIndeterminate() const override final;
 
-    int size() const;
+    unsigned size() const;
     bool sizeShouldIncludeDecoration(int& preferredSize) const;
     float decorationWidth() const;
 
@@ -421,7 +421,7 @@ private:
 
     AtomicString m_name;
     String m_valueIfDirty;
-    int m_size;
+    unsigned m_size;
     int m_maxLength;
     short m_maxResults;
     bool m_isChecked : 1;
index aeded12..a9581f6 100644 (file)
@@ -44,6 +44,7 @@
 #include "HTMLOptGroupElement.h"
 #include "HTMLOptionElement.h"
 #include "HTMLOptionsCollection.h"
+#include "HTMLParserIdioms.h"
 #include "KeyboardEvent.h"
 #include "LocalizedStrings.h"
 #include "MouseEvent.h"
@@ -302,17 +303,8 @@ bool HTMLSelectElement::isPresentationAttribute(const QualifiedName& name) const
 void HTMLSelectElement::parseAttribute(const QualifiedName& name, const AtomicString& value)
 {
     if (name == sizeAttr) {
-        int oldSize = m_size;
-        // Set the attribute value to a number.
-        // This is important since the style rules for this attribute can determine the appearance property.
-        int size = value.toInt();
-        AtomicString attrSize = AtomicString::number(size);
-        if (attrSize != value) {
-            // FIXME: This is horribly factored.
-            if (Attribute* sizeAttribute = ensureUniqueElementData().findAttributeByName(sizeAttr))
-                sizeAttribute->setValue(attrSize);
-        }
-        size = std::max(size, 0);
+        unsigned oldSize = m_size;
+        unsigned size = limitToOnlyHTMLNonNegative(value);
 
         // Ensure that we've determined selectedness of the items at least once prior to changing the size.
         if (oldSize != size)
@@ -428,9 +420,9 @@ void HTMLSelectElement::setMultiple(bool multiple)
         setSelectedIndex(oldSelectedIndex);
 }
 
-void HTMLSelectElement::setSize(int size)
+void HTMLSelectElement::setSize(unsigned size)
 {
-    setIntegralAttribute(sizeAttr, size);
+    setUnsignedIntegralAttribute(sizeAttr, limitToOnlyHTMLNonNegative(size));
 }
 
 HTMLOptionElement* HTMLSelectElement::namedItem(const AtomicString& name)
index 76fc1d0..10aaf98 100644 (file)
@@ -51,7 +51,7 @@ public:
 
     unsigned length() const;
 
-    int size() const { return m_size; }
+    unsigned size() const { return m_size; }
     bool multiple() const { return m_multiple; }
 
     bool usesMenuList() const;
@@ -83,7 +83,7 @@ public:
 
     void setMultiple(bool);
 
-    void setSize(int);
+    void setSize(unsigned);
 
     void setOption(unsigned index, HTMLOptionElement*, ExceptionCode&);
     void setLength(unsigned, ExceptionCode&);
@@ -204,7 +204,7 @@ private:
     Vector<bool> m_lastOnChangeSelection;
     Vector<bool> m_cachedStateForActiveSelection;
     TypeAhead m_typeAhead;
-    int m_size;
+    unsigned m_size;
     int m_lastOnChangeIndex;
     int m_activeSelectionAnchorIndex;
     int m_activeSelectionEndIndex;
index 9956c89..9f419b2 100644 (file)
     attribute boolean multiple;
     [Reflect] attribute DOMString name;
     [Reflect] attribute boolean required;
+
+#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C || defined(LANGUAGE_GOBJECT) && LANGUAGE_GOBJECT
     attribute long size;
+#else
+    attribute unsigned long size;
+#endif
 
     readonly attribute DOMString type;
 
index e84ad58..dbf3562 100644 (file)
@@ -65,7 +65,7 @@ void HTMLTableColElement::collectStyleForPresentationAttribute(const QualifiedNa
 void HTMLTableColElement::parseAttribute(const QualifiedName& name, const AtomicString& value)
 {
     if (name == spanAttr) {
-        m_span = limitToOnlyNonNegativeNumbersGreaterThanZero(value.string().toUInt());
+        m_span = limitToOnlyHTMLNonNegativeNumbersGreaterThanZero(value);
         if (is<RenderTableCol>(renderer()))
             downcast<RenderTableCol>(*renderer()).updateFromElement();
     } else if (name == widthAttr) {
@@ -92,7 +92,7 @@ const StyleProperties* HTMLTableColElement::additionalPresentationAttributeStyle
 
 void HTMLTableColElement::setSpan(unsigned n)
 {
-    setUnsignedIntegralAttribute(spanAttr, limitToOnlyNonNegativeNumbersGreaterThanZero(n));
+    setUnsignedIntegralAttribute(spanAttr, limitToOnlyHTMLNonNegativeNumbersGreaterThanZero(n));
 }
 
 String HTMLTableColElement::width() const
index 8387474..d3afd15 100644 (file)
@@ -170,14 +170,14 @@ void HTMLTextAreaElement::collectStyleForPresentationAttribute(const QualifiedNa
 void HTMLTextAreaElement::parseAttribute(const QualifiedName& name, const AtomicString& value)
 {
     if (name == rowsAttr) {
-        unsigned rows = limitToOnlyNonNegativeNumbersGreaterThanZero(value.string().toUInt(), defaultRows);
+        unsigned rows = limitToOnlyHTMLNonNegativeNumbersGreaterThanZero(value, defaultRows);
         if (m_rows != rows) {
             m_rows = rows;
             if (renderer())
                 renderer()->setNeedsLayoutAndPrefWidthsRecalc();
         }
     } else if (name == colsAttr) {
-        unsigned cols = limitToOnlyNonNegativeNumbersGreaterThanZero(value.string().toUInt(), defaultCols);
+        unsigned cols = limitToOnlyHTMLNonNegativeNumbersGreaterThanZero(value, defaultCols);
         if (m_cols != cols) {
             m_cols = cols;
             if (renderer())
@@ -491,12 +491,12 @@ void HTMLTextAreaElement::accessKeyAction(bool)
 
 void HTMLTextAreaElement::setCols(unsigned cols)
 {
-    setUnsignedIntegralAttribute(colsAttr, limitToOnlyNonNegativeNumbersGreaterThanZero(cols, defaultCols));
+    setUnsignedIntegralAttribute(colsAttr, limitToOnlyHTMLNonNegativeNumbersGreaterThanZero(cols, defaultCols));
 }
 
 void HTMLTextAreaElement::setRows(unsigned rows)
 {
-    setUnsignedIntegralAttribute(rowsAttr, limitToOnlyNonNegativeNumbersGreaterThanZero(rows, defaultRows));
+    setUnsignedIntegralAttribute(rowsAttr, limitToOnlyHTMLNonNegativeNumbersGreaterThanZero(rows, defaultRows));
 }
 
 bool HTMLTextAreaElement::shouldUseInputMethod()
index b51574a..04d7885 100644 (file)
@@ -107,11 +107,31 @@ inline bool isHTMLSpaceButNotLineBreak(UChar character)
 }
 
 // https://html.spec.whatwg.org/multipage/infrastructure.html#limited-to-only-non-negative-numbers-greater-than-zero
-inline unsigned limitToOnlyNonNegativeNumbersGreaterThanZero(unsigned value, unsigned defaultValue = 1)
+inline unsigned limitToOnlyHTMLNonNegativeNumbersGreaterThanZero(unsigned value, unsigned defaultValue = 1)
 {
     return (value > 0 && value <= 2147483647) ? value : defaultValue;
 }
 
+inline unsigned limitToOnlyHTMLNonNegativeNumbersGreaterThanZero(const String& stringValue, unsigned defaultValue = 1)
+{
+    unsigned value = defaultValue;
+    parseHTMLNonNegativeInteger(stringValue, value);
+    return limitToOnlyHTMLNonNegativeNumbersGreaterThanZero(value, defaultValue);
+}
+
+// https://html.spec.whatwg.org/#reflecting-content-attributes-in-idl-attributes:idl-unsigned-long
+inline unsigned limitToOnlyHTMLNonNegative(unsigned value, unsigned defaultValue = 0)
+{
+    return value <= 2147483647 ? value : defaultValue;
+}
+
+inline unsigned limitToOnlyHTMLNonNegative(const String& stringValue, unsigned defaultValue = 0)
+{
+    unsigned value = defaultValue;
+    parseHTMLNonNegativeInteger(stringValue, value);
+    return limitToOnlyHTMLNonNegative(value, defaultValue);
+}
+
 }
 
 #endif