<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>WebShare Test: canShare without files</title>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
  </head>
  <body>
    <script>
      'use strict';

      test(() => {
        assert_equals(navigator.canShare(), false);
      }, 'canShare with no arguments (same as empty dictionary)');

      test(() => {
        assert_equals(navigator.canShare({}), false);
      }, 'canShare with an empty dictionary');

      test(() => {
        assert_equals(navigator.canShare(undefined), false);
      }, 'canShare with a undefined argument (same as empty dictionary)');

      test(() => {
        assert_equals(navigator.canShare(null), false);
      }, 'canShare with a null argument (same as empty dictionary)');

      test(() => {
        assert_equals(navigator.canShare({unused: 'unexpected field'}), false);
      }, 'canShare with a dictionary containing only surplus fields');

      test(() => {
        // URL is invalid in that the URL Parser returns failure (port is too
        // large).
        const url = 'http://example.com:65536';
        assert_equals(navigator.canShare({url}), false);
      }, 'canShare with an invalid URL');

      test(() => {
        assert_equals(navigator.canShare({title: undefined}), false);
      }, 'canShare with attribute undefined is equivalent to omitting the attribute');

      test(() => {
        assert_equals(navigator.canShare({title: 'subject'}), true);
      }, 'canShare with title');

      test(() => {
        assert_equals(navigator.canShare({text: 'body'}), true);
      }, 'canShare with text');

      test(() => {
        assert_equals(navigator.canShare({url: 'https://www.example.com/some/path?some_query#some_fragment'}), true);
      }, 'canShare with URL');

      test(() => {
        assert_equals(navigator.canShare({title: null}), true);
      }, 'canShare with null attribute');

      test(() => {
        assert_equals(navigator.canShare({text: 123}), true);
      }, 'canShare with number');

      test(() => {
        assert_equals(navigator.canShare({url: {toString() { return 'https://example.com/'; }}}), true);
      }, 'canShare with object');

      test(() => {
        assert_equals(navigator.canShare({title: 'subject', text: 'body', url: 'https://example.com/', unused: 'unexpected field'}), true);
      }, 'canShare with unexpected field');

      test(() => {
        assert_equals(navigator.canShare({url: 'data:the url'}), true);
      }, 'canShare with data URL');

      test(() => {
        assert_equals(navigator.canShare({url: ''}), true);
      }, 'canShare with empty URL');

      test(() => {
        assert_equals(navigator.canShare({url: '//www.example.com/some/path?some_query#some_fragment'}), true);
      }, 'canShare with URL having no scheme');
    </script>
  </body>
</html>
