chromium/third_party/blink/web_tests/external/wpt/svg/linking/scripted/rellist-feature-detection.svg

<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg"
     xmlns:h="http://www.w3.org/1999/xhtml">
  <title>Test SVGAElement relList attribute</title>
  <metadata>
    <h:link rel="help" href="https://svgwg.org/svg2-draft/linking.html#InterfaceSVGAElement"/>
  </metadata>
  <h:script src="/resources/testharness.js"/>
  <h:script src="/resources/testharnessreport.js"/>
  <script><![CDATA[
    let link_support_table = {};
    // https://html.spec.whatwg.org/multipage/links.html#linkTypes
    link_support_table['a'] =  {
    supported : ['noreferrer', 'noopener'],
    unsupported : ['author', 'bookmark', 'external', 'help', 'license',
                    'nofollow', 'pingback', 'prev', 'search', 'tag',
                    'modulepreload', 'preload', 'preconnect', 'dns-prefetch',
                    'stylesheet', 'import', 'icon', 'alternate', 'prefetch',
                    'prerender', 'next', 'manifest', 'apple-touch-icon',
                    'apple-touch-icon-precomposed', 'canonical']
    };

    function test_rellist(tag_name, rel_table) {
    let element = document.createElementNS("http://www.w3.org/2000/svg", tag_name);
    let tag = element.tagName;
    // Test that setting rel is also setting relList, for both
    // valid and invalid values.
    element.rel = 'whatever';
    assert_true(element.relList.contains('whatever'), 'tag = ' + tag + ', setting rel must work');
    element.rel = 'prefetch';
    assert_true(element.relList.contains('prefetch'), 'tag = ' + tag + ', setting rel must work');
    // Test that add() works.
    element.relList.add('preloadwhatever');
    assert_equals(element.rel, 'prefetch preloadwhatever', 'tag = ' + tag + ', add must work');
    assert_true(element.relList.contains('preloadwhatever'), 'tag = ' + tag + ', add must work');
    // Test that remove() works.
    element.relList.remove('preloadwhatever');
    assert_equals(element.rel, 'prefetch', 'tag = ' + tag + ', remove must work');
    assert_false(element.relList.contains('preloadwhatever'), 'tag = ' + tag + ', remove must work');
    // Test that toggle() works.
    element.relList.toggle('prefetch', false);
    assert_equals(element.rel, '', 'tag = ' + tag + ', toggle must work');
    element.relList.toggle('prefetch', true);
    assert_equals(element.rel, 'prefetch', 'tag = ' + tag + ', toggle must work');
    // Test that replace() works.
    element.relList.replace('prefetch', 'first');
    assert_equals(element.rel, 'first', 'tag = ' + tag + ', replace must work');
    // Test that indexed item getter works.
    element.relList.add('second');
    assert_equals(element.relList.length, 2, 'tag = ' + tag + ', relList length must be correct');
    assert_equals(element.relList[0], 'first', 'tag = ' + tag + ', relList indexed item must work');
    assert_equals(element.relList[1], 'second', 'tag = ' + tag + ', relList indexed item must work');
    // Test that relList is  [SameObject].
    let savedRelList = element.relList;
    element.rel = 'something';
    assert_equals(element.relList, savedRelList, 'tag = ' + tag + ', SameObject must work');

    // Test that supports() is returning true for valid values
    // and false for invalid ones.
    let supported = rel_table['supported'];
    for (let link_type in supported) {
        assert_true(element.relList.supports(supported[link_type]), 'tag = ' + tag + ', link type = ' + supported[link_type] + ' must be supported');
    }
    let unsupported = rel_table['unsupported'];
    for (let link_type in unsupported) {
        assert_false(element.relList.supports(unsupported[link_type]), 'tag = ' + tag + ', link type = ' + unsupported[link_type] + ' must be unsupported');
    }
    }

    test(function() {
    test_rellist('a', link_support_table['a']);
    }, 'Make sure that relList based feature detection is working');
  ]]></script>
</svg>