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);
 | |
|   });
 | |
| });
 | |
| 
 |