11import type { AsyncStorage } from "@react-native-async-storage/async-storage" ;
2- import React , { useState } from "react" ;
3- import { Alert , Button , Pressable , ScrollView , Text , View } from "react-native" ;
2+ import React from "react" ;
3+ import { Button , Pressable , ScrollView , Text , View } from "react-native" ;
4+ import { useBasicTest } from "example-common-tests" ;
45
56type Props = {
67 storage : AsyncStorage ;
78} ;
89
910const BasicTests : React . FC < Props > = ( { storage } ) => {
10- const [ logs , setLogs ] = useState < string [ ] > ( [ ] ) ;
11-
12- function addLog ( ...text : any [ ] ) {
13- const message = text
14- . map ( ( t ) => {
15- if ( typeof t !== "string" ) {
16- return JSON . stringify ( t , null , 2 ) ;
17- }
18- return t ;
19- } )
20- . join ( " " ) ;
21-
22- setLogs ( ( l ) => [ ...l , message ] ) ;
23- }
24-
25- function clearLog ( ) {
26- setLogs ( [ ] ) ;
27- }
28-
29- function reportError ( e : any ) {
30- Alert . alert ( e ?. name ?? "Error" , JSON . stringify ( e , null , 2 ) ) ;
31- }
32-
33- const testSingleSetCrudKey = async ( ) => {
34- try {
35- const key = "my-test-key" ;
36- let value = `value-${ Math . round ( Math . random ( ) * 1000 ) } ` ;
37-
38- addLog ( `setting ${ key } with value ${ value } ` ) ;
39- await storage . setItem ( key , value ) ;
40- addLog ( `stored ${ key } value:` , await storage . getItem ( key ) ) ;
41-
42- let keysToFetch = [ key , "missing-key-1" , "missing-key-2" ] ;
43- addLog (
44- `fetching keys (${ keysToFetch } ): ` ,
45- await storage . getMany ( keysToFetch )
46- ) ;
47-
48- addLog ( `all keys: ` , await storage . getAllKeys ( ) ) ;
49-
50- addLog ( `removing ${ key } ` ) ;
51- await storage . removeItem ( key ) ;
52- addLog ( `current ${ key } value:` , await storage . getItem ( key ) ) ;
53-
54- value = `value-${ Math . round ( Math . random ( ) * 1000 ) } ` ;
55- addLog ( `Saving new ${ key } value: ${ value } ` ) ;
56- await storage . setItem ( key , value ) ;
57- addLog ( `current ${ key } value:` , await storage . getItem ( key ) ) ;
58-
59- value = `value-${ Math . round ( Math . random ( ) * 1000 ) } ` ;
60- addLog ( `Overriding ${ key } value: ${ value } ` ) ;
61- await storage . setItem ( key , value ) ;
62- addLog ( `current ${ key } value:` , await storage . getItem ( key ) ) ;
63-
64- keysToFetch = [ key , "missing-key-1" , "missing-key-2" ] ;
65- addLog (
66- `fetching keys (${ keysToFetch } ): ` ,
67- await storage . getMany ( keysToFetch )
68- ) ;
69- } catch ( e ) {
70- reportError ( e ) ;
71- }
72- } ;
73-
74- const testMultiKey = async ( ) => {
75- try {
76- const entries = { key1 : "value1" , key2 : "42" , key3 : "true" } ;
77- addLog ( "MultiSet test with entries:" , entries ) ;
78- await storage . setMany ( entries ) ;
79- addLog ( "fetching keys" , [ "key1" , "key2" , "key3" , "missing" ] ) ;
80- const values = await storage . getMany ( [ "key1" , "key2" , "key3" , "missing" ] ) ;
81- addLog ( "result" , values ) ;
82-
83- addLog ( "removing key1 and key2" ) ;
84- await storage . removeMany ( [ "key1" , "key2" ] ) ;
85- const remainingKeys = await storage . getAllKeys ( ) ;
86- addLog ( "remaining keys after removing:" , remainingKeys ) ;
87-
88- const final = await storage . getMany ( remainingKeys ) ;
89- addLog ( "get many remaining keys:" , final ) ;
90- } catch ( e ) {
91- reportError ( e ) ;
92- }
93- } ;
94-
95- const saveBigData = async ( ) => {
96- try {
97- const key = "big-data" ;
98- const data = JSON . stringify ( new Array ( 500_000 ) . fill ( "a" ) ) ;
99- addLog ( `Saving ${ key } with data size ${ data . length } ` ) ;
100- const timeNow = + Date . now ( ) ;
101- await storage . setItem ( key , data ) ;
102- addLog ( `saving took ${ + Date . now ( ) - timeNow } ms` ) ;
103-
104- addLog ( `reading ${ key } ` ) ;
105- const res = await storage . getItem ( key ) ;
106- addLog ( `size of result: ${ res ?. length } ` ) ;
107- } catch ( e ) {
108- reportError ( e ) ;
109- }
110- } ;
11+ const { tests, logs } = useBasicTest ( storage ) ;
11112
11213 return (
11314 < View style = { { paddingHorizontal : 16 , flex : 1 } } >
11415 < View style = { { gap : 8 } } >
115- < Button
116- title = "Test CRUD on single entry"
117- onPress = { testSingleSetCrudKey }
118- />
119- < Button title = "Test CRUD on many entries" onPress = { testMultiKey } />
120- < Button title = "Test big data" onPress = { saveBigData } />
16+ { tests . map ( ( test ) => {
17+ return (
18+ < Button key = { test . name } title = { test . name } onPress = { test . run } />
19+ ) ;
20+ } ) }
12121 </ View >
12222
12323 < View style = { { width : "100%" , alignItems : "flex-end" } } >
12424 < Pressable
125- onPress = { clearLog }
25+ onPress = { logs . clear }
12626 style = { ( { pressed } ) => [
12727 {
12828 padding : 12 ,
@@ -136,7 +36,7 @@ const BasicTests: React.FC<Props> = ({ storage }) => {
13636 </ View >
13737
13838 < ScrollView contentContainerStyle = { { gap : 12 } } >
139- { logs . map ( ( l , i ) => (
39+ { logs . logs . map ( ( l , i ) => (
14040 < Text style = { { fontSize : 14 } } key = { i } >
14141 { l }
14242 </ Text >
0 commit comments