* 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 { TestSuite, TestCase } from '@rnoh/testerino';
import React from 'react';
import { useState } from 'react';
import {
View,
registerViewConfig,
ReactNativeViewAttributes,
} from 'react-native';
import { Button } from '../components';
const PropsDisplayer: typeof View = registerViewConfig('PropsDisplayer', () => {
return {
uiViewClassName: 'PropsDisplayer',
bubblingEventTypes: {},
directEventTypes: {},
validAttributes: {
...ReactNativeViewAttributes.UIView,
},
};
});
export function RenderingTest() {
return (
<TestSuite name="Rendering">
<TestCase itShould="change the rectangle's color every second">
<Timeout
ms={1000}
renderItem={refreshKey => (
<Rectangle
backgroundColor={refreshKey % 2 === 0 ? 'red' : 'green'}
/>
)}
/>
</TestCase>
<TestCase itShould="show and hide rectangle every second">
<Timeout
ms={1000}
renderItem={refreshKey => (
<View style={{ height: 64 }}>
{refreshKey % 2 === 0 ? (
<Rectangle backgroundColor={'red'} />
) : null}
</View>
)}
/>
</TestCase>
<TestCase itShould="display all props after pressing the button, not only the recently updated one">
<Timeout
ms={0}
renderItem={refreshColor => {
return (
<PropsDisplayer
style={{
backgroundColor: refreshColor % 2 ? 'red' : 'blue',
opacity: 0.9,
borderWidth: 4,
borderTopWidth: 4,
borderColor: 'orange',
borderTopColor: 'red',
borderRadius: 4,
borderBottomRightRadius: 8,
transform: [{ translateX: 1 }],
pointerEvents: 'auto',
shadowOffset: { width: 0, height: 0 },
shadowOpacity: 0.9,
shadowRadius: 9,
flexDirection: 'row',
overflow: 'hidden',
backfaceVisibility: 'visible',
width: '100%',
height: 2000,
}}
/>
);
}}
/>
</TestCase>
</TestSuite>
);
}
function Rectangle({ backgroundColor }: { backgroundColor: string }) {
return (
<View
style={{
width: 64,
height: 64,
backgroundColor,
}}
/>
);
}
function Timeout({
renderItem,
ms,
}: {
renderItem: (refreshKey: number) => any;
ms: number;
}) {
const [refreshKey, setRefreshKey] = useState(0);
return (
<React.Fragment>
<Button
label="Run"
onPress={() => setTimeout(() => setRefreshKey(prev => (prev += 1)), ms)}
/>
{renderItem(refreshKey)}
</React.Fragment>
);
}