| <!DOCTYPE html> |
| <html> |
| <head> |
| <style media="screen and (min-width: 480px)"> |
| body { |
| background-position: 10px 20px; |
| } |
| </style> |
| </head> |
| <body> |
| <script src="../../resources/js-test-pre.js"></script> |
| <script> |
| description("Tests that interfaces with an indexed getter and an integer-type length attribute get an iterator."); |
| |
| function checkHasIterator(interfaceName, _obj) |
| { |
| obj = _obj; |
| debug("* " + interfaceName); |
| if (interfaceName in window) |
| shouldBe("obj.__proto__", "" + interfaceName + ".prototype"); |
| shouldBeTrue("Symbol.iterator in obj"); |
| forOfSuccess = true; |
| try { |
| for (var p of obj) { } |
| } catch (e) { |
| debug("Exception: " + e); |
| forOfSuccess = false; |
| } |
| if (forOfSuccess) |
| testPassed("for..of did not throw an exception"); |
| else |
| testFailed("for..of threw an exception"); |
| |
| shouldBeFalse("'entries' in obj"); |
| shouldBeFalse("'keys' in obj"); |
| shouldBeFalse("'forEach' in obj"); |
| shouldBeFalse("'values' in obj"); |
| |
| debug(""); |
| } |
| |
| var media = document.createElement("video"); |
| checkHasIterator("AudioTrackList", media.audioTracks); |
| checkHasIterator("CSSRuleList", window.getMatchedCSSRules(document.body)); |
| checkHasIterator("CSSStyleDeclaration", window.getComputedStyle(document.body)); |
| checkHasIterator("CSSValueList", window.getComputedStyle(document.body).getPropertyCSSValue('background-position')); |
| checkHasIterator("MimeTypeArray", navigator.mimeTypes); |
| if (navigator.plugins.length) |
| checkHasIterator("Plugin", navigator.plugins[0]); |
| checkHasIterator("PluginArray", navigator.plugins); |
| checkHasIterator("DOMStringList", location.ancestorOrigins); |
| checkHasIterator("HTMLAllCollection", document.all); |
| checkHasIterator("HTMLCollection", document.getElementsByTagName("body")); |
| checkHasIterator("HTMLFormElement", document.createElement("form")); |
| checkHasIterator("HTMLOptionsCollection", document.createElement("select").options); |
| checkHasIterator("HTMLSelectElement", document.createElement("select")); |
| checkHasIterator("MediaList", document.getElementsByTagName("style")[0].sheet.media); |
| checkHasIterator("NamedNodeMap", document.body.attributes); |
| if ('SourceBufferList' in window) |
| checkHasIterator("SourceBufferList", (new MediaSource()).sourceBuffers); |
| checkHasIterator("StyleSheetList", document.styleSheets); |
| checkHasIterator("TextTrackCueList", document.createElement("video").addTextTrack("subtitles").cues); |
| checkHasIterator("TextTrackList", media.textTracks); |
| checkHasIterator("VideoTrackList", media.videoTracks); |
| checkHasIterator("VTTRegionList", document.createElement("video").addTextTrack("subtitles").regions); |
| </script> |
| <script src="../../resources/js-test-post.js"></script> |
| </body> |
| </html> |