Skip to content

Commit 0342c95

Browse files
committed
test: fix after changes
1 parent fb21de5 commit 0342c95

File tree

11 files changed

+194
-115
lines changed

11 files changed

+194
-115
lines changed

examples/common-tests/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@
1616
},
1717
"devDependencies": {
1818
"@react-native-async-storage/eslint-config": "workspace:*",
19+
"@types/lodash.isequal": "^4.5.8",
1920
"@types/react": "^19.0.0",
2021
"eslint": "9.34.0",
22+
"lodash.isequal": "4.5.0",
2123
"prettier": "3.6.2",
2224
"typescript": "5.9.2"
2325
}

examples/common-tests/src/index.ts

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

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

Lines changed: 70 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,114 +1,130 @@
11
import type { AsyncStorage } from "@react-native-async-storage/async-storage";
2-
import { useLogs, type TestLogs } from "../useLogs";
3-
import type { RunTest } from "../types";
2+
import { useTests } from "../useTests";
43

5-
export function useBasicTest(storage: AsyncStorage): {
6-
logs: TestLogs;
7-
tests: RunTest[];
8-
} {
9-
const logs = useLogs();
4+
export function useBasicTest(storage: AsyncStorage) {
5+
const tests = useTests();
106

117
const testSingleSetCrudKey = async () => {
128
try {
13-
logs.clear();
9+
tests.clear();
10+
tests.info("clearing storage");
11+
await storage.clear();
1412
const key = "single-set";
1513
let value = `value-${Math.round(Math.random() * 1000)}`;
16-
17-
logs.add(`setting ${key} with value ${value}`);
14+
tests.info(`setting ${key} with value ${value}`);
1815
await storage.setItem(key, value);
19-
logs.add(`stored ${key} value:`, await storage.getItem(key));
16+
tests.assert(value, await storage.getItem(key), "retrieves stored value");
2017

2118
let keysToFetch = [key, "missing-key-1", "missing-key-2"];
22-
logs.add(
23-
`fetching keys (${keysToFetch}): `,
24-
await storage.getMany(keysToFetch)
19+
tests.assert(
20+
{ [key]: value, "missing-key-1": null, "missing-key-2": null },
21+
await storage.getMany(keysToFetch),
22+
"fetches requested values"
2523
);
2624

27-
logs.add(`all keys: `, await storage.getAllKeys());
25+
tests.assert([key], await storage.getAllKeys(), "reads all stored keys");
2826

29-
logs.add(`removing ${key}`);
27+
tests.info(`removing ${key}`);
3028
await storage.removeItem(key);
31-
logs.add(`current ${key} value:`, await storage.getItem(key));
29+
tests.assert(
30+
null,
31+
await storage.getItem(key),
32+
`removes stored value for ${key}`
33+
);
3234

3335
value = `value-${Math.round(Math.random() * 1000)}`;
34-
logs.add(`Saving new ${key} value: ${value}`);
36+
tests.info(`Saving new ${key} value: ${value}`);
3537
await storage.setItem(key, value);
36-
logs.add(`current ${key} value:`, await storage.getItem(key));
38+
tests.assert(value, await storage.getItem(key), `saved value ${value}`);
3739

3840
value = `value-${Math.round(Math.random() * 1000)}`;
39-
logs.add(`Overriding n ${key} value: ${value}`);
41+
tests.info(`Overriding n ${key} value: ${value}`);
4042
await storage.setItem(key, value);
41-
logs.add(`current ${key} value:`, await storage.getItem(key));
43+
tests.assert(
44+
value,
45+
await storage.getItem(key),
46+
`Overriding n ${key} value: ${value}`
47+
);
4248

43-
keysToFetch = [key, "missing-key-1", "missing-key-2"];
44-
logs.add(
45-
`fetching keys (${keysToFetch}): `,
46-
await storage.getMany(keysToFetch)
49+
keysToFetch = [key, "miss1", "miss2"];
50+
tests.assert(
51+
{ [key]: value, miss1: null, miss2: null },
52+
await storage.getMany(keysToFetch),
53+
`final values keys for keys: ${keysToFetch}`
4754
);
4855
} catch (e) {
49-
logs.report(e);
56+
tests.report(e);
5057
}
5158
};
5259

5360
const testMultiKey = async () => {
5461
try {
55-
logs.clear();
62+
tests.clear();
63+
await storage.clear();
5664
const entries = { key1: "value1", key2: "42", key3: "true" };
57-
logs.add("MultiSet test with entries:", entries);
58-
await storage.setMany(entries);
59-
logs.add("fetching keys", ["key1", "key2", "key3", "missing"]);
60-
const values = await storage.getMany(["key1", "key2", "key3", "missing"]);
61-
logs.add("result", values);
65+
tests.assert(
66+
undefined,
67+
await storage.setMany(entries),
68+
"MultiSet test with entries"
69+
);
6270

63-
logs.add("removing key1 and key2");
71+
tests.assert(
72+
{ ...entries, missing: null },
73+
await storage.getMany(["key1", "key2", "key3", "missing"]),
74+
"read stored values"
75+
);
76+
77+
tests.info("removing key1 and key2");
6478
await storage.removeMany(["key1", "key2"]);
6579
const remainingKeys = await storage.getAllKeys();
66-
logs.add("remaining keys after removing:", remainingKeys);
80+
tests.assert(["key3"], remainingKeys, "Should be one key left");
6781

6882
const final = await storage.getMany(remainingKeys);
69-
logs.add("get many remaining values:", final);
83+
tests.assert({ key3: "true" }, final, "value is still there");
7084
} catch (e) {
71-
logs.report(e);
85+
tests.report(e);
7286
}
7387
};
7488

7589
const saveBigData = async () => {
7690
try {
77-
logs.clear();
91+
tests.clear();
7892
const key = "big-data";
7993
const data = JSON.stringify(new Array(500_000).fill("a"));
80-
logs.add(`Saving ${key} with data size ${data.length}`);
94+
tests.info(`Saving ${key} with data size ${data.length}`);
8195
const timeNow = +Date.now();
8296
await storage.setItem(key, data);
83-
logs.add(`saving took ${+Date.now() - timeNow}ms`);
97+
tests.info(`saving took ${+Date.now() - timeNow}ms`);
8498

85-
logs.add(`reading ${key}`);
99+
tests.info(`reading ${key}`);
86100
const res = await storage.getItem(key);
87-
logs.add(`size of result: ${res?.length}`);
101+
tests.assert(res?.length, data.length, "restored data is same size");
88102
} catch (e) {
89-
logs.report(e);
103+
tests.report(e);
90104
}
91105
};
92106

93107
const clearStorage = async () => {
94108
try {
95-
logs.clear();
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());
109+
tests.clear();
110+
await storage.clear();
111+
tests.assert([], await storage.getAllKeys(), "should be empty storage");
112+
113+
tests.info("saving some values");
114+
await storage.setItem("i should be here", "my item");
115+
tests.assert(
116+
["i should be here"],
117+
await storage.getAllKeys(),
118+
"should return single value"
119+
);
105120
} catch (e) {
106-
logs.report(e);
121+
tests.report(e);
107122
}
108123
};
109124

110125
return {
111-
logs,
126+
logs: tests.logs,
127+
clearLogs: tests.clear,
112128
tests: [
113129
{
114130
name: "Single key set",

examples/common-tests/src/types.ts

Lines changed: 0 additions & 4 deletions
This file was deleted.

examples/common-tests/src/useLogs.ts

Lines changed: 0 additions & 35 deletions
This file was deleted.
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import { useState } from "react";
2+
import isEqual from "lodash.isequal";
3+
4+
type Log = { type: "info" | "ok" | "err"; message: string };
5+
6+
type TestValue =
7+
| string
8+
| number
9+
| string[]
10+
| Record<string, string | null>
11+
| null
12+
| undefined
13+
| void;
14+
15+
export function useTests() {
16+
const [logs, setLogs] = useState<Log[]>([]);
17+
18+
function addLog(message: string) {
19+
setLogs((l) => [...l, { type: "info", message }]);
20+
}
21+
22+
function addErr(message: string) {
23+
setLogs((l) => [...l, { type: "err", message }]);
24+
}
25+
26+
function addOk(message: string) {
27+
setLogs((l) => [...l, { type: "ok", message }]);
28+
}
29+
30+
function clearLog() {
31+
setLogs([]);
32+
}
33+
34+
function reportError(e: any) {
35+
alert(JSON.stringify(e, null, 2));
36+
}
37+
38+
function assertEqual(
39+
expected: TestValue,
40+
actual: TestValue,
41+
testName: string
42+
) {
43+
if (!isEqual(expected, actual)) {
44+
addErr(
45+
`${testName} failed: | Expected: ${JSON.stringify(expected)} | Actual: ${JSON.stringify(actual)}`
46+
);
47+
} else {
48+
addOk(`${testName} | Actual: ${JSON.stringify(actual)}`);
49+
}
50+
}
51+
52+
return {
53+
logs,
54+
info: addLog,
55+
error: addErr,
56+
ok: addOk,
57+
assert: assertEqual,
58+
clear: clearLog,
59+
report: reportError,
60+
};
61+
}

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

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ type Props = {
88
};
99

1010
const BasicTests: React.FC<Props> = ({ storage }) => {
11-
const { tests, logs } = useBasicTest(storage);
11+
const { tests, logs, clearLogs } = useBasicTest(storage);
1212

1313
return (
1414
<View style={{ paddingHorizontal: 16, flex: 1 }}>
@@ -22,7 +22,7 @@ const BasicTests: React.FC<Props> = ({ storage }) => {
2222

2323
<View style={{ width: "100%", alignItems: "flex-end" }}>
2424
<Pressable
25-
onPress={logs.clear}
25+
onPress={clearLogs}
2626
style={({ pressed }) => [
2727
{
2828
padding: 12,
@@ -36,9 +36,15 @@ const BasicTests: React.FC<Props> = ({ storage }) => {
3636
</View>
3737

3838
<ScrollView contentContainerStyle={{ gap: 12 }}>
39-
{logs.logs.map((l, i) => (
40-
<Text style={{ fontSize: 14 }} key={i}>
41-
{l}
39+
{logs.map((l, i) => (
40+
<Text
41+
style={{
42+
fontSize: 14,
43+
color: l.type === "ok" ? "green" : l.type === "err" ? "red" : "",
44+
}}
45+
key={i}
46+
>
47+
{l.message}
4248
</Text>
4349
))}
4450
</ScrollView>

examples/web/src/tests/BasicTests.tsx

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ type Props = {
77
};
88

99
const BasicTests: React.FC<Props> = ({ storage }) => {
10-
const { tests, logs } = useBasicTest(storage);
10+
const { tests, clearLogs, logs } = useBasicTest(storage);
1111

1212
return (
1313
<div className="flex flex-col items-center px-4">
@@ -27,17 +27,20 @@ const BasicTests: React.FC<Props> = ({ storage }) => {
2727

2828
<div className="w-full flex justify-end max-w-1/4 mt-2">
2929
<button
30-
onClick={logs.clear}
30+
onClick={clearLogs}
3131
className="w-[90px] px-3 py-2 rounded hover:bg-blue-100"
3232
>
3333
clear logs
3434
</button>
3535
</div>
3636

3737
<div className="flex flex-col gap-3 overflow-y-auto mt-4">
38-
{logs.logs.map((l, i) => (
39-
<p key={i} className="text-sm">
40-
{l}
38+
{logs.map((l, i) => (
39+
<p
40+
key={i}
41+
className={`text-sm ${l.type === "ok" ? "text-green-500" : ""} ${l.type === "err" ? "text-red-500" : ""}`}
42+
>
43+
{l.message}
4144
</p>
4245
))}
4346
</div>

examples/web/vite.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { defineConfig } from "vite";
22
import react from "@vitejs/plugin-react";
3-
import tailwindcss from '@tailwindcss/vite'
3+
import tailwindcss from "@tailwindcss/vite";
44

55
// https://vite.dev/config/
66
export default defineConfig({

0 commit comments

Comments
 (0)