| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311 | 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 treeData2 = [    {        label: '亚洲',        value: 'Asia',        key: '0',        children: [            {                label: '中国',                value: 'China',                key: '0-0',                children: [                    {                        label: '北京',                        value: 'Beijing',                        key: '0-0-0',                    },                    {                        label: '上海',                        value: 'Shanghai',                        key: '0-0-1',                    },                ],            },        ],    },    {        label: '北美洲',        value: 'North America',        key: '1',    }];const treeData3 = [    {        label: '亚洲',        value: 'Asia',        key: '0',        children: [            {                label: '中国',                value: 'China',                key: '0-0',            },        ],    },    {        label: '北美洲',        value: 'North America',        key: '1',    }];const specialTreeData = [    {      label1: '亚洲',      value1: 'Yazhou',      key1: 'yazhou',      children1: [        {          label1: '中国',          value1: 'Zhongguo',          key1: 'zhongguo',          disabled1: true,          children1: [            {              label1: '北京',              value1: 'Beijing',              key1: 'beijing',            },            {              label1: '上海',              value1: 'Shanghai',              key1: 'shanghai',            },          ],        },        {          label1: '日本',          value1: 'Riben',          key1: 'riben',          children1: [            {              label1: '东京',              value1: 'Dongjing',              key1: 'dongjing',            },            {              label1: '大阪',              value1: 'Daban',              key1: 'daban',            },          ],        },      ],    },    {      label1: '北美洲',      value1: 'Beimeizhou',      key1: 'beimeizhou',      children1: [        {          label1: '美国',          value1: 'Meiguo',          key1: 'meiguo',        },        {          label1: '加拿大',          value1: 'Jianada',          key1: 'jianada',        },      ],    },];const treeDataEnNA = {    label: 'North America',    value: 'North America',    key: '1',    children: [        {            label: 'United States',            value: 'United States',            key: '1-0'        },        {            label: 'Canada',            value: 'Canada',            key: '1-1'        }    ]}const treeDataEn = [    {        label: 'Asia',        value: 'Asia',        key: '0',        children: [            {                label: 'China',                value: 'China',                key: '0-0',                children: [                    {                        label: 'Beijing',                        value: 'Beijing',                        key: '0-0-0',                    },                    {                        label: 'Shanghai',                        value: 'Shanghai',                        key: '0-0-1',                    },                    {                        label: 'Chengdu',                        value: 'Chengdu',                        key: '0-0-2',                    },                ],            },            {                label: 'Japan',                value: 'Japan',                key: '0-1',                children: [                    {                        label: 'Osaka',                        value: 'Osaka',                        key: '0-1-0'                    }                ]            },        ],    },    treeDataEnNA];const defaultKeyMaps = {    value: 'value1',    key: 'key1',    label: 'label1',    children: 'children1',    disabled: 'disabled1'}const treeChildrenWithoutValue = [    {        label: '北京',        key: 'beijing',    },    {        label: '上海',        key: 'shanghai',    },];const treeDataWithoutValue = [    {        label: '亚洲',        key: 'yazhou',        children: [            {                label: '中国',                key: 'zhongguo',                children: treeChildrenWithoutValue,            },            {                label: '日本',                key: 'riben',                children: [                    {                        label: '东京',                        key: 'dongjing'                    },                    {                        label: '大阪',                        key: 'daban'                    }                ]            },        ],    },    {        label: '北美洲',        key: 'beimeizhou',        children: [            {                label: '美国',                key: 'meiguo'            },            {                label: '加拿大',                key: 'jianada'            }        ]    },];let commonProps = {    motion: false,    motionExpand: false,    mouseEnterDelay: 0,    mouseLeaveDelay: 0,};function getTreeSelect(props) {    props = { treeData: treeData, ...props }    return mount(        <TreeSelect            {...commonProps}            defaultOpen={true}            {...props}        />,        {            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('className / style', () => {        let props = {            className: 'test',            style: { height: 420 },        };        let treeSelect = getTreeSelect(props);        expect(treeSelect.hasClass('test')).toEqual(true);        expect(treeSelect.find('div.test')).toHaveStyle('height', 420);    });    it('placeholder', () => {        const props = {            placeholder: 'semi'        };        const treeSelect = getTreeSelect(props);        expect(treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-select-selection-placeholder`).instance().textContent).toEqual('semi');    });    it('validateStatus', () => {        const props = {};        const treeSelect = getTreeSelect(props);        expect(treeSelect.exists(`.${BASE_CLASS_PREFIX}-tree-select-error`)).toEqual(false);        expect(treeSelect.exists(`.${BASE_CLASS_PREFIX}-tree-select-warning`)).toEqual(false);        treeSelect.setProps({ validateStatus: 'error' });        expect(treeSelect.exists(`.${BASE_CLASS_PREFIX}-tree-select-error`)).toEqual(true);        treeSelect.setProps({ validateStatus: 'warning' });        expect(treeSelect.exists(`.${BASE_CLASS_PREFIX}-tree-select-warning`)).toEqual(true);    });    it('outerBottomSlot', () => {        let outerBottomSlot = <div class="outer-slot">outer</div>;        let props = {            outerBottomSlot: outerBottomSlot,        };        const treeSelect = getTreeSelect(props);        expect(treeSelect.contains(outerBottomSlot)).toEqual(true);    });    it('size', () => {        const props = {};        const treeSelect = getTreeSelect(props);        expect(treeSelect.exists(`.${BASE_CLASS_PREFIX}-tree-select-large`)).toEqual(false);        expect(treeSelect.exists(`.${BASE_CLASS_PREFIX}-tree-select-small`)).toEqual(false);        treeSelect.setProps({ size: 'large' });        expect(treeSelect.exists(`.${BASE_CLASS_PREFIX}-tree-select-large`)).toEqual(true);        treeSelect.setProps({ size: 'small' });        expect(treeSelect.exists(`.${BASE_CLASS_PREFIX}-tree-select-small`)).toEqual(true);    });    it('custom dropdownClassName / dropdownStyle / zIndex', () => {        let props = {            dropdownClassName: 'test',            dropdownStyle: {                color: 'red',            },            zIndex: 2000,        };        let treeSelect = getTreeSelect(props);        expect(treeSelect.exists('.test')).toEqual(true);        expect(treeSelect.find('.test')).toHaveStyle('color', 'red');        expect(document.querySelector(`.${BASE_CLASS_PREFIX}-portal`).style.zIndex).toEqual("2000");    });    it('dropdownMatchSelectWidth = true', () => {        // dropdownMatchSelectWidth default is true        let props = {            style: { width: 90 },            defaultValue: 'abc',        };        let treeSelect = getTreeSelect(props);        // cause jsdom doesn't support layout engine like browser, so you can't access offsetWidth/scrollWidth or use getBoundingRect(), it will always return 0;        // just use getComputedStyle to avoid this problem.        let selector = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-select`).getDOMNode();        let selectorWidth = window.getComputedStyle(selector).width; // expect 90px        let list = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-select-popover`).getDOMNode();        let listWidth = window.getComputedStyle(list).minWidth;        expect(selectorWidth).toEqual(listWidth);        treeSelect.unmount();    });    it('dropdownMatchSelectWidth = false', () => {        let props = {            style: { width: 90 },            defaultValue: 'abc',            dropdownMatchSelectWidth: false,        };        let treeSelect = getTreeSelect(props);        let selector = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-select`).getDOMNode();        let selectorWidth = window.getComputedStyle(selector).width; // expect 90px        let list = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-select-popover`).getDOMNode();        let listWidth = window.getComputedStyle(list).minWidth;        expect(selectorWidth).not.toEqual(listWidth);        treeSelect.unmount();    });    it('getPopupContainer', () => {        let treeSelect = getTreeSelect({            getPopupContainer: () => document.querySelector(`.${BASE_CLASS_PREFIX}-tree-select`),        });        let dom = document.querySelector(`.${BASE_CLASS_PREFIX}-tree-select`);        expect(dom.querySelectorAll(`.${BASE_CLASS_PREFIX}-tree-select-popover`).length).toEqual(1);    });    it('custom prefix / suffix / insetLabel', () => {        let prefix = <div className="prefix">prefix content</div>;        let suffix = <div className="suffix">suffix content</div>;        let insetLabel = 'semi';        const props = {            prefix: prefix,            suffix: suffix,        };        let treeSelect = getTreeSelect(props);        expect(treeSelect.contains(prefix)).toEqual(true);        expect(treeSelect.contains(suffix)).toEqual(true);        treeSelect.unmount();        let ntreeSelect = getTreeSelect({ insetLabel: insetLabel });        expect(ntreeSelect.contains(insetLabel)).toEqual(true);        ntreeSelect.unmount();    });    it('empty data', () => {        let treeSelect = getTreeSelect({            treeData: [],            emptyContent: 'empty'        });        let node = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option`);        expect(node.length).toEqual(1);        expect(node.hasClass(`${BASE_CLASS_PREFIX}-tree-option-empty`)).toEqual(true);        expect(node.instance().textContent).toEqual('empty');    });    it('defaultOpen', () => {        let props = {            defaultOpen: false,        };        let treeSelect = getTreeSelect(props);        expect(treeSelect.state().isOpen).toEqual(false);        expect(treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-select-popover`).exists()).toEqual(false);        treeSelect.unmount();        let ntreeSelect = getTreeSelect({ defaultOpen: true, });        expect(ntreeSelect.state().isOpen).toEqual(true);        expect(ntreeSelect.find(`.${BASE_CLASS_PREFIX}-tree-select-popover`).exists()).toEqual(true);        let options = ntreeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option`);        expect(ntreeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option`).length).toEqual(2);        expect(options.at(0).getDOMNode().textContent).toEqual('亚洲');        expect(options.at(1).getDOMNode().textContent).toEqual('北美洲');    });    it('defaultValue', () => {        // auto expand parent, if node exist means parent is open        let treeSelect = getTreeSelect({            defaultValue: 'Beijing'        });        let selectedNode = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option-selected`);        expect(treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-select-selection`).getDOMNode().textContent).toEqual('北京');        expect(selectedNode.instance().textContent).toEqual('北京');        treeSelect.unmount();        // array case only select first item        let tree2 = getTreeSelect({            defaultValue: ['Riben', 'Beijing']        });        let selectedNode2 = tree2.find(`.${BASE_CLASS_PREFIX}-tree-option-selected`);        expect(selectedNode2.instance().textContent).toEqual('日本');        expect(tree2.find(`.${BASE_CLASS_PREFIX}-tree-select-selection`).getDOMNode().textContent).toEqual('日本');        expect(tree2.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-2`).at(0).hasClass(`${BASE_CLASS_PREFIX}-tree-option-collapsed`)).toEqual(true);    })    it('defaultExpandedKeys', () => {        // auto expand parent        let treeSelect = getTreeSelect({            defaultExpandedKeys: ['zhongguo', '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(false);        expect(topNode.at(1).hasClass(`${BASE_CLASS_PREFIX}-tree-option-collapsed`)).toEqual(false);        // zhongguo riben        let children = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-2`);        expect(children.at(0).hasClass(`${BASE_CLASS_PREFIX}-tree-option-collapsed`)).toEqual(false);        expect(children.at(1).hasClass(`${BASE_CLASS_PREFIX}-tree-option-collapsed`)).toEqual(true);    })    it('defaultExpandAll', () => {        let treeSelect = getTreeSelect({            defaultExpandAll: true        });        let nodes = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option`);        let collapsed = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option-collapsed`);        expect(nodes.length).toEqual(10);        expect(collapsed.length).toEqual(0);        treeSelect.setProps({ treeData: treeData2});        treeSelect.update();        const nodes2 = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option`);        const collapsed2 = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option-collapsed`);        expect(nodes2.length).toEqual(2);        expect(collapsed2.length).toEqual(2);    })    it('expandAll', () => {        const treeSelect = getTreeSelect({            expandAll: true        });        const nodes = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option`);        const collapsed = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option-collapsed`);        expect(nodes.length).toEqual(10);        expect(collapsed.length).toEqual(0);        treeSelect.setProps({ treeData: treeData2});        treeSelect.update();        const nodes2 = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option`);        const collapsed2 = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option-collapsed`);        expect(nodes2.length).toEqual(5);        expect(collapsed2.length).toEqual(0);    })    it('if expandedKeys values work', () => {        // auto expand parent        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: ['yazhou', 'zhongguo', 'beimeizhou'] });        treeSelect.update();        // zhongguo riben        let children = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-2`);        expect(children.at(0).hasClass(`${BASE_CLASS_PREFIX}-tree-option-collapsed`)).toEqual(false);        expect(children.at(1).hasClass(`${BASE_CLASS_PREFIX}-tree-option-collapsed`)).toEqual(true);    });    it('if expand behavior works / onExpand', () => {        const nativeEvent = { nativeEvent: { stopImmediatePropagation: () => { } } }        let spyOnExpand = sinon.spy(() => { });        let treeSelect = getTreeSelect({            onExpand: spyOnExpand,        });        // yazhou        let topNodeAsia = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-1`).at(0);        let expandIcon = topNodeAsia.find(`.${BASE_CLASS_PREFIX}-tree-option-expand-icon`).at(0);        // expand yazhou        expandIcon.simulate('click', nativeEvent);        expect(spyOnExpand.calledOnce).toBe(true);        expect(spyOnExpand.calledWithMatch(["yazhou"], { expanded: true, node: { key: 'yazhou' } })).toEqual(true);        // zhongguo riben        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(false);        expect(topNode.at(1).hasClass(`${BASE_CLASS_PREFIX}-tree-option-collapsed`)).toEqual(true);        // collapse yazhou        expandIcon.simulate('click', nativeEvent);        expect(spyOnExpand.calledWithMatch([], { expanded: false, node: { key: 'yazhou' } })).toEqual(true);        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);    });    it('if expandedKeys controlled work / onExpand', () => {        const nativeEvent = { nativeEvent: { stopImmediatePropagation: () => { } } }        let spyOnExpand = sinon.spy(() => { });        let treeSelect = getTreeSelect({            expandedKeys: ['beimeizhou'],            onExpand: spyOnExpand,        });        // yazhou        let topNodeAsia = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-1`).at(0);        let expandIcon = topNodeAsia.find(`.${BASE_CLASS_PREFIX}-tree-option-expand-icon`).at(0);        // expand yazhou        expandIcon.simulate('click', nativeEvent);        expect(spyOnExpand.calledWithMatch(["beimeizhou", "yazhou"], { expanded: true, node: { key: 'yazhou' } })).toEqual(true);        // zhongguo riben        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);    });    it('select 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);        // 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('Beijing', { key: "beijing" })).toEqual(true);        let selectBox = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-select`).at(0);        selectBox.simulate('click');        // classname        nodeBeijing = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-3`).at(0);        expect(nodeBeijing.hasClass(`${BASE_CLASS_PREFIX}-tree-option-selected`)).toEqual(true);        // render in input box        expect(treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-select-selection`).getDOMNode().textContent).toEqual('北京');        // change        let nodeAsia = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-1`).at(0);        // select asia        nodeAsia.simulate('click');        // onSelect & onChange        expect(spyOnSelect.calledWithMatch('yazhou', true, { key: "yazhou" })).toEqual(true);        expect(spyOnChange.calledWithMatch('Yazhou', { key: "yazhou" })).toEqual(true);        selectBox.simulate('click');        // classname        nodeAsia = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-1`).at(0);        expect(nodeAsia.hasClass(`${BASE_CLASS_PREFIX}-tree-option-selected`)).toEqual(true);        // render in input box        expect(treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-select-selection`).getDOMNode().textContent).toEqual('亚洲');    });    it('onClear', () => {        let spyOnClear = sinon.spy(() => { });        let treeSelect = getTreeSelect({            defaultExpandAll: true,            onClear: spyOnClear,            showClear: true,        });        let nodeBeijing = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-3`).at(0);        // select beijing        nodeBeijing.simulate('click');        let nodeSelectTree = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-select.${BASE_CLASS_PREFIX}-tree-select-single`).at(0);        nodeSelectTree.simulate('mouseenter');        let nodeClearIcon = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-select-clearbtn`).at(0);        nodeClearIcon.simulate('click');        expect(spyOnClear.calledOnce).toBe(true);    })    it('onChange + value not changed', () => {        let spyOnSelect = sinon.spy(() => { });        let spyOnChange = sinon.spy(() => { });        let treeSelect = getTreeSelect({            defaultExpandAll: true,            onSelect: spyOnSelect,            onChange: spyOnChange,            defaultValue: 'Beijing'        });        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.notCalled).toBe(true);    });    it('onChange + onChangeWithObject', () => {        let spyOnChange = sinon.spy(() => { });        let treeSelect = getTreeSelect({            defaultExpandAll: true,            onChangeWithObject: true,            onChange: spyOnChange,        });        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(spyOnChange.calledOnce).toBe(true);        expect(spyOnChange.calledWithMatch({ key: "beijing" })).toEqual(true);    });    it('treeNodeLabelProp', () => {        // auto expand parent, if node exist means parent is open        let treeSelect = getTreeSelect({            defaultValue: 'Beijing',            treeNodeLabelProp: 'value'        });        expect(treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-select-selection`).getDOMNode().textContent).toEqual('Beijing');        // select asia        let nodeAsia = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-1`).at(0);        nodeAsia.simulate('click');        expect(treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-select-selection`).getDOMNode().textContent).toEqual('Yazhou');    })    it('filterTreeNode = true shows input box', () => {        let treeSelect = getTreeSelect({});        let searchWrapper = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-search-wrapper`)        expect(searchWrapper.exists()).toEqual(false);        treeSelect.setProps({            filterTreeNode: true        });        treeSelect.update();        searchWrapper = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-search-wrapper`)        expect(searchWrapper.exists()).toEqual(true);    });    it('searchPlaceholder', () => {        let treeSelect = getTreeSelect({            filterTreeNode: true,            searchPlaceholder: 'test',        });        let searchWrapper = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-search-wrapper`)        expect(searchWrapper.find('input').instance().getAttribute('placeholder')).toEqual('test');    });    it('onSearch', () => {        let onSearch = value => { };        let spyOnSearch = sinon.spy(onSearch);        let treeSelect = getTreeSelect({            filterTreeNode: true,            onSearch: spyOnSearch,        });        const searchWrapper = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-search-wrapper`);        let searchValue = 'semi';        let event = { target: { value: searchValue } };        searchWrapper.find('input').simulate('change', event);        expect(spyOnSearch.calledOnce).toBe(true);        expect(spyOnSearch.calledWithMatch(searchValue)).toBe(true);        /* Check the input parameters of onSearch */        searchValue = '北京';        event = { target: { value: searchValue } };        searchWrapper.find('input').simulate('change', event);        expect(spyOnSearch.callCount).toBe(2);        const firstCall = spyOnSearch.getCall(1);        const args = firstCall.args;        expect(args[0]).toEqual('北京');        expect(args[1].includes('yazhou')).toEqual(true);        expect(args[1].includes('zhongguo')).toEqual(true);    });    it('filterTreeNode shows correct result', () => {        let treeSelect1 = getTreeSelect({            filterTreeNode: true,        });        const searchWrapper = treeSelect1.find(`.${BASE_CLASS_PREFIX}-tree-search-wrapper`);        let searchValue = '北';        let event = { target: { value: searchValue } };        searchWrapper.find('input').simulate('change', event);        expect(treeSelect1.find(`.${BASE_CLASS_PREFIX}-tree-option`).length).toEqual(6);        expect(treeSelect1.find(`.${BASE_CLASS_PREFIX}-tree-option-highlight`).length).toEqual(2);        expect(treeSelect1.find(`.${BASE_CLASS_PREFIX}-tree-option-highlight`).at(0).instance().textContent).toEqual('北');        expect(treeSelect1.find(`.${BASE_CLASS_PREFIX}-tree-option-highlight`).at(1).instance().textContent).toEqual('北');        treeSelect1.unmount();        let treeSelect2 = getTreeSelect({            filterTreeNode: true,            treeNodeFilterProp: 'value',        });        const searchWrapper2 = treeSelect2.find(`.${BASE_CLASS_PREFIX}-tree-search-wrapper`);        let searchValue2 = 'an';        let event2 = { target: { value: searchValue2 } };        searchWrapper2.find('input').simulate('change', event2);        expect(treeSelect2.find(`.${BASE_CLASS_PREFIX}-tree-option`).length).toEqual(10);    });    it('filterTreeNode + no result', () => {        let treeSelect1 = getTreeSelect({            filterTreeNode: true,        });        const searchWrapper = treeSelect1.find(`.${BASE_CLASS_PREFIX}-tree-search-wrapper`);        let searchValue = 'Bei';        let event = { target: { value: searchValue } };        searchWrapper.find('input').simulate('change', event);        expect(treeSelect1.find(`.${BASE_CLASS_PREFIX}-tree-option`).length).toEqual(2);        expect(treeSelect1.find(`.${BASE_CLASS_PREFIX}-tree-option-highlight`).length).toEqual(0);        treeSelect1.unmount();        let treeSelect2 = getTreeSelect({            filterTreeNode: true,            treeNodeFilterProp: 'value',        });        const searchWrapper2 = treeSelect2.find(`.${BASE_CLASS_PREFIX}-tree-search-wrapper`);        let searchValue2 = '北';        let event2 = { target: { value: searchValue2 } };        searchWrapper2.find('input').simulate('change', event2);        expect(treeSelect2.find(`.${BASE_CLASS_PREFIX}-tree-option`).length).toEqual(2);    });    it('async load data', () => {        const nativeEvent = { nativeEvent: { stopImmediatePropagation: () => { } } }        const then = jest.fn(() => Promise.resolve());        const loadData = jest.fn(() => ({ then }));        const data = {            label: '亚洲',            value: 'Asia',            key: 'asia',        };        const treeSelect = getTreeSelect({            loadData,            loadedKeys: ['0-1'],            treeData: [data]        });        const topNodeAsia = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-1`).at(0);        const expandIcon = topNodeAsia.find(`.${BASE_CLASS_PREFIX}-tree-option-expand-icon`).at(0);        expandIcon.simulate('click', nativeEvent);        expect(loadData).toHaveBeenCalledWith(data);        expect(then).toHaveBeenCalled();    });    it('filterTreeNode + treeNodeFilterProp', () => {        let treeSelect = getTreeSelect({            filterTreeNode: true,            treeNodeFilterProp: 'value',        });        const searchWrapper = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-search-wrapper`);        let searchValue = 'Bei';        let event = { target: { value: searchValue } };        searchWrapper.find('input').simulate('change', event);        expect(treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option`).length).toEqual(6);    });    it('filterTreeNode + showFilteredOnly + no result', () => {        let treeSelect = getTreeSelect({            filterTreeNode: true,            showFilteredOnly: true,        });        const searchWrapper = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-search-wrapper`);        let searchValue = 'Bei';        let event = { target: { value: searchValue } };        searchWrapper.find('input').simulate('change', event);        let node = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option`);        expect(node.length).toEqual(1);        expect(node.hasClass(`${BASE_CLASS_PREFIX}-tree-option-empty`)).toEqual(true);    });    it('filterTreeNode + showFilteredOnly shows correct result', () => {        let treeSelect = getTreeSelect({            filterTreeNode: true,            showFilteredOnly: true,        });        const searchWrapper = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-search-wrapper`);        let searchValue = '北';        let event = { target: { value: searchValue } };        searchWrapper.find('input').simulate('change', event);        expect(treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option`).length).toEqual(4);        expect(treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option-highlight`).length).toEqual(2);    });    it('filterTreeNode as a func', () => {        let treeSelect = getTreeSelect({            filterTreeNode: (inputValue, treeNode) => treeNode === inputValue,        });        const searchWrapper = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-search-wrapper`);        searchWrapper.find('input').simulate('change', { target: { value: '北' } });        expect(treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option-highlight`).length).toEqual(0);        // update        searchWrapper.find('input').simulate('change', { target: { value: '北京' } });        expect(treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option-highlight`).length).toEqual(1);        expect(treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option-highlight`).instance().textContent).toEqual('北京');    });    it('controlled: value shows correct', () => {        let treeSelect = getTreeSelect({            value: 'Beijing'        });        let selectedNode = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option-selected`);        expect(selectedNode.instance().textContent).toEqual('北京');        expect(treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-select-selection`).getDOMNode().textContent).toEqual('北京');        treeSelect.unmount();        // array case only select first item        let treeSelect2 = getTreeSelect({            value: ['Riben', 'Beijing']        });        let selectedNode2 = treeSelect2.find(`.${BASE_CLASS_PREFIX}-tree-option-selected`);        expect(selectedNode2.instance().textContent).toEqual('日本');        expect(treeSelect2.find(`.${BASE_CLASS_PREFIX}-tree-select-selection`).getDOMNode().textContent).toEqual('日本');        expect(treeSelect2.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-2`).at(0).hasClass(`${BASE_CLASS_PREFIX}-tree-option-collapsed`)).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}-tree-option-selected`).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');        // onSelect & onChange        expect(spyOnChange.calledOnce).toBe(true);        expect(spyOnChange.calledWithMatch("Beijing")).toEqual(true);        expect(treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option-selected`).exists()).toEqual(false);    });    it('controlled: value + onChangeWithObject', () => {        let spyOnChange = sinon.spy(() => { });        let treeSelect = getTreeSelect({            value: {                label: '北京',                value: 'Beijing',                key: 'beijing',            },            defaultExpandAll: true,            onChange: spyOnChange,            onChangeWithObject: true,        });        expect(treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option-selected`).exists()).toEqual(true);    });    it('virtualized: fixed height', () => {        let treeSelect = getTreeSelect({            defaultExpandAll: true,            virtualize: {                itemSize: 28,                height: 84,            },        });        // virtual list        expect(treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-virtual-list`).exists()).toEqual(true);        // fewer nodes        let nodes = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option`);        expect(nodes.length).toBeLessThan(10);    });    it('disabled', () => {        let treeSelect = getTreeSelect({            disabled: true,        });        let inputBox = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-select-disabled`);        expect(inputBox.exists()).toEqual(true);        expect(treeSelect.state().isOpen).toEqual(false);        expect(treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-wrapper`).exists()).toEqual(false);        inputBox.simulate('click');        expect(treeSelect.state().isOpen).toEqual(false);        expect(treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-wrapper`).exists()).toEqual(false);    });    it('renderSelectedItem', () => {        let spyOnSelect = sinon.spy(() => { });        let spyOnChange = sinon.spy(() => { });        let treeSelect = getTreeSelect({            renderSelectedItem: treeNode => treeNode.value,            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);        // 判断已选项的渲染        const innerHTML = document.querySelector('.semi-tree-select-selection span').textContent;        expect(innerHTML).toEqual(yaZhouValue);    });    it('search autofocus', () => {        let treeSelect = getTreeSelect({            filterTreeNode: true,            searchAutoFocus: true,        });        let selectEle = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-select`)        selectEle.simulate('click');        setTimeout(() => {            let searchWrapper = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-search-wrapper`)            const searchInput = searchWrapper.find(`input`)            expect(searchInput.matchesElement(document.activeElement)).toEqual(true);            done();        }, 100);    });    it('treeData is updated should not clear value when uncontrolled mode and single selection', () => {        const nativeEvent = { nativeEvent: { stopImmediatePropagation: () => { } } }        const treeSelect = getTreeSelect({            defaultExpandAll: true        });        treeSelect            .find(`.${BASE_CLASS_PREFIX}-tree-option-list .${BASE_CLASS_PREFIX}-tree-option`)            .at(2)            .simulate('click', nativeEvent);        expect(            treeSelect            .find(`.${BASE_CLASS_PREFIX}-tree-select .${BASE_CLASS_PREFIX}-tree-select-selection span`)            .getDOMNode()            .textContent        ).toEqual('北京');        treeSelect.setProps({ treeData: treeChildren});        treeSelect.update();        expect(            treeSelect            .find(`.${BASE_CLASS_PREFIX}-tree-select .${BASE_CLASS_PREFIX}-tree-select-selection span`)            .getDOMNode()            .textContent        ).toEqual('北京');        treeSelect.setProps({ treeData: treeData2});        treeSelect.update();        expect(            treeSelect            .find(`.${BASE_CLASS_PREFIX}-tree-select .${BASE_CLASS_PREFIX}-tree-select-selection span`)            .getDOMNode()            .textContent        ).toEqual('');    });    it('treeData is updated should not clear value when uncontrolled mode and multiple selection', () => {        const nativeEvent = { nativeEvent: { stopImmediatePropagation: () => { } } }        const treeSelect = getTreeSelect({            defaultExpandAll: true,            multiple: true,        });        treeSelect            .find(`.${BASE_CLASS_PREFIX}-tree-option-list .${BASE_CLASS_PREFIX}-tree-option`)            .at(2)            .simulate('click', nativeEvent);        expect(            treeSelect            .find(`.${BASE_CLASS_PREFIX}-tree-select-selection .${BASE_CLASS_PREFIX}-tag-group .${BASE_CLASS_PREFIX}-tag`)            .at(0)            .find(`.${BASE_CLASS_PREFIX}-tag-content`)            .getDOMNode()            .textContent        ).toEqual('北京');        treeSelect.setProps({ treeData: treeChildren});        treeSelect.update();        expect(            treeSelect            .find(`.${BASE_CLASS_PREFIX}-tree-select-selection .${BASE_CLASS_PREFIX}-tag-group .${BASE_CLASS_PREFIX}-tag`)            .at(0)            .find(`.${BASE_CLASS_PREFIX}-tag-content`)            .getDOMNode()            .textContent        ).toEqual('北京');        treeSelect.setProps({ treeData: treeData2});        treeSelect.update();        expect(            treeSelect            .find(`.${BASE_CLASS_PREFIX}-tree-select-selection .${BASE_CLASS_PREFIX}-tag-group .${BASE_CLASS_PREFIX}-tag`)            .at(0)            .find(`.${BASE_CLASS_PREFIX}-tag-content`)            .length        ).toEqual(0);    });    it('treeData is updated should not clear value when controlled mode and single selection', () => {        const treeSelect = getTreeSelect({            defaultExpandAll: true,            value: 'Beijing'        });        expect(            treeSelect            .find(`.${BASE_CLASS_PREFIX}-tree-select .${BASE_CLASS_PREFIX}-tree-select-selection span`)            .getDOMNode()            .textContent        ).toEqual('北京');        treeSelect.setProps({ treeData: treeChildren});        treeSelect.update();        expect(            treeSelect            .find(`.${BASE_CLASS_PREFIX}-tree-select .${BASE_CLASS_PREFIX}-tree-select-selection span`)            .getDOMNode()            .textContent        ).toEqual('北京');        treeSelect.setProps({ treeData: treeData3});        treeSelect.update();        // If the value exists, but not in the treeData, the value will be displayed in the trigger        expect(            treeSelect            .find(`.${BASE_CLASS_PREFIX}-tree-select .${BASE_CLASS_PREFIX}-tree-select-selection span`)            .getDOMNode()            .textContent        ).toEqual('Beijing');    });    it('treeData is updated should not clear value when controlled mode and multiple selection', () => {        const treeSelect = getTreeSelect({            defaultExpandAll: true,            multiple: true,            value: 'Beijing'        });        expect(            treeSelect            .find(`.${BASE_CLASS_PREFIX}-tree-select-selection .${BASE_CLASS_PREFIX}-tag-group .${BASE_CLASS_PREFIX}-tag`)            .at(0)            .find(`.${BASE_CLASS_PREFIX}-tag-content`)            .getDOMNode()            .textContent        ).toEqual('北京');        treeSelect.setProps({ treeData: treeChildren});        treeSelect.update();        expect(            treeSelect            .find(`.${BASE_CLASS_PREFIX}-tree-select-selection .${BASE_CLASS_PREFIX}-tag-group .${BASE_CLASS_PREFIX}-tag`)            .at(0)            .find(`.${BASE_CLASS_PREFIX}-tag-content`)            .getDOMNode()            .textContent        ).toEqual('北京');        treeSelect.setProps({ treeData: treeData3});        treeSelect.update();        expect(            treeSelect            .find(`.${BASE_CLASS_PREFIX}-tree-select-selection .${BASE_CLASS_PREFIX}-tag-group .${BASE_CLASS_PREFIX}-tag`)            .at(0)            .find(`.${BASE_CLASS_PREFIX}-tag-content`)            .length        ).toEqual(1);    });    it('expandedKeys controlled + filterTreeNode', () => {        const spyOnExpand = sinon.spy(() => { });        const treeSelect = getTreeSelect({            expandedKeys: [],            onExpand: spyOnExpand,            filterTreeNode: true,        });        const searchWrapper = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-search-wrapper`);        const searchValue = '北京';        const event = { target: { value: searchValue } };        searchWrapper.find('input').simulate('change', event);        expect(spyOnExpand.callCount).toBe(0);        /* filter won't impact on the expansion of node when expandedKeys is controlled */        const 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);    });        it('option not in treeData + treeData item with value', () => {        const spyOnSelect = sinon.spy(() => { });        const spyOnChange = sinon.spy(() => { });        let treeSelect = getTreeSelect({            defaultValue: 'fish',            defaultExpandAll: true,            onSelect: spyOnSelect,            onChange: spyOnChange,        });        expect(treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-select-selection`).getDOMNode().textContent).toEqual('fish');        // beijing        let topNodeBeijing = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-3`).at(0);        topNodeBeijing.simulate('click');        expect(spyOnChange.calledWithMatch("Beijing")).toEqual(true);        treeSelect.unmount();         // onChangeWithObject        treeSelect = getTreeSelect({            defaultValue: { label: '鱼', value: 'Fish', key: 'fish' },            onChangeWithObject: true,            defaultExpandAll: true,            onSelect: spyOnSelect,            onChange: spyOnChange,        });        expect(treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-select-selection`).getDOMNode().textContent).toEqual('鱼');        // beijing        topNodeBeijing = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-3`).at(0);        topNodeBeijing.simulate('click');        expect(spyOnChange.calledWithMatch({ label: '北京', value: 'Beijing', key: 'beijing' })).toEqual(true);        treeSelect.unmount();     })    it('option not in treeData + treeData item without value', () => {        const spyOnSelect = sinon.spy(() => { });        const spyOnChange = sinon.spy(() => { });        let treeSelect = getTreeSelect({            treeData: treeDataWithoutValue,            defaultValue: 'fish',            defaultExpandAll: true,            onSelect: spyOnSelect,            onChange: spyOnChange,        });        expect(treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-select-selection`).getDOMNode().textContent).toEqual('fish');        // beijing        let topNodeBeijing = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-3`).at(0);        topNodeBeijing.simulate('click');        expect(spyOnChange.calledWithMatch("beijing")).toEqual(true);        treeSelect.unmount();         // onChangeWithObject        treeSelect = getTreeSelect({            defaultValue: { label: '鱼', key: 'fish' },            onChangeWithObject: true,            defaultExpandAll: true,            onSelect: spyOnSelect,            onChange: spyOnChange,        });        expect(treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-select-selection`).getDOMNode().textContent).toEqual('鱼');        // beijing        topNodeBeijing = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-3`).at(0);        topNodeBeijing.simulate('click');        expect(spyOnChange.calledWithMatch({ label: '北京', key: 'beijing' })).toEqual(true);        treeSelect.unmount();     })    it('keyMaps', () => {        let spyOnChange = sinon.spy(() => { });        let treeSelect = getTreeSelect({            treeData: specialTreeData,            defaultValue: 'Beijing',            onChange: spyOnChange,            defaultExpandAll: true,            motion: false,            keyMaps: defaultKeyMaps        });        let disabledNode = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option-disabled`).at(0);        expect(disabledNode.find(`.${BASE_CLASS_PREFIX}-tree-option-label-text`).instance().textContent).toEqual('中国');        let selectedNode = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option-selected`);        expect(selectedNode.instance().textContent).toEqual('北京');        let nodeShanghai = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-3`).at(1);        // select beijing        nodeShanghai.simulate('click');        // onSelect & onChange        expect(spyOnChange.calledOnce).toBe(true);        expect(spyOnChange.calledWithMatch("Shanghai")).toEqual(true);        let selectContentNode = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-select-selection-content`)        expect(selectContentNode.instance().textContent).toEqual('上海');    });    it('keyMaps + onChangeWithObject', () => {        let spyOnChange = sinon.spy(() => { });        let treeSelect = getTreeSelect({            treeData: specialTreeData,            defaultValue: {                label1: '北京',                value1: 'Beijing',                key1: 'beijing',            },            onChangeWithObject: true,            onChange: spyOnChange,            defaultExpandAll: true,            keyMaps: defaultKeyMaps        });        let disabledNode = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option-disabled`).at(0);        expect(disabledNode.find(`.${BASE_CLASS_PREFIX}-tree-option-label-text`).instance().textContent).toEqual('中国');        let selectedNode = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option-selected`);        expect(selectedNode.instance().textContent).toEqual('北京');        let nodeShanghai = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-3`).at(1);        // select beijing        nodeShanghai.simulate('click');        // onSelect & onChange        expect(spyOnChange.calledOnce).toBe(true);        expect(spyOnChange.calledWithMatch({            label1: '上海',            value1: 'Shanghai',            key1: 'shanghai',        })).toEqual(true);        let selectContentNode = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-select-selection-content`)        expect(selectContentNode.instance().textContent).toEqual('上海');    });    it('onSearch + filteredNodes', () => {        let spyOnSearch = sinon.spy(() => { });        console.log('treeDataEn', treeDataEn);        let treeSelect = getTreeSelect({            filterTreeNode: true,            treeData: treeDataEn,            onSearch: spyOnSearch        });        const searchWrapper = treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-search-wrapper`);        let searchValue = 'o';        let event = { target: { value: searchValue } };        searchWrapper.find('input').simulate('change', event);        const firstCall = spyOnSearch.getCall(0);        const args = firstCall.args;        expect(args[0]).toEqual(searchValue);        expect(args[1]).toEqual(['0-1', '0']);        expect(args[2]).toEqual([            treeDataEnNA,            { "label": "Osaka", "value": "Osaka", "key": "0-1-0" }        ]);    });})
 |