Skip to content

Commit 012a042

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

87 files changed

Lines changed: 318 additions & 164 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
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.

examples/example-ios/iosApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata renamed to examples/compose-ios/iosApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata

File renamed without changes.

0 commit comments

Comments
 (0)