import { createVue, destroyVM } from '../util';
const DELAY = 10;
describe('Tree', () => {
let vm;
afterEach(() => {
destroyVM(vm);
});
const getTreeVm = (props, options) => {
return createVue(Object.assign({
template: `
`,
data() {
return {
defaultExpandedKeys: [],
defaultCheckedKeys: [],
clickedNode: null,
count: 1,
data: [{
id: 1,
label: '一级 1',
children: [{
id: 11,
label: '二级 1-1',
children: [{
id: 111,
label: '三级 1-1'
}]
}]
}, {
id: 2,
label: '一级 2',
children: [{
id: 21,
label: '二级 2-1'
}, {
id: 22,
label: '二级 2-2'
}]
}, {
id: 3,
label: '一级 3',
children: [{
id: 31,
label: '二级 3-1'
}, {
id: 32,
label: '二级 3-2'
}]
}],
defaultProps: {
children: 'children',
label: 'label'
}
};
}
}, options), true);
};
const ALL_NODE_COUNT = 9;
it('create', () => {
vm = getTreeVm(':props="defaultProps"');
expect(document.querySelector('.el-tree')).to.exist;
expect(document.querySelectorAll('.el-tree > .el-tree-node').length).to.equal(3);
expect(document.querySelectorAll('.el-tree .el-tree-node').length).to.equal(ALL_NODE_COUNT);
vm.data[1].children = [{ label: '二级 2-1' }];
const tree = vm.$children[0];
expect(tree.children).to.deep.equal(vm.data);
});
it('click node', done => {
vm = getTreeVm(':props="defaultProps" @node-click="handleNodeClick"', {
methods: {
handleNodeClick(data) {
this.clickedNode = data;
}
}
});
const firstNode = vm.$el.querySelector('.el-tree-node__content');
firstNode.click();
expect(vm.clickedNode.label).to.equal('一级 1');
setTimeout(() => {
expect(vm.$el.querySelector('.el-tree-node').classList.contains('is-expanded')).to.true;
firstNode.click();
setTimeout(() => {
expect(vm.$el.querySelector('.el-tree-node').classList.contains('is-expanded')).to.false;
done();
}, DELAY);
}, DELAY);
});
it('current change', done => {
vm = getTreeVm(':props="defaultProps" @current-change="handleCurrentChange"', {
methods: {
handleCurrentChange(data) {
this.currentNode = data;
}
}
});
const firstNode = vm.$el.querySelector('.el-tree-node__content');
firstNode.click();
expect(vm.currentNode.label).to.equal('一级 1');
done();
});
it('emptyText', (done) => {
vm = getTreeVm(':props="defaultProps"');
vm.data = [];
vm.$nextTick(() => {
expect(vm.$el.querySelectorAll('.el-tree__empty-block').length).to.equal(1);
done();
});
});
it('highlight current', done => {
vm = getTreeVm(':props="defaultProps" highlight-current');
const firstNode = document.querySelector('.el-tree-node');
firstNode.click();
vm.$nextTick(() => {
expect(firstNode.className.indexOf('is-current') !== -1);
done();
});
});
it('expandOnNodeClick', done => {
vm = getTreeVm(':props="defaultProps" :expand-on-node-click="false"');
const firstNode = document.querySelector('.el-tree-node');
firstNode.click();
vm.$nextTick(() => {
expect(firstNode.className.indexOf('is-expanded') === -1);
done();
});
});
it('current-node-key', done => {
vm = getTreeVm(':props="defaultProps" :current-node-key="1"');
const firstNode = document.querySelector('.el-tree-node');
firstNode.click();
vm.$nextTick(() => {
expect(firstNode.classList.contains('is-current')).to.true;
done();
});
});
it('defaultExpandAll', () => {
vm = getTreeVm(':props="defaultProps" default-expand-all');
expect(vm.$el.querySelectorAll('.el-tree-node.is-expanded').length).to.equal(ALL_NODE_COUNT);
});
it('defaultExpandedKeys', () => {
vm = getTreeVm(':props="defaultProps" :default-expanded-keys="defaultExpandedKeys" node-key="id"', {
created() {
this.defaultExpandedKeys = [1, 3];
}
});
expect(vm.$el.querySelectorAll('.el-tree-node.is-expanded').length).to.equal(2);
});
it('defaultExpandedKeys set', (done) => {
vm = getTreeVm(':props="defaultProps" :default-expanded-keys="defaultExpandedKeys" node-key="id"', {
created() {
this.defaultExpandedKeys = [1, 3];
}
});
expect(vm.$el.querySelectorAll('.el-tree-node.is-expanded').length).to.equal(2);
vm.defaultExpandedKeys = [2];
vm.data = JSON.parse(JSON.stringify(vm.data));
setTimeout(() => {
expect(vm.$el.querySelectorAll('.el-tree-node.is-expanded').length).to.equal(1);
done();
}, 50);
});
it('filter-node-method', (done) => {
vm = getTreeVm(':props="defaultProps" :filter-node-method="filterNode"', {
methods: {
filterNode(value, data) {
if (!value) return true;
return data.label.indexOf(value) !== -1;
}
}
});
const tree = vm.$refs.tree;
tree.filter('2-1');
setTimeout(() => {
expect(tree.$el.querySelectorAll('.el-tree-node.is-hidden').length).to.equal(7);
done();
}, 100);
});
it('autoExpandParent = true', () => {
vm = getTreeVm(':props="defaultProps" :default-expanded-keys="defaultExpandedKeys" node-key="id"', {
created() {
this.defaultExpandedKeys = [111];
}
});
expect(vm.$el.querySelectorAll('.el-tree-node.is-expanded').length).to.equal(3);
});
it('autoExpandParent = false', () => {
vm = getTreeVm(':props="defaultProps" :default-expanded-keys="defaultExpandedKeys" node-key="id" :auto-expand-parent="false"', {
created() {
this.defaultExpandedKeys = [111];
}
});
expect(vm.$el.querySelectorAll('.el-tree-node.is-expanded').length).to.equal(1);
});
it('defaultCheckedKeys & check-strictly = false', () => {
vm = getTreeVm(':props="defaultProps" default-expand-all show-checkbox :default-checked-keys="defaultCheckedKeys" node-key="id"', {
created() {
this.defaultCheckedKeys = [1];
}
});
expect(vm.$el.querySelectorAll('.el-checkbox .is-checked').length).to.equal(3);
});
it('defaultCheckedKeys & check-strictly', () => {
vm = getTreeVm(':props="defaultProps" default-expand-all show-checkbox :default-checked-keys="defaultCheckedKeys" node-key="id" check-strictly', {
created() {
this.defaultCheckedKeys = [1];
}
});
expect(vm.$el.querySelectorAll('.el-checkbox .is-checked').length).to.equal(1);
});
it('show checkbox', done => {
vm = getTreeVm(':props="defaultProps" show-checkbox');
const tree = vm.$children[0];
const secondNode = document.querySelectorAll('.el-tree-node__content')[3];
const nodeCheckbox = secondNode.querySelector('.el-checkbox');
expect(nodeCheckbox).to.be.exist;
nodeCheckbox.click();
expect(tree.getCheckedNodes().length).to.equal(3);
expect(tree.getCheckedNodes(true).length).to.equal(2);
const firstLeaf = secondNode.nextElementSibling.querySelector('.el-tree-node__content');
const leafCheckbox = firstLeaf.querySelector('.el-checkbox');
vm.$nextTick(() => {
leafCheckbox.click();
expect(tree.getCheckedNodes().length).to.equal(1);
done();
});
});
it('setCheckedNodes', (done) => {
vm = getTreeVm(':props="defaultProps" show-checkbox node-key="id"');
const tree = vm.$children[0];
const secondNode = document.querySelectorAll('.el-tree-node__content')[3];
const nodeCheckbox = secondNode.querySelector('.el-checkbox');
nodeCheckbox.click();
expect(tree.getCheckedNodes().length).to.equal(3);
expect(tree.getCheckedNodes(true).length).to.equal(2);
vm.$nextTick(() => {
tree.setCheckedNodes([]);
expect(tree.getCheckedNodes().length).to.equal(0);
done();
});
});
it('setCheckedKeys', () => {
vm = getTreeVm(':props="defaultProps" show-checkbox node-key="id"');
const tree = vm.$children[0];
tree.setCheckedKeys([111]);
expect(tree.getCheckedNodes().length).to.equal(3);
expect(tree.getCheckedKeys().length).to.equal(3);
tree.setCheckedKeys([1]);
setTimeout(function() {
expect(tree.getCheckedNodes().length).to.equal(3);
expect(tree.getCheckedKeys().length).to.equal(3);
}, 0);
tree.setCheckedKeys([2]);
setTimeout(function() {
expect(tree.getCheckedNodes().length).to.equal(3);
expect(tree.getCheckedKeys().length).to.equal(3);
}, 0);
tree.setCheckedKeys([21]);
expect(tree.getCheckedNodes().length).to.equal(1);
expect(tree.getCheckedKeys().length).to.equal(1);
});
it('setCheckedKeys with checkStrictly', () => {
vm = getTreeVm(':props="defaultProps" checkStrictly show-checkbox node-key="id"');
const tree = vm.$children[0];
tree.setCheckedKeys([111]);
expect(tree.getCheckedNodes().length).to.equal(1);
expect(tree.getCheckedKeys().length).to.equal(1);
tree.setCheckedKeys([1]);
setTimeout(function() {
expect(tree.getCheckedNodes().length).to.equal(1);
expect(tree.getCheckedKeys().length).to.equal(1);
}, 0);
tree.setCheckedKeys([2]);
setTimeout(function() {
expect(tree.getCheckedNodes().length).to.equal(1);
expect(tree.getCheckedKeys().length).to.equal(1);
}, 0);
tree.setCheckedKeys([21, 22]);
expect(tree.getCheckedNodes().length).to.equal(2);
expect(tree.getCheckedKeys().length).to.equal(2);
});
it('method setChecked', () => {
vm = getTreeVm(':props="defaultProps" show-checkbox node-key="id"');
const tree = vm.$children[0];
tree.setChecked(111, true, true);
expect(tree.getCheckedNodes().length).to.equal(3);
expect(tree.getCheckedKeys().length).to.equal(3);
tree.setChecked(vm.data[0], false, true);
expect(tree.getCheckedNodes().length).to.equal(0);
expect(tree.getCheckedKeys().length).to.equal(0);
});
it('setCheckedKeys with leafOnly=false', () => {
vm = getTreeVm(':props="defaultProps" show-checkbox node-key="id"');
const tree = vm.$children[0];
tree.setCheckedKeys([1, 11, 111, 2], false);
setTimeout(function() {
expect(tree.getCheckedNodes().length).to.equal(6);
expect(tree.getCheckedKeys().length).to.equal(6);
}, 0);
});
it('setCheckedKeys with leafOnly=true', () => {
vm = getTreeVm(':props="defaultProps" show-checkbox node-key="id"');
const tree = vm.$children[0];
tree.setCheckedKeys([2], true);
setTimeout(function() {
expect(tree.getCheckedNodes().length).to.equal(2);
expect(tree.getCheckedKeys().length).to.equal(2);
}, 0);
});
it('check strictly', (done) => {
vm = getTreeVm(':props="defaultProps" show-checkbox check-strictly');
const tree = vm.$children[0];
const secondNode = document.querySelectorAll('.el-tree-node__content')[3];
const nodeCheckbox = secondNode.querySelector('.el-checkbox');
nodeCheckbox.click();
expect(tree.getCheckedNodes().length).to.equal(1);
expect(tree.getCheckedNodes(true).length).to.equal(0);
const firstLeaf = secondNode.nextElementSibling.querySelector('.el-tree-node__content');
const leafCheckbox = firstLeaf.querySelector('.el-checkbox');
vm.$nextTick(() => {
leafCheckbox.click();
expect(tree.getCheckedNodes().length).to.equal(2);
done();
});
});
it('render content', () => {
vm = getTreeVm(':props="defaultProps" :render-content="renderContent"', {
methods: {
renderContent(h, node) {
return (
{ node.node.label }
);
}
}
});
const firstNode = document.querySelector('.el-tree-node__content');
expect(firstNode.querySelector('.custom-content')).to.exist;
const button = firstNode.querySelector('.custom-content .el-button');
expect(button).to.exist;
expect(button.textContent).to.equal('一级 1');
});
it('load node', done => {
vm = getTreeVm(':props="defaultProps" lazy :load="loadNode" show-checkbox', {
methods: {
loadNode(node, resolve) {
if (node.level === 0) {
return resolve([{ label: 'region1' }, { label: 'region2' }]);
}
if (node.level > 4) return resolve([]);
setTimeout(() => {
resolve([{
label: 'zone' + this.count++
}, {
label: 'zone' + this.count++
}]);
}, 50);
}
}
});
const firstNode = document.querySelector('.el-tree-node__content');
expect(firstNode.nextElementSibling.childNodes.length).to.equal(0);
firstNode.click();
setTimeout(() => {
expect(firstNode.nextElementSibling.childNodes.length).to.equal(2);
done();
}, 100);
});
it('accordion', done => {
vm = getTreeVm(':props="defaultProps" accordion');
const firstNode = vm.$el.querySelector('.el-tree-node__content');
const secondNode = vm.$el.querySelector('.el-tree-node:nth-child(2) .el-tree-node__content');
firstNode.click();
setTimeout(() => {
expect(vm.$el.querySelector('.el-tree-node').classList.contains('is-expanded')).to.true;
secondNode.click();
setTimeout(() => {
expect(vm.$el.querySelector('.el-tree-node').classList.contains('is-expanded')).to.false;
done();
}, DELAY);
}, DELAY);
});
it('handleNodeOpen & handleNodeClose', (done) => {
vm = getTreeVm(':props="defaultProps" lazy :load="loadNode" @node-expand="handleNodeOpen" @node-collapse="handleNodeClose"', {
methods: {
loadNode(node, resolve) {
if (node.level === 0) {
return resolve([{label: 'region1'}, {label: 'region2'}]);
}
if (node.level > 4) return resolve([]);
setTimeout(() => {
resolve([{
label: 'zone' + this.count++
}, {
label: 'zone' + this.count++
}]);
}, 50);
},
handleNodeOpen(data, node, vm) {
this.currentNode = data;
this.nodeExpended = true;
},
handleNodeClose(data, node, vm) {
this.currentNode = data;
this.nodeExpended = false;
}
}
});
const firstNode = document.querySelector('.el-tree-node__content');
expect(firstNode.nextElementSibling.childNodes.length).to.equal(0);
firstNode.click();
setTimeout(() => {
expect(vm.nodeExpended).to.equal(true);
expect(vm.currentNode.label).to.equal('region1');
firstNode.click();
setTimeout(() => {
expect(vm.nodeExpended).to.equal(false);
expect(vm.currentNode.label).to.equal('region1');
done();
}, 100);
}, 100);
});
});