summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuca Casonato <lucacasonato@yahoo.com>2021-01-24 22:29:36 +0100
committerGitHub <noreply@github.com>2021-01-24 22:29:36 +0100
commit66e99d349b31f5cd30b868d80ebdab6ba749fd96 (patch)
tree2fdf22255cb15a750574d37b33de2a4637d62a5e
parentfeff6361b1247c82bb86aedfea349b04899b9610 (diff)
tests: enable wpt for url (#9046)
-rw-r--r--.github/workflows/ci.yml10
-rw-r--r--cli/tests/integration_tests.rs97
-rw-r--r--cli/tests/unit/net_test.ts4
-rw-r--r--cli/tests/wpt.jsonc406
-rw-r--r--cli/tests/wpt_testharnessconsolereporter.js4
-rw-r--r--docs/contributing/building_from_source.md35
-rw-r--r--std/http/file_server_test.ts2
-rw-r--r--std/http/testdata/file_server_as_library.ts2
8 files changed, 551 insertions, 9 deletions
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index cb3a9e440..f5fc1aa81 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -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
diff --git a/cli/tests/integration_tests.rs b/cli/tests/integration_tests.rs
index 40a23bcfa..bd197daff 100644
--- a/cli/tests/integration_tests.rs
+++ b/cli/tests/integration_tests.rs
@@ -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())
diff --git a/cli/tests/unit/net_test.ts b/cli/tests/unit/net_test.ts
index 99af959cc..f69745ea5 100644
--- a/cli/tests/unit/net_test.ts
+++ b/cli/tests/unit/net_test.ts
@@ -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 });
diff --git a/cli/tests/wpt.jsonc b/cli/tests/wpt.jsonc
index 2f9573875..d0ea8cea5 100644
--- a/cli/tests/wpt.jsonc
+++ b/cli/tests/wpt.jsonc
@@ -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"
]
}
diff --git a/cli/tests/wpt_testharnessconsolereporter.js b/cli/tests/wpt_testharnessconsolereporter.js
index 2e0e06c02..24979ce52 100644
--- a/cli/tests/wpt_testharnessconsolereporter.js
+++ b/cli/tests/wpt_testharnessconsolereporter.js
@@ -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: ${
diff --git a/docs/contributing/building_from_source.md b/docs/contributing/building_from_source.md
index 227b42418..7801d1b15 100644
--- a/docs/contributing/building_from_source.md
+++ b/docs/contributing/building_from_source.md
@@ -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
+```
diff --git a/std/http/file_server_test.ts b/std/http/file_server_test.ts
index 638121b45..94d97cc37 100644
--- a/std/http/file_server_test.ts
+++ b/std/http/file_server_test.ts
@@ -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 {
diff --git a/std/http/testdata/file_server_as_library.ts b/std/http/testdata/file_server_as_library.ts
index cd4bf68db..87ff31584 100644
--- a/std/http/testdata/file_server_as_library.ts
+++ b/std/http/testdata/file_server_as_library.ts
@@ -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...");