Skip to content

Commit 6eb0782

Browse files
author
梁朝飞
committed
feat: unit test
1 parent 9bdb1ec commit 6eb0782

File tree

3 files changed

+160
-1
lines changed

3 files changed

+160
-1
lines changed

src/MotionThumb.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,6 @@ export default function MotionThumb(props: MotionThumbInterface) {
142142

143143
// =========================== Motion ===========================
144144
const onAppearStart = () =>
145-
// Returns initial transform and size styles for the thumb based on the layout orientation (vertical or horizontal).
146145
vertical
147146
? {
148147
transform: 'translateY(var(--thumb-start-top))',

tests/__snapshots__/index.test.tsx.snap

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,68 @@ exports[`rc-segmented render segmented ok 1`] = `
140140
</div>
141141
`;
142142

143+
exports[`rc-segmented render segmented with CSSMotion (vertical) basic vertical movement 1`] = `
144+
<div
145+
aria-label="segmented control"
146+
class="rc-segmented rc-segmented-vertical"
147+
role="listbox"
148+
>
149+
<div
150+
class="rc-segmented-group"
151+
>
152+
<label
153+
class="rc-segmented-item rc-segmented-item-selected"
154+
>
155+
<input
156+
checked=""
157+
class="rc-segmented-item-input"
158+
type="radio"
159+
/>
160+
<div
161+
aria-selected="true"
162+
class="rc-segmented-item-label"
163+
role="option"
164+
title="iOS"
165+
>
166+
iOS
167+
</div>
168+
</label>
169+
<label
170+
class="rc-segmented-item"
171+
>
172+
<input
173+
class="rc-segmented-item-input"
174+
type="radio"
175+
/>
176+
<div
177+
aria-selected="false"
178+
class="rc-segmented-item-label"
179+
role="option"
180+
title="Android"
181+
>
182+
Android
183+
</div>
184+
</label>
185+
<label
186+
class="rc-segmented-item"
187+
>
188+
<input
189+
class="rc-segmented-item-input"
190+
type="radio"
191+
/>
192+
<div
193+
aria-selected="false"
194+
class="rc-segmented-item-label"
195+
role="option"
196+
title="Web3"
197+
>
198+
Web3
199+
</div>
200+
</label>
201+
</div>
202+
</div>
203+
`;
204+
143205
exports[`rc-segmented render segmented with CSSMotion basic 1`] = `
144206
<div
145207
aria-label="segmented control"
@@ -700,6 +762,68 @@ exports[`rc-segmented render segmented: disabled 1`] = `
700762
</div>
701763
`;
702764

765+
exports[`rc-segmented render vertical segmented 1`] = `
766+
<div
767+
aria-label="segmented control"
768+
class="rc-segmented rc-segmented-vertical"
769+
role="listbox"
770+
>
771+
<div
772+
class="rc-segmented-group"
773+
>
774+
<label
775+
class="rc-segmented-item rc-segmented-item-selected"
776+
>
777+
<input
778+
checked=""
779+
class="rc-segmented-item-input"
780+
type="radio"
781+
/>
782+
<div
783+
aria-selected="true"
784+
class="rc-segmented-item-label"
785+
role="option"
786+
title="iOS"
787+
>
788+
iOS
789+
</div>
790+
</label>
791+
<label
792+
class="rc-segmented-item"
793+
>
794+
<input
795+
class="rc-segmented-item-input"
796+
type="radio"
797+
/>
798+
<div
799+
aria-selected="false"
800+
class="rc-segmented-item-label"
801+
role="option"
802+
title="Android"
803+
>
804+
Android
805+
</div>
806+
</label>
807+
<label
808+
class="rc-segmented-item"
809+
>
810+
<input
811+
class="rc-segmented-item-input"
812+
type="radio"
813+
/>
814+
<div
815+
aria-selected="false"
816+
class="rc-segmented-item-label"
817+
role="option"
818+
title="Web"
819+
>
820+
Web
821+
</div>
822+
</label>
823+
</div>
824+
</div>
825+
`;
826+
703827
exports[`rc-segmented should render vertical segmented 1`] = `
704828
<div
705829
aria-label="segmented control"

tests/index.test.tsx

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -451,6 +451,42 @@ describe('rc-segmented', () => {
451451
offsetParentSpy.mockRestore();
452452
});
453453
});
454+
describe('render segmented with CSSMotion: vertical', () => {
455+
it('quick switch', () => {
456+
const offsetParentSpy = jest
457+
.spyOn(HTMLElement.prototype, 'offsetParent', 'get')
458+
.mockImplementation(() => {
459+
return container;
460+
});
461+
const { container } = render(
462+
<Segmented
463+
vertical
464+
options={['IOS', 'Android', 'Web3']}
465+
defaultValue="Android"
466+
/>,
467+
);
468+
469+
// >>> Click: Web3
470+
fireEvent.click(
471+
container.querySelectorAll('.rc-segmented-item-input')[2],
472+
);
473+
474+
// Motion to active
475+
act(() => {
476+
jest.runAllTimers();
477+
});
478+
expect(container.querySelector('.rc-segmented-thumb')).toHaveClass(
479+
'rc-segmented-thumb-motion-appear-active',
480+
);
481+
482+
exceptThumbHaveStyle(container, {
483+
'--thumb-active-top': '0px',
484+
'--thumb-active-width': '0px',
485+
});
486+
487+
offsetParentSpy.mockRestore();
488+
});
489+
});
454490

455491
it('render segmented with options null/undefined', () => {
456492
const handleValueChange = jest.fn();

0 commit comments

Comments
 (0)