This is a testharness.js-based test.
Found 101 tests; 51 PASS, 50 FAIL, 0 TIMEOUT, 0 NOTRUN.
PASS load nested browsing context <frame src>
PASS load nested browsing context <iframe src>
PASS load nested browsing context <object data>
PASS load nested browsing context <embed src>
PASS loading css <link>
PASS loading js <script>
FAIL loading image <img src> assert_equals: expected substring %26%23229%3B got unknown query expected (undefined) undefined but got (number) 256
FAIL loading image <embed src> assert_equals: expected substring %26%23229%3B got default intrinsic width expected (undefined) undefined but got (number) 300
FAIL loading image <object data> assert_equals: expected substring %26%23229%3B got default intrinsic width expected (undefined) undefined but got (number) 300
FAIL loading image <input src> assert_equals: expected substring %26%23229%3B got unknown query expected (undefined) undefined but got (number) 256
FAIL loading image <video poster> assert_equals: expected substring %26%23229%3B got unknown query expected (undefined) undefined but got (number) 256
FAIL loading video <video> assert_equals: expected substring %26%23229%3B got undefined expected (undefined) undefined but got (number) 614
FAIL loading video <video><source> assert_equals: expected substring %26%23229%3B got undefined expected (undefined) undefined but got (number) 614
FAIL loading video <audio> assert_equals: expected substring %26%23229%3B got undefined expected (undefined) undefined but got (number) 614
FAIL loading video <audio><source> assert_equals: expected substring %26%23229%3B got undefined expected (undefined) undefined but got (number) 614
PASS loading webvtt <track>
PASS submit form <form action>
PASS submit form <input formaction>
PASS submit form <button formaction>
FAIL <base href> assert_true: expected substring %26%23229%3B got http://web-platform.test:8001/html/infrastructure/urls/resolving-urls/query-encoding/resources/resource.py?q=%C3%A5&encoding=windows-1251&type= expected true got false
PASS Worker constructor
PASS SharedWorker constructor
PASS EventSource constructor
PASS EventSource#url
FAIL XMLDocument#load() doc.load is not a function
PASS window.open()
FAIL <a>.search assert_true: href content attribute expected substring %26%23229%3B got http://web-platform.test:8001/html/infrastructure/urls/resolving-urls/query-encoding/resources/resource.py?q=%C3%A5&encoding=windows-1251&type=html expected true got false
FAIL <area>.search assert_true: href content attribute expected substring %26%23229%3B got http://web-platform.test:8001/html/infrastructure/urls/resolving-urls/query-encoding/resources/resource.py?q=%C3%A5&encoding=windows-1251&type=html expected true got false
FAIL history.pushState assert_true: expected substring %26%23229%3B got http://web-platform.test:8001/html/infrastructure/urls/resolving-urls/query-encoding/resources/resources/resource.py?q=%C3%A5&encoding=windows-1251&type=html expected true got false
FAIL history.replaceState assert_true: expected substring %26%23229%3B got http://web-platform.test:8001/html/infrastructure/urls/resolving-urls/query-encoding/resources/resources/resource.py?q=%C3%A5&encoding=windows-1251&type=html expected true got false
PASS SVG <a>
FAIL SVG <feImage> poll_for_stash is not defined
FAIL SVG <image> poll_for_stash is not defined
FAIL SVG <use> poll_for_stash is not defined
FAIL XMLHttpRequest#open() assert_equals: expected "%C3%A5" but got "%26%23229%3B"
PASS importScripts() in a dedicated worker
PASS Worker() in a dedicated worker
FAIL SharedWorker() in a dedicated worker assert_equals: expected "%C3%A5" but got "ReferenceError: SharedWorker is not defined"
FAIL importScripts() in a shared worker assert_equals: expected "%C3%A5" but got "importScripts failed to run"
FAIL Worker() in a shared worker assert_equals: expected "%C3%A5" but got "ReferenceError: Worker is not defined"
FAIL SharedWorker() in a shared worker assert_equals: expected "%C3%A5" but got "ReferenceError: SharedWorker is not defined"
PASS WebSocket constructor
PASS WebSocket#url
FAIL Parsing cache manifest (CACHE) poll_for_stash is not defined
FAIL Parsing cache manifest (FALLBACK) poll_for_stash is not defined
FAIL Parsing cache manifest (NETWORK) poll_for_stash is not defined
FAIL CSS <link> (windows-1251) #<id> { background-image:<url> } poll_for_stash is not defined
FAIL CSS <link> (utf-8) #<id> { background-image:<url> } poll_for_stash is not defined
FAIL CSS <style> #<id> { background-image:<url> } poll_for_stash is not defined
FAIL CSS <link> (windows-1251) #<id> { border-image-source:<url> } poll_for_stash is not defined
FAIL CSS <link> (utf-8) #<id> { border-image-source:<url> } poll_for_stash is not defined
FAIL CSS <style> #<id> { border-image-source:<url> } poll_for_stash is not defined
FAIL CSS <link> (windows-1251) #<id>::before { content:<url> } poll_for_stash is not defined
FAIL CSS <link> (utf-8) #<id>::before { content:<url> } poll_for_stash is not defined
FAIL CSS <style> #<id>::before { content:<url> } poll_for_stash is not defined
FAIL CSS <link> (windows-1251) @font-face { font-family:<id>; src:<url> } #<id> { font-family:<id> } poll_for_stash is not defined
FAIL CSS <link> (utf-8) @font-face { font-family:<id>; src:<url> } #<id> { font-family:<id> } poll_for_stash is not defined
FAIL CSS <style> @font-face { font-family:<id>; src:<url> } #<id> { font-family:<id> } poll_for_stash is not defined
FAIL CSS <link> (windows-1251) #<id> { display:list-item; list-style-image:<url> } poll_for_stash is not defined
FAIL CSS <link> (utf-8) #<id> { display:list-item; list-style-image:<url> } poll_for_stash is not defined
FAIL CSS <style> #<id> { display:list-item; list-style-image:<url> } poll_for_stash is not defined
FAIL CSS <link> (windows-1251) @import <url>; poll_for_stash is not defined
FAIL CSS <link> (utf-8) @import <url>; poll_for_stash is not defined
FAIL CSS <style> @import <url>; poll_for_stash is not defined
FAIL CSS <link> (windows-1251) #<id> { cursor:<url>, pointer } poll_for_stash is not defined
FAIL CSS <link> (utf-8) #<id> { cursor:<url>, pointer } poll_for_stash is not defined
FAIL CSS <style> #<id> { cursor:<url>, pointer } poll_for_stash is not defined
FAIL <?xml-stylesheet?> (CSS) assert_equals: expected "\"%C3%A5\"" but got "\"%26%23229%3B\""
PASS URL constructor, url
PASS URL constructor, base
PASS Scheme ftp (getting <a>.href)
PASS Scheme file (getting <a>.href)
PASS Scheme gopher (getting <a>.href)
PASS Scheme http (getting <a>.href)
PASS Scheme https (getting <a>.href)
FAIL Scheme ws (getting <a>.href) assert_true: expected substring %C3%A5 got ws://example.invalid/?x=%26%23229%3B expected true got false
FAIL Scheme wss (getting <a>.href) assert_true: expected substring %C3%A5 got wss://example.invalid/?x=%26%23229%3B expected true got false
PASS Scheme mailto (getting <a>.href)
PASS Scheme data (getting <a>.href)
PASS Scheme javascript (getting <a>.href)
PASS Scheme ftps (getting <a>.href)
PASS Scheme httpbogus (getting <a>.href)
PASS Scheme bitcoin (getting <a>.href)
PASS Scheme geo (getting <a>.href)
PASS Scheme im (getting <a>.href)
PASS Scheme irc (getting <a>.href)
PASS Scheme ircs (getting <a>.href)
PASS Scheme magnet (getting <a>.href)
PASS Scheme mms (getting <a>.href)
PASS Scheme news (getting <a>.href)
PASS Scheme nntp (getting <a>.href)
PASS Scheme sip (getting <a>.href)
PASS Scheme sms (getting <a>.href)
PASS Scheme smsto (getting <a>.href)
PASS Scheme ssh (getting <a>.href)
PASS Scheme tel (getting <a>.href)
PASS Scheme urn (getting <a>.href)
PASS Scheme webcal (getting <a>.href)
PASS Scheme wtai (getting <a>.href)
PASS Scheme xmpp (getting <a>.href)
PASS Scheme web+http (getting <a>.href)
Harness: the test ran to completion.

