| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- import { useState } from 'react';
- import { TabPane, Tabs } from '../../index';
- import { BASE_CLASS_PREFIX } from '../../../semi-foundation/base/constants';
- let defaultTabPane = [
- { itemKey: 'itemKeyA', tab: 'titleA', children: 'contentA' },
- { itemKey: 'itemKeyB', tab: 'titleB', children: 'contentB' }
- ]
- let ACTIVE = `.${BASE_CLASS_PREFIX}-tabs-tab-active`;
- function getTabs(tabProps, tabPaneProps = defaultTabPane) {
- let tabPane = tabPaneProps.map(pane => {
- return <TabPane {...pane}></TabPane>
- });
- return <Tabs {...tabProps}>
- {tabPane}
- </Tabs>
- }
- describe('Tabs', () => {
- it('tabs render basicly', () => {
- let props = {};
- const tabs = mount(getTabs(props, defaultTabPane))
- // render in same time
- expect(tabs.find(`.${BASE_CLASS_PREFIX}-tabs-content`).children().length).toEqual(2);
- // default active first pane
- expect(tabs.find(`.${BASE_CLASS_PREFIX}-tabs-tab-active`).text()).toEqual('titleA');
- });
- it('Tabs with custom className & style & contentStyle', () => {
- let props = {
- className: 'test',
- style: {
- color: 'red'
- }
- };
- const tabs = shallow(getTabs(props));
- expect(tabs.exists('.test')).toEqual(true);
- expect(tabs.find('div.test')).toHaveStyle('color', 'red');
- });
- it('Tabs with defaultActiveKey', () => {
- let tabProps = {
- defaultActiveKey: 'itemKeyB'
- };
- const tabs = mount(getTabs(tabProps));
- const activeTabContent = tabs.find(`.${BASE_CLASS_PREFIX}-tabs-tab-active`).text();
- expect(activeTabContent).toEqual('titleB');
- });
- it('different type Tabs', () => {
- let lineTabs = mount(getTabs({ type: 'line' }));
- let cardTabs = mount(getTabs({ type: 'card' }));
- let buttonTabs = mount(getTabs({ type: 'button' }));
- expect(lineTabs.exists(`.${BASE_CLASS_PREFIX}-tabs-bar-button`)).toEqual(false);
- expect(lineTabs.exists(`.${BASE_CLASS_PREFIX}-tabs-bar-card`)).toEqual(false);
- expect(cardTabs.exists(`.${BASE_CLASS_PREFIX}-tabs-bar-card`)).toEqual(true);
- expect(buttonTabs.exists(`.${BASE_CLASS_PREFIX}-tabs-bar-button`)).toEqual(true);
- });
- it('tabList', () => {
- let tabList = [
- { tab: "文档", itemKey: "1" },
- { tab: "快速起步", itemKey: "2" },
- { tab: "帮助", itemKey: "3" }
- ];
- const contentList = [
- (<div>文档</div>),
- (<div>快速起步</div>),
- (<div>帮助</div>)
- ]
- class TabListDemo extends React.Component {
- state = {
- key: '1'
- };
- render() {
- return (
- <Tabs
- tabList={tabList}
- >
- {contentList[this.state.key - 1]}
- </Tabs>
- )
- }
- }
- const tabs = mount(<TabListDemo></TabListDemo>);
- expect(tabs.find(`.${BASE_CLASS_PREFIX}-tabs-content`).children().length).toEqual(1);
- })
- it('should not toggle whenn clicked disabled pane', () => {
- let spyOnChange = sinon.spy((activeKey) => {
- })
- let tabProps = {
- defaultActiveKey: 'itemKeyA',
- onChange: spyOnChange
- };
- let tabPaneProps = [
- { itemKey: 'itemKeyA', tab: 'titleA' },
- { itemKey: 'itemKeyB', tab: 'titleB', disabled: true },
- ];
- let tabs = mount(getTabs(tabProps, tabPaneProps));
- expect(tabs.exists(`.${BASE_CLASS_PREFIX}-tabs-tab-disabled`)).toEqual(true);
- expect(tabs.find(`.${BASE_CLASS_PREFIX}-tabs-tab-disabled`).text()).toEqual('titleB');
- tabs.find(`.${BASE_CLASS_PREFIX}-tabs-tab`).at(1).simulate('click');
- expect(spyOnChange.calledOnce).toBe(false);
- expect(tabs.find(`.${BASE_CLASS_PREFIX}-tabs-tab-active`).text()).toEqual('titleA');
- });
- it('onTabClick', () => {
- let onTabClick = (key, e) => {
- // debugger
- };
- let spyOnTabClick = sinon.spy(onTabClick);
- let props = {
- onTabClick: spyOnTabClick
- };
- const tabs = mount(getTabs(props));
- tabs.find(`.${BASE_CLASS_PREFIX}-tabs-tab`).at(1).simulate('click');
- expect(spyOnTabClick.calledWithMatch("itemKeyB")).toBe(true);
- expect(spyOnTabClick.calledOnce).toBe(true);
- });
- it('onChange', () => {
- let onChange = value => {
- // debugger
- };
- let spyOnChange = sinon.spy(onChange);
- let tabsProps = {
- onChange: spyOnChange
- };
- let paneProps = defaultTabPane;
- const tabs = mount(getTabs(tabsProps, paneProps));
- tabs.find(`.${BASE_CLASS_PREFIX}-tabs-tab`).at(1).simulate('click');
- expect(spyOnChange.calledWithMatch("itemKeyB")).toBe(true);
- expect(spyOnChange.calledOnce).toBe(true);
- });
- it('should update when activeKey change', () => {
- let tabsProps = {
- activeKey: 'itemKeyA'
- };
- const tabs = mount(getTabs(tabsProps, defaultTabPane));
- expect(tabs.find(`.${BASE_CLASS_PREFIX}-tabs-tab-active`).text()).toEqual('titleA');
- tabs.setProps({ activeKey: 'itemKeyB' });
- tabs.update()
- expect(tabs.find(`.${BASE_CLASS_PREFIX}-tabs-tab-active`).text()).toEqual('titleB');
- });
- it('contentStyle', () => {
- let tabsProps = {
- contentStyle: {
- color: 'red'
- }
- };
- const tabs = mount(getTabs(tabsProps, defaultTabPane));
- expect(tabs.find(`.${BASE_CLASS_PREFIX}-tabs-content`)).toHaveStyle('color', 'red');
- });
- it('tarBarExtraContent', () => {
- let extraContent = (<div className='extra'>Extra</div>);
- let tabsProps = {
- tabBarExtraContent: extraContent
- };
- const tabs = mount(getTabs(tabsProps, defaultTabPane));
- expect(tabs.contains(extraContent)).toEqual(true);
- });
- it('tabpane closable', () => {
- const Demo = () => {
- const [tabList, $tabList] = useState([
- {tab: '文档', itemKey:'1', text:'文档', closable:true},
- {tab: '快速起步', itemKey:'2', text:'快速起步', closable:true},
- {tab: '帮助', itemKey:'3', text:'帮助'},
- ]);
- const close = (key)=>{
- const newTabList = [...tabList];
- const closeIndex = newTabList.findIndex(t=>t.itemKey===key);
- newTabList.splice(closeIndex, 1);
- $tabList(newTabList);
- }
- return <Tabs type="card" defaultActiveKey="1" onTabClose={close}>
- {
- tabList.map(t=><TabPane closable={t.closable} tab={t.tab} itemKey={t.itemKey} key={t.itemKey}>{t.text}</TabPane>)
- }
- </Tabs>
- }
- const demo = mount(<Demo />);
- const firstTab = demo.find(`.${BASE_CLASS_PREFIX}-tabs-tab`).at(0);
- const secondTab = demo.find(`.${BASE_CLASS_PREFIX}-tabs-tab`).at(1);
- const thirdTab = demo.find(`.${BASE_CLASS_PREFIX}-tabs-tab`).at(2);
- expect(firstTab.exists(`.${BASE_CLASS_PREFIX}-tabs-tab-icon-close`)).toEqual(true);
- expect(secondTab.exists(`.${BASE_CLASS_PREFIX}-tabs-tab-icon-close`)).toEqual(true);
- expect(thirdTab.exists(`.${BASE_CLASS_PREFIX}-tabs-tab-icon-close`)).toEqual(false);
- demo.find(`.${BASE_CLASS_PREFIX}-tabs-tab-icon-close`).at(0).simulate('click');
- expect(demo.find(`.${BASE_CLASS_PREFIX}-tabs-tab`).length).toEqual(2)
- expect(demo.find(`.${BASE_CLASS_PREFIX}-tabs-tab`).at(0).hasClass(`${BASE_CLASS_PREFIX}-tabs-tab-active`)).toEqual(true);
- });
- })
|