159 lines
4.4 KiB
HTML
159 lines
4.4 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<title>WebShare Test: canShare method tests</title>
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
</head>
|
|
<body>
|
|
<script>
|
|
test(() => {
|
|
assert_false(
|
|
navigator.canShare(),
|
|
"no arguments (uses default argument value, which is empty dictionary)"
|
|
);
|
|
|
|
assert_false(navigator.canShare({}), "empty dictionary not allowed");
|
|
|
|
assert_false(navigator.canShare(undefined), "empty dictionary not allowed");
|
|
|
|
assert_false(navigator.canShare(null), "empty dictionary not allowed");
|
|
|
|
assert_false(
|
|
navigator.canShare({ unused: "unexpected field" }),
|
|
"results in empty dictionary, which is not allowed"
|
|
);
|
|
}, "canShare() empty and default dictionary");
|
|
|
|
test(() => {
|
|
assert_true(navigator.canShare({ url: "http://a.b" }), "http URL is ok");
|
|
|
|
assert_true(navigator.canShare({ url: "https://a.b" }), "https URL is ok");
|
|
|
|
assert_false(
|
|
navigator.canShare({ url: "http://a.b:65536" }),
|
|
"URL is invalid"
|
|
);
|
|
|
|
assert_false(
|
|
navigator.canShare({ url: "data:the url" }),
|
|
"data URL is not allowed"
|
|
);
|
|
|
|
assert_false(
|
|
navigator.canShare({ url: "file:///usr/" }),
|
|
"file URL is not allowed"
|
|
);
|
|
|
|
assert_true(
|
|
navigator.canShare({
|
|
url: "https://a.b/path?query#fragment",
|
|
}),
|
|
"canShare with URL"
|
|
);
|
|
|
|
assert_true(
|
|
navigator.canShare({
|
|
url: {
|
|
toString() {
|
|
return "https://a.b/";
|
|
},
|
|
},
|
|
}),
|
|
"canShare URL as with object with stringifier"
|
|
);
|
|
|
|
assert_true(
|
|
navigator.canShare(
|
|
{ url: "" },
|
|
"canShare with empty URL, which resolves as the doc's base URL"
|
|
)
|
|
);
|
|
|
|
assert_true(
|
|
navigator.canShare({
|
|
url: "//a.b/path?query#fragment",
|
|
}),
|
|
"canShare with URL having no scheme"
|
|
);
|
|
|
|
assert_true(
|
|
navigator.canShare({
|
|
url: "relative",
|
|
}),
|
|
"canShare relative URL, resolved against API base URL"
|
|
);
|
|
}, "canShare() url member");
|
|
|
|
test(() => {
|
|
assert_false(
|
|
navigator.canShare({ title: undefined }),
|
|
"canShare with attribute undefined is equivalent to omitting the attribute"
|
|
);
|
|
|
|
assert_true(navigator.canShare({ title: "subject" }), "canShare with title");
|
|
|
|
assert_true(navigator.canShare({ title: null }), "stringified null");
|
|
}, "canShare() title member");
|
|
|
|
test(() => {
|
|
assert_true(navigator.canShare({ text: "" }), "ok to share empty text");
|
|
|
|
assert_true(
|
|
navigator.canShare({ text: "some text 🤔" }),
|
|
"ok to share unicode"
|
|
);
|
|
|
|
assert_true(navigator.canShare({ text: 123 }), "number is stringified");
|
|
}, "canShare() text member");
|
|
|
|
test(() => {
|
|
const file = new File(["hello"], "file", { type: "text/plain" });
|
|
const file2 = new File([], "file2");
|
|
|
|
assert_false(navigator.canShare({ files: [] }), "empty list is not allowed");
|
|
|
|
assert_false(
|
|
navigator.canShare({
|
|
url: "https://a.b:800000",
|
|
files: [file, file2],
|
|
}),
|
|
"invalid URL invalidates the share"
|
|
);
|
|
|
|
assert_true(
|
|
navigator.canShare({ files: [file] }),
|
|
"single file is ok to share"
|
|
);
|
|
|
|
assert_true(
|
|
navigator.canShare({ files: [file, file2, file] }),
|
|
"repeated files is ok to share"
|
|
);
|
|
|
|
assert_true(
|
|
navigator.canShare({
|
|
files: [file, file2],
|
|
text: "some texts",
|
|
url: "https://example.com/",
|
|
}),
|
|
"is ok to share files, text, and url together"
|
|
);
|
|
}, "canShare() files member");
|
|
|
|
test(() => {
|
|
assert_true(
|
|
navigator.canShare({
|
|
title: "subject",
|
|
text: "body",
|
|
url: "https://a.b/",
|
|
files: [new File([], "file")],
|
|
unused: "unexpected field",
|
|
}),
|
|
"canShare with unexpected field"
|
|
);
|
|
}, "canShare() multiple members");
|
|
</script>
|
|
</body>
|
|
</html>
|