// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

const { assert } = chai;
import '../../../../front_end/dom_extension/DOMExtension.js';

declare global {
    function createElementWithClass(tagName: string, className?: string, content?: string): HTMLElement;

    interface HTMLElement {
        traverseNextNode(node: HTMLElement): HTMLElement;
        createChild(tagName: string, className?: string, content?: string): HTMLElement;
    }
}

function createSlot(parent, name) {
    const slot = parent.createChild('slot');
    if (name)
        slot.name = name;
    return slot;
}

function createChild(parent, tagName, name, text = '') {
    const child = parent.createChild(tagName, name);
    if (name)
        child.slot = name;
    child.textContent = text;
    return child;
}


describe('DataGrid', () => {
    it('Traverse Node with Children', () => {
        let component1 = createElementWithClass('div', 'component1');
        createChild(component1, 'div', 'component1-content', 'text 1');
        createChild(component1, 'div', 'component2-content', 'text 2');
        createChild(component1, 'span', undefined, 'text 3');
        createChild(component1, 'span', 'component1-content', 'text 4');

        // Now we have:
        /*
        * <div class="component1">
        *    <div class="component1-content" slot="component1-content">text 1</div>
        *    <div class="component2-content" slot="component2-content">text 2</div>
        *    <span>text 3</span><span class="component1-content" slot="component1-content">text 4</span>
        * </div>
        */


        let node = component1;
        assert.equal(node.nodeValue, null, 'root node value is incorrect');
        assert.equal(node.nodeName, 'DIV', 'root node name is incorrect');
        assert.equal(node.className, 'component1', 'root node class is incorrect');

        node = node.traverseNextNode(component1);
        assert.equal(node.nodeName, 'DIV', 'first child node name is incorrect');
        assert.equal(node.className, 'component1-content', 'first child class is incorrect');

        node = node.traverseNextNode(component1);
        assert.equal(node.nodeValue, "text 1", 'second child node value is incorrect');

        node = node.traverseNextNode(component1);
        assert.equal(node.nodeName, 'DIV', 'second child node name is incorrect');
        assert.equal(node.className, 'component2-content', 'second child class is incorrect');

        node = node.traverseNextNode(component1);
        assert.equal(node.nodeValue, "text 2", 'second child node value is incorrect');

        node = node.traverseNextNode(component1);
        assert.equal(node.nodeName, 'SPAN', 'third child node name is incorrect');
        assert.equal(node.className, '', 'third child class is incorrect');

        node = node.traverseNextNode(component1);
        assert.equal(node.nodeValue, "text 3", 'third child node value is incorrect');

        node = node.traverseNextNode(component1);
        assert.equal(node.nodeName, 'SPAN', 'forth child node name is incorrect');
        assert.equal(node.className, 'component1-content', 'forth child class is incorrect');

        node = node.traverseNextNode(component1);
        assert.equal(node.nodeValue, "text 4", 'forth child node value is incorrect');
    });

    it('Traverse Node with Shadows',  () => {
        var component1 = createElementWithClass('div', 'component1');
        var shadow1 = component1.attachShadow({mode: 'open'});
        var shadow1Content = createElementWithClass('div', 'shadow-component1');
        shadow1.appendChild(shadow1Content);
        var component2 = shadow1Content.createChild('div', 'component2');
        var shadow2 = component2.attachShadow({mode: 'open'});
        var shadow2Content = createElementWithClass('div', 'shadow-component1');
        shadow2.appendChild(shadow2Content);
        var midDiv = createChild(shadow2Content, 'div', 'mid-div');
        createChild(midDiv, 'div', undefined, 'component2-text');

        // Now we have:
        /*
        * <div class="component1"></div>
        * <div class="shadow-component1"><div class="component2"></div></div>
        * <div class="shadow-component1"><div class="mid-div" slot="mid-div"><div>component2-text</div></div></div>
        */

        let node = component1;
        assert.equal(node.nodeName, 'DIV', 'root node name is incorrect');
        assert.equal(node.className, 'component1', 'root node class is incorrect');

        node = node.traverseNextNode(component1);
        assert.equal(node.nodeName, '#document-fragment', 'first document fragment node name is incorrect');

        node = node.traverseNextNode(component1);
        assert.equal(node.nodeName, 'DIV', 'first document fragment child node name is incorrect');
        assert.equal(node.className, 'shadow-component1', 'first document fragment child node name is incorrect');

        node = node.traverseNextNode(component1);
        assert.equal(node.nodeName, 'DIV');
        assert.equal(node.className, 'component2');

        node = node.traverseNextNode(component1);
        assert.equal(node.nodeName, '#document-fragment');

        node = node.traverseNextNode(component1);
        assert.equal(node.nodeName, 'DIV');
        assert.equal(node.className, 'shadow-component1');

        node = node.traverseNextNode(component1);
        assert.equal(node.nodeName, 'DIV');
        assert.equal(node.className, 'mid-div');

        node = node.traverseNextNode(component1);
        assert.equal(node.nodeName, 'DIV');
        assert.equal(node.className, '');

        node = node.traverseNextNode(component1);
        assert.equal(node.nodeName, '#text');
        assert.equal(node.nodeValue, 'component2-text');
    });

    it('Traverse Node with Slots', () => {
        var component1 = createElementWithClass('div', 'component1');
        var shadow1 = component1.attachShadow({mode: 'open'});
        var shadow1Content = createElementWithClass('div', 'shadow-component1');
        shadow1.appendChild(shadow1Content);
        createSlot(shadow1Content, 'component1-content');
        createSlot(shadow1Content, null);
        var component2 = shadow1Content.createChild('div', 'component2');
        var shadow2 = component2.attachShadow({mode: 'open'});
        createSlot(component2, 'component2-content');
        createChild(
            component2, 'div', 'component2-content', 'component2 light dom text');
        var shadow2Content = createElementWithClass('div', 'shadow-component1');
        shadow2.appendChild(shadow2Content);
        var midDiv = createChild(shadow2Content, 'div', 'mid-div');
        createChild(midDiv, 'div', undefined, 'component2-text');
        createSlot(midDiv, null);
        createSlot(midDiv, 'component2-content');

        // Now we have:
        /*
        * <div class="component1"></div>
        * <div class="shadow-component1">
        *    <slot name="component1-content"></slot>
        *    <slot></slot>
        *    <div class="component2">
        *       <slot name="component2-content"></slot>
        *       <div class="component2-content" slot="component2-content">component2 light dom text</div>
        *    </div>
        * </div>
        * <div class="shadow-component1">
        *    <div class="mid-div" slot="mid-div">
        *       <div>component2-text</div>
        *       <slot></slot>
        *       <slot name="component2-content"></slot>
        *    </div>
        * </div>
        */

        let node = component1;
        assert.equal(node.nodeName, 'DIV', 'root node name is incorrect');
        assert.equal(node.className, 'component1', 'root node class is incorrect');

        node = node.traverseNextNode(component1);
        assert.equal(node.nodeName, '#document-fragment', 'first document fragment node name is incorrect');

        node = node.traverseNextNode(component1);
        assert.equal(node.nodeName, 'DIV', 'first document fragment child node name is incorrect');
        assert.equal(node.className, 'shadow-component1', 'first document fragment child node name is incorrect');

        node = node.traverseNextNode(component1);
        assert.equal(node.nodeName, 'SLOT', 'first slot node name is incorrect');

        node = node.traverseNextNode(component1);
        assert.equal(node.nodeName, 'SLOT', 'second slot node name is incorrect');

        node = node.traverseNextNode(component1);
        assert.equal(node.nodeName, 'DIV');
        assert.equal(node.className, 'component2');

        node = node.traverseNextNode(component1);
        assert.equal(node.nodeName, '#document-fragment');

        node = node.traverseNextNode(component1);
        assert.equal(node.nodeName, 'DIV');
        assert.equal(node.className, 'shadow-component1');

        node = node.traverseNextNode(component1);
        assert.equal(node.nodeName, 'DIV');
        assert.equal(node.className, 'mid-div');

        node = node.traverseNextNode(component1);
        assert.equal(node.nodeName, 'DIV');
        assert.equal(node.className, '');

        node = node.traverseNextNode(component1);
        assert.equal(node.nodeValue, 'component2-text');
        assert.equal(node.nodeName, '#text');

        node = node.traverseNextNode(component1);
        assert.equal(node.nodeName, 'SLOT');

        node = node.traverseNextNode(component1);
        assert.equal(node.nodeName, 'SLOT');

        node = node.traverseNextNode(component1);
        assert.equal(node.nodeName, 'SLOT');

        node = node.traverseNextNode(component1);
        assert.equal(node.nodeName, 'DIV');
        assert.equal(node.className, 'component2-content');

        node = node.traverseNextNode(component1);
        assert.equal(node.nodeValue, 'component2 light dom text');
        assert.equal(node.nodeName, '#text');
    });
});
