270 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			270 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
| import { mount } from '@vue/test-utils';
 | |
| import dayjs from 'dayjs';
 | |
| import MockDate from 'mockdate';
 | |
| import { sleep } from '../../../tests/utils';
 | |
| import {
 | |
|   Pagination,
 | |
|   DatePicker,
 | |
|   TimePicker,
 | |
|   Calendar,
 | |
|   Popconfirm,
 | |
|   Table,
 | |
|   Modal,
 | |
|   Select,
 | |
|   Transfer,
 | |
| } from '../..';
 | |
| import LocaleProvider from '..';
 | |
| import arEG from '../ar_EG';
 | |
| import bgBG from '../bg_BG';
 | |
| import caES from '../ca_ES';
 | |
| import csCZ from '../cs_CZ';
 | |
| import daDK from '../da_DK';
 | |
| import deDE from '../de_DE';
 | |
| import elGR from '../el_GR';
 | |
| import enGB from '../en_GB';
 | |
| import enUS from '../en_US';
 | |
| import esES from '../es_ES';
 | |
| import etEE from '../et_EE';
 | |
| import faIR from '../fa_IR';
 | |
| import fiFI from '../fi_FI';
 | |
| import frBE from '../fr_BE';
 | |
| import frFR from '../fr_FR';
 | |
| import heIL from '../he_IL';
 | |
| import hiIN from '../hi_IN';
 | |
| import hrHR from '../hr_HR';
 | |
| import huHU from '../hu_HU';
 | |
| import hyAM from '../hy_AM';
 | |
| import isIS from '../is_IS';
 | |
| import itIT from '../it_IT';
 | |
| import jaJP from '../ja_JP';
 | |
| import knIN from '../kn_IN';
 | |
| import koKR from '../ko_KR';
 | |
| import kuIQ from '../ku_IQ';
 | |
| import mkMK from '../mk_MK';
 | |
| import mnMN from '../mn_MN';
 | |
| import msMY from '../ms_MY';
 | |
| import nbNO from '../nb_NO';
 | |
| import neNP from '../ne-NP';
 | |
| import nlBE from '../nl_BE';
 | |
| import nlNL from '../nl_NL';
 | |
| import plPL from '../pl_PL';
 | |
| import ptBR from '../pt_BR';
 | |
| import ptPT from '../pt_PT';
 | |
| import roRO from '../ro_RO';
 | |
| import ruRU from '../ru_RU';
 | |
| import skSK from '../sk_SK';
 | |
| import slSI from '../sl_SI';
 | |
| import srRS from '../sr_RS';
 | |
| import svSE from '../sv_SE';
 | |
| import taIN from '../ta_IN';
 | |
| import thTH from '../th_TH';
 | |
| import trTR from '../tr_TR';
 | |
| import ukUA from '../uk_UA';
 | |
| import viVN from '../vi_VN';
 | |
| import idID from '../id_ID';
 | |
| import lvLV from '../lv_LV';
 | |
| import zhCN from '../zh_CN';
 | |
| import zhTW from '../zh_TW';
 | |
| 
 | |
| const locales = [
 | |
|   arEG,
 | |
|   bgBG,
 | |
|   caES,
 | |
|   csCZ,
 | |
|   daDK,
 | |
|   deDE,
 | |
|   elGR,
 | |
|   enGB,
 | |
|   enUS,
 | |
|   esES,
 | |
|   etEE,
 | |
|   faIR,
 | |
|   fiFI,
 | |
|   frBE,
 | |
|   frFR,
 | |
|   heIL,
 | |
|   hiIN,
 | |
|   hrHR,
 | |
|   huHU,
 | |
|   hyAM,
 | |
|   isIS,
 | |
|   itIT,
 | |
|   jaJP,
 | |
|   knIN,
 | |
|   koKR,
 | |
|   kuIQ,
 | |
|   mkMK,
 | |
|   msMY,
 | |
|   mnMN,
 | |
|   nbNO,
 | |
|   neNP,
 | |
|   nlBE,
 | |
|   nlNL,
 | |
|   plPL,
 | |
|   ptBR,
 | |
|   ptPT,
 | |
|   roRO,
 | |
|   ruRU,
 | |
|   skSK,
 | |
|   slSI,
 | |
|   srRS,
 | |
|   svSE,
 | |
|   taIN,
 | |
|   thTH,
 | |
|   trTR,
 | |
|   ukUA,
 | |
|   viVN,
 | |
|   idID,
 | |
|   lvLV,
 | |
|   zhCN,
 | |
|   zhTW,
 | |
| ];
 | |
| 
 | |
| const { Option } = Select;
 | |
| const { RangePicker } = DatePicker;
 | |
| 
 | |
| const columns = [
 | |
|   {
 | |
|     title: 'Name',
 | |
|     dataIndex: 'name',
 | |
|     filters: [
 | |
|       {
 | |
|         text: 'filter1',
 | |
|         value: 'filter1',
 | |
|       },
 | |
|     ],
 | |
|   },
 | |
|   {
 | |
|     title: 'Age',
 | |
|     dataIndex: 'age',
 | |
|   },
 | |
| ];
 | |
| 
 | |
