| <!DOCTYPE html> |
| <title>Test video.latencyHint object and content attributes</title> |
| <script src='../resources/testharness.js'></script> |
| <script src='../resources/testharnessreport.js'></script> |
| <script> |
| test(function(t) { |
| let video = document.createElement('video'); |
| assert_equals(video.latencyHint, NaN); |
| assert_equals(video.getAttribute('latencyhint'), null); |
| }, 'Test initial unset values'); |
| |
| test(function(t) { |
| let video = document.createElement('video'); |
| |
| // First set the IDL attributes. Verify reflection. |
| |
| video.latencyHint = 0; |
| assert_equals(video.latencyHint, 0); |
| assert_equals(video.getAttribute('latencyhint'), '0'); |
| |
| video.latencyHint = 0.5; |
| assert_equals(video.latencyHint, 0.5); |
| assert_equals(video.getAttribute('latencyhint'), '0.5'); |
| |
| video.latencyHint = 1; |
| assert_equals(video.latencyHint, 1); |
| assert_equals(video.getAttribute('latencyhint'), '1'); |
| |
| // Now set the content attribute. Verify reflection. |
| |
| video.setAttribute('latencyhint', '0'); |
| assert_equals(video.latencyHint, 0); |
| assert_equals(video.getAttribute('latencyhint'), '0'); |
| |
| video.setAttribute('latencyhint', '0.5'); |
| assert_equals(video.latencyHint, 0.5); |
| assert_equals(video.getAttribute('latencyhint'), '0.5'); |
| |
| video.setAttribute('latencyhint', '1'); |
| assert_equals(video.latencyHint, 1); |
| assert_equals(video.getAttribute('latencyhint'), '1'); |
| |
| }, 'Test setting valid values'); |
| |
| test(function(t) { |
| let video = document.createElement('video'); |
| |
| // Start with a valid value. |
| video.latencyHint = 0; |
| assert_equals(video.latencyHint, 0); |
| assert_equals(video.getAttribute('latencyhint'), '0'); |
| |
| // Values less than zero are invalid. Verify invalid values still update |
| // the content attribute, but the IDL attribute reflects that the default |
| // value (NaN) was applied. |
| video.latencyHint = -1; |
| assert_equals(video.getAttribute('latencyhint'), '-1'); |
| assert_equals(video.latencyHint, NaN); |
| |
| // Again, start with a valid value. |
| video.latencyHint = 0; |
| assert_equals(video.latencyHint, 0); |
| assert_equals(video.getAttribute('latencyhint'), '0'); |
| |
| // Non-finite values are caught earlier by IDL definition. They will have |
| // no effect on either attribute type. |
| assert_throws_js(TypeError, () => { |
| video.latencyHint = Infinity; |
| }, 'latencyHint should throw for non-finite values'); |
| assert_equals(video.latencyHint, 0); |
| assert_equals(video.getAttribute('latencyhint'), '0'); |
| |
| assert_throws_js(TypeError, () => { |
| video.latencyHint = NaN; |
| }, 'latencyHint should throw for non-finite values'); |
| assert_equals(video.latencyHint, 0); |
| assert_equals(video.getAttribute('latencyhint'), '0'); |
| }, 'Test setting invalid values from IDL attribute'); |
| |
| test(function(t) { |
| let video = document.createElement('video'); |
| |
| // Start with a valid value. |
| video.latencyHint = 0; |
| assert_equals(video.latencyHint, 0); |
| assert_equals(video.getAttribute('latencyhint'), '0'); |
| |
| // Values less than zero are invalid. Verify invalid values still update |
| // the content attribute, but the IDL attribute reflects that the default |
| // value (NaN) was applied. |
| video.setAttribute('latencyhint', '-1'); |
| assert_equals(video.getAttribute('latencyhint'), '-1'); |
| assert_equals(video.latencyHint, NaN); |
| |
| // Again, start with a valid value. |
| video.setAttribute('latencyhint', '0'); |
| assert_equals(video.latencyHint, 0); |
| assert_equals(video.getAttribute('latencyhint'), '0'); |
| |
| // Non-finite values are disallowed by web IDL, but that auto-validation |
| // isn't feasible when setting by attribute (unlike the previous test). |
| // We should instead see IDL attribute value changes to the default, NaN. |
| video.setAttribute('latencyhint', 'Infinity'); |
| assert_equals(video.getAttribute('latencyhint'), 'Infinity'); |
| assert_equals(video.latencyHint, NaN); |
| |
| video.setAttribute('latencyhint', 'NaN'); |
| assert_equals(video.getAttribute('latencyhint'), 'NaN'); |
| assert_equals(video.latencyHint, NaN); |
| |
| // Completely bogus values should have the same behavior as above. |
| video.setAttribute('latencyhint', 'foo'); |
| assert_equals(video.getAttribute('latencyhint'), 'foo'); |
| assert_equals(video.latencyHint, NaN); |
| }, 'Test setting invalid values from content attribute'); |
| |
| </script> |