Skip to content

Commit

Permalink
Add DateTime string attribute to Time
Browse files Browse the repository at this point in the history
Also handle datetime content attribute when attribute is absent.

Rephrase terms used in the test: dateTime IDL property, datetime
attribute and datetime content attribute.

Remove failure expectations for time element.
  • Loading branch information
chajath committed Nov 27, 2016
1 parent 99c4821 commit 25f0317
Show file tree
Hide file tree
Showing 6 changed files with 33 additions and 247 deletions.
27 changes: 25 additions & 2 deletions components/script/dom/htmltimeelement.rs
Expand Up @@ -2,23 +2,27 @@
* 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::bindings::codegen::Bindings::ElementBinding::ElementBinding::ElementMethods;
use dom::bindings::codegen::Bindings::HTMLTimeElementBinding;
use dom::bindings::codegen::Bindings::HTMLTimeElementBinding::HTMLTimeElementMethods;
use dom::bindings::inheritance::Castable;
use dom::bindings::js::Root;
use dom::bindings::str::DOMString;
use dom::document::Document;
use dom::element::Element;
use dom::htmlelement::HTMLElement;
use dom::node::Node;
use html5ever_atoms::LocalName;

#[dom_struct]
pub struct HTMLTimeElement {
htmlelement: HTMLElement
htmlelement: HTMLElement,
}

impl HTMLTimeElement {
fn new_inherited(local_name: LocalName, prefix: Option<DOMString>, document: &Document) -> HTMLTimeElement {
HTMLTimeElement {
htmlelement: HTMLElement::new_inherited(local_name, prefix, document)
htmlelement: HTMLElement::new_inherited(local_name, prefix, document),
}
}

Expand All @@ -31,3 +35,22 @@ impl HTMLTimeElement {
HTMLTimeElementBinding::Wrap)
}
}

impl HTMLTimeElementMethods for HTMLTimeElement {
// https://html.spec.whatwg.org/multipage/#dom-time-datetime
//make_getter!(DateTime, "datetime");
fn DateTime(&self) -> DOMString {
let element = self.upcast::<Element>();
if element.has_attribute(&local_name!("datetime")) {
return element.get_string_attribute(&local_name!("datetime"))
} else {
match element.GetInnerHTML() {
Ok(x) => x,
_ => DOMString::new(),
}
}
}

// https://html.spec.whatwg.org/multipage/#dom-time-datetime
make_setter!(SetDateTime, "datetime");
}
2 changes: 1 addition & 1 deletion components/script/dom/webidls/HTMLTimeElement.webidl
Expand Up @@ -4,5 +4,5 @@

// https://html.spec.whatwg.org/multipage/#htmltimeelement
interface HTMLTimeElement : HTMLElement {
// attribute DOMString dateTime;
attribute DOMString dateTime;
};
6 changes: 0 additions & 6 deletions tests/wpt/metadata/html/dom/interfaces.html.ini
Expand Up @@ -1533,12 +1533,6 @@
[HTMLAnchorElement interface: document.createElement("a") must inherit property "charset" with the proper type (9)]
expected: FAIL

[HTMLTimeElement interface: attribute dateTime]
expected: FAIL

[HTMLTimeElement interface: document.createElement("time") must inherit property "dateTime" with the proper type (0)]
expected: FAIL

[HTMLBRElement interface: attribute clear]
expected: FAIL

Expand Down
219 changes: 0 additions & 219 deletions tests/wpt/metadata/html/dom/reflection-text.html.ini
Expand Up @@ -8550,135 +8550,6 @@
[time.tabIndex: IDL set to -2147483648 followed by getAttribute()]
expected: FAIL

[time.dateTime: typeof IDL attribute]
expected: FAIL

[time.dateTime: IDL get with DOM attribute unset]
expected: FAIL

[time.dateTime: setAttribute() to "" followed by IDL get]
expected: FAIL

