!C99Shell v. 2.5 [PHP 8 Update] [24.05.2025]!

Software: Apache/2.4.41 (Ubuntu). PHP/8.0.30 

uname -a: Linux apirnd 5.4.0-204-generic #224-Ubuntu SMP Thu Dec 5 13:38:28 UTC 2024 x86_64 

uid=33(www-data) gid=33(www-data) groups=33(www-data) 

Safe-mode: OFF (not secure)

/var/www/html/wincloud_gateway/node_modules/reactstrap/src/__tests__/   drwxr-xr-x
Free 12.97 GB of 57.97 GB (22.38%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Self remove    Logout    


Viewing file:     TooltipPopoverWrapper.spec.js (21.59 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
import React from 'react';
import { mount } from 'enzyme';
import { PopperContent } from '../';
import TooltipPopoverWrapper from '../TooltipPopoverWrapper';

describe('Tooltip', () => {
  let isOpen;
  let toggle;
  let element;
  let container;
  let target;
  let innerTarget;
  let synthEvent;

  beforeEach(() => {
    isOpen = false;
    toggle = () => { isOpen = !isOpen; };
    element = document.createElement('div');
    container = document.createElement('div');
    element.innerHTML = '<p id="target">This is the Tooltip <span id="innerTarget">target</span>.</p>';
    element.setAttribute('id', 'testContainer');
    container.setAttribute('id', 'container');
    element.appendChild(container);
    document.body.appendChild(element);
    target = document.getElementById('target');
    innerTarget = document.getElementById('innerTarget');
    synthEvent = { persist: () => {} };

    jest.useFakeTimers();
  });

  afterEach(() => {
    jest.clearAllTimers();
    document.body.removeChild(element);
    document.body.innerHTML = '';
    element = null;
    container = null;
    target = null;
    innerTarget = null;
  });

  it('should render with "hideArrow" false by default', () => {
    const wrapper = mount(
      <TooltipPopoverWrapper target="target" isOpen={isOpen} toggle={toggle}>
        Tooltip Content
      </TooltipPopoverWrapper>);

    expect(wrapper.prop('hideArrow')).toBe(false);
  });

  it('should render with "hideArrow" true when "hideArrow" prop is truthy', () => {
    const wrapper = mount(
      <TooltipPopoverWrapper target="target" isOpen={isOpen} toggle={toggle} hideArrow>
        Tooltip Content
      </TooltipPopoverWrapper>);

    expect(wrapper.prop('hideArrow')).toBe(true);
  });

  it('should not render children if isOpen is false', () => {
    const wrapper = mount(
      <TooltipPopoverWrapper target="target" isOpen={isOpen} toggle={toggle}>
        Tooltip Content
      </TooltipPopoverWrapper>,
      { attachTo: container }
    );

    const Tooltips = document.getElementsByClassName('tooltip');

    expect(wrapper.find('.tooltip.show').hostNodes().length).toBe(0);
    expect(target.className).toBe('');
    expect(Tooltips.length).toBe(0);
    wrapper.detach();
  });

  it('should render if isOpen is true', () => {
    isOpen = true;
    const wrapper = mount(
      <TooltipPopoverWrapper target="target" isOpen={isOpen} toggle={toggle} className="tooltip show" trigger="hover">
        Tooltip Content
      </TooltipPopoverWrapper>,
      { attachTo: container }
    );

    const Tooltips = document.getElementsByClassName('tooltip');
    expect(wrapper.find('.tooltip.show').hostNodes().length).toBe(1);
    expect(Tooltips.length).toBe(1);
    expect(Tooltips[0].textContent).toBe('Tooltip Content');

    expect(wrapper.find('.tooltip.show').hostNodes().length).toBe(1);
    expect(Tooltips.length).toBe(1);
    expect(Tooltips[0].textContent).toBe('Tooltip Content');

    wrapper.detach();
  });

  it('should render with target object', () => {
    isOpen = true;
    const wrapper = mount(
      <TooltipPopoverWrapper target={document.getElementById('target')} isOpen={isOpen} toggle={toggle} className="tooltip show">
        Tooltip Content
      </TooltipPopoverWrapper>,
      { attachTo: container }
    );

    const Tooltips = document.getElementsByClassName('tooltip');

    expect(wrapper.find('.tooltip.show').hostNodes().length).toBe(1);
    expect(Tooltips.length).toBe(1);
    expect(Tooltips[0].textContent).toBe('Tooltip Content');

    const tooltips = document.getElementsByClassName('tooltip');
    expect(wrapper.find('.tooltip.show').hostNodes().length).toBe(1);
    expect(tooltips.length).toBe(1);
    expect(tooltips[0].textContent).toBe('Tooltip Content');

    wrapper.detach();
  });

  it('should toggle isOpen', () => {
    const wrapper = mount(
      <TooltipPopoverWrapper target="target" isOpen={isOpen} toggle={toggle} className="tooltip show">
        Tooltip Content
      </TooltipPopoverWrapper>,
      { attachTo: container }
    );

    jest.runTimersToTime(150);
    expect(document.getElementsByClassName('tooltip').length).toBe(0);

    wrapper.setProps({ isOpen: true });
    jest.runTimersToTime(150);
    expect(document.getElementsByClassName('tooltip').length).toBe(1);

    wrapper.setProps({ isOpen: false });
    jest.runTimersToTime(150);
    expect(document.getElementsByClassName('tooltip').length).toBe(0);
    wrapper.detach();
  });

  it('should toggle isOpen', () => {
    const wrapper = mount(
      <TooltipPopoverWrapper target="target" isOpen={isOpen} toggle={toggle} className="tooltip show" fade={false}>
        Tooltip Content
      </TooltipPopoverWrapper>,
      { attachTo: container }
    );

    expect(document.getElementsByClassName('tooltip').length).toBe(0);
    wrapper.setProps({ isOpen: true });
    jest.runTimersToTime(0); // slight async delay for getDerivedStateFromProps to update isOpen
    expect(document.getElementsByClassName('tooltip').length).toBe(1);
    wrapper.setProps({ isOpen: false });
    jest.runTimersToTime(0);
    expect(document.getElementsByClassName('tooltip').length).toBe(0);
    wrapper.detach();
  });

  it('should handle target clicks', () => {
    const wrapper = mount(
      <TooltipPopoverWrapper target="target" isOpen={isOpen} toggle={toggle}>
        Tooltip Content
      </TooltipPopoverWrapper>,
      { attachTo: container }
    );
    const instance = wrapper.instance();

    expect(isOpen).toBe(false);
    instance.handleDocumentClick({ target: target });
    jest.runTimersToTime(200);
    expect(isOpen).toBe(true);
    instance.handleDocumentClick({ target: target });
    jest.runTimersToTime(200);
    expect(isOpen).toBe(false);

    wrapper.detach();
  });

  it('should handle inner target clicks', () => {
    const wrapper = mount(
      <TooltipPopoverWrapper target="target" isOpen={isOpen} toggle={toggle}>
        Tooltip Content
      </TooltipPopoverWrapper>,
      { attachTo: container }
    );
    const instance = wrapper.instance();

    expect(isOpen).toBe(false);
    instance.handleDocumentClick({ target: innerTarget });
    jest.runTimersToTime(200);
    expect(isOpen).toBe(true);
    wrapper.detach();
  });

  it('should not do anything when document click outside of target', () => {
    const wrapper = mount(
      <TooltipPopoverWrapper target="target" isOpen={isOpen} toggle={toggle}>
        Tooltip Content
      </TooltipPopoverWrapper>,
      { attachTo: container }
    );
    const instance = wrapper.instance();

    expect(isOpen).toBe(false);
    instance.handleDocumentClick({ target: container });
    expect(isOpen).toBe(false);

    wrapper.detach();
  });

  it('should clear hide timeout if it exists on target click', () => {
    const wrapper = mount(
      <TooltipPopoverWrapper target="target" isOpen={isOpen} toggle={toggle} delay={200}>
        Tooltip Content
      </TooltipPopoverWrapper>,
      { attachTo: container }
    );
    const instance = wrapper.instance();

    instance.hideWithDelay();
    expect(isOpen).toBe(false);
    instance.handleDocumentClick({ target: target });
    jest.runTimersToTime(200);
    expect(isOpen).toBe(true);
    wrapper.setProps({ isOpen: isOpen });
    instance.handleDocumentClick({ target: target });
    expect(isOpen).toBe(true);

    wrapper.detach();
  });

  it('should open after receiving single touchstart and single click', () => {
    const wrapper = mount(
      <TooltipPopoverWrapper target="target" isOpen={isOpen} toggle={toggle} trigger="click">
        Tooltip Content
      </TooltipPopoverWrapper>,
      { attachTo: container }
    );

    expect(isOpen).toBe(false);
    target.dispatchEvent(new Event('touchstart'));
    jest.runTimersToTime(20);
    target.dispatchEvent(new Event('click'));
    jest.runTimersToTime(200);
    expect(isOpen).toBe(true);

    wrapper.detach();
  });

  it('should close after receiving single touchstart and single click', () => {
    isOpen = true;

    const wrapper = mount(
      <TooltipPopoverWrapper target="target" isOpen={isOpen} toggle={toggle} trigger="click">
        Tooltip Content
      </TooltipPopoverWrapper>,
      { attachTo: container }
    );

    expect(isOpen).toBe(true);
    target.dispatchEvent(new Event('touchstart'));
    jest.runTimersToTime(20);
    target.dispatchEvent(new Event('click'));
    jest.runTimersToTime(200);
    expect(isOpen).toBe(false);

    wrapper.detach();
  });

  it('should pass down custom modifiers', () => {
    const wrapper = mount(
      <TooltipPopoverWrapper
        isOpen
        target="target"
        modifiers={{
          preventOverflow: { boundariesElement: 'viewport' },
          offset: { offset: 2 },
        }}
      >
        Tooltip Content
      </TooltipPopoverWrapper>
    );

    expect(wrapper.find(PopperContent).props().modifiers).toEqual({
      preventOverflow: { boundariesElement: 'viewport' },
      offset: { offset: 2 },
    });

    wrapper.unmount();
  });

  it('should pass down cssModule', () => {
    const cssModule = {};
    const wrapper = mount(
      <TooltipPopoverWrapper
        isOpen
        target="target"
        cssModule={cssModule}
      >
        Tooltip Content
      </TooltipPopoverWrapper>
    );
    expect(wrapper.find(PopperContent).props().cssModule).toBe(cssModule);
    wrapper.unmount();
  });

  it('should pass down offset', () => {
    const wrapper = mount(
      <TooltipPopoverWrapper isOpen target="target" offset="100">
        Tooltip content
      </TooltipPopoverWrapper>
    );

    expect(wrapper.find(PopperContent).props().offset).toEqual('100');
    wrapper.unmount();
  });

  it('should pass down flip', () => {
    const wrapper = mount(
      <TooltipPopoverWrapper isOpen target="target" flip={false}>
        Tooltip Content
      </TooltipPopoverWrapper>
    );

    expect(wrapper.find(PopperContent).props().flip).toBe(false);
    wrapper.unmount();
  });

  it('should not call props.toggle when disabled ', () => {
    const props = createSpyObj('props', ['toggle']);
    const event = createSpyObj('event', ['preventDefault']);

    const wrapper = mount(
      <TooltipPopoverWrapper target="target" disabled isOpen={isOpen} toggle={props.toggle}>
        Tooltip Content
      </TooltipPopoverWrapper>,
      { attachTo: container }
    );
    const instance = wrapper.instance();

    instance.toggle(event);

    expect(event.preventDefault).toHaveBeenCalled();
    expect(props.toggle).not.toHaveBeenCalled();

    wrapper.detach();
  });

  it('should not throw when props.toggle is not provided ', () => {
    const event = createSpyObj('event', ['preventDefault']);

    const wrapper = mount(
      <TooltipPopoverWrapper target="target" isOpen={isOpen}>
        Tooltip Content
      </TooltipPopoverWrapper>,
      { attachTo: container }
    );
    const instance = wrapper.instance();

    instance.toggle(event);

    wrapper.detach();
  });

  it('should not throw when passed a ref object as the target', () => {
    const targetObj = React.createRef();
    targetObj.current = createSpyObj('div', ['addEventListener', 'removeEventListener']);
    const event = createSpyObj('event', ['preventDefault']);
    const wrapper = mount(
      <TooltipPopoverWrapper target={targetObj}>Yo!</TooltipPopoverWrapper>,
      { attachTo: container });

    const instance = wrapper.instance();
    instance.toggle(event);

    wrapper.detach();

    expect(targetObj.current.addEventListener).toHaveBeenCalled();
    expect(targetObj.current.removeEventListener).toHaveBeenCalled();
  });

  describe('multi target', () => {
    let targets, targetContainer;
    beforeEach(() => {
      targetContainer = document.createElement('div');
      targetContainer.innerHTML = `<span class='example'>Target 1</span><span class='example'>Target 2</span>`
      element.appendChild(targetContainer);
      targets = targetContainer.querySelectorAll('.example');
    });

    afterEach(() => {
      element.removeChild(targetContainer);
      targets = null;
    });

    it("should attach tooltip on multiple target when a target selector matches multiple elements", () => {
      const wrapper = mount(
        <TooltipPopoverWrapper target=".example" isOpen={isOpen} toggle={toggle} delay={0}>Yo!</TooltipPopoverWrapper>,
        { attachTo: container });

      targets[0].dispatchEvent(new Event('click'));
      jest.runTimersToTime(0)
      expect(isOpen).toBe(true);

      targets[0].dispatchEvent(new Event('click'));
      jest.runTimersToTime(0)
      expect(isOpen).toBe(false);

      targets[1].dispatchEvent(new Event('click'));
      jest.runTimersToTime(0)
      expect(isOpen).toBe(true);

      targets[1].dispatchEvent(new Event('click'));
      jest.runTimersToTime(0)
      expect(isOpen).toBe(false);
      wrapper.detach();
    });
  });

  describe('delay', () => {
    it('should accept a number', () => {
      isOpen = true;
      const wrapper = mount(
        <TooltipPopoverWrapper target="target" isOpen={isOpen} toggle={toggle} delay={200}>
          Tooltip Content
        </TooltipPopoverWrapper>,
        { attachTo: container }
      );
      const instance = wrapper.instance();

      instance.hideWithDelay();
      expect(isOpen).toBe(true);
      jest.runTimersToTime(200);
      expect(isOpen).toBe(false);
    });

    it('should accept an object', () => {
      isOpen = true;
      const wrapper = mount(
        <TooltipPopoverWrapper target="target" isOpen={isOpen} toggle={toggle} delay={{ show: 200, hide: 200 }}>
          Tooltip Content
        </TooltipPopoverWrapper>,
        { attachTo: container }
      );
      const instance = wrapper.instance();

      instance.hideWithDelay();
      expect(isOpen).toBe(true);
      jest.runTimersToTime(200);
      expect(isOpen).toBe(false);
    });

    it('should use default value if value is missing from object', () => {
      isOpen = true;
      const wrapper = mount(
        <TooltipPopoverWrapper target="target" isOpen={isOpen} toggle={toggle} delay={{ show: 0 }}>
          Tooltip Content
        </TooltipPopoverWrapper>,
        { attachTo: container }
      );
      const instance = wrapper.instance();

      instance.hideWithDelay();
      expect(isOpen).toBe(true);
      jest.runTimersToTime(250); // Default hide value: 250
      expect(isOpen).toBe(false);
    });
  });

  describe('hide', () => {
    it('should call toggle when isOpen', () => {
      const spy = jest.fn(toggle);
      isOpen = true;
      const wrapper = mount(
        <TooltipPopoverWrapper target="target" isOpen={isOpen} toggle={spy}>
          Tooltip Content
        </TooltipPopoverWrapper>,
        { attachTo: container }
      );
      const instance = wrapper.instance();

      expect(spy).not.toHaveBeenCalled();

      instance.hide();

      expect(spy).toHaveBeenCalled();

      wrapper.detach();
    });

    it('should not call toggle when isOpen is false', () => {
      const spy = jest.fn(toggle);
      const wrapper = mount(
        <TooltipPopoverWrapper target="target" isOpen={isOpen} toggle={spy}>
          Tooltip Content
        </TooltipPopoverWrapper>,
        { attachTo: container }
      );
      const instance = wrapper.instance();

      expect(spy).not.toHaveBeenCalled();

      instance.hide();

      expect(spy).not.toHaveBeenCalled();

      wrapper.detach();
    });
  });

  describe('show', () => {
    it('should call toggle when isOpen is false', () => {
      const spy = jest.fn(toggle);
      const wrapper = mount(
        <TooltipPopoverWrapper target="target" isOpen={isOpen} toggle={spy}>
          Tooltip Content
        </TooltipPopoverWrapper>,
        { attachTo: container }
      );
      const instance = wrapper.instance();

      expect(spy).not.toHaveBeenCalled();

      instance.show();

      expect(spy).toHaveBeenCalled();

      wrapper.detach();
    });

    it('should not call toggle when isOpen', () => {
      const spy = jest.fn(toggle);
      isOpen = true;
      const wrapper = mount(
        <TooltipPopoverWrapper target="target" isOpen={isOpen} toggle={spy}>
          Tooltip Content
        </TooltipPopoverWrapper>,
        { attachTo: container }
      );
      const instance = wrapper.instance();

      expect(spy).not.toHaveBeenCalled();

      instance.show();

      expect(spy).not.toHaveBeenCalled();

      wrapper.detach();
    });
  });

  describe('onMouseOverTooltip', () => {
    it('should clear timeout if it exists on target click', () => {
      const spy = jest.fn(toggle);
      const wrapper = mount(
        <TooltipPopoverWrapper target="target" isOpen={isOpen} toggle={spy} delay={200} trigger="manual">
          Tooltip Content
        </TooltipPopoverWrapper>,
        { attachTo: container }
      );
      const instance = wrapper.instance();

      instance.hideWithDelay();

      expect(isOpen).toBe(false);
      expect(spy).not.toHaveBeenCalled();

      instance.showWithDelay();
      jest.runTimersToTime(200);

      expect(spy).toHaveBeenCalled();

      wrapper.detach();
    });

    it('should not call .toggle if isOpen', () => {
      const spy = jest.fn(toggle);
      isOpen = true;
      const wrapper = mount(
        <TooltipPopoverWrapper target="target" isOpen={isOpen} toggle={spy} delay={0}>
          Tooltip Content
        </TooltipPopoverWrapper>,
        { attachTo: container }
      );
      const instance = wrapper.instance();

      instance.showWithDelay();
      jest.runTimersToTime(0); // delay: 0 toggle is still async

      expect(isOpen).toBe(true);
      expect(spy).not.toHaveBeenCalled();

      wrapper.detach();
    });
  });

  describe('onMouseLeaveTooltip', () => {
    it('should clear timeout if it exists on target click', () => {
      const spy = jest.fn(toggle);
      isOpen = true;
      const wrapper = mount(
        <TooltipPopoverWrapper target="target" isOpen={isOpen} toggle={spy} delay={200}>
          Tooltip Content
        </TooltipPopoverWrapper>,
        { attachTo: container }
      );
      const instance = wrapper.instance();

      instance.showWithDelay();

      expect(isOpen).toBe(true);
      expect(spy).not.toHaveBeenCalled();

      instance.hideWithDelay();
      jest.runTimersToTime(200);

      expect(spy).toHaveBeenCalled();

      wrapper.detach();
    });

    it('should not call .toggle if isOpen is false', () => {
      const spy = jest.fn(toggle);
      isOpen = false;
      const wrapper = mount(
        <TooltipPopoverWrapper target="target" isOpen={isOpen} toggle={spy} delay={0}>
          Tooltip Content
        </TooltipPopoverWrapper>,
        { attachTo: container }
      );
      const instance = wrapper.instance();

      instance.hideWithDelay();
      jest.runTimersToTime(0); // delay: 0 toggle is still async

      expect(isOpen).toBe(false);
      expect(spy).not.toHaveBeenCalled();

      wrapper.detach();
    });
  });

  describe('autohide', () => {
    it('should keep Tooltip around when false and onmouseleave from Tooltip content', () => {
      const spy = jest.fn(toggle);
      isOpen = true;
      const wrapper = mount(
        <TooltipPopoverWrapper trigger="hover" target="target" autohide={false} isOpen={isOpen} toggle={spy} delay={200}>
          Tooltip Content
        </TooltipPopoverWrapper>,
        { attachTo: container }
      );
      const instance = wrapper.instance();

      expect(isOpen).toBe(true);
      expect(spy).not.toHaveBeenCalled();

      instance.onMouseLeaveTooltipContent(synthEvent);
      jest.runTimersToTime(100);
      expect(spy).not.toHaveBeenCalled();
      jest.runTimersToTime(200);
      expect(spy).toHaveBeenCalled();

      wrapper.detach();
    });

    it('clears showTimeout in onMouseLeaveTooltipContent', () => {
      const spy = jest.fn(toggle);
      isOpen = true;
      const wrapper = mount(
        <TooltipPopoverWrapper trigger="hover" target="target" autohide={false} isOpen={isOpen} toggle={spy} delay={200}>
          Tooltip Content
        </TooltipPopoverWrapper>,
        { attachTo: container }
      );
      const instance = wrapper.instance();

      instance.showWithDelay();
      expect(instance._showTimeout).toBeTruthy();
      instance.onMouseLeaveTooltipContent(synthEvent);
      jest.runTimersToTime(300);
      expect(instance._showTimeout).toBeFalsy();
      wrapper.detach();
    });

    it('clears hide timeout in onMouseOverTooltipContent', () => {
      const spy = jest.fn(toggle);
      isOpen = true;
      const wrapper = mount(
        <TooltipPopoverWrapper trigger="hover" target="target" autohide={false} isOpen={isOpen} toggle={spy} delay={200}>
          Tooltip Content
        </TooltipPopoverWrapper>,
        { attachTo: container }
      );
      const instance = wrapper.instance();

      expect(isOpen).toBe(true);
      expect(spy).not.toHaveBeenCalled();
      instance.onMouseLeaveTooltipContent(synthEvent);
      jest.runTimersToTime(100);
      expect(instance._hideTimeout).toBeTruthy();
      instance.onMouseOverTooltipContent();
      expect(instance._hideTimeout).toBeFalsy();
      instance.onMouseOverTooltipContent();
      wrapper.detach();
    });

    it('should not keep Tooltip around when autohide is true and Tooltip content is hovered over', () => {
      const spy = jest.fn(toggle);
      isOpen = true;
      const wrapper = mount(
        <TooltipPopoverWrapper target="target" autohide isOpen={isOpen} toggle={spy} delay={200} trigger="click hover focus">
          Tooltip Content
        </TooltipPopoverWrapper>,
        { attachTo: container }
      );
      const instance = wrapper.instance();
      expect(isOpen).toBe(true);
      expect(spy).not.toHaveBeenCalled();
      instance.hideWithDelay();
      jest.runTimersToTime(100);
      instance.onMouseOverTooltipContent();
      jest.runTimersToTime(200);
      expect(spy).toHaveBeenCalled();
      instance.onMouseLeaveTooltipContent(synthEvent);
      expect(instance._hideTimeout).toBeFalsy();
      wrapper.detach();
    });
  });
});

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ Read-Only ]

:: Make Dir ::
 
[ Read-Only ]
:: Make File ::
 
[ Read-Only ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 2.5 [PHP 8 Update] [24.05.2025] | Generation time: 0.021 ]--