Skip to content

Commit b0eb40a

Browse files
authored
fix: Generate should not change value immutable data (#20)
1 parent de1b676 commit b0eb40a

File tree

2 files changed

+38
-42
lines changed

2 files changed

+38
-42
lines changed

src/generate/moment.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { GenerateConfig } from '.';
55
const generateConfig: GenerateConfig<Moment> = {
66
// get
77
getNow: () => moment(),
8-
getWeekDay: date => date.locale('en_US').weekday(),
8+
getWeekDay: date => date.clone().locale('en_US').weekday(),
99
getYear: date => date.year(),
1010
getMonth: date => date.month(),
1111
getDate: date => date.date(),

tests/generate.spec.tsx

Lines changed: 37 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import dayjsGenerateConfig from '../src/generate/dayjs';
44
import { getMoment } from './util/commonUtil';
55

66
import 'dayjs/locale/zh-cn';
7+
import { GenerateConfig } from '../src/generate';
78

89
describe('Picker.Generate', () => {
910
beforeAll(() => {
@@ -14,10 +15,12 @@ describe('Picker.Generate', () => {
1415
MockDate.reset();
1516
});
1617

17-
[
18+
const list: { name: string; generateConfig: GenerateConfig<any> }[] = [
1819
{ name: 'moment', generateConfig: momentGenerateConfig },
1920
{ name: 'dayjs', generateConfig: dayjsGenerateConfig },
20-
].forEach(({ name, generateConfig }) => {
21+
];
22+
23+
list.forEach(({ name, generateConfig }) => {
2124
describe(name, () => {
2225
it('get', () => {
2326
const now = generateConfig.getNow();
@@ -85,19 +88,15 @@ describe('Picker.Generate', () => {
8588
expect(
8689
generateConfig.locale.format(
8790
'en_US',
88-
generateConfig.locale.parse('en_US', '2019-1st', [
89-
'gggg-wo',
90-
])!,
91+
generateConfig.locale.parse('en_US', '2019-1st', ['gggg-wo'])!,
9192
'gggg-wo',
9293
),
9394
).toEqual('2019-1st');
9495

9596
expect(
9697
generateConfig.locale.format(
9798
'zh_CN',
98-
generateConfig.locale.parse('zh_CN', '2019-45周', [
99-
'gggg-wo',
100-
])!,
99+
generateConfig.locale.parse('zh_CN', '2019-45周', ['gggg-wo'])!,
101100
'gggg-wo',
102101
),
103102
).toEqual('2019-45周');
@@ -118,7 +117,7 @@ describe('Picker.Generate', () => {
118117
).toEqual('2000-01-02');
119118
});
120119
});
121-
})
120+
});
122121

123122
it('getWeekFirstDay', () => {
124123
expect(generateConfig.locale.getWeekFirstDay('en_US')).toEqual(0);
@@ -138,40 +137,32 @@ describe('Picker.Generate', () => {
138137

139138
it('Parse format Wo', () => {
140139
expect(
141-
generateConfig.locale.parse(
142-
'en_US',
143-
'2012-51st',
144-
['YYYY-Wo'],
145-
)?.format('Wo'),
140+
generateConfig.locale
141+
.parse('en_US', '2012-51st', ['YYYY-Wo'])
142+
?.format('Wo'),
146143
).toEqual('51st');
147144
expect(
148-
generateConfig.locale.parse(
149-
'zh_CN',
150-
'2012-1周',
151-
['YYYY-Wo'],
152-
)?.format('Wo'),
145+
generateConfig.locale
146+
.parse('zh_CN', '2012-1周', ['YYYY-Wo'])
147+
?.format('Wo'),
153148
).toEqual('1周');
154149
});
155150

156151
it('Parse format faild', () => {
157152
expect(
158-
generateConfig.locale.parse(
159-
'en_US',
153+
generateConfig.locale.parse('en_US', 'invalid string', [
160154
'invalid string',
161-
['invalid string'],
162-
),
155+
]),
163156
).toEqual(null);
164157
expect(
165-
generateConfig.locale.parse(
166-
'en_US',
167-
'invalid string',
168-
['invalid string-Wo'],
169-
),
158+
generateConfig.locale.parse('en_US', 'invalid string', [
159+
'invalid string-Wo',
160+
]),
170161
).toEqual(null);
171162
});
172163

173164
it('getShortWeekDays', () => {
174-
expect(generateConfig.locale.getShortWeekDays('zh_CN')).toEqual([
165+
expect(generateConfig.locale.getShortWeekDays!('zh_CN')).toEqual([
175166
'日',
176167
'一',
177168
'二',
@@ -180,7 +171,7 @@ describe('Picker.Generate', () => {
180171
'五',
181172
'六',
182173
]);
183-
expect(generateConfig.locale.getShortWeekDays('en_US')).toEqual([
174+
expect(generateConfig.locale.getShortWeekDays!('en_US')).toEqual([
184175
'Su',
185176
'Mo',
186177
'Tu',
@@ -192,7 +183,7 @@ describe('Picker.Generate', () => {
192183
});
193184

194185
it('getShortMonths', () => {
195-
expect(generateConfig.locale.getShortMonths('zh_CN')).toEqual([
186+
expect(generateConfig.locale.getShortMonths!('zh_CN')).toEqual([
196187
'1月',
197188
'2月',
198189
'3月',
@@ -206,7 +197,7 @@ describe('Picker.Generate', () => {
206197
'11月',
207198
'12月',
208199
]);
209-
expect(generateConfig.locale.getShortMonths('en_US')).toEqual([
200+
expect(generateConfig.locale.getShortMonths!('en_US')).toEqual([
210201
'Jan',
211202
'Feb',
212203
'Mar',
@@ -226,9 +217,7 @@ describe('Picker.Generate', () => {
226217
expect(
227218
generateConfig.locale.getWeek(
228219
'zh_CN',
229-
generateConfig.locale.parse('zh_CN', '2019-12-08', [
230-
'YYYY-MM-DD',
231-
])!,
220+
generateConfig.locale.parse('zh_CN', '2019-12-08', ['YYYY-MM-DD'])!,
232221
),
233222
).toEqual(49);
234223
});
@@ -237,20 +226,27 @@ describe('Picker.Generate', () => {
237226
expect(
238227
generateConfig.locale.getWeek(
239228
'zh_CN',
240-
generateConfig.locale.parse('zh_CN', '2019-12-08', [
241-
'YYYY-MM-DD',
242-
])!,
229+
generateConfig.locale.parse('zh_CN', '2019-12-08', ['YYYY-MM-DD'])!,
243230
),
244231
).toEqual(49);
245232
expect(
246233
generateConfig.locale.getWeek(
247234
'en_US',
248-
generateConfig.locale.parse('en_US', '2019-12-08', [
249-
'YYYY-MM-DD',
250-
])!,
235+
generateConfig.locale.parse('en_US', '2019-12-08', ['YYYY-MM-DD'])!,
251236
),
252237
).toEqual(50);
253238
});
254239
});
255240
});
256241
});
242+
243+
describe('Generate:moment', () => {
244+
it('getWeekDay', () => {
245+
const now = momentGenerateConfig.getNow();
246+
now.locale('zh-cn');
247+
expect(now.locale()).toEqual('zh-cn');
248+
249+
momentGenerateConfig.getWeekDay(now);
250+
expect(now.locale()).toEqual('zh-cn');
251+
});
252+
});

0 commit comments

Comments
 (0)