mirror of https://github.com/ElemeFE/element
				
				
				
			
		
			
				
	
	
		
			171 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Vue
		
	
	
			
		
		
	
	
			171 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Vue
		
	
	
import Clickoutside from 'element-ui/src/utils/clickoutside';
 | 
						|
const ctx = '@@clickoutsideContext';
 | 
						|
 | 
						|
import { triggerEvent, triggerClick } from '../util';
 | 
						|
 | 
						|
describe('Utils:Clickoutside', () => {
 | 
						|
  it('create', () => {
 | 
						|
    let count = 0;
 | 
						|
    const el = document.createElement('div');
 | 
						|
    const vnode = {
 | 
						|
      context: {
 | 
						|
        handleClick: () => ++count
 | 
						|
      }
 | 
						|
    };
 | 
						|
    const binding = {
 | 
						|
      expression: 'handleClick'
 | 
						|
    };
 | 
						|
 | 
						|
    Clickoutside.bind(el, binding, vnode);
 | 
						|
    expect(el[ctx]).to.exist;
 | 
						|
  });
 | 
						|
 | 
						|
  it('cotext not exist', () => {
 | 
						|
    const el = document.createElement('div');
 | 
						|
    const vnode = {};
 | 
						|
    const binding = {
 | 
						|
      expression: 'handleClick'
 | 
						|
    };
 | 
						|
 | 
						|
    Clickoutside.bind(el, binding, vnode);
 | 
						|
    expect(el[ctx]).to.exist;
 | 
						|
  });
 | 
						|
 | 
						|
  it('binding expression', () => {
 | 
						|
    const el = document.createElement('div');
 | 
						|
    let count = 0;
 | 
						|
    const vnode = {
 | 
						|
      context: {
 | 
						|
        handleClick: () => ++count
 | 
						|
      }
 | 
						|
    };
 | 
						|
    const binding = {
 | 
						|
      expression: 'handleClick'
 | 
						|
    };
 | 
						|
 | 
						|
    Clickoutside.bind(el, binding, vnode);
 | 
						|
    triggerClick(document);
 | 
						|
    expect(count).to.equal(1);
 | 
						|
  });
 | 
						|
 | 
						|
  it('click inside', () => {
 | 
						|
    const el = document.createElement('div');
 | 
						|
    const insideElm = document.createElement('div');
 | 
						|
    let count = 0;
 | 
						|
    const vnode = {
 | 
						|
      context: {
 | 
						|
        handleClick: () => ++count
 | 
						|
      }
 | 
						|
    };
 | 
						|
    const binding = {
 | 
						|
      expression: 'handleClick'
 | 
						|
    };
 | 
						|
 | 
						|
    el.appendChild(insideElm);
 | 
						|
    Clickoutside.bind(el, binding, vnode);
 | 
						|
    triggerClick(insideElm);
 | 
						|
    expect(count).to.equal(0);
 | 
						|
    triggerClick(document);
 | 
						|
    expect(count).to.equal(1);
 | 
						|
  });
 | 
						|
 | 
						|
  it('tigger event in popperElm', () => {
 | 
						|
    const el = document.createElement('div');
 | 
						|
    const insideElm = document.createElement('div');
 | 
						|
    let count = 0;
 | 
						|
    const vnode = {
 | 
						|
      context: {
 | 
						|
        handleClick: () => ++count,
 | 
						|
        popperElm: document.createElement('div')
 | 
						|
      }
 | 
						|
    };
 | 
						|
    const binding = {
 | 
						|
      expression: 'handleClick'
 | 
						|
    };
 | 
						|
 | 
						|
    vnode.context.popperElm.appendChild(insideElm);
 | 
						|
    Clickoutside.bind(el, binding, vnode);
 | 
						|
    triggerClick(insideElm);
 | 
						|
    expect(count).to.equal(0);
 | 
						|
    triggerClick(document);
 | 
						|
    expect(count).to.equal(1);
 | 
						|
  });
 | 
						|
 | 
						|
  it('binding value', () => {
 | 
						|
    const el = document.createElement('div');
 | 
						|
    let count = 0;
 | 
						|
    const vnode = {
 | 
						|
      context: {}
 | 
						|
    };
 | 
						|
    const binding = {
 | 
						|
      value: () => ++count
 | 
						|
    };
 | 
						|
 | 
						|
    Clickoutside.bind(el, binding, vnode);
 | 
						|
    expect(count).to.equal(0);
 | 
						|
    triggerClick(document);
 | 
						|
    expect(count).to.equal(1);
 | 
						|
  });
 | 
						|
 | 
						|
  it('update', () => {
 | 
						|
    let count = 0;
 | 
						|
    const el = document.createElement('div');
 | 
						|
    const vnode = {
 | 
						|
      context: {
 | 
						|
        abc: () => ++count,
 | 
						|
        ddd: () => ++count
 | 
						|
      }
 | 
						|
    };
 | 
						|
    const binding = {
 | 
						|
      expression: 'abc'
 | 
						|
    };
 | 
						|
 | 
						|
    const newBinding = {
 | 
						|
      expression: 'ddd'
 | 
						|
    };
 | 
						|
 | 
						|
    Clickoutside.bind(el, binding, vnode);
 | 
						|
    expect(el[ctx].methodName).to.equal('abc');
 | 
						|
    Clickoutside.update(el, newBinding);
 | 
						|
    expect(el[ctx].methodName).to.equal('ddd');
 | 
						|
  });
 | 
						|
 | 
						|
  it('unbind', () => {
 | 
						|
    const el = document.createElement('div');
 | 
						|
    let count = 0;
 | 
						|
    const vnode = {
 | 
						|
      context: {}
 | 
						|
    };
 | 
						|
    const binding = {
 | 
						|
      value: () => ++count
 | 
						|
    };
 | 
						|
 | 
						|
    Clickoutside.bind(el, binding, vnode);
 | 
						|
    triggerClick(document);
 | 
						|
    Clickoutside.unbind(el);
 | 
						|
    triggerClick(document);
 | 
						|
    expect(count).to.equal(1);
 | 
						|
  });
 | 
						|
 | 
						|
  it('stays open on drag click', () => {
 | 
						|
    const el = document.createElement('div');
 | 
						|
    const insideElm = document.createElement('div');
 | 
						|
    let count = 0;
 | 
						|
    const vnode = {
 | 
						|
      context: {
 | 
						|
        handleClick: () => ++count
 | 
						|
      }
 | 
						|
    };
 | 
						|
    const binding = {
 | 
						|
      expression: 'handleClick'
 | 
						|
    };
 | 
						|
 | 
						|
    el.appendChild(insideElm);
 | 
						|
    Clickoutside.bind(el, binding, vnode);
 | 
						|
    triggerEvent(insideElm, 'mousedown');
 | 
						|
    triggerEvent(document, 'mouseup');
 | 
						|
    expect(count).to.equal(1);
 | 
						|
  });
 | 
						|
});
 | 
						|
 |