* Copyright (c) 2024 Huawei Technologies Co., Ltd.
*
* This source code is licensed under the MIT license found in the
* LICENSE-MIT file in the root directory of this source tree.
*/
import { TestCase, TestSuite } from '@rnoh/testerino';
import { ScrollViewProps } from 'react-native';
import { ScrollViewComparator, getScrollViewContent } from './fixtures';
const ITEM_HEIGHT = 50;
export function SnapTest() {
return (
<>
<TestSuite name="snapTo*">
<SnapTestCases
scrollViewProps={{ disableIntervalMomentum: false, horizontal: false }}
/>
</TestSuite>
<TestSuite name="disableIntervalMomentum">
<SnapTestCases
scrollViewProps={{ disableIntervalMomentum: true, horizontal: false }}
/>
</TestSuite>
</>
);
}
function SnapTestCases(props: { scrollViewProps: ScrollViewProps }) {
return (
<>
<TestCase
modal
itShould="not snap after item 6 when snapToEnd is set to false">
<ScrollViewComparator
scrollViewLength={ITEM_HEIGHT * 5}
commonProps={{
...props.scrollViewProps,
snapToOffsets: [ITEM_HEIGHT * 5],
children: getScrollViewContent({ amountOfChildren: 25 }),
}}
lhsProps={{ snapToEnd: true }}
rhsProps={{ snapToEnd: false }}
/>
</TestCase>
<TestCase
modal
itShould="not snap before item 6 when snapToStart is set to false">
<ScrollViewComparator
scrollViewLength={ITEM_HEIGHT * 5}
commonProps={{
...props.scrollViewProps,
snapToOffsets: [ITEM_HEIGHT * 5],
children: getScrollViewContent({ amountOfChildren: 25 }),
}}
lhsProps={{ snapToStart: true }}
rhsProps={{ snapToStart: false }}
/>
</TestCase>
<TestCase modal itShould="snap to page">
<ScrollViewComparator
scrollViewLength={ITEM_HEIGHT * 5}
commonProps={{
...props.scrollViewProps,
children: getScrollViewContent({ amountOfChildren: 25 }),
}}
lhsProps={{ pagingEnabled: false }}
rhsProps={{ pagingEnabled: true }}
/>
</TestCase>
<TestCase modal itShould="snap to item 1, 3, 5, 7, 9, ...">
<ScrollViewComparator
scrollViewLength={ITEM_HEIGHT * 5}
commonProps={{
...props.scrollViewProps,
children: getScrollViewContent({ amountOfChildren: 25 }),
}}
lhsProps={{}}
rhsProps={{ snapToInterval: ITEM_HEIGHT * 2 }}
/>
</TestCase>
<TestCase modal itShould="snap to item 2, 3, 7, and 11 and 21">
<ScrollViewComparator
scrollViewLength={ITEM_HEIGHT * 5}
commonProps={{
...props.scrollViewProps,
children: getScrollViewContent({ amountOfChildren: 25 }),
}}
lhsProps={{}}
rhsProps={{
snapToOffsets: [
ITEM_HEIGHT,
ITEM_HEIGHT * 2,
ITEM_HEIGHT * 6,
ITEM_HEIGHT * 10,
],
}}
/>
</TestCase>
<TestSuite name="snapToAlignment">
<TestCase modal itShould="snap to item {lhs: start, rhs: center}">
<ScrollViewComparator
scrollViewLength={ITEM_HEIGHT * 1.5}
commonProps={{
...props.scrollViewProps,
children: getScrollViewContent({ amountOfChildren: 25 }),
snapToInterval: ITEM_HEIGHT,
}}
lhsProps={{ snapToAlignment: 'start' }}
rhsProps={{ snapToAlignment: 'center' }}
/>
</TestCase>
<TestCase modal itShould="snap to item {lhs: start, rhs: end}">
<ScrollViewComparator
scrollViewLength={ITEM_HEIGHT * 1.5}
commonProps={{
...props.scrollViewProps,
children: getScrollViewContent({ amountOfChildren: 25 }),
snapToInterval: ITEM_HEIGHT,
}}
lhsProps={{ snapToAlignment: 'start' }}
rhsProps={{ snapToAlignment: 'end' }}
/>
</TestCase>
</TestSuite>
</>
);
}