[time.dateTime: 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

[time.dateTime: setAttribute() to undefined followed by IDL get]
expected: FAIL

[time.dateTime: setAttribute() to 7 followed by IDL get]
expected: FAIL

[time.dateTime: setAttribute() to 1.5 followed by IDL get]
expected: FAIL

[time.dateTime: setAttribute() to true followed by IDL get]
expected: FAIL

[time.dateTime: setAttribute() to false followed by IDL get]
expected: FAIL

[time.dateTime: setAttribute() to object "[object Object\]" followed by IDL get]
expected: FAIL

[time.dateTime: setAttribute() to NaN followed by IDL get]
expected: FAIL

[time.dateTime: setAttribute() to Infinity followed by IDL get]
expected: FAIL

[time.dateTime: setAttribute() to -Infinity followed by IDL get]
expected: FAIL

[time.dateTime: setAttribute() to "\\0" followed by IDL get]
expected: FAIL

[time.dateTime: setAttribute() to null followed by IDL get]
expected: FAIL

[time.dateTime: setAttribute() to object "test-toString" followed by IDL get]
expected: FAIL

[time.dateTime: setAttribute() to object "test-valueOf" followed by IDL get]
expected: FAIL

[time.dateTime: IDL set to "" followed by getAttribute()]
expected: FAIL

[time.dateTime: 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

[time.dateTime: IDL set to undefined followed by getAttribute()]
expected: FAIL

[time.dateTime: IDL set to undefined followed by IDL get]
expected: FAIL

[time.dateTime: IDL set to 7 followed by getAttribute()]
expected: FAIL

[time.dateTime: IDL set to 7 followed by IDL get]
expected: FAIL

[time.dateTime: IDL set to 1.5 followed by getAttribute()]
expected: FAIL

[time.dateTime: IDL set to 1.5 followed by IDL get]
expected: FAIL

[time.dateTime: IDL set to true followed by getAttribute()]
expected: FAIL

[time.dateTime: IDL set to true followed by IDL get]
expected: FAIL

[time.dateTime: IDL set to false followed by getAttribute()]
expected: FAIL

[time.dateTime: IDL set to false followed by IDL get]
expected: FAIL

[time.dateTime: IDL set to object "[object Object\]" followed by getAttribute()]
expected: FAIL

[time.dateTime: IDL set to object "[object Object\]" followed by IDL get]
expected: FAIL

[time.dateTime: IDL set to NaN followed by getAttribute()]
expected: FAIL

[time.dateTime: IDL set to NaN followed by IDL get]
expected: FAIL

[time.dateTime: IDL set to Infinity followed by getAttribute()]
expected: FAIL

[time.dateTime: IDL set to Infinity followed by IDL get]
expected: FAIL

[time.dateTime: IDL set to -Infinity followed by getAttribute()]
expected: FAIL

[time.dateTime: IDL set to -Infinity followed by IDL get]
expected: FAIL

[time.dateTime: IDL set to "\\0" followed by getAttribute()]
expected: FAIL

[time.dateTime: IDL set to null followed by getAttribute()]
expected: FAIL

[time.dateTime: IDL set to null followed by IDL get]
expected: FAIL

[time.dateTime: IDL set to object "test-toString" followed by getAttribute()]
expected: FAIL

[time.dateTime: IDL set to object "test-toString" followed by IDL get]
expected: FAIL

[time.dateTime: IDL set to object "test-valueOf" followed by IDL get]
expected: FAIL

[time.itemScope: typeof IDL attribute]
expected: FAIL

Expand Down Expand Up @@ -28788,96 +28659,6 @@
[time.tabIndex: IDL set to -2147483648]
expected: FAIL

[time.dateTime: setAttribute() to ""]
expected: FAIL

[time.dateTime: 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 "]
expected: FAIL

[time.dateTime: setAttribute() to undefined]
expected: FAIL

[time.dateTime: setAttribute() to 7]
expected: FAIL

[time.dateTime: setAttribute() to 1.5]
expected: FAIL

[time.dateTime: setAttribute() to true]
expected: FAIL

[time.dateTime: setAttribute() to false]
expected: FAIL

[time.dateTime: setAttribute() to object "[object Object\]"]
expected: FAIL

[time.dateTime: setAttribute() to NaN]
expected: FAIL

[time.dateTime: setAttribute() to Infinity]
expected: FAIL

[time.dateTime: setAttribute() to -Infinity]
expected: FAIL

[time.dateTime: setAttribute() to "\\0"]
expected: FAIL

[time.dateTime: setAttribute() to null]
expected: FAIL

[time.dateTime: setAttribute() to object "test-toString"]
expected: FAIL

[time.dateTime: setAttribute() to object "test-valueOf"]
expected: FAIL

[time.dateTime: IDL set to ""]
expected: FAIL

[time.dateTime: 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 "]
expected: FAIL

[time.dateTime: IDL set to undefined]
expected: FAIL

[time.dateTime: IDL set to 7]
expected: FAIL

[time.dateTime: IDL set to 1.5]
expected: FAIL

[time.dateTime: IDL set to true]
expected: FAIL

[time.dateTime: IDL set to false]
expected: FAIL

[time.dateTime: IDL set to object "[object Object\]"]
expected: FAIL

[time.dateTime: IDL set to NaN]
expected: FAIL

[time.dateTime: IDL set to Infinity]
expected: FAIL

[time.dateTime: IDL set to -Infinity]
expected: FAIL

[time.dateTime: IDL set to "\\0"]
expected: FAIL

[time.dateTime: IDL set to null]
expected: FAIL

[time.dateTime: IDL set to object "test-toString"]
expected: FAIL

[time.dateTime: IDL set to object "test-valueOf"]
expected: FAIL

[code.dir: setAttribute() to ""]
expected: FAIL

Expand Down

This file was deleted.

Expand Up @@ -47,21 +47,23 @@
//dateTime
test(function () {
assert_equals( makeTime('2000-02-01T03:04:05Z','2001-02-01T03:04:05Z').dateTime, '2000-02-01T03:04:05Z' );
}, 'the datetime attribute should be reflected by the .dateTime property');
}, 'the datetime attribute should be reflected by the dateTime IDL property');
test(function () {
assert_equals( typeof makeTime().dateTime, 'string', 'typeof test' );
assert_equals( makeTime().dateTime, '', 'value test' );
}, 'the dateTime IDL property should default to an empty string');
test(function () {
assert_equals( makeTime(false,false,'2000-02-01T03:04:05Z').dateTime, '2000-02-01T03:04:05Z' );
}, 'the dateTime property should be read/write');
}, 'the dateTime IDL property should be read/write');
test(function () {
assert_equals( makeTime('go fish').dateTime, 'go fish' );
}, 'the datetime attribute should be reflected by the .dateTime property even if it is invalid');
test(function () {
assert_equals( makeTime(false,'2000-02-01T03:04:05Z').dateTime, '' );
}, 'the datetime attribute should not reflect the textContent');

assert_equals( makeTime(false,'2000-02-01T03:04:05Z', '2000-02-01').dateTime, '2000-02-01' );
}, 'the datetime content attribute should not reflect the textContent when datetime attribute is present.');
test(function () {
assert_equals( makeTime(false,'2000-02-01T03:04:05Z').dateTime, '2000-02-01T03:04:05Z' );
}, 'the datetime content attribute should reflect the textContent when datetime attribute is absent.');
</script>

</body>
Expand Down

0 comments on commit 25f0317

Please sign in to comment.