| <!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> |