| 1 | import { |
| 2 | beginKeyedResourceRequest, |
| 3 | emptyKeyedResource, |
| 4 | rejectKeyedResourceRequest, |
| 5 | resolveKeyedResourceRequest, |
| 6 | } from "../lib/keyedResource"; |
| 7 | |
| 8 | let passed = 0; |
| 9 | let failed = 0; |
| 10 | function check(value: boolean, label: string) { |
| 11 | if (value) { passed += 1; process.stdout.write(` PASS ${label}\n`); } |
| 12 | else { failed += 1; process.stdout.write(` FAIL ${label}\n`); } |
| 13 | } |
| 14 | |
| 15 | console.log("\nkeyed stale-while-revalidate resource"); |
| 16 | let state = beginKeyedResourceRequest(emptyKeyedResource<string>(), "a", 1, 1); |
| 17 | state = resolveKeyedResourceRequest(state, "a", 1, "first", 1); |
| 18 | state = beginKeyedResourceRequest(state, "a", 2, 2); |
| 19 | check(state.data === "first" && state.status === "refreshing", "same-key refresh keeps painted data"); |
| 20 | const stale = resolveKeyedResourceRequest(state, "a", 1, "stale", 1); |
| 21 | check(stale === state, "stale completion is ignored by sequence"); |
| 22 | state = rejectKeyedResourceRequest(state, "a", 2, "offline"); |
| 23 | check(state.data === "first" && state.status === "error", "refresh error preserves painted data"); |
| 24 | state = beginKeyedResourceRequest(state, "b", 3, 3); |
| 25 | check(state.data === null && state.status === "refreshing", "new key starts without unrelated data"); |
| 26 | check(failed === 0, `${passed} resource assertions passed`); |
| 27 | if (failed > 0) process.exit(1); |
| 28 |