import { TreeSelect, Icon } from '../../index'; import { BASE_CLASS_PREFIX } from '../../../semi-foundation/base/constants'; const treeChildren = [ { label: '北京', value: 'Beijing', key: 'beijing', }, { label: '上海', value: 'Shanghai', key: 'shanghai', }, ]; const treeData = [ { label: '亚洲', value: 'Yazhou', key: 'yazhou', children: [ { label: '中国', value: 'Zhongguo', key: 'zhongguo', children: treeChildren, }, { label: '日本', value: 'Riben', key: 'riben', children: [ { label: '东京', value: 'Dongjing', key: 'dongjing' }, { label: '大阪', value: 'Daban', key: 'daban' } ] }, ], }, { label: '北美洲', value: 'Beimeizhou', key: 'beimeizhou', children: [ { label: '美国', value: 'Meiguo', key: 'meiguo' }, { label: '加拿大', value: 'Jianada', key: 'jianada' } ] }, ]; const treeDataWithDisabled = [ { label: '亚洲', value: 'Asia', key: '0', children: [ { label: '中国', value: 'China', key: '0-0', disabled: true, children: [ { label: '北京', value: 'Beijing', key: '0-0-0', }, { label: '上海', value: 'Shanghai', key: '0-0-1', }, ], }, { label: '日本', value: 'Japan', key: '0-1', }, ], }, { label: '北美洲', value: 'North America', key: '1', } ]; let commonProps = { motion: false, motionExpand: false, mouseEnterDelay: 0, mouseLeaveDelay: 0, }; function getTreeSelect(props) { props = { treeData: treeData, ...props } return mount( , { attachTo: document.getElementById('container') } ); } describe('TreeSelect', () => { beforeEach(() => { // Avoid `attachTo: document.body` Warning const div = document.createElement('div'); div.setAttribute('id', 'container'); document.body.appendChild(div); }); afterEach(() => { const div = document.getElementById('container'); if (div) { document.body.removeChild(div); } document.body.innerHTML = ''; }); it('defaultValue + leaf item checked', () => { // auto expand parent, if node exist means parent is open let treeSelect = getTreeSelect({ defaultValue: 'Beijing' }); let selectedNode = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-3`).at(0); let tagGroup = treeSelect.find(`.${BASE_CLASS_PREFIX}-tag`); expect(tagGroup.length).toEqual(1); expect(tagGroup.at(0).instance().textContent).toEqual('北京'); expect(selectedNode.find(`.${BASE_CLASS_PREFIX}-checkbox-inner-checked`).exists()).toEqual(true); expect(selectedNode.find(`.${BASE_CLASS_PREFIX}-tree-option-label-text`).instance().textContent).toEqual('北京'); treeSelect.unmount(); // array case select both let treeSelect2 = getTreeSelect({ defaultValue: ['Dongjing', 'Beijing'] }); let level3Nodes = treeSelect2.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-3`); tagGroup = treeSelect2.find(`.${BASE_CLASS_PREFIX}-tag`); expect(tagGroup.length).toEqual(2); expect(tagGroup.at(0).instance().textContent).toEqual('东京'); expect(tagGroup.at(1).instance().textContent).toEqual('北京'); expect(level3Nodes.at(0).find(`.${BASE_CLASS_PREFIX}-checkbox-inner-checked`).exists()).toEqual(true); expect(level3Nodes.at(0).find(`.${BASE_CLASS_PREFIX}-tree-option-label-text`).instance().textContent).toEqual('北京'); expect(level3Nodes.at(2).find(`.${BASE_CLASS_PREFIX}-checkbox-inner-checked`).exists()).toEqual(true); expect(level3Nodes.at(2).find(`.${BASE_CLASS_PREFIX}-tree-option-label-text`).instance().textContent).toEqual('东京'); }) it('defaultValue + leaf item checked => half checked parent', () => { let treeSelect = getTreeSelect({ defaultValue: ['Dongjing', 'Beijing'] }); let level1Nodes = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-1`); let level2Nodes = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-2`); expect(level1Nodes.at(0).find(`.${BASE_CLASS_PREFIX}-checkbox-indeterminate`).exists()).toEqual(true); expect(level1Nodes.at(1).find(`.${BASE_CLASS_PREFIX}-checkbox-indeterminate`).exists()).toEqual(false); expect(level1Nodes.at(1).find(`.${BASE_CLASS_PREFIX}-checkbox-inner-checked`).exists()).toEqual(false); expect(level2Nodes.at(0).find(`.${BASE_CLASS_PREFIX}-checkbox-indeterminate`).exists()).toEqual(true); expect(level2Nodes.at(1).find(`.${BASE_CLASS_PREFIX}-tree-option-label-text`).exists()).toEqual(true); }) it('defaultValue + leaf item checked => checked parent', () => { let treeSelect = getTreeSelect({ defaultValue: ['Shanghai', 'Beijing'] }); let tagGroup = treeSelect.find(`.${BASE_CLASS_PREFIX}-tag`); expect(tagGroup.length).toEqual(1); expect(tagGroup.at(0).instance().textContent).toEqual('中国'); let level1Nodes = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-1`); let level2Nodes = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-2`); expect(level1Nodes.at(0).find(`.${BASE_CLASS_PREFIX}-checkbox-indeterminate`).exists()).toEqual(true); expect(level2Nodes.at(0).find(`.${BASE_CLASS_PREFIX}-checkbox-inner-checked`).exists()).toEqual(true); }) it('defaultValue + all leaf items checked => checked ancesters', () => { let treeSelect = getTreeSelect({ defaultValue: ['Shanghai', 'Beijing', 'Dongjing', 'Daban'] }); let tagGroup = treeSelect.find(`.${BASE_CLASS_PREFIX}-tag`); expect(tagGroup.length).toEqual(1); expect(tagGroup.at(0).instance().textContent).toEqual('亚洲'); let level1Nodes = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-1`); expect(level1Nodes.at(0).find(`.${BASE_CLASS_PREFIX}-checkbox-inner-checked`).exists()).toEqual(true); }) it('defaultValue + parent checked => all descendants checked', () => { let treeSelect = getTreeSelect({ defaultValue: ['Yazhou'], defaultExpandAll: true }); let checkedNode = treeSelect.find(`.${BASE_CLASS_PREFIX}-checkbox-inner-checked`); expect(checkedNode.length).toEqual(7); }) it('defaultValue + onChangeWithObject', () => { let treeSelect = getTreeSelect({ defaultValue: treeChildren, defaultExpandAll: true, onChangeWithObject: true }); let checkedNode = treeSelect.find(`.${BASE_CLASS_PREFIX}-checkbox-inner-checked`); expect(checkedNode.length).toEqual(3); }) it('maxTagCount', () => { let treeSelect = getTreeSelect({ defaultValue: ['Shanghai', 'Dongjing', 'Daban', 'Meiguo'], maxTagCount: 2, defaultExpandAll: true, }); let tagGroup = treeSelect.find(`.${BASE_CLASS_PREFIX}-tag`); expect(tagGroup.length).toEqual(3); expect(tagGroup.at(2).instance().textContent).toEqual('+1'); let checkedNode = treeSelect.find(`.${BASE_CLASS_PREFIX}-checkbox-inner-checked`); expect(checkedNode.length).toEqual(5); }); it('removeTag', () => { const nativeEvent = { nativeEvent: { stopImmediatePropagation: () => { } } } let treeSelect = getTreeSelect({ defaultValue: ['Shanghai', 'Dongjing'], defaultExpandAll: true, }); let tagGroup = treeSelect.find(`.${BASE_CLASS_PREFIX}-tag`); let closeBtn = tagGroup.at(1).find(`.${BASE_CLASS_PREFIX}-tag-close`); closeBtn.simulate('click', nativeEvent); tagGroup = treeSelect.find(`.${BASE_CLASS_PREFIX}-tag`); expect(tagGroup.length).toEqual(1); expect(tagGroup.at(0).instance().textContent).toEqual('上海'); let checkedNode = treeSelect.find(`.${BASE_CLASS_PREFIX}-checkbox-inner-checked`); expect(checkedNode.length).toEqual(1); }); it('expandedKeys + autoExpandParent', () => { // auto expand parent is always true when mounted let treeSelect = getTreeSelect({ expandedKeys: ['beimeizhou'] }); // yazhou beimeizhou let topNode = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-1`); expect(topNode.at(0).hasClass(`${BASE_CLASS_PREFIX}-tree-option-collapsed`)).toEqual(true); expect(topNode.at(1).hasClass(`${BASE_CLASS_PREFIX}-tree-option-collapsed`)).toEqual(false); treeSelect.setProps({ expandedKeys: ['riben'] }); treeSelect.update(); topNode = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-1`); expect(topNode.at(0).hasClass(`${BASE_CLASS_PREFIX}-tree-option-collapsed`)).toEqual(true); expect(topNode.at(1).hasClass(`${BASE_CLASS_PREFIX}-tree-option-collapsed`)).toEqual(true); // autoExpandParent treeSelect.setProps({ autoExpandParent: true }); treeSelect.update(); topNode = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-1`); expect(topNode.at(0).hasClass(`${BASE_CLASS_PREFIX}-tree-option-collapsed`)).toEqual(false); expect(topNode.at(1).hasClass(`${BASE_CLASS_PREFIX}-tree-option-collapsed`)).toEqual(true); }); it('select one leaf item / onSelect / onChange', () => { let spyOnSelect = sinon.spy(() => { }); let spyOnChange = sinon.spy(() => { }); let treeSelect = getTreeSelect({ defaultExpandAll: true, onSelect: spyOnSelect, onChange: spyOnChange, }); let nodeBeijing = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-3`).at(0); // check beijing nodeBeijing.simulate('click'); let tagGroup = treeSelect.find(`.${BASE_CLASS_PREFIX}-tag`); expect(tagGroup.length).toEqual(1); expect(tagGroup.at(0).instance().textContent).toEqual('北京'); // onSelect & onChange expect(spyOnSelect.calledWithMatch('beijing', true, { key: "beijing" })).toEqual(true); expect(spyOnChange.calledWithMatch(['Beijing'])).toEqual(true); // classname nodeBeijing = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-3`).at(0); expect(nodeBeijing.find(`.${BASE_CLASS_PREFIX}-checkbox-inner-checked`).exists()).toEqual(true); // uncheck nodeBeijing.simulate('click'); tagGroup = treeSelect.find(`.${BASE_CLASS_PREFIX}-tag`); expect(tagGroup.length).toEqual(0); // onSelect & onChange expect(spyOnSelect.calledWithMatch('beijing', false, { key: "beijing" })).toEqual(true); expect(spyOnChange.calledWithMatch([])).toEqual(true); // classname nodeBeijing = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-3`).at(0); expect(nodeBeijing.find(`.${BASE_CLASS_PREFIX}-checkbox-indeterminate`).exists()).toEqual(false); expect(nodeBeijing.find(`.${BASE_CLASS_PREFIX}-checkbox-inner-checked`).exists()).toEqual(false); }); it('select two different branches of leaf items / onSelect / onChange', () => { let spyOnSelect = sinon.spy(() => { }); let spyOnChange = sinon.spy(() => { }); let treeSelect = getTreeSelect({ defaultExpandAll: true, onSelect: spyOnSelect, onChange: spyOnChange, }); let nodelevel3 = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-3`); nodelevel3.at(0).simulate('click'); nodelevel3.at(2).simulate('click'); let tagGroup = treeSelect.find(`.${BASE_CLASS_PREFIX}-tag`); expect(tagGroup.length).toEqual(2); // onSelect & onChange expect(spyOnSelect.calledWithMatch('dongjing', true, { key: "dongjing" })).toEqual(true); expect(spyOnChange.calledWithMatch(['Beijing', 'Dongjing'])).toEqual(true); }); it('select one branche of all leaf items / onSelect / onChange', () => { let spyOnSelect = sinon.spy(() => { }); let spyOnChange = sinon.spy(() => { }); let treeSelect = getTreeSelect({ defaultExpandAll: true, onSelect: spyOnSelect, onChange: spyOnChange, }); let nodelevel3 = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-3`); nodelevel3.at(0).simulate('click'); nodelevel3.at(1).simulate('click'); let tagGroup = treeSelect.find(`.${BASE_CLASS_PREFIX}-tag`); expect(tagGroup.length).toEqual(1); // onSelect & onChange expect(spyOnSelect.calledWithMatch('shanghai', true, { key: "shanghai" })).toEqual(true); expect(spyOnChange.calledWithMatch(['Zhongguo'])).toEqual(true); // ui let level1Nodes = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-1`); let level2Nodes = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-2`); expect(level1Nodes.at(0).find(`.${BASE_CLASS_PREFIX}-checkbox-indeterminate`).exists()).toEqual(true); expect(level2Nodes.at(0).find(`.${BASE_CLASS_PREFIX}-checkbox-inner-checked`).exists()).toEqual(true); }); it('select all leaf items / onSelect / onChange', () => { let spyOnSelect = sinon.spy(() => { }); let spyOnChange = sinon.spy(() => { }); let treeSelect = getTreeSelect({ defaultExpandAll: true, onSelect: spyOnSelect, onChange: spyOnChange, }); let nodelevel3 = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-3`); nodelevel3.at(0).simulate('click'); nodelevel3.at(1).simulate('click'); nodelevel3.at(2).simulate('click'); nodelevel3.at(3).simulate('click'); let tagGroup = treeSelect.find(`.${BASE_CLASS_PREFIX}-tag`); expect(tagGroup.length).toEqual(1); // onSelect & onChange expect(spyOnSelect.calledWithMatch('daban', true, { key: "daban" })).toEqual(true); expect(spyOnChange.calledWithMatch(['Yazhou'])).toEqual(true); // ui expect(treeSelect.find(`.${BASE_CLASS_PREFIX}-checkbox-inner-checked`).length).toEqual(7); }); it('select a parent node / onSelect / onChange', () => { let spyOnSelect = sinon.spy(() => { }); let spyOnChange = sinon.spy(() => { }); let treeSelect = getTreeSelect({ defaultExpandAll: true, onSelect: spyOnSelect, onChange: spyOnChange, }); let nodelevel1 = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-1`); nodelevel1.at(0).simulate('click'); // onSelect & onChange expect(spyOnSelect.calledWithMatch('yazhou', true, { key: "yazhou" })).toEqual(true); expect(spyOnChange.calledWithMatch(['Yazhou'])).toEqual(true); // ui let checkedNode = treeSelect.find(`.${BASE_CLASS_PREFIX}-checkbox-inner-checked`); expect(checkedNode.length).toEqual(7); }); // it('onChange + valueInArray', () => { // let spyOnSelect = sinon.spy(() => { }); // let spyOnChange = sinon.spy(() => { }); // let treeSelect = getTreeSelect({ // defaultExpandAll: true, // onSelect: spyOnSelect, // onChange: spyOnChange, // valueInArray: true, // }); // let nodeBeijing = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-3`).at(0); // // select beijing // nodeBeijing.simulate('click'); // // onSelect & onChange // expect(spyOnSelect.calledOnce).toBe(true); // expect(spyOnChange.calledOnce).toBe(true); // expect(spyOnSelect.calledWithMatch('beijing', true, { key: "beijing" })).toEqual(true); // expect(spyOnChange.calledWithMatch( // [['Yazhou', 'Zhongguo', 'Beijing']], // [{ label: "北京", value: "Beijing", key: "beijing" }] // )).toEqual(true); // }); it('onChange + leafOnly', () => { let spyOnSelect = sinon.spy(() => { }); let spyOnChange = sinon.spy(() => { }); let treeSelect = getTreeSelect({ defaultExpandAll: true, onSelect: spyOnSelect, onChange: spyOnChange, leafOnly: true, }); let nodeChina = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-2`).at(0); // select China nodeChina.simulate('click'); // onSelect & onChange expect(spyOnSelect.calledOnce).toBe(true); expect(spyOnChange.calledOnce).toBe(true); expect(spyOnSelect.calledWithMatch('zhongguo', true, { key: "zhongguo" })).toEqual(true); expect(spyOnChange.calledWithMatch( ['Beijing', 'Shanghai'], )).toEqual(true); let tagGroup = treeSelect.find(`.${BASE_CLASS_PREFIX}-tag`); expect(tagGroup.length).toEqual(2); }); it('controlled: leaf values show correct', () => { let treeSelect = getTreeSelect({ value: 'Beijing' }); let tagGroup = treeSelect.find(`.${BASE_CLASS_PREFIX}-tag`); expect(tagGroup.length).toEqual(1); expect(tagGroup.at(0).instance().textContent).toEqual('北京'); let selectedNode = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-3`).at(0); expect(selectedNode.find(`.${BASE_CLASS_PREFIX}-checkbox-inner-checked`).exists()).toEqual(true); expect(selectedNode.find(`.${BASE_CLASS_PREFIX}-tree-option-label-text`).instance().textContent).toEqual('北京'); treeSelect.unmount(); let treeSelect2 = getTreeSelect({ value: ['Dongjing', 'Beijing'] }); tagGroup = treeSelect2.find(`.${BASE_CLASS_PREFIX}-tag`); expect(tagGroup.length).toEqual(2); expect(tagGroup.at(0).instance().textContent).toEqual('东京'); expect(tagGroup.at(1).instance().textContent).toEqual('北京'); let level3Nodes = treeSelect2.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-3`); expect(level3Nodes.at(0).find(`.${BASE_CLASS_PREFIX}-checkbox-inner-checked`).exists()).toEqual(true); expect(level3Nodes.at(0).find(`.${BASE_CLASS_PREFIX}-tree-option-label-text`).instance().textContent).toEqual('北京'); expect(level3Nodes.at(2).find(`.${BASE_CLASS_PREFIX}-checkbox-inner-checked`).exists()).toEqual(true); expect(level3Nodes.at(2).find(`.${BASE_CLASS_PREFIX}-tree-option-label-text`).instance().textContent).toEqual('东京'); }); it('controlled: leaf values checked => ancester half checked', () => { let treeSelect = getTreeSelect({ value: ['Dongjing', 'Beijing'] }); let level1Nodes = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-1`); let level2Nodes = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-2`); let tagGroup = treeSelect.find(`.${BASE_CLASS_PREFIX}-tag`); expect(tagGroup.length).toEqual(2); expect(level1Nodes.at(0).find(`.${BASE_CLASS_PREFIX}-checkbox-indeterminate`).exists()).toEqual(true); expect(level1Nodes.at(1).find(`.${BASE_CLASS_PREFIX}-checkbox-indeterminate`).exists()).toEqual(false); expect(level1Nodes.at(1).find(`.${BASE_CLASS_PREFIX}-checkbox-inner-checked`).exists()).toEqual(false); expect(level2Nodes.at(0).find(`.${BASE_CLASS_PREFIX}-checkbox-indeterminate`).exists()).toEqual(true); expect(level2Nodes.at(1).find(`.${BASE_CLASS_PREFIX}-tree-option-label-text`).exists()).toEqual(true); }); it('controlled: leaf values checked => parent checked + ancester half checked', () => { let treeSelect = getTreeSelect({ value: ['Shanghai', 'Beijing'] }); let tagGroup = treeSelect.find(`.${BASE_CLASS_PREFIX}-tag`); expect(tagGroup.length).toEqual(1); let level1Nodes = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-1`); let level2Nodes = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-2`); expect(level1Nodes.at(0).find(`.${BASE_CLASS_PREFIX}-checkbox-indeterminate`).exists()).toEqual(true); expect(level2Nodes.at(0).find(`.${BASE_CLASS_PREFIX}-checkbox-inner-checked`).exists()).toEqual(true); }); it('controlled: all leaf items checked => checked ancesters', () => { let treeSelect = getTreeSelect({ value: ['Shanghai', 'Beijing', 'Dongjing', 'Daban'] }); let tagGroup = treeSelect.find(`.${BASE_CLASS_PREFIX}-tag`); expect(tagGroup.length).toEqual(1); let level1Nodes = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-1`); expect(level1Nodes.at(0).find(`.${BASE_CLASS_PREFIX}-checkbox-inner-checked`).exists()).toEqual(true); }); it('controlled: fire onChange and ui not update', () => { let spyOnChange = sinon.spy(() => { }); let treeSelect = getTreeSelect({ value: '', defaultExpandAll: true, onChange: spyOnChange, }); expect(treeSelect.find(`.${BASE_CLASS_PREFIX}-checkbox-inner-checked`).exists()).toEqual(false); let nodeBeijing = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-3`).at(0); // select beijing nodeBeijing.simulate('click'); // render tag let tagGroup = treeSelect.find(`.${BASE_CLASS_PREFIX}-tag`); expect(tagGroup.length).toEqual(0); // onChange expect(spyOnChange.calledOnce).toBe(true); expect(spyOnChange.calledWithMatch(["Beijing"])).toEqual(true); expect(treeSelect.find(`.${BASE_CLASS_PREFIX}-checkbox-inner-checked`).exists()).toEqual(false); }); it('disabled', () => { let treeSelect = getTreeSelect({ defaultValue: ['Dongjing', 'Beijing'], disabled: true, }); expect(treeSelect.find(`.${BASE_CLASS_PREFIX}-tag-closable`).length).toEqual(0); }); it('controlled: empty treeDate with value', () => { let treeSelect = getTreeSelect({ value: [''], treeData: [] }); expect(treeSelect.state().selectedKeys.length).toEqual(0); }); it('renderSelectedItem', () => { let spyOnSelect = sinon.spy(() => { }); let spyOnChange = sinon.spy(() => { }); let treeSelect = getTreeSelect({ renderSelectedItem: (item, { index, onClose }) => ({ content: item.value, isRenderInTag: true }), defaultExpandAll: true, onSelect: spyOnSelect, onChange: spyOnChange, }); const yaZhouKey = 'yazhou'; const yaZhouValue = 'Yazhou'; let nodeYaZhou = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-1`).at(0); nodeYaZhou.simulate('click'); // 判断回调 expect(spyOnSelect.calledOnce).toBe(true); expect(spyOnChange.calledOnce).toBe(true); expect(spyOnSelect.getCall(0).args[0]).toEqual(yaZhouKey); expect(spyOnChange.getCall(0).args[0]).toEqual([yaZhouValue]); // 判断内容是否value const innerHTML = document.querySelector('.semi-tag .semi-tag-content').textContent; expect(innerHTML).toEqual(yaZhouValue); }); it('disabledStrictly', () => { const treeSelect1 = mount( ); expect(treeSelect1.find(`.${BASE_CLASS_PREFIX}-tag`).length).toEqual(0); const clickedNode1 = treeSelect1.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-1`).at(0); clickedNode1.simulate('click', {}) expect(treeSelect1.find(`.${BASE_CLASS_PREFIX}-tag`).length).toEqual(4); const treeSelect2 = mount( ); expect(treeSelect2.find(`.${BASE_CLASS_PREFIX}-tag`).length).toEqual(0); const clickedNode2 = treeSelect2.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-1`).at(0); clickedNode2.simulate('click', {}) expect(treeSelect2.find(`.${BASE_CLASS_PREFIX}-tag`).length).toEqual(1); }); it('searchPosition is trigger', () => { const treeSelect = getTreeSelect({ searchPosition: 'trigger', filterTreeNode: true, multiple: true, maxTagCount: 1, defaultValue: ['Zhongguo', 'Meiguo'] }); const selection = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-select .${BASE_CLASS_PREFIX}-tree-select-selection`); expect(selection.find(`.${BASE_CLASS_PREFIX}-tagInput .${BASE_CLASS_PREFIX}-tag`).length).toEqual(1); expect(selection.find(`.${BASE_CLASS_PREFIX}-tagInput .${BASE_CLASS_PREFIX}-tagInput-wrapper-n`).at(0).getDOMNode().textContent).toEqual('+1'); const input = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-select .${BASE_CLASS_PREFIX}-tagInput .${BASE_CLASS_PREFIX}-input`); const searchValue = '北'; const event = { target: { value: searchValue } }; input.simulate('change', event); expect(treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option`).length).toEqual(6); expect(treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option-highlight`).length).toEqual(2); expect(treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option-highlight`).at(0).instance().textContent).toEqual('北'); expect(treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option-highlight`).at(1).instance().textContent).toEqual('北'); }); it('searchPosition is trigger + leafOnly', () => { const spyOnSelect = sinon.spy(() => { }); const treeSelect = getTreeSelect({ onSelect: spyOnSelect, searchPosition: 'trigger', filterTreeNode: true, multiple: true, defaultExpandAll: true, leafOnly: true, }); // Check if leafOnly is working const nodeChina = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-2`).at(0); nodeChina.simulate('click'); expect(spyOnSelect.calledOnce).toBe(true); expect(spyOnSelect.calledWithMatch('zhongguo', true, { key: "zhongguo" })).toEqual(true); const tagGroup = treeSelect.find(`.${BASE_CLASS_PREFIX}-tag`); expect(tagGroup.length).toEqual(2); // Check if searchPosition='trigger' is working const input = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-select .${BASE_CLASS_PREFIX}-tagInput .${BASE_CLASS_PREFIX}-input`); const searchValue = '北'; const event = { target: { value: searchValue } }; input.simulate('change', event); expect(treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option`).length).toEqual(6); expect(treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option-highlight`).length).toEqual(2); expect(treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option-highlight`).at(0).instance().textContent).toEqual('北'); expect(treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option-highlight`).at(1).instance().textContent).toEqual('北'); }); it('unRelated', () => { const spyOnChange = sinon.spy(() => { }); const tree = getTreeSelect({ defaultExpandAll: true, onChange: spyOnChange, checkRelation: 'unRelated', }); const nodelevel2 = tree.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-2`); const selectedNode = nodelevel2.at(0); selectedNode.simulate('click'); expect(spyOnChange.calledOnce).toBe(true); expect(spyOnChange.calledWithMatch(['Zhongguo'])).toEqual(true); // Note: selectedNode cannot be used directly here. selectedNode is the original node in the unselected state expect( tree .find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-2`) .at(0) .exists(`.${BASE_CLASS_PREFIX}-checkbox-checked`) ).toEqual(true); const nodelevel3 = tree.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-3`); expect( nodelevel3 .exists(`.${BASE_CLASS_PREFIX}-checkbox-unChecked` ) ).toEqual(true); expect( nodelevel3 .at(1) .exists(`.${BASE_CLASS_PREFIX}-checkbox-unChecked` ) ).toEqual(true); }); it('unRelated + value', () => { const tree = getTreeSelect({ defaultExpandAll: true, checkRelation: 'unRelated', value: 'Zhongguo' }); expect( tree .find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-2`) .at(0) .exists(`.${BASE_CLASS_PREFIX}-checkbox-checked`) ).toEqual(true); const nodelevel3 = tree.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-3`); expect( nodelevel3 .exists(`.${BASE_CLASS_PREFIX}-checkbox-unChecked` ) ).toEqual(true); expect( nodelevel3 .at(1) .exists(`.${BASE_CLASS_PREFIX}-checkbox-unChecked` ) ).toEqual(true); }); it('unRelated + defaultValue', () => { const tree = getTreeSelect({ defaultExpandAll: true, checkRelation: 'unRelated', defaultValue: 'Zhongguo' }); expect( tree .find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-2`) .at(0) .exists(`.${BASE_CLASS_PREFIX}-checkbox-checked`) ).toEqual(true); const nodelevel3 = tree.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-3`); expect( nodelevel3 .exists(`.${BASE_CLASS_PREFIX}-checkbox-unChecked` ) ).toEqual(true); expect( nodelevel3 .at(1) .exists(`.${BASE_CLASS_PREFIX}-checkbox-unChecked` ) ).toEqual(true); }); it('unRelated + onSelect', () => { const spyOnSelect = sinon.spy(() => { }); const tree = getTreeSelect({ defaultExpandAll: true, onSelect: spyOnSelect, checkRelation: 'unRelated', }); const nodelevel2 = tree.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-2`); const selectedNode = nodelevel2.at(0); selectedNode.simulate('click'); expect(spyOnSelect.calledOnce).toBe(true); // onSelect first args is key, not value expect(spyOnSelect.calledWithMatch('zhongguo')).toEqual(true); }); })