1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-25 15:29:32 -05:00

tests: enable wpt for url (#9046)

This commit is contained in:
Luca Casonato 2021-01-24 22:29:36 +01:00 committed by GitHub
parent feff6361b1
commit 66e99d349b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 551 additions and 9 deletions

View file

@ -224,6 +224,16 @@ jobs:
echo $(git rev-parse HEAD) > canary-latest.txt
gsutil cp canary-latest.txt gs://dl.deno.land/canary-latest.txt
- name: Configure hosts file for WPT (unix)
if: runner.os != 'Windows'
run: ./wpt make-hosts-file | sudo tee -a /etc/hosts
working-directory: test_util/wpt/
- name: Configure hosts file for WPT (windows)
if: runner.os == 'Windows'
working-directory: test_util/wpt/
run: python wpt make-hosts-file | Out-File $env:SystemRoot\System32\drivers\etc\hosts -Encoding ascii -Append
- name: Test release
if: matrix.kind == 'test_release'
run: cargo test --release --locked --all-targets

View file

@ -5,6 +5,7 @@ use deno_core::serde_json;
use deno_core::url;
use deno_runtime::deno_fetch::reqwest;
use deno_runtime::deno_websocket::tokio_tungstenite;
use std::io::BufReader;
use std::io::{BufRead, Write};
use std::path::Path;
use std::path::PathBuf;
@ -5249,6 +5250,32 @@ fn jsonc_to_serde(j: jsonc_parser::JsonValue) -> serde_json::Value {
}
}
struct WPTServer(std::process::Child);
impl Drop for WPTServer {
fn drop(&mut self) {
match self.0.try_wait() {
Ok(None) => {
#[cfg(target_os = "linux")]
{
println!("libc kill");
unsafe {
libc::kill(self.0.id() as i32, libc::SIGTERM);
}
}
#[cfg(not(target_os = "linux"))]
{
println!("std kill");
self.0.kill().expect("killing 'wpt serve' failed");
}
let _ = self.0.wait();
}
Ok(Some(status)) => panic!("'wpt serve' exited unexpectedly {}", status),
Err(e) => panic!("'wpt serve' error: {}", e),
}
}
}
#[test]
fn web_platform_tests() {
use deno_core::serde::Deserialize;
@ -5270,6 +5297,61 @@ fn web_platform_tests() {
let config: std::collections::HashMap<String, Vec<WptConfig>> =
deno_core::serde_json::from_value(jsonc_to_serde(jsonc)).unwrap();
// Observation: `python3 wpt serve` hangs with the python3 from homebrew
// but works okay with /usr/bin/python, which is python 2.7.10. Observed
// with homebrew python 3.8.5, 3.8.7 and 3.9.1.
let python = match true {
_ if cfg!(target_os = "windows") => "python.exe",
_ if cfg!(target_os = "macos") => "python",
_ => "python3",
};
eprintln!("If the wpt server fails or gets stuck, please set up your /etc/hosts file like specified in //docs/contributing/building_from_source.md.");
let mut proc = Command::new(python)
.current_dir(util::wpt_path())
.arg("wpt.py")
.arg("serve")
.stderr(std::process::Stdio::piped())
.spawn()
.unwrap();
let stderr = proc.stderr.as_mut().unwrap();
let mut stderr = BufReader::new(stderr).lines();
let mut ready_8000 = false;
let mut ready_8443 = false;
let mut ready_8444 = false;
let mut ready_9000 = false;
while let Ok(line) = stderr.next().unwrap() {
if !line.starts_with("DEBUG:") {
eprintln!("{}", line);
}
if cfg!(target_os = "windows") && line.contains("Using ports") {
break;
}
if line.contains("web-platform.test:8000") {
ready_8000 = true;
}
if line.contains("web-platform.test:8443") {
ready_8443 = true;
}
if line.contains("web-platform.test:8444") {
ready_8444 = true;
}
if line.contains("web-platform.test:9000") {
ready_9000 = true;
}
// WPT + python2 doesn't support HTTP/2.0.
if line.contains("Cannot start HTTP/2.0 server") {
ready_9000 = true;
}
if ready_8000 && ready_8443 && ready_8444 && ready_9000 {
break;
}
}
let _wpt_server = WPTServer(proc);
for (suite_name, includes) in config.into_iter() {
let suite_path = util::wpt_path().join(suite_name);
let dir = WalkDir::new(&suite_path)
@ -5352,14 +5434,15 @@ fn web_platform_tests() {
})
.collect();
let mut variants: Vec<&str> = test_file_text
let mut variants: Vec<String> = test_file_text
.split('\n')
.into_iter()
.filter_map(|t| t.strip_prefix("// META: variant="))
.map(|t| format!("?{}", t))
.collect();
if variants.is_empty() {
variants.push("");
variants.push("".to_string());
}
for variant in variants {
@ -5382,11 +5465,19 @@ fn web_platform_tests() {
let bundle = concat_bundle(files, file.path(), "".to_string());
file.write_all(bundle.as_bytes()).unwrap();
let self_path = test_file_path.strip_prefix(util::wpt_path()).unwrap();
let child = util::deno_cmd()
.current_dir(test_file_path.parent().unwrap())
.arg("run")
.arg("--location")
.arg(&format!("http://web-platform-tests/?{}", variant))
.arg(&format!(
"http://web-platform.test:8000/{}{}",
self_path.to_str().unwrap(),
variant
))
.arg("--cert")
.arg(util::wpt_path().join("tools/certs/cacert.pem"))
.arg("-A")
.arg(file.path())
.arg(deno_core::serde_json::to_string(&expect_fail).unwrap())

View file

@ -424,7 +424,7 @@ unitTest(
unitTest(
{ perms: { net: true } },
async function netTcpListenCloseWhileIterating(): Promise<void> {
const listener = Deno.listen({ port: 8000 });
const listener = Deno.listen({ port: 8001 });
const nextWhileClosing = listener[Symbol.asyncIterator]().next();
listener.close();
assertEquals(await nextWhileClosing, { value: undefined, done: true });
@ -437,7 +437,7 @@ unitTest(
unitTest(
{ perms: { net: true } },
async function netUdpListenCloseWhileIterating(): Promise<void> {
const socket = Deno.listenDatagram({ port: 8000, transport: "udp" });
const socket = Deno.listenDatagram({ port: 8001, transport: "udp" });
const nextWhileClosing = socket[Symbol.asyncIterator]().next();
socket.close();
assertEquals(await nextWhileClosing, { value: undefined, done: true });

View file

@ -241,5 +241,411 @@
"does not inherit from Error: class-side"
]
}
],
"url": [
"historical",
{
"name": "url-constructor",
"expectFail": [
"Parsing: <http://example\t.\norg> against <http://example.org/foo/bar>",
"Parsing: <a:\t foo.com> against <http://example.org/foo/bar>",
"Parsing: <lolscheme:x x#x x> against <about:blank>",
"Parsing: <http://f:00000000000000/c> against <http://example.org/foo/bar>",
"Parsing: <http://f:00000000000000000000080/c> against <http://example.org/foo/bar>",
"Parsing: <http://f: /c> against <http://example.org/foo/bar>",
"Parsing: <http://f: 21 / b ? d # e > against <http://example.org/foo/bar>",
"Parsing: <:#> against <http://example.org/foo/bar>",
"Parsing: <#> against <http://example.org/foo/bar>",
"Parsing: <?> against <http://example.org/foo/bar>",
"Parsing: <http://[::127.0.0.1]> against <http://example.org/foo/bar>",
"Parsing: <http://[0:0:0:0:0:0:13.1.68.3]> against <http://example.org/foo/bar>",
"Parsing: <file:c:\\foo\\bar.html> against <file:///tmp/mock/path>",
"Parsing: < File:c|////foo\\bar.html> against <file:///tmp/mock/path>",
"Parsing: <C|/foo/bar> against <file:///tmp/mock/path>",
"Parsing: </C|\\foo\\bar> against <file:///tmp/mock/path>",
"Parsing: <//C|/foo/bar> against <file:///tmp/mock/path>",
"Parsing: <file://localhost> against <file:///tmp/mock/path>",
"Parsing: <file://localhost/> against <file:///tmp/mock/path>",
"Parsing: <file://localhost/test> against <file:///tmp/mock/path>",
"Parsing: <http://example.com/foo/%2e> against <about:blank>",
"Parsing: <http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar> against <about:blank>",
"Parsing: <http://example.com////../..> against <about:blank>",
"Parsing: <http://example.com/foo\t\u0091%91> against <about:blank>",
"Parsing: <http://example.com/foo\tbar> against <about:blank>",
"Parsing: <http://www.google.com/foo?bar=baz#> against <about:blank>",
"Parsing: <http://www/foo/%2E/html> against <about:blank>",
"Parsing: <file:..> against <http://www.example.com/test>",
"Parsing: <\u0000\u001b\u0004\u0012 http://example.com/\u001f \r > against <about:blank>",
"Parsing: <https://%EF%BF%BD> against <about:blank>",
"Parsing: <http://[::1.2.3.]> against <http://other.com/>",
"Parsing: <http://[::1.2.]> against <http://other.com/>",
"Parsing: <http://[::1.]> against <http://other.com/>",
"Parsing: <#> against <test:test>",
"Parsing: <#> against <test:test?test>",
"Parsing: <i> against <sc:sd>",
"Parsing: <i> against <sc:sd/sd>",
"Parsing: <../i> against <sc:sd>",
"Parsing: <../i> against <sc:sd/sd>",
"Parsing: </i> against <sc:sd>",
"Parsing: </i> against <sc:sd/sd>",
"Parsing: <?i> against <sc:sd>",
"Parsing: <?i> against <sc:sd/sd>",
"Parsing: <sc://@/> against <about:blank>",
"Parsing: <sc://te@s:t@/> against <about:blank>",
"Parsing: <sc://:/> against <about:blank>",
"Parsing: <sc://:12/> against <about:blank>",
"Parsing: <sc://\\/> against <about:blank>",
"Parsing: <sc:\\../> against <about:blank>",
"Parsing: <ftp://%e2%98%83> against <about:blank>",
"Parsing: <https://%e2%98%83> against <about:blank>",
"Parsing: <h\tt\nt\rp://h\to\ns\rt:9\t0\n0\r0/p\ta\nt\rh?q\tu\ne\rry#f\tr\na\rg> against <about:blank>",
"Parsing: <https://0x.0x.0> against <about:blank>",
"Parsing: </> against <file://h/C:/a/b>",
"Parsing: <//d:> against <file:///C:/a/b>",
"Parsing: <//d:/..> against <file:///C:/a/b>",
"Parsing: <file:\\\\//> against <about:blank>",
"Parsing: <file:\\\\\\\\> against <about:blank>",
"Parsing: <file:\\\\\\\\?fox> against <about:blank>",
"Parsing: <file:\\\\\\\\#guppy> against <about:blank>",
"Parsing: <file://spider///> against <about:blank>",
"Parsing: <file:\\\\localhost//> against <about:blank>",
"Parsing: <file://\\/localhost//cat> against <about:blank>",
"Parsing: <file://localhost//a//../..//> against <about:blank>",
"Parsing: </////mouse> against <file:///elephant>",
"Parsing: <\\/localhost//pig> against <file://lion/>",
"Parsing: <//localhost//pig> against <file://lion/>",
"Parsing: <C|> against <file://host/dir/file>",
"Parsing: <C|> against <file://host/D:/dir1/dir2/file>",
"Parsing: <C|#> against <file://host/dir/file>",
"Parsing: <C|?> against <file://host/dir/file>",
"Parsing: <C|/> against <file://host/dir/file>",
"Parsing: <C|\n/> against <file://host/dir/file>",
"Parsing: <C|\\> against <file://host/dir/file>",
"Parsing: </c|/foo/bar> against <file:///c:/baz/qux>",
"Parsing: </c:/foo/bar> against <file://host/path>",
"Parsing: <file://example.net/C:/> against <about:blank>",
"Parsing: <file://1.2.3.4/C:/> against <about:blank>",
"Parsing: <file://[1::8]/C:/> against <about:blank>",
"Parsing: <file:/C|/> against <about:blank>",
"Parsing: <file://C|/> against <about:blank>",
"Parsing: <\\\\\\.\\Y:> against <about:blank>",
"Parsing: <\\\\\\.\\y:> against <about:blank>",
"Parsing: <file://localhost//a//../..//foo> against <about:blank>",
"Parsing: <file://localhost////foo> against <about:blank>",
"Parsing: <file:////foo> against <about:blank>",
"Parsing: <file:////one/two> against <file:///>",
"Parsing: <////one/two> against <file:///>",
"Parsing: <file:.//p> against <about:blank>",
"Parsing: <http://[1:0::]> against <http://example.net/>",
"Parsing: <http://[0:1:2:3:4:5:6:7:8]> against <http://example.net/>",
"Parsing: <https://[0::0::0]> against <about:blank>",
"Parsing: <https://[0:.0]> against <about:blank>",
"Parsing: <https://[0:0:]> against <about:blank>",
"Parsing: <https://[0:1:2:3:4:5:6:7.0.0.0.1]> against <about:blank>",
"Parsing: <https://[0:1.00.0.0.0]> against <about:blank>",
"Parsing: <https://[0:1.290.0.0.0]> against <about:blank>",
"Parsing: <https://[0:1.23.23]> against <about:blank>",
"Parsing: <#x> against <sc://ñ>",
"Parsing: <?x> against <sc://ñ>",
"Parsing: <sc://?> against <about:blank>",
"Parsing: <sc://#> against <about:blank>",
"Parsing: <non-spec:/.//> against <about:blank>",
"Parsing: <non-spec:/..//> against <about:blank>",
"Parsing: <non-spec:/a/..//> against <about:blank>",
"Parsing: <non-spec:/.//path> against <about:blank>",
"Parsing: <non-spec:/..//path> against <about:blank>",
"Parsing: <non-spec:/a/..//path> against <about:blank>",
"Parsing: </.//path> against <non-spec:/p>",
"Parsing: </..//path> against <non-spec:/p>",
"Parsing: <..//path> against <non-spec:/p>",
"Parsing: <a/..//path> against <non-spec:/p>",
"Parsing: <> against <non-spec:/..//p>",
"Parsing: <path> against <non-spec:/..//p>",
"Parsing: <non-special://[1:2:0:0:5:0:0:0]/> against <about:blank>",
"Parsing: <http://[::127.0.0.0.1]> against <about:blank>",
"Parsing: <http://example.org/test?#> against <about:blank>",
"Parsing: <a> against <about:blank>",
"Parsing: <a/> against <about:blank>",
"Parsing: <a//> against <about:blank>",
"Parsing: <test-a-colon.html> against <a:>",
"Parsing: <test-a-colon-b.html> against <a:b>",
"Parsing: <file://a%C2%ADb/p> against <about:blank>",
"Parsing: <file://­/p> against <about:blank>",
"Parsing: <file://%C2%AD/p> against <about:blank>",
"Parsing: <file://xn--/p> against <about:blank>"
]
},
{
"name": "url-origin",
"expectFail": [
"Origin parsing: <http://example\t.\norg> against <http://example.org/foo/bar>",
"Origin parsing: <non-special://test:@test/x> against <about:blank>",
"Origin parsing: <non-special://:@test/x> against <about:blank>",
"Origin parsing: <http://f:00000000000000/c> against <http://example.org/foo/bar>",
"Origin parsing: <http://f:00000000000000000000080/c> against <http://example.org/foo/bar>",
"Origin parsing: <http://[::127.0.0.1]> against <http://example.org/foo/bar>",
"Origin parsing: <http://[0:0:0:0:0:0:13.1.68.3]> against <http://example.org/foo/bar>",
"Origin parsing: <ssh://example.com/foo/bar.git> against <http://example.org/>",
"Origin parsing: <httpa://foo:80/> against <about:blank>",
"Origin parsing: <gopher://foo:70/> against <about:blank>",
"Origin parsing: <gopher://foo:443/> against <about:blank>",
"Origin parsing: <\u0000\u001b\u0004\u0012 http://example.com/\u001f \r > against <about:blank>",
"Origin parsing: <sc://faß.ExAmPlE/> against <about:blank>",
"Origin parsing: <notspecial://host/?'> against <about:blank>",
"Origin parsing: <i> against <sc://ho/pa>",
"Origin parsing: <../i> against <sc://ho/pa>",
"Origin parsing: </i> against <sc://ho/pa>",
"Origin parsing: <?i> against <sc://ho/pa>",
"Origin parsing: <#i> against <sc://ho/pa>",
"Origin parsing: <sc://ñ.test/> against <about:blank>",
"Origin parsing: <x> against <sc://ñ>",
"Origin parsing: <sc://\u001f!\"$&'()*+,-.;=_`{|}~/> against <about:blank>",
"Origin parsing: <ftp://%e2%98%83> against <about:blank>",
"Origin parsing: <https://%e2%98%83> against <about:blank>",
"Origin parsing: <h\tt\nt\rp://h\to\ns\rt:9\t0\n0\r0/p\ta\nt\rh?q\tu\ne\rry#f\tr\na\rg> against <about:blank>",
"Origin parsing: <https://0x.0x.0> against <about:blank>",
"Origin parsing: <http://[1:0::]> against <http://example.net/>",
"Origin parsing: <sc://ñ> against <about:blank>",
"Origin parsing: <sc://ñ?x> against <about:blank>",
"Origin parsing: <sc://ñ#x> against <about:blank>",
"Origin parsing: <#x> against <sc://ñ>",
"Origin parsing: <?x> against <sc://ñ>",
"Origin parsing: <tftp://foobar.com/someconfig;mode=netascii> against <about:blank>",
"Origin parsing: <telnet://user:pass@foobar.com:23/> against <about:blank>",
"Origin parsing: <ut2004://10.10.10.10:7777/Index.ut2> against <about:blank>",
"Origin parsing: <redis://foo:bar@somehost:6379/0?baz=bam&qux=baz> against <about:blank>",
"Origin parsing: <rsync://foo@host:911/sup> against <about:blank>",
"Origin parsing: <git://github.com/foo/bar.git> against <about:blank>",
"Origin parsing: <irc://myserver.com:6999/channel?passwd> against <about:blank>",
"Origin parsing: <dns://fw.example.org:9999/foo.bar.org?type=TXT> against <about:blank>",
"Origin parsing: <ldap://localhost:389/ou=People,o=JNDITutorial> against <about:blank>",
"Origin parsing: <git+https://github.com/foo/bar> against <about:blank>"
]
},
{
"name": "url-searchparams",
"expectFail": [
"URL.searchParams updating, clearing",
"URL.searchParams and URL.search setters, update propagation"
]
},
{
"name": "url-setters-stripping",
"expectFail": [
"Setting protocol with leading U+0000 (https:)",
"Setting protocol with U+0000 before inserted colon (https:)",
"Setting host with leading U+0000 (https:)",
"Setting host with middle U+0000 (https:)",
"Setting host with trailing U+0000 (https:)",
"Setting port with middle U+0000 (https:)",
"Setting port with trailing U+0000 (https:)",
"Setting protocol with leading U+0009 (https:)",
"Setting protocol with U+0009 before inserted colon (https:)",
"Setting host with leading U+0009 (https:)",
"Setting hostname with leading U+0009 (https:)",
"Setting host with middle U+0009 (https:)",
"Setting hostname with middle U+0009 (https:)",
"Setting host with trailing U+0009 (https:)",
"Setting hostname with trailing U+0009 (https:)",
"Setting port with leading U+0009 (https:)",
"Setting port with middle U+0009 (https:)",
"Setting port with trailing U+0009 (https:)",
"Setting pathname with leading U+0009 (https:)",
"Setting pathname with middle U+0009 (https:)",
"Setting pathname with trailing U+0009 (https:)",
"Setting search with leading U+0009 (https:)",
"Setting search with middle U+0009 (https:)",
"Setting search with trailing U+0009 (https:)",
"Setting hash with leading U+0009 (https:)",
"Setting hash with middle U+0009 (https:)",
"Setting hash with trailing U+0009 (https:)",
"Setting protocol with leading U+000A (https:)",
"Setting protocol with U+000A before inserted colon (https:)",
"Setting host with leading U+000A (https:)",
"Setting hostname with leading U+000A (https:)",
"Setting host with middle U+000A (https:)",
"Setting hostname with middle U+000A (https:)",
"Setting host with trailing U+000A (https:)",
"Setting hostname with trailing U+000A (https:)",
"Setting port with leading U+000A (https:)",
"Setting port with middle U+000A (https:)",
"Setting port with trailing U+000A (https:)",
"Setting pathname with leading U+000A (https:)",
"Setting pathname with middle U+000A (https:)",
"Setting pathname with trailing U+000A (https:)",
"Setting search with leading U+000A (https:)",
"Setting search with middle U+000A (https:)",
"Setting search with trailing U+000A (https:)",
"Setting hash with leading U+000A (https:)",
"Setting hash with middle U+000A (https:)",
"Setting hash with trailing U+000A (https:)",
"Setting protocol with leading U+000D (https:)",
"Setting protocol with U+000D before inserted colon (https:)",
"Setting host with leading U+000D (https:)",
"Setting hostname with leading U+000D (https:)",
"Setting host with middle U+000D (https:)",
"Setting hostname with middle U+000D (https:)",
"Setting host with trailing U+000D (https:)",
"Setting hostname with trailing U+000D (https:)",
"Setting port with leading U+000D (https:)",
"Setting port with middle U+000D (https:)",
"Setting port with trailing U+000D (https:)",
"Setting pathname with leading U+000D (https:)",
"Setting pathname with middle U+000D (https:)",
"Setting pathname with trailing U+000D (https:)",
"Setting search with leading U+000D (https:)",
"Setting search with middle U+000D (https:)",
"Setting search with trailing U+000D (https:)",
"Setting hash with leading U+000D (https:)",
"Setting hash with middle U+000D (https:)",
"Setting hash with trailing U+000D (https:)",
"Setting protocol with leading U+001F (https:)",
"Setting protocol with U+001F before inserted colon (https:)",
"Setting host with leading U+001F (https:)",
"Setting host with middle U+001F (https:)",
"Setting host with trailing U+001F (https:)",
"Setting port with middle U+001F (https:)",
"Setting port with trailing U+001F (https:)",
"Setting protocol with leading U+0000 (wpt++:)",
"Setting protocol with U+0000 before inserted colon (wpt++:)",
"Setting host with leading U+0000 (wpt++:)",
"Setting host with middle U+0000 (wpt++:)",
"Setting host with trailing U+0000 (wpt++:)",
"Setting port with middle U+0000 (wpt++:)",
"Setting port with trailing U+0000 (wpt++:)",
"Setting pathname with leading U+0000 (wpt++:)",
"Setting pathname with middle U+0000 (wpt++:)",
"Setting pathname with trailing U+0000 (wpt++:)",
"Setting protocol with leading U+0009 (wpt++:)",
"Setting protocol with U+0009 before inserted colon (wpt++:)",
"Setting host with leading U+0009 (wpt++:)",
"Setting hostname with leading U+0009 (wpt++:)",
"Setting host with middle U+0009 (wpt++:)",
"Setting hostname with middle U+0009 (wpt++:)",
"Setting host with trailing U+0009 (wpt++:)",
"Setting hostname with trailing U+0009 (wpt++:)",
"Setting port with leading U+0009 (wpt++:)",
"Setting port with middle U+0009 (wpt++:)",
"Setting port with trailing U+0009 (wpt++:)",
"Setting pathname with leading U+0009 (wpt++:)",
"Setting pathname with middle U+0009 (wpt++:)",
"Setting pathname with trailing U+0009 (wpt++:)",
"Setting search with leading U+0009 (wpt++:)",
"Setting search with middle U+0009 (wpt++:)",
"Setting search with trailing U+0009 (wpt++:)",
"Setting hash with leading U+0009 (wpt++:)",
"Setting hash with middle U+0009 (wpt++:)",
"Setting hash with trailing U+0009 (wpt++:)",
"Setting protocol with leading U+000A (wpt++:)",
"Setting protocol with U+000A before inserted colon (wpt++:)",
"Setting host with leading U+000A (wpt++:)",
"Setting hostname with leading U+000A (wpt++:)",
"Setting host with middle U+000A (wpt++:)",
"Setting hostname with middle U+000A (wpt++:)",
"Setting host with trailing U+000A (wpt++:)",
"Setting hostname with trailing U+000A (wpt++:)",
"Setting port with leading U+000A (wpt++:)",
"Setting port with middle U+000A (wpt++:)",
"Setting port with trailing U+000A (wpt++:)",
"Setting pathname with leading U+000A (wpt++:)",
"Setting pathname with middle U+000A (wpt++:)",
"Setting pathname with trailing U+000A (wpt++:)",
"Setting search with leading U+000A (wpt++:)",
"Setting search with middle U+000A (wpt++:)",
"Setting search with trailing U+000A (wpt++:)",
"Setting hash with leading U+000A (wpt++:)",
"Setting hash with middle U+000A (wpt++:)",
"Setting hash with trailing U+000A (wpt++:)",
"Setting protocol with leading U+000D (wpt++:)",
"Setting protocol with U+000D before inserted colon (wpt++:)",
"Setting host with leading U+000D (wpt++:)",
"Setting hostname with leading U+000D (wpt++:)",
"Setting host with middle U+000D (wpt++:)",
"Setting hostname with middle U+000D (wpt++:)",
"Setting host with trailing U+000D (wpt++:)",
"Setting hostname with trailing U+000D (wpt++:)",
"Setting port with leading U+000D (wpt++:)",
"Setting port with middle U+000D (wpt++:)",
"Setting port with trailing U+000D (wpt++:)",
"Setting pathname with leading U+000D (wpt++:)",
"Setting pathname with middle U+000D (wpt++:)",
"Setting pathname with trailing U+000D (wpt++:)",
"Setting search with leading U+000D (wpt++:)",
"Setting search with middle U+000D (wpt++:)",
"Setting search with trailing U+000D (wpt++:)",
"Setting hash with leading U+000D (wpt++:)",
"Setting hash with middle U+000D (wpt++:)",
"Setting hash with trailing U+000D (wpt++:)",
"Setting protocol with leading U+001F (wpt++:)",
"Setting protocol with U+001F before inserted colon (wpt++:)",
"Setting host with leading U+001F (wpt++:)",
"Setting host with middle U+001F (wpt++:)",
"Setting host with trailing U+001F (wpt++:)",
"Setting port with middle U+001F (wpt++:)",
"Setting port with trailing U+001F (wpt++:)",
"Setting pathname with leading U+001F (wpt++:)",
"Setting pathname with middle U+001F (wpt++:)",
"Setting pathname with trailing U+001F (wpt++:)"
]
},
"url-tojson",
{
"name": "urlencoded-parser",
"expectFail": [
"URLSearchParams constructed with: %EF%BB%BFtest=%EF%BB%BF",
"request.formData() with input: test=",
"response.formData() with input: test=",
"request.formData() with input: %FE%FF",
"response.formData() with input: %FE%FF",
"request.formData() with input: %FF%FE",
"response.formData() with input: %FF%FE",
"request.formData() with input: %C2",
"response.formData() with input: %C2",
"request.formData() with input: %C2x",
"response.formData() with input: %C2x",
"request.formData() with input: _charset_=windows-1252&test=%C2x",
"response.formData() with input: _charset_=windows-1252&test=%C2x",
"request.formData() with input: %=a",
"response.formData() with input: %=a",
"request.formData() with input: %a=a",
"response.formData() with input: %a=a",
"request.formData() with input: %a_=a",
"response.formData() with input: %a_=a",
"request.formData() with input: id=0&value=%",
"response.formData() with input: id=0&value=%",
"request.formData() with input: b=%2sf%2a",
"response.formData() with input: b=%2sf%2a",
"request.formData() with input: b=%2%2af%2a",
"response.formData() with input: b=%2%2af%2a",
"request.formData() with input: b=%%2a",
"response.formData() with input: b=%%2a"
]
},
"urlsearchparams-append",
{
"name": "urlsearchparams-constructor",
"expectFail": [
"URLSearchParams constructor, empty string as argument",
"Construct with 2 unpaired surrogates (no trailing)",
"Construct with 3 unpaired surrogates (no leading)",
"Construct with object with NULL, non-ASCII, and surrogate keys"
]
},
"urlsearchparams-delete",
{
"name": "urlsearchparams-foreach",
"expectFail": [
"For-of Check",
"delete next param during iteration",
"delete current param during iteration",
"delete every param seen during iteration"
]
},
"urlsearchparams-get",
"urlsearchparams-getall",
"urlsearchparams-has",
"urlsearchparams-set",
"urlsearchparams-sort",
"urlsearchparams-stringifier"
]
}

View file

@ -111,13 +111,13 @@ window.add_completion_callback((tests, harnessStatus) => {
console.log(`\nfailures:\n`);
}
for (const result of failed) {
console.log(` ${result.name}`);
console.log(` ${JSON.stringify(result.name)}`);
}
if (expectedFailedButPassedCount > 0) {
console.log(`\nexpected failures that passed:\n`);
}
for (const result of expectedFailedButPassed) {
console.log(` ${result.name}`);
console.log(` ${JSON.stringify(result.name)}`);
}
console.log(
`\ntest result: ${

View file

@ -109,3 +109,38 @@ cargo clean && cargo build -vv
# Run:
./target/debug/deno run cli/tests/002_hello.ts
```
### Testing
> :warning: **IMPORTANT**: Our test suite relies on certain entries to be
> configured in your /etc/hosts file. If these entries are not present in your
> /etc/hosts file, the `web_platform_tests` test **will** fail. To configure
> these entries, run the following command:
> ```shell
> # macOS / Linux
> cd test_utils/wpt/
> ./wpt make-hosts-file | sudo tee -a /etc/hosts
> ```
> ```powershell
> # Windows (use powershell!)
> cd test_utils/wpt/
> python wpt make-hosts-file | Out-File $env:SystemRoot\System32\drivers\etc\hosts -Encoding ascii -Append
> ```
> If you use WSL, be aware that WSL may attempt to override /etc/hosts each time
> it is launched, which would then require you to re-run hosts this setup. This
> behavior
> [can be configured](https://docs.microsoft.com/en-us/windows/wsl/wsl-config#network).
```shell
# Run the full test suite:
cargo test
# Run a specific test:
cargo test web_platform_tests
# Run a specific test, and don't swallow test output:
cargo test web_platform_tests -- --nocapture
```

View file

@ -335,7 +335,7 @@ Deno.test("contentType", async () => {
Deno.test("file_server running as library", async function (): Promise<void> {
await startFileServerAsLibrary();
try {
const res = await fetch("http://localhost:8000");
const res = await fetch("http://localhost:4504");
assertEquals(res.status, 200);
const _ = await res.text();
} finally {

View file

@ -1,7 +1,7 @@
import { serve } from "../server.ts";
import { serveFile } from "../file_server.ts";
const server = serve({ port: 8000 });
const server = serve({ port: 4504 });
console.log("Server running...");