| const App = {
 | |
|   render() {
 | |
|     return (
 | |
|       <div>
 | |
|         <Pagination defaultCurrent={1} total={50} showSizeChanger />
 | |
|         <Select showSearch style={{ width: '200px' }}>
 | |
|           <Option value="jack">jack</Option>
 | |
|           <Option value="lucy">lucy</Option>
 | |
|         </Select>
 | |
|         <DatePicker open />
 | |
|         <TimePicker open defaultValue={dayjs()} />
 | |
|         <RangePicker open style={{ width: '200px' }} />
 | |
|         <Popconfirm title="Question?" visible>
 | |
|           <a>Click to confirm</a>
 | |
|         </Popconfirm>
 | |
|         <Transfer dataSource={[]} showSearch targetKeys={[]} render={item => item.title} />
 | |
|         <Calendar fullscreen={false} value={dayjs()} />
 | |
|         <Table dataSource={[]} columns={columns} />
 | |
|         <Modal title="Locale Modal" visible>
 | |
|           <p>Locale Modal</p>
 | |
|         </Modal>
 | |
|       </div>
 | |
|     );
 | |
|   },
 | |
| };
 | |
| 
 | |
| describe('Locale Provider', () => {
 | |
|   beforeAll(() => {
 | |
|     document.body.innerHTML = '';
 | |
|     MockDate.set(dayjs('2017-09-18T03:30:07.795'));
 | |
|   });
 | |
| 
 | |
|   afterAll(() => {
 | |
|     MockDate.reset();
 | |
|   });
 | |
| 
 | |
|   locales.forEach(locale => {
 | |
|     it(`should display the text as ${locale.locale}`, async () => {
 | |
|       const wrapper = mount(
 | |
|         {
 | |
|           render() {
 | |
|             return (
 | |
|               <LocaleProvider locale={locale}>
 | |
|                 <App />
 | |
|               </LocaleProvider>
 | |
|             );
 | |
|           },
 | |
|         },
 | |
|         { sync: false, attachTo: 'body' },
 | |
|       );
 | |
|       await sleep();
 | |
|       expect(wrapper.html()).toMatchSnapshot();
 | |
|     });
 | |
|   });
 | |
| 
 | |
|   xit('should change locale of Modal.xxx', async () => {
 | |
|     const ModalDemo = {
 | |
|       mounted() {
 | |
|         Modal.confirm({
 | |
|           title: 'Hello World!',
 | |
|         });
 | |
|       },
 | |
|       render() {
 | |
|         return null;
 | |
|       },
 | |
|     };
 | |
|     for (let locale of locales) {
 | |
|       document.body.innerHTML = '';
 | |
|       mount(
 | |
|         {
 | |
|           render() {
 | |
|             return (
 | |
|               <LocaleProvider locale={locale}>
 | |
|                 <ModalDemo />
 | |
|               </LocaleProvider>
 | |
|             );
 | |
|           },
 | |
|         },
 | |
|         { sync: false, attachTo: 'body' },
 | |
|       );
 | |
|       await sleep();
 | |
|       const currentConfirmNode =
 | |
|         document.querySelectorAll('.ant-modal-confirm')[
 | |
|           document.querySelectorAll('.ant-modal-confirm').length - 1
 | |
|         ];
 | |
|       let cancelButtonText = currentConfirmNode.querySelectorAll(
 | |
|         '.ant-btn:not(.ant-btn-primary) span',
 | |
|       )[0].innerHTML;
 | |
|       let okButtonText = currentConfirmNode.querySelectorAll('.ant-btn-primary span')[0].innerHTML;
 | |
|       if (locale.locale === 'zh-cn') {
 | |
|         cancelButtonText = cancelButtonText.replace(' ', '');
 | |
|         okButtonText = okButtonText.replace(' ', '');
 | |
|       }
 | |
|       expect(cancelButtonText).toBe(locale.Modal.cancelText);
 | |
|       expect(okButtonText).toBe(locale.Modal.okText);
 | |
|     }
 | |
|   });
 | |
| 
 | |
|   xit('set dayjs locale when locale changes', async () => {
 | |
|     document.body.innerHTML = '';
 | |
|     const Test = {
 | |
|       data() {
 | |
|         return {
 | |
|           locale: zhCN,
 | |
|         };
 | |
|       },
 | |
|       render() {
 | |
|         return (
 | |
|           <LocaleProvider locale={this.locale}>
 | |
|             <div>
 | |
|               <DatePicker defaultValue={dayjs()} open />
 | |
|             </div>
 | |
|           </LocaleProvider>
 | |
|         );
 | |
|       },
 | |
|     };
 | |
|     const wrapper = mount(Test, { sync: false, attachTo: 'body' });
 | |
|     await sleep(50);
 | |
|     expect(document.body.innerHTML).toMatchSnapshot();
 | |
|     wrapper.vm.locale = frFR;
 | |
|     await sleep(50);
 | |
|     expect(document.body.innerHTML).toMatchSnapshot();
 | |
|     wrapper.vm.locale = null;
 | |
|     await sleep(50);
 | |
|     expect(document.body.innerHTML).toMatchSnapshot();
 | |
|   });
 | |
| });
 |