diff --git a/components/layout/construct.rs b/components/layout/construct.rs index 95c2919b764..21a24af7efb 100644 --- a/components/layout/construct.rs +++ b/components/layout/construct.rs @@ -49,6 +49,7 @@ use script::dom::element::{HTMLObjectElementTypeId, HTMLInputElementTypeId}; use script::dom::element::{HTMLTableColElementTypeId, HTMLTableDataCellElementTypeId}; use script::dom::element::{HTMLTableElementTypeId, HTMLTableHeaderCellElementTypeId}; use script::dom::element::{HTMLTableRowElementTypeId, HTMLTableSectionElementTypeId}; +use script::dom::element::HTMLTextAreaElementTypeId; use script::dom::node::{CommentNodeTypeId, DoctypeNodeTypeId, DocumentFragmentNodeTypeId}; use script::dom::node::{DocumentNodeTypeId, ElementNodeTypeId, ProcessingInstructionNodeTypeId}; use script::dom::node::{TextNodeTypeId}; @@ -487,7 +488,16 @@ impl<'a> FlowConstructor<'a> { // Special case: If this is generated content, then we need to initialize the accumulator // with the fragment corresponding to that content. if node.get_pseudo_element_type() != Normal || - node.type_id() == Some(ElementNodeTypeId(HTMLInputElementTypeId)) { + node.type_id() == Some(ElementNodeTypeId(HTMLInputElementTypeId)) || + node.type_id() == Some(ElementNodeTypeId(HTMLTextAreaElementTypeId)) { + // A TextArea's text contents are displayed through the input text + // box, so don't construct them. + // TODO Maybe this belongs somewhere else? + if node.type_id() == Some(ElementNodeTypeId(HTMLTextAreaElementTypeId)) { + for kid in node.children() { + kid.set_flow_construction_result(NoConstructionResult) + } + } let fragment_info = UnscannedTextFragment(UnscannedTextFragmentInfo::new(node)); let fragment = Fragment::new_from_specific_info(node, fragment_info); inline_fragment_accumulator.fragments.push_back(fragment); diff --git a/components/layout/lib.rs b/components/layout/lib.rs index 6489f6fe307..2d045508088 100644 --- a/components/layout/lib.rs +++ b/components/layout/lib.rs @@ -5,7 +5,7 @@ #![comment = "The Servo Parallel Browser Project"] #![license = "MPL"] -#![feature(globs, macro_rules, phase, thread_local, unsafe_destructor)] +#![feature(globs, macro_rules, phase, thread_local, unsafe_destructor, if_let)] #![deny(unused_imports)] #![deny(unused_variables)] diff --git a/components/layout/wrapper.rs b/components/layout/wrapper.rs index 11ef5b66822..14c18bf1e17 100644 --- a/components/layout/wrapper.rs +++ b/components/layout/wrapper.rs @@ -39,13 +39,14 @@ use util::{PrivateLayoutData}; use gfx::display_list::OpaqueNode; use script::dom::bindings::codegen::InheritTypes::{ElementCast, HTMLIFrameElementCast}; use script::dom::bindings::codegen::InheritTypes::{HTMLImageElementCast, HTMLInputElementCast}; -use script::dom::bindings::codegen::InheritTypes::{NodeCast, TextCast}; +use script::dom::bindings::codegen::InheritTypes::{HTMLTextAreaElementCast, NodeCast, TextCast}; use script::dom::bindings::js::JS; use script::dom::element::{Element, HTMLAreaElementTypeId, HTMLAnchorElementTypeId}; use script::dom::element::{HTMLLinkElementTypeId, LayoutElementHelpers, RawLayoutElementHelpers}; use script::dom::htmliframeelement::HTMLIFrameElement; use script::dom::htmlimageelement::LayoutHTMLImageElementHelpers; use script::dom::htmlinputelement::LayoutHTMLInputElementHelpers; +use script::dom::htmltextareaelement::LayoutHTMLTextAreaElementHelpers; use script::dom::node::{DocumentNodeTypeId, ElementNodeTypeId, Node, NodeTypeId}; use script::dom::node::{LayoutNodeHelpers, RawLayoutNodeHelpers, SharedLayoutData}; use script::dom::node::{HAS_CHANGED, IS_DIRTY, HAS_DIRTY_SIBLINGS, HAS_DIRTY_DESCENDANTS}; @@ -183,13 +184,14 @@ impl<'ln> TLayoutNode for LayoutNode<'ln> { fn text(&self) -> String { unsafe { - let text_opt: Option> = TextCast::to_js(self.get_jsmanaged()); - match text_opt { - Some(text) => (*text.unsafe_get()).characterdata().data_for_layout().to_string(), - None => match HTMLInputElementCast::to_js(self.get_jsmanaged()) { - Some(input) => input.get_value_for_layout(), - None => panic!("not text!") - } + if let Some(text) = TextCast::to_js(self.get_jsmanaged()) { + (*text.unsafe_get()).characterdata().data_for_layout().to_string() + } else if let Some(input) = HTMLInputElementCast::to_js(self.get_jsmanaged()) { + input.get_value_for_layout() + } else if let Some(area) = HTMLTextAreaElementCast::to_js(self.get_jsmanaged()) { + area.get_value_for_layout() + } else { + panic!("not text!") } } } diff --git a/components/script/dom/htmltextareaelement.rs b/components/script/dom/htmltextareaelement.rs index 80aad8c136c..c169a169cf9 100644 --- a/components/script/dom/htmltextareaelement.rs +++ b/components/script/dom/htmltextareaelement.rs @@ -2,27 +2,40 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -use dom::attr::Attr; +use dom::attr::{Attr, AttrValue}; use dom::attr::AttrHelpers; +use dom::bindings::cell::DOMRefCell; +use dom::bindings::codegen::Bindings::EventBinding::EventMethods; use dom::bindings::codegen::Bindings::HTMLTextAreaElementBinding; use dom::bindings::codegen::Bindings::HTMLTextAreaElementBinding::HTMLTextAreaElementMethods; -use dom::bindings::codegen::InheritTypes::{HTMLElementCast, NodeCast}; +use dom::bindings::codegen::Bindings::NodeBinding::NodeMethods; +use dom::bindings::codegen::InheritTypes::{ElementCast, HTMLElementCast, NodeCast}; use dom::bindings::codegen::InheritTypes::{HTMLTextAreaElementDerived, HTMLFieldSetElementDerived}; -use dom::bindings::js::{JSRef, Temporary}; +use dom::bindings::codegen::InheritTypes::{KeyboardEventCast, TextDerived}; +use dom::bindings::js::{JS, JSRef, Temporary}; use dom::bindings::utils::{Reflectable, Reflector}; -use dom::document::Document; +use dom::document::{Document, DocumentHelpers}; use dom::element::{AttributeHandlers, HTMLTextAreaElementTypeId}; +use dom::event::Event; use dom::eventtarget::{EventTarget, NodeTargetTypeId}; use dom::htmlelement::HTMLElement; -use dom::node::{DisabledStateHelpers, Node, NodeHelpers, ElementNodeTypeId}; +use dom::keyboardevent::KeyboardEvent; +use dom::node::{DisabledStateHelpers, Node, NodeHelpers, ElementNodeTypeId, document_from_node}; +use textinput::{Multiple, TextInput, TriggerDefaultAction, DispatchInput, Nothing}; use dom::virtualmethods::VirtualMethods; use servo_util::str::DOMString; use string_cache::Atom; +use std::cell::Cell; + #[dom_struct] pub struct HTMLTextAreaElement { htmlelement: HTMLElement, + textinput: DOMRefCell, + + // https://html.spec.whatwg.org/multipage/forms.html#concept-textarea-dirty + value_changed: Cell, } impl HTMLTextAreaElementDerived for EventTarget { @@ -31,10 +44,26 @@ impl HTMLTextAreaElementDerived for EventTarget { } } +pub trait LayoutHTMLTextAreaElementHelpers { + unsafe fn get_value_for_layout(self) -> String; +} + +impl LayoutHTMLTextAreaElementHelpers for JS { + #[allow(unrooted_must_root)] + unsafe fn get_value_for_layout(self) -> String { + (*self.unsafe_get()).textinput.borrow_for_layout().get_content() + } +} + +static DEFAULT_COLS: u32 = 20; +static DEFAULT_ROWS: u32 = 2; + impl HTMLTextAreaElement { fn new_inherited(localName: DOMString, prefix: Option, document: JSRef) -> HTMLTextAreaElement { HTMLTextAreaElement { - htmlelement: HTMLElement::new_inherited(HTMLTextAreaElementTypeId, localName, prefix, document) + htmlelement: HTMLElement::new_inherited(HTMLTextAreaElementTypeId, localName, prefix, document), + textinput: DOMRefCell::new(TextInput::new(Multiple, "".to_string())), + value_changed: Cell::new(false), } } @@ -46,16 +75,96 @@ impl HTMLTextAreaElement { } impl<'a> HTMLTextAreaElementMethods for JSRef<'a, HTMLTextAreaElement> { + // TODO A few of these attributes have default values and additional + // constraints + + // https://html.spec.whatwg.org/multipage/forms.html#dom-textarea-cols + make_uint_getter!(Cols) + + // https://html.spec.whatwg.org/multipage/forms.html#dom-textarea-cols + make_uint_setter!(SetCols, "cols") + // http://www.whatwg.org/html/#dom-fe-disabled make_bool_getter!(Disabled) // http://www.whatwg.org/html/#dom-fe-disabled make_bool_setter!(SetDisabled, "disabled") + // https://html.spec.whatwg.org/multipage/forms.html#attr-fe-name + make_getter!(Name) + + // https://html.spec.whatwg.org/multipage/forms.html#attr-fe-name + make_setter!(SetName, "name") + + // https://html.spec.whatwg.org/multipage/forms.html#dom-textarea-placeholder + make_getter!(Placeholder) + + // https://html.spec.whatwg.org/multipage/forms.html#dom-textarea-placeholder + make_setter!(SetPlaceholder, "placeholder") + + // https://html.spec.whatwg.org/multipage/forms.html#dom-textarea-required + make_bool_getter!(Required) + + // https://html.spec.whatwg.org/multipage/forms.html#dom-textarea-required + make_bool_setter!(SetRequired, "required") + + // https://html.spec.whatwg.org/multipage/forms.html#dom-textarea-rows + make_uint_getter!(Rows) + + // https://html.spec.whatwg.org/multipage/forms.html#dom-textarea-rows + make_uint_setter!(SetRows, "rows") + + // https://html.spec.whatwg.org/multipage/forms.html#dom-textarea-wrap + make_getter!(Wrap) + + // https://html.spec.whatwg.org/multipage/forms.html#dom-textarea-wrap + make_setter!(SetWrap, "wrap") + // https://html.spec.whatwg.org/multipage/forms.html#dom-textarea-type fn Type(self) -> DOMString { "textarea".to_string() } + + // https://html.spec.whatwg.org/multipage/forms.html#dom-textarea-defaultvalue + fn DefaultValue(self) -> DOMString { + let node: JSRef = NodeCast::from_ref(self); + node.GetTextContent().unwrap() + } + + // https://html.spec.whatwg.org/multipage/forms.html#dom-textarea-defaultvalue + fn SetDefaultValue(self, value: DOMString) { + let node: JSRef = NodeCast::from_ref(self); + node.SetTextContent(Some(value)); + + // if the element's dirty value flag is false, then the element's + // raw value must be set to the value of the element's textContent IDL attribute + if !self.value_changed.get() { + self.SetValue(node.GetTextContent().unwrap()); + } + } + + // https://html.spec.whatwg.org/multipage/forms.html#dom-textarea-value + fn Value(self) -> DOMString { + self.textinput.borrow().get_content() + } + + // https://html.spec.whatwg.org/multipage/forms.html#dom-textarea-value + fn SetValue(self, value: DOMString) { + self.textinput.borrow_mut().set_content(value); + self.force_relayout(); + } +} + +trait PrivateHTMLTextAreaElementHelpers { + fn force_relayout(self); +} + +impl<'a> PrivateHTMLTextAreaElementHelpers for JSRef<'a, HTMLTextAreaElement> { + fn force_relayout(self) { + let doc = document_from_node(self).root(); + let node: JSRef = NodeCast::from_ref(self); + doc.content_changed(node) + } } impl<'a> VirtualMethods for JSRef<'a, HTMLTextAreaElement> { @@ -107,6 +216,14 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLTextAreaElement> { node.check_ancestors_disabled_state_for_form_control(); } + fn parse_plain_attribute(&self, name: &Atom, value: DOMString) -> AttrValue { + match name { + &atom!("cols") => AttrValue::from_u32(value, DEFAULT_COLS), + &atom!("rows") => AttrValue::from_u32(value, DEFAULT_ROWS), + _ => self.super_type().unwrap().parse_plain_attribute(name, value), + } + } + fn unbind_from_tree(&self, tree_in_doc: bool) { match self.super_type() { Some(ref s) => s.unbind_from_tree(tree_in_doc), @@ -120,6 +237,48 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLTextAreaElement> { node.check_disabled_attribute(); } } + + fn child_inserted(&self, child: JSRef) { + match self.super_type() { + Some(s) => { + s.child_inserted(child); + } + _ => (), + } + + if child.is_text() { + self.SetValue(self.DefaultValue()); + } + } + + // copied and modified from htmlinputelement.rs + fn handle_event(&self, event: JSRef) { + match self.super_type() { + Some(s) => { + s.handle_event(event); + } + _ => (), + } + + if "click" == event.Type().as_slice() && !event.DefaultPrevented() { + //TODO: set the editing position for text inputs + + let doc = document_from_node(*self).root(); + doc.request_focus(ElementCast::from_ref(*self)); + } else if "keydown" == event.Type().as_slice() && !event.DefaultPrevented() { + let keyevent: Option> = KeyboardEventCast::to_ref(event); + keyevent.map(|event| { + match self.textinput.borrow_mut().handle_keydown(event) { + TriggerDefaultAction => (), + DispatchInput => { + self.force_relayout(); + self.value_changed.set(true); + } + Nothing => (), + } + }); + } + } } impl Reflectable for HTMLTextAreaElement { diff --git a/components/script/dom/webidls/HTMLTextAreaElement.webidl b/components/script/dom/webidls/HTMLTextAreaElement.webidl index f3fb5b3cf40..59d10658b14 100644 --- a/components/script/dom/webidls/HTMLTextAreaElement.webidl +++ b/components/script/dom/webidls/HTMLTextAreaElement.webidl @@ -7,23 +7,23 @@ interface HTMLTextAreaElement : HTMLElement { // attribute DOMString autocomplete; // attribute boolean autofocus; - // attribute unsigned long cols; + attribute unsigned long cols; // attribute DOMString dirName; attribute boolean disabled; //readonly attribute HTMLFormElement? form; // attribute DOMString inputMode; // attribute long maxLength; // attribute long minLength; - // attribute DOMString name; - // attribute DOMString placeholder; + attribute DOMString name; + attribute DOMString placeholder; // attribute boolean readOnly; - // attribute boolean required; - // attribute unsigned long rows; - // attribute DOMString wrap; + attribute boolean required; + attribute unsigned long rows; + attribute DOMString wrap; readonly attribute DOMString type; - // attribute DOMString defaultValue; - //[TreatNullAs=EmptyString] attribute DOMString value; + attribute DOMString defaultValue; + [TreatNullAs=EmptyString] attribute DOMString value; //readonly attribute unsigned long textLength; //readonly attribute boolean willValidate; diff --git a/resources/servo.css b/resources/servo.css index cf81713a015..1fa54c8b816 100644 --- a/resources/servo.css +++ b/resources/servo.css @@ -1,5 +1,6 @@ -input, select { display: inline-block; } +input, textarea, select { display: inline-block; } input { background: white; min-height: 1.0em; padding: 0em; padding-left: 0.25em; padding-right: 0.25em; border: solid lightgrey 1px; color: black; white-space: nowrap; } +textarea { background: white; min-height: 1.0em; padding: 0em; padding-left: 0.25em; padding-right: 0.25em; border: solid lightgrey 1px; color: black; white-space: pre; } input[type="button"], input[type="submit"], input[type="reset"] { background: lightgrey; border-top: solid 1px #EEEEEE; border-left: solid 1px #CCCCCC; border-right: solid 1px #999999; border-bottom: solid 1px #999999; text-align: center; vertical-align: middle; color: black; width: 100%; } diff --git a/tests/html/textarea.html b/tests/html/textarea.html new file mode 100644 index 00000000000..b499465dff6 --- /dev/null +++ b/tests/html/textarea.html @@ -0,0 +1,6 @@ + + + + + diff --git a/tests/wpt/metadata/html/dom/interfaces.html.ini b/tests/wpt/metadata/html/dom/interfaces.html.ini index a9e0d52f1cf..40fc05cdb10 100644 --- a/tests/wpt/metadata/html/dom/interfaces.html.ini +++ b/tests/wpt/metadata/html/dom/interfaces.html.ini @@ -5370,9 +5370,6 @@ [HTMLTextAreaElement interface: attribute autofocus] expected: FAIL - [HTMLTextAreaElement interface: attribute cols] - expected: FAIL - [HTMLTextAreaElement interface: attribute dirName] expected: FAIL @@ -5388,30 +5385,9 @@ [HTMLTextAreaElement interface: attribute minLength] expected: FAIL - [HTMLTextAreaElement interface: attribute name] - expected: FAIL - - [HTMLTextAreaElement interface: attribute placeholder] - expected: FAIL - [HTMLTextAreaElement interface: attribute readOnly] expected: FAIL - [HTMLTextAreaElement interface: attribute required] - expected: FAIL - - [HTMLTextAreaElement interface: attribute rows] - expected: FAIL - - [HTMLTextAreaElement interface: attribute wrap] - expected: FAIL - - [HTMLTextAreaElement interface: attribute defaultValue] - expected: FAIL - - [HTMLTextAreaElement interface: attribute value] - expected: FAIL - [HTMLTextAreaElement interface: attribute textLength] expected: FAIL @@ -5463,9 +5439,6 @@ [HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "autofocus" with the proper type (1)] expected: FAIL - [HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "cols" with the proper type (2)] - expected: FAIL - [HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "dirName" with the proper type (3)] expected: FAIL @@ -5481,30 +5454,9 @@ [HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "minLength" with the proper type (8)] expected: FAIL - [HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "name" with the proper type (9)] - expected: FAIL - - [HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "placeholder" with the proper type (10)] - expected: FAIL - [HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "readOnly" with the proper type (11)] expected: FAIL - [HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "required" with the proper type (12)] - expected: FAIL - - [HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "rows" with the proper type (13)] - expected: FAIL - - [HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "wrap" with the proper type (14)] - expected: FAIL - - [HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "defaultValue" with the proper type (16)] - expected: FAIL - - [HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "value" with the proper type (17)] - expected: FAIL - [HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "textLength" with the proper type (18)] expected: FAIL diff --git a/tests/wpt/metadata/html/dom/reflection-forms.html.ini b/tests/wpt/metadata/html/dom/reflection-forms.html.ini index b9e9561ade5..2569e501673 100644 --- a/tests/wpt/metadata/html/dom/reflection-forms.html.ini +++ b/tests/wpt/metadata/html/dom/reflection-forms.html.ini @@ -13401,165 +13401,39 @@ [textarea.autofocus: IDL set to object "test-valueOf" followed by IDL get] expected: FAIL - [textarea.cols: typeof IDL attribute] - expected: FAIL - [textarea.cols: IDL get with DOM attribute unset] expected: FAIL - [textarea.cols: setAttribute() to -2147483649 followed by IDL get] - expected: FAIL - - [textarea.cols: setAttribute() to -2147483648 followed by IDL get] - expected: FAIL - - [textarea.cols: setAttribute() to -36 followed by IDL get] - expected: FAIL - - [textarea.cols: setAttribute() to -1 followed by IDL get] - expected: FAIL - [textarea.cols: setAttribute() to 0 followed by IDL get] expected: FAIL - [textarea.cols: setAttribute() to 1 followed by IDL get] - expected: FAIL - - [textarea.cols: setAttribute() to 2147483647 followed by IDL get] - expected: FAIL - [textarea.cols: setAttribute() to 2147483648 followed by IDL get] expected: FAIL [textarea.cols: setAttribute() to 4294967295 followed by IDL get] expected: FAIL - [textarea.cols: setAttribute() to 4294967296 followed by IDL get] - expected: FAIL - - [textarea.cols: setAttribute() to "" followed by IDL get] - expected: FAIL - - [textarea.cols: setAttribute() to "-1" followed by IDL get] - expected: FAIL - - [textarea.cols: setAttribute() to "-0" followed by IDL get] - expected: FAIL - [textarea.cols: setAttribute() to "0" followed by IDL get] expected: FAIL - [textarea.cols: setAttribute() to "1" followed by IDL get] - expected: FAIL - [textarea.cols: setAttribute() to "\\t7" followed by IDL get] expected: FAIL - [textarea.cols: setAttribute() to "\\v7" followed by IDL get] - expected: FAIL - [textarea.cols: setAttribute() to "\\f7" followed by IDL get] expected: FAIL [textarea.cols: setAttribute() to " 7" followed by IDL get] expected: FAIL - [textarea.cols: setAttribute() to "\xc2\xa07" followed by IDL get] - expected: FAIL - - [textarea.cols: setAttribute() to "\xef\xbb\xbf7" followed by IDL get] - expected: FAIL - [textarea.cols: setAttribute() to "\\n7" followed by IDL get] expected: FAIL [textarea.cols: setAttribute() to "\\r7" followed by IDL get] expected: FAIL - [textarea.cols: setAttribute() to "\xe2\x80\xa87" followed by IDL get] - expected: FAIL - - [textarea.cols: setAttribute() to "\xe2\x80\xa97" followed by IDL get] - expected: FAIL - - [textarea.cols: setAttribute() to "\xe1\x9a\x807" followed by IDL get] - expected: FAIL - - [textarea.cols: setAttribute() to "\xe1\xa0\x8e7" followed by IDL get] - expected: FAIL - - [textarea.cols: setAttribute() to "\xe2\x80\x807" followed by IDL get] - expected: FAIL - - [textarea.cols: setAttribute() to "\xe2\x80\x817" followed by IDL get] - expected: FAIL - - [textarea.cols: setAttribute() to "\xe2\x80\x827" followed by IDL get] - expected: FAIL - - [textarea.cols: setAttribute() to "\xe2\x80\x837" followed by IDL get] - expected: FAIL - - [textarea.cols: setAttribute() to "\xe2\x80\x847" followed by IDL get] - expected: FAIL - - [textarea.cols: setAttribute() to "\xe2\x80\x857" followed by IDL get] - expected: FAIL - - [textarea.cols: setAttribute() to "\xe2\x80\x867" followed by IDL get] - expected: FAIL - - [textarea.cols: setAttribute() to "\xe2\x80\x877" followed by IDL get] - expected: FAIL - - [textarea.cols: setAttribute() to "\xe2\x80\x887" followed by IDL get] - expected: FAIL - - [textarea.cols: setAttribute() to "\xe2\x80\x897" followed by IDL get] - expected: FAIL - - [textarea.cols: setAttribute() to "\xe2\x80\x8a7" followed by IDL get] - expected: FAIL - - [textarea.cols: setAttribute() to "\xe2\x80\xaf7" followed by IDL get] - expected: FAIL - - [textarea.cols: setAttribute() to "\xe3\x80\x807" followed by IDL get] - expected: FAIL - - [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] - expected: FAIL - - [textarea.cols: setAttribute() to undefined followed by IDL get] - expected: FAIL - [textarea.cols: setAttribute() to 1.5 followed by IDL get] expected: FAIL - [textarea.cols: setAttribute() to true followed by IDL get] - expected: FAIL - - [textarea.cols: setAttribute() to false followed by IDL get] - expected: FAIL - - [textarea.cols: setAttribute() to object "[object Object\]" followed by IDL get] - expected: FAIL - - [textarea.cols: setAttribute() to NaN followed by IDL get] - expected: FAIL - - [textarea.cols: setAttribute() to Infinity followed by IDL get] - expected: FAIL - - [textarea.cols: setAttribute() to -Infinity followed by IDL get] - expected: FAIL - - [textarea.cols: setAttribute() to "\\0" followed by IDL get] - expected: FAIL - - [textarea.cols: setAttribute() to object "2" followed by IDL get] - expected: FAIL - [textarea.cols: setAttribute() to object "3" followed by getAttribute()] expected: FAIL @@ -13569,12 +13443,6 @@ [textarea.cols: IDL set to 0 must throw INDEX_SIZE_ERR] expected: FAIL - [textarea.cols: IDL set to 1 followed by getAttribute()] - expected: FAIL - - [textarea.cols: IDL set to 2147483647 followed by getAttribute()] - expected: FAIL - [textarea.dirName: typeof IDL attribute] expected: FAIL @@ -14484,264 +14352,6 @@ [textarea.maxLength: IDL set to 2147483647 followed by getAttribute()] expected: FAIL - [textarea.name: typeof IDL attribute] - expected: FAIL - - [textarea.name: IDL get with DOM attribute unset] - expected: FAIL - - [textarea.name: setAttribute() to "" followed by IDL get] - expected: FAIL - - [textarea.name: 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] - expected: FAIL - - [textarea.name: setAttribute() to undefined followed by IDL get] - expected: FAIL - - [textarea.name: setAttribute() to 7 followed by IDL get] - expected: FAIL - - [textarea.name: setAttribute() to 1.5 followed by IDL get] - expected: FAIL - - [textarea.name: setAttribute() to true followed by IDL get] - expected: FAIL - - [textarea.name: setAttribute() to false followed by IDL get] - expected: FAIL - - [textarea.name: setAttribute() to object "[object Object\]" followed by IDL get] - expected: FAIL - - [textarea.name: setAttribute() to NaN followed by IDL get] - expected: FAIL - - [textarea.name: setAttribute() to Infinity followed by IDL get] - expected: FAIL - - [textarea.name: setAttribute() to -Infinity followed by IDL get] - expected: FAIL - - [textarea.name: setAttribute() to "\\0" followed by IDL get] - expected: FAIL - - [textarea.name: setAttribute() to null followed by IDL get] - expected: FAIL - - [textarea.name: setAttribute() to object "test-toString" followed by IDL get] - expected: FAIL - - [textarea.name: setAttribute() to object "test-valueOf" followed by IDL get] - expected: FAIL - - [textarea.name: IDL set to "" followed by getAttribute()] - expected: FAIL - - [textarea.name: IDL set 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()] - expected: FAIL - - [textarea.name: IDL set to undefined followed by getAttribute()] - expected: FAIL - - [textarea.name: IDL set to undefined followed by IDL get] - expected: FAIL - - [textarea.name: IDL set to 7 followed by getAttribute()] - expected: FAIL - - [textarea.name: IDL set to 7 followed by IDL get] - expected: FAIL - - [textarea.name: IDL set to 1.5 followed by getAttribute()] - expected: FAIL - - [textarea.name: IDL set to 1.5 followed by IDL get] - expected: FAIL - - [textarea.name: IDL set to true followed by getAttribute()] - expected: FAIL - - [textarea.name: IDL set to true followed by IDL get] - expected: FAIL - - [textarea.name: IDL set to false followed by getAttribute()] - expected: FAIL - - [textarea.name: IDL set to false followed by IDL get] - expected: FAIL - - [textarea.name: IDL set to object "[object Object\]" followed by getAttribute()] - expected: FAIL - - [textarea.name: IDL set to object "[object Object\]" followed by IDL get] - expected: FAIL - - [textarea.name: IDL set to NaN followed by getAttribute()] - expected: FAIL - - [textarea.name: IDL set to NaN followed by IDL get] - expected: FAIL - - [textarea.name: IDL set to Infinity followed by getAttribute()] - expected: FAIL - - [textarea.name: IDL set to Infinity followed by IDL get] - expected: FAIL - - [textarea.name: IDL set to -Infinity followed by getAttribute()] - expected: FAIL - - [textarea.name: IDL set to -Infinity followed by IDL get] - expected: FAIL - - [textarea.name: IDL set to "\\0" followed by getAttribute()] - expected: FAIL - - [textarea.name: IDL set to null followed by getAttribute()] - expected: FAIL - - [textarea.name: IDL set to null followed by IDL get] - expected: FAIL - - [textarea.name: IDL set to object "test-toString" followed by getAttribute()] - expected: FAIL - - [textarea.name: IDL set to object "test-toString" followed by IDL get] - expected: FAIL - - [textarea.name: IDL set to object "test-valueOf" followed by IDL get] - expected: FAIL - - [textarea.placeholder: typeof IDL attribute] - expected: FAIL - - [textarea.placeholder: IDL get with DOM attribute unset] - expected: FAIL - - [textarea.placeholder: setAttribute() to "" followed by IDL get] - expected: FAIL - - [textarea.placeholder: 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] - expected: FAIL - - [textarea.placeholder: setAttribute() to undefined followed by IDL get] - expected: FAIL - - [textarea.placeholder: setAttribute() to 7 followed by IDL get] - expected: FAIL - - [textarea.placeholder: setAttribute() to 1.5 followed by IDL get] - expected: FAIL - - [textarea.placeholder: setAttribute() to true followed by IDL get] - expected: FAIL - - [textarea.placeholder: setAttribute() to false followed by IDL get] - expected: FAIL - - [textarea.placeholder: setAttribute() to object "[object Object\]" followed by IDL get] - expected: FAIL - - [textarea.placeholder: setAttribute() to NaN followed by IDL get] - expected: FAIL - - [textarea.placeholder: setAttribute() to Infinity followed by IDL get] - expected: FAIL - - [textarea.placeholder: setAttribute() to -Infinity followed by IDL get] - expected: FAIL - - [textarea.placeholder: setAttribute() to "\\0" followed by IDL get] - expected: FAIL - - [textarea.placeholder: setAttribute() to null followed by IDL get] - expected: FAIL - - [textarea.placeholder: setAttribute() to object "test-toString" followed by IDL get] - expected: FAIL - - [textarea.placeholder: setAttribute() to object "test-valueOf" followed by IDL get] - expected: FAIL - - [textarea.placeholder: IDL set to "" followed by getAttribute()] - expected: FAIL - - [textarea.placeholder: IDL set 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()] - expected: FAIL - - [textarea.placeholder: IDL set to undefined followed by getAttribute()] - expected: FAIL - - [textarea.placeholder: IDL set to undefined followed by IDL get] - expected: FAIL - - [textarea.placeholder: IDL set to 7 followed by getAttribute()] - expected: FAIL - - [textarea.placeholder: IDL set to 7 followed by IDL get] - expected: FAIL - - [textarea.placeholder: IDL set to 1.5 followed by getAttribute()] - expected: FAIL - - [textarea.placeholder: IDL set to 1.5 followed by IDL get] - expected: FAIL - - [textarea.placeholder: IDL set to true followed by getAttribute()] - expected: FAIL - - [textarea.placeholder: IDL set to true followed by IDL get] - expected: FAIL - - [textarea.placeholder: IDL set to false followed by getAttribute()] - expected: FAIL - - [textarea.placeholder: IDL set to false followed by IDL get] - expected: FAIL - - [textarea.placeholder: IDL set to object "[object Object\]" followed by getAttribute()] - expected: FAIL - - [textarea.placeholder: IDL set to object "[object Object\]" followed by IDL get] - expected: FAIL - - [textarea.placeholder: IDL set to NaN followed by getAttribute()] - expected: FAIL - - [textarea.placeholder: IDL set to NaN followed by IDL get] - expected: FAIL - - [textarea.placeholder: IDL set to Infinity followed by getAttribute()] - expected: FAIL - - [textarea.placeholder: IDL set to Infinity followed by IDL get] - expected: FAIL - - [textarea.placeholder: IDL set to -Infinity followed by getAttribute()] - expected: FAIL - - [textarea.placeholder: IDL set to -Infinity followed by IDL get] - expected: FAIL - - [textarea.placeholder: IDL set to "\\0" followed by getAttribute()] - expected: FAIL - - [textarea.placeholder: IDL set to null followed by getAttribute()] - expected: FAIL - - [textarea.placeholder: IDL set to null followed by IDL get] - expected: FAIL - - [textarea.placeholder: IDL set to object "test-toString" followed by getAttribute()] - expected: FAIL - - [textarea.placeholder: IDL set to object "test-toString" followed by IDL get] - expected: FAIL - - [textarea.placeholder: IDL set to object "test-valueOf" followed by IDL get] - expected: FAIL - [textarea.readOnly: typeof IDL attribute] expected: FAIL @@ -14850,273 +14460,39 @@ [textarea.readOnly: IDL set to object "test-valueOf" followed by IDL get] expected: FAIL - [textarea.required: typeof IDL attribute] - expected: FAIL - - [textarea.required: IDL get with DOM attribute unset] - expected: FAIL - - [textarea.required: setAttribute() to "" followed by IDL get] - expected: FAIL - - [textarea.required: setAttribute() to " foo " followed by IDL get] - expected: FAIL - - [textarea.required: setAttribute() to undefined followed by IDL get] - expected: FAIL - - [textarea.required: setAttribute() to null followed by IDL get] - expected: FAIL - - [textarea.required: setAttribute() to 7 followed by IDL get] - expected: FAIL - - [textarea.required: setAttribute() to 1.5 followed by IDL get] - expected: FAIL - - [textarea.required: setAttribute() to true followed by IDL get] - expected: FAIL - - [textarea.required: setAttribute() to false followed by IDL get] - expected: FAIL - - [textarea.required: setAttribute() to object "[object Object\]" followed by IDL get] - expected: FAIL - - [textarea.required: setAttribute() to NaN followed by IDL get] - expected: FAIL - - [textarea.required: setAttribute() to Infinity followed by IDL get] - expected: FAIL - - [textarea.required: setAttribute() to -Infinity followed by IDL get] - expected: FAIL - - [textarea.required: setAttribute() to "\\0" followed by IDL get] - expected: FAIL - - [textarea.required: setAttribute() to object "test-toString" followed by IDL get] - expected: FAIL - - [textarea.required: setAttribute() to object "test-valueOf" followed by IDL get] - expected: FAIL - - [textarea.required: setAttribute() to "required" followed by IDL get] - expected: FAIL - - [textarea.required: IDL set to "" followed by hasAttribute()] - expected: FAIL - - [textarea.required: IDL set to "" followed by IDL get] - expected: FAIL - - [textarea.required: IDL set to " foo " followed by IDL get] - expected: FAIL - - [textarea.required: IDL set to undefined followed by hasAttribute()] - expected: FAIL - - [textarea.required: IDL set to undefined followed by IDL get] - expected: FAIL - - [textarea.required: IDL set to null followed by hasAttribute()] - expected: FAIL - - [textarea.required: IDL set to null followed by IDL get] - expected: FAIL - - [textarea.required: IDL set to 7 followed by IDL get] - expected: FAIL - - [textarea.required: IDL set to 1.5 followed by IDL get] - expected: FAIL - - [textarea.required: IDL set to false followed by hasAttribute()] - expected: FAIL - - [textarea.required: IDL set to object "[object Object\]" followed by IDL get] - expected: FAIL - - [textarea.required: IDL set to NaN followed by hasAttribute()] - expected: FAIL - - [textarea.required: IDL set to NaN followed by IDL get] - expected: FAIL - - [textarea.required: IDL set to Infinity followed by IDL get] - expected: FAIL - - [textarea.required: IDL set to -Infinity followed by IDL get] - expected: FAIL - - [textarea.required: IDL set to "\\0" followed by IDL get] - expected: FAIL - - [textarea.required: IDL set to object "test-toString" followed by IDL get] - expected: FAIL - - [textarea.required: IDL set to object "test-valueOf" followed by IDL get] - expected: FAIL - - [textarea.rows: typeof IDL attribute] - expected: FAIL - [textarea.rows: IDL get with DOM attribute unset] expected: FAIL - [textarea.rows: setAttribute() to -2147483649 followed by IDL get] - expected: FAIL - - [textarea.rows: setAttribute() to -2147483648 followed by IDL get] - expected: FAIL - - [textarea.rows: setAttribute() to -36 followed by IDL get] - expected: FAIL - - [textarea.rows: setAttribute() to -1 followed by IDL get] - expected: FAIL - [textarea.rows: setAttribute() to 0 followed by IDL get] expected: FAIL - [textarea.rows: setAttribute() to 1 followed by IDL get] - expected: FAIL - - [textarea.rows: setAttribute() to 2147483647 followed by IDL get] - expected: FAIL - [textarea.rows: setAttribute() to 2147483648 followed by IDL get] expected: FAIL [textarea.rows: setAttribute() to 4294967295 followed by IDL get] expected: FAIL - [textarea.rows: setAttribute() to 4294967296 followed by IDL get] - expected: FAIL - - [textarea.rows: setAttribute() to "" followed by IDL get] - expected: FAIL - - [textarea.rows: setAttribute() to "-1" followed by IDL get] - expected: FAIL - - [textarea.rows: setAttribute() to "-0" followed by IDL get] - expected: FAIL - [textarea.rows: setAttribute() to "0" followed by IDL get] expected: FAIL - [textarea.rows: setAttribute() to "1" followed by IDL get] - expected: FAIL - [textarea.rows: setAttribute() to "\\t7" followed by IDL get] expected: FAIL - [textarea.rows: setAttribute() to "\\v7" followed by IDL get] - expected: FAIL - [textarea.rows: setAttribute() to "\\f7" followed by IDL get] expected: FAIL [textarea.rows: setAttribute() to " 7" followed by IDL get] expected: FAIL - [textarea.rows: setAttribute() to "\xc2\xa07" followed by IDL get] - expected: FAIL - - [textarea.rows: setAttribute() to "\xef\xbb\xbf7" followed by IDL get] - expected: FAIL - [textarea.rows: setAttribute() to "\\n7" followed by IDL get] expected: FAIL [textarea.rows: setAttribute() to "\\r7" followed by IDL get] expected: FAIL - [textarea.rows: setAttribute() to "\xe2\x80\xa87" followed by IDL get] - expected: FAIL - - [textarea.rows: setAttribute() to "\xe2\x80\xa97" followed by IDL get] - expected: FAIL - - [textarea.rows: setAttribute() to "\xe1\x9a\x807" followed by IDL get] - expected: FAIL - - [textarea.rows: setAttribute() to "\xe1\xa0\x8e7" followed by IDL get] - expected: FAIL - - [textarea.rows: setAttribute() to "\xe2\x80\x807" followed by IDL get] - expected: FAIL - - [textarea.rows: setAttribute() to "\xe2\x80\x817" followed by IDL get] - expected: FAIL - - [textarea.rows: setAttribute() to "\xe2\x80\x827" followed by IDL get] - expected: FAIL - - [textarea.rows: setAttribute() to "\xe2\x80\x837" followed by IDL get] - expected: FAIL - - [textarea.rows: setAttribute() to "\xe2\x80\x847" followed by IDL get] - expected: FAIL - - [textarea.rows: setAttribute() to "\xe2\x80\x857" followed by IDL get] - expected: FAIL - - [textarea.rows: setAttribute() to "\xe2\x80\x867" followed by IDL get] - expected: FAIL - - [textarea.rows: setAttribute() to "\xe2\x80\x877" followed by IDL get] - expected: FAIL - - [textarea.rows: setAttribute() to "\xe2\x80\x887" followed by IDL get] - expected: FAIL - - [textarea.rows: setAttribute() to "\xe2\x80\x897" followed by IDL get] - expected: FAIL - - [textarea.rows: setAttribute() to "\xe2\x80\x8a7" followed by IDL get] - expected: FAIL - - [textarea.rows: setAttribute() to "\xe2\x80\xaf7" followed by IDL get] - expected: FAIL - - [textarea.rows: setAttribute() to "\xe3\x80\x807" followed by IDL get] - expected: FAIL - - [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] - expected: FAIL - - [textarea.rows: setAttribute() to undefined followed by IDL get] - expected: FAIL - [textarea.rows: setAttribute() to 1.5 followed by IDL get] expected: FAIL - [textarea.rows: setAttribute() to true followed by IDL get] - expected: FAIL - - [textarea.rows: setAttribute() to false followed by IDL get] - expected: FAIL - - [textarea.rows: setAttribute() to object "[object Object\]" followed by IDL get] - expected: FAIL - - [textarea.rows: setAttribute() to NaN followed by IDL get] - expected: FAIL - - [textarea.rows: setAttribute() to Infinity followed by IDL get] - expected: FAIL - - [textarea.rows: setAttribute() to -Infinity followed by IDL get] - expected: FAIL - - [textarea.rows: setAttribute() to "\\0" followed by IDL get] - expected: FAIL - - [textarea.rows: setAttribute() to object "2" followed by IDL get] - expected: FAIL - [textarea.rows: setAttribute() to object "3" followed by getAttribute()] expected: FAIL @@ -15126,141 +14502,6 @@ [textarea.rows: IDL set to 0 must throw INDEX_SIZE_ERR] expected: FAIL - [textarea.rows: IDL set to 1 followed by getAttribute()] - expected: FAIL - - [textarea.rows: IDL set to 2147483647 followed by getAttribute()] - expected: FAIL - - [textarea.wrap: typeof IDL attribute] - expected: FAIL - - [textarea.wrap: IDL get with DOM attribute unset] - expected: FAIL - - [textarea.wrap: setAttribute() to "" followed by IDL get] - expected: FAIL - - [textarea.wrap: 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] - expected: FAIL - - [textarea.wrap: setAttribute() to undefined followed by IDL get] - expected: FAIL - - [textarea.wrap: setAttribute() to 7 followed by IDL get] - expected: FAIL - - [textarea.wrap: setAttribute() to 1.5 followed by IDL get] - expected: FAIL - - [textarea.wrap: setAttribute() to true followed by IDL get] - expected: FAIL - - [textarea.wrap: setAttribute() to false followed by IDL get] - expected: FAIL - - [textarea.wrap: setAttribute() to object "[object Object\]" followed by IDL get] - expected: FAIL - - [textarea.wrap: setAttribute() to NaN followed by IDL get] - expected: FAIL - - [textarea.wrap: setAttribute() to Infinity followed by IDL get] - expected: FAIL - - [textarea.wrap: setAttribute() to -Infinity followed by IDL get] - expected: FAIL - - [textarea.wrap: setAttribute() to "\\0" followed by IDL get] - expected: FAIL - - [textarea.wrap: setAttribute() to null followed by IDL get] - expected: FAIL - - [textarea.wrap: setAttribute() to object "test-toString" followed by IDL get] - expected: FAIL - - [textarea.wrap: setAttribute() to object "test-valueOf" followed by IDL get] - expected: FAIL - - [textarea.wrap: IDL set to "" followed by getAttribute()] - expected: FAIL - - [textarea.wrap: IDL set 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()] - expected: FAIL - - [textarea.wrap: IDL set to undefined followed by getAttribute()] - expected: FAIL - - [textarea.wrap: IDL set to undefined followed by IDL get] - expected: FAIL - - [textarea.wrap: IDL set to 7 followed by getAttribute()] - expected: FAIL - - [textarea.wrap: IDL set to 7 followed by IDL get] - expected: FAIL - - [textarea.wrap: IDL set to 1.5 followed by getAttribute()] - expected: FAIL - - [textarea.wrap: IDL set to 1.5 followed by IDL get] - expected: FAIL - - [textarea.wrap: IDL set to true followed by getAttribute()] - expected: FAIL - - [textarea.wrap: IDL set to true followed by IDL get] - expected: FAIL - - [textarea.wrap: IDL set to false followed by getAttribute()] - expected: FAIL - - [textarea.wrap: IDL set to false followed by IDL get] - expected: FAIL - - [textarea.wrap: IDL set to object "[object Object\]" followed by getAttribute()] - expected: FAIL - - [textarea.wrap: IDL set to object "[object Object\]" followed by IDL get] - expected: FAIL - - [textarea.wrap: IDL set to NaN followed by getAttribute()] - expected: FAIL - - [textarea.wrap: IDL set to NaN followed by IDL get] - expected: FAIL - - [textarea.wrap: IDL set to Infinity followed by getAttribute()] - expected: FAIL - - [textarea.wrap: IDL set to Infinity followed by IDL get] - expected: FAIL - - [textarea.wrap: IDL set to -Infinity followed by getAttribute()] - expected: FAIL - - [textarea.wrap: IDL set to -Infinity followed by IDL get] - expected: FAIL - - [textarea.wrap: IDL set to "\\0" followed by getAttribute()] - expected: FAIL - - [textarea.wrap: IDL set to null followed by getAttribute()] - expected: FAIL - - [textarea.wrap: IDL set to null followed by IDL get] - expected: FAIL - - [textarea.wrap: IDL set to object "test-toString" followed by getAttribute()] - expected: FAIL - - [textarea.wrap: IDL set to object "test-toString" followed by IDL get] - expected: FAIL - - [textarea.wrap: IDL set to object "test-valueOf" followed by IDL get] - expected: FAIL - [textarea.itemScope: typeof IDL attribute] expected: FAIL