Skip to content

Commit fb21de5

Browse files
committed
tests: common
1 parent 012a042 commit fb21de5

File tree

6 files changed

+24
-117
lines changed

6 files changed

+24
-117
lines changed

examples/common-tests/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
export { useBasicTest } from "./tests/BasicTests";
2+
export type { RunTest } from "./types";

examples/common-tests/src/tests/BasicTests.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,16 @@
11
import type { AsyncStorage } from "@react-native-async-storage/async-storage";
22
import { useLogs, type TestLogs } from "../useLogs";
3-
4-
type Test = {
5-
run: () => void;
6-
name: string;
7-
};
3+
import type { RunTest } from "../types";
84

95
export function useBasicTest(storage: AsyncStorage): {
106
logs: TestLogs;
11-
tests: Test[];
7+
tests: RunTest[];
128
} {
139
const logs = useLogs();
1410

1511
const testSingleSetCrudKey = async () => {
1612
try {
13+
logs.clear();
1714
const key = "single-set";
1815
let value = `value-${Math.round(Math.random() * 1000)}`;
1916

@@ -55,6 +52,7 @@ export function useBasicTest(storage: AsyncStorage): {
5552

5653
const testMultiKey = async () => {
5754
try {
55+
logs.clear();
5856
const entries = { key1: "value1", key2: "42", key3: "true" };
5957
logs.add("MultiSet test with entries:", entries);
6058
await storage.setMany(entries);
@@ -76,6 +74,7 @@ export function useBasicTest(storage: AsyncStorage): {
7674

7775
const saveBigData = async () => {
7876
try {
77+
logs.clear();
7978
const key = "big-data";
8079
const data = JSON.stringify(new Array(500_000).fill("a"));
8180
logs.add(`Saving ${key} with data size ${data.length}`);
@@ -93,6 +92,7 @@ export function useBasicTest(storage: AsyncStorage): {
9392

9493
const clearStorage = async () => {
9594
try {
95+
logs.clear();
9696
logs.add("Currently stored keys: ", await storage.getAllKeys());
9797

9898
logs.add("deleting everything");

examples/common-tests/src/types.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export type RunTest = {
2+
run: () => void;
3+
name: string;
4+
};

examples/react-native/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
"@types/react": "^19.0.0",
4545
"@types/react-test-renderer": "^19.0.0",
4646
"eslint": "9.34.0",
47+
"example-common-tests": "workspace:*",
4748
"jest": "^29.6.3",
4849
"prettier": "3.6.2",
4950
"react-native-test-app": "^4.4.7",

examples/react-native/src/tests/BasicTests.tsx

Lines changed: 11 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -1,128 +1,28 @@
11
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";
45

56
type Props = {
67
storage: AsyncStorage;
78
};
89

910
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);
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>

yarn.lock

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10259,6 +10259,7 @@ __metadata:
1025910259
"@types/react": "npm:^19.0.0"
1026010260
"@types/react-test-renderer": "npm:^19.0.0"
1026110261
eslint: "npm:9.34.0"
10262+
example-common-tests: "workspace:*"
1026210263
jest: "npm:^29.6.3"
1026310264
prettier: "npm:3.6.2"
1026410265
react: "npm:19.0.0"

0 commit comments

Comments
 (0)