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