Skip to content

Commit 012a042

Browse files
committed
chore: more examples
1 parent f0ba663 commit 012a042

File tree

87 files changed

+318
-164
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

87 files changed

+318
-164
lines changed
File renamed without changes.
File renamed without changes.

examples/common-tests/package.json

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"name": "example-common-tests",
3+
"version": "0.0.1",
4+
"private": true,
5+
"main": "src/index.ts",
6+
"installConfig": {
7+
"hoistingLimits": "workspaces"
8+
},
9+
"scripts": {
10+
"test:lint": "eslint .",
11+
"test:ts": "tsc"
12+
},
13+
"dependencies": {
14+
"@react-native-async-storage/async-storage": "workspace:*",
15+
"react": "19.0.0"
16+
},
17+
"devDependencies": {
18+
"@react-native-async-storage/eslint-config": "workspace:*",
19+
"@types/react": "^19.0.0",
20+
"eslint": "9.34.0",
21+
"prettier": "3.6.2",
22+
"typescript": "5.9.2"
23+
}
24+
}

examples/common-tests/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { useBasicTest } from "./tests/BasicTests";
Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
import type { AsyncStorage } from "@react-native-async-storage/async-storage";
2+
import { useLogs, type TestLogs } from "../useLogs";
3+
4+
type Test = {
5+
run: () => void;
6+
name: string;
7+
};
8+
9+
export function useBasicTest(storage: AsyncStorage): {
10+
logs: TestLogs;
11+
tests: Test[];
12+
} {
13+
const logs = useLogs();
14+
15+
const testSingleSetCrudKey = async () => {
16+
try {
17+
const key = "single-set";
18+
let value = `value-${Math.round(Math.random() * 1000)}`;
19+
20+
logs.add(`setting ${key} with value ${value}`);
21+
await storage.setItem(key, value);
22+
logs.add(`stored ${key} value:`, await storage.getItem(key));
23+
24+
let keysToFetch = [key, "missing-key-1", "missing-key-2"];
25+
logs.add(
26+
`fetching keys (${keysToFetch}): `,
27+
await storage.getMany(keysToFetch)
28+
);
29+
30+
logs.add(`all keys: `, await storage.getAllKeys());
31+
32+
logs.add(`removing ${key}`);
33+
await storage.removeItem(key);
34+
logs.add(`current ${key} value:`, await storage.getItem(key));
35+
36+
value = `value-${Math.round(Math.random() * 1000)}`;
37+
logs.add(`Saving new ${key} value: ${value}`);
38+
await storage.setItem(key, value);
39+
logs.add(`current ${key} value:`, await storage.getItem(key));
40+
41+
value = `value-${Math.round(Math.random() * 1000)}`;
42+
logs.add(`Overriding n ${key} value: ${value}`);
43+
await storage.setItem(key, value);
44+
logs.add(`current ${key} value:`, await storage.getItem(key));
45+
46+
keysToFetch = [key, "missing-key-1", "missing-key-2"];
47+
logs.add(
48+
`fetching keys (${keysToFetch}): `,
49+
await storage.getMany(keysToFetch)
50+
);
51+
} catch (e) {
52+
logs.report(e);
53+
}
54+
};
55+
56+
const testMultiKey = async () => {
57+
try {
58+
const entries = { key1: "value1", key2: "42", key3: "true" };
59+
logs.add("MultiSet test with entries:", entries);
60+
await storage.setMany(entries);
61+
logs.add("fetching keys", ["key1", "key2", "key3", "missing"]);
62+
const values = await storage.getMany(["key1", "key2", "key3", "missing"]);
63+
logs.add("result", values);
64+
65+
logs.add("removing key1 and key2");
66+
await storage.removeMany(["key1", "key2"]);
67+
const remainingKeys = await storage.getAllKeys();
68+
logs.add("remaining keys after removing:", remainingKeys);
69+
70+
const final = await storage.getMany(remainingKeys);
71+
logs.add("get many remaining values:", final);
72+
} catch (e) {
73+
logs.report(e);
74+
}
75+
};
76+
77+
const saveBigData = async () => {
78+
try {
79+
const key = "big-data";
80+
const data = JSON.stringify(new Array(500_000).fill("a"));
81+
logs.add(`Saving ${key} with data size ${data.length}`);
82+
const timeNow = +Date.now();
83+
await storage.setItem(key, data);
84+
logs.add(`saving took ${+Date.now() - timeNow}ms`);
85+
86+
logs.add(`reading ${key}`);
87+
const res = await storage.getItem(key);
88+
logs.add(`size of result: ${res?.length}`);
89+
} catch (e) {
90+
logs.report(e);
91+
}
92+
};
93+
94+
const clearStorage = async () => {
95+
try {
96+
logs.add("Currently stored keys: ", await storage.getAllKeys());
97+
98+
logs.add("deleting everything");
99+
storage.clear();
100+
logs.add("keys after deletion: ", await storage.getAllKeys());
101+
logs.add("saving some values");
102+
103+
await storage.setItem("key-after-delete", "my item");
104+
logs.add("keys after saving: ", await storage.getAllKeys());
105+
} catch (e) {
106+
logs.report(e);
107+
}
108+
};
109+
110+
return {
111+
logs,
112+
tests: [
113+
{
114+
name: "Single key set",
115+
run: testSingleSetCrudKey,
116+
},
117+
{
118+
name: "Multiple key sets",
119+
run: testMultiKey,
120+
},
121+
{
122+
name: "Big data set",
123+
run: saveBigData,
124+
},
125+
{
126+
name: "Storage clearance",
127+
run: clearStorage,
128+
},
129+
],
130+
};
131+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import { useState } from "react";
2+
3+
export type TestLogs = ReturnType<typeof useLogs>;
4+
5+
export function useLogs() {
6+
const [logs, setLogs] = useState<string[]>([]);
7+
8+
function addLog(...text: any[]) {
9+
const message = text
10+
.map((t) => {
11+
if (typeof t !== "string") {
12+
return JSON.stringify(t, null, 2);
13+
}
14+
return t;
15+
})
16+
.join(" ");
17+
18+
setLogs((l) => [...l, message]);
19+
}
20+
21+
function clearLog() {
22+
setLogs([]);
23+
}
24+
25+
function reportError(e: any) {
26+
alert(JSON.stringify(e, null, 2));
27+
}
28+
29+
return {
30+
logs,
31+
add: addLog,
32+
clear: clearLog,
33+
report: reportError,
34+
};
35+
}
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)