<!DOCTYPE html>
<!--
@license
Copyright (C) 2018 The Android Open Source Project

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->

<title>safe-types-behavior</title>

<script src="../../bower_components/webcomponentsjs/webcomponents.min.js"></script>
<script src="../../bower_components/web-component-tester/browser.js"></script>
<link rel="import" href="../../test/common-test-setup.html"/>
<link rel="import" href="safe-types-behavior.html">

<script>void(0);</script>

<test-fixture id="basic">
  <template>
    <safe-types-element></safe-types-element>
  </template>
</test-fixture>

<script>
  suite('gr-tooltip-behavior tests', () => {
    let element;
    let sandbox;

    suiteSetup(() => {
      Polymer({
        is: 'safe-types-element',
        _legacyUndefinedCheck: true,
        behaviors: [Gerrit.SafeTypes],
      });
    });

    setup(() => {
      sandbox = sinon.sandbox.create();
      element = fixture('basic');
    });

    teardown(() => {
      sandbox.restore();
    });

    test('SafeUrl accepts valid urls', () => {
      function accepts(url) {
        const safeUrl = new element.SafeUrl(url);
        assert.isOk(safeUrl);
        assert.equal(url, safeUrl.asString());
      }
      accepts('http://www.google.com/');
      accepts('https://www.google.com/');
      accepts('HtTpS://www.google.com/');
      accepts('//www.google.com/');
      accepts('/c/1234/file/path.html@45');
      accepts('#hash-url');
      accepts('mailto:name@example.com');
    });

    test('SafeUrl rejects invalid urls', () => {
      function rejects(url) {
        assert.throws(() => { new element.SafeUrl(url); });
      }
      rejects('javascript://alert("evil");');
      rejects('ftp:example.com');
      rejects('data:text/html,scary business');
    });

    suite('safeTypesBridge', () => {
      function acceptsString(value, type) {
        assert.equal(Gerrit.SafeTypes.safeTypesBridge(value, type),
            value);
      }

      function rejects(value, type) {
        assert.throws(() => { Gerrit.SafeTypes.safeTypesBridge(value, type); });
      }

      test('accepts valid URL strings', () => {
        acceptsString('/foo/bar', 'URL');
        acceptsString('#baz', 'URL');
      });

      test('rejects invalid URL strings', () => {
        rejects('javascript://void();', 'URL');
      });

      test('accepts SafeUrl values', () => {
        const url = '/abc/123';
        const safeUrl = new element.SafeUrl(url);
        assert.equal(Gerrit.SafeTypes.safeTypesBridge(safeUrl, 'URL'), url);
      });

      test('rejects non-string or non-SafeUrl types', () => {
        rejects(3.1415926, 'URL');
      });

      test('accepts any binding to STRING or CONSTANT', () => {
        acceptsString('foo/bar/baz', 'STRING');
        acceptsString('lorem ipsum dolor', 'CONSTANT');
      });

      test('rejects all other types', () => {
        rejects('foo', 'JAVASCRIPT');
        rejects('foo', 'HTML');
        rejects('foo', 'RESOURCE_URL');
        rejects('foo', 'STYLE');
      });
    });
  });
</script>