1
1
import 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" ;
4
5
5
6
type Props = {
6
7
storage : AsyncStorage ;
7
8
} ;
8
9
9
10
const 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 ) ;
111
12
112
13
return (
113
14
< View style = { { paddingHorizontal : 16 , flex : 1 } } >
114
15
< 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
+ } ) }
121
21
</ View >
122
22
123
23
< View style = { { width : "100%" , alignItems : "flex-end" } } >
124
24
< Pressable
125
- onPress = { clearLog }
25
+ onPress = { logs . clear }
126
26
style = { ( { pressed } ) => [
127
27
{
128
28
padding : 12 ,
@@ -136,7 +36,7 @@ const BasicTests: React.FC<Props> = ({ storage }) => {
136
36
</ View >
137
37
138
38
< ScrollView contentContainerStyle = { { gap : 12 } } >
139
- { logs . map ( ( l , i ) => (
39
+ { logs . logs . map ( ( l , i ) => (
140
40
< Text style = { { fontSize : 14 } } key = { i } >
141
41
{ l }
142
42
</ Text >
0 commit comments