Files
boss/tests/android-chat-incremental-realtime-append.test.ts

63 lines
2.3 KiB
TypeScript

import test from "node:test";
import assert from "node:assert/strict";
import { readFile } from "node:fs/promises";
async function readSource(path: string) {
return readFile(new URL(path, import.meta.url), "utf8");
}
test("ProjectDetailActivity keeps a rendered project snapshot for append-only realtime message patches", async () => {
const source = await readSource("../android/app/src/main/java/com/hyzq/boss/ProjectDetailActivity.java");
assert.match(
source,
/private @Nullable JSONObject currentRenderedProjectPayload;/,
"expected chat page to keep the latest rendered project payload for incremental realtime diffs",
);
assert.match(
source,
/if \(tryAppendRealtimeMessagesPatch\(projectMessagesPayload\)\) \{\s*return true;\s*\}/,
"expected chat page to try an append-only realtime patch before falling back to a full message rerender",
);
assert.match(
source,
/private boolean tryAppendRealtimeMessagesPatch\(JSONObject projectMessagesPayload\)/,
"expected chat page to expose a dedicated append-only realtime patch helper",
);
assert.match(
source,
/appendContent\(buildMessageView\(message\)\);/,
"expected append-only realtime patches to add only the new message views",
);
assert.match(
source,
/if \(trySkipUnchangedRealtimeMessagesPatch\(projectMessagesPayload\)\) \{\s*return true;\s*\}/,
"expected chat page to skip duplicate realtime message payloads before rerendering",
);
assert.match(
source,
/private boolean trySkipUnchangedRealtimeMessagesPatch\(JSONObject projectMessagesPayload\)/,
"expected chat page to expose a duplicate-payload fast path",
);
});
test("ProjectDetailActivity suppresses intermediate layouts while rebuilding or appending chat content", async () => {
const source = await readSource("../android/app/src/main/java/com/hyzq/boss/ProjectDetailActivity.java");
assert.match(
source,
/private void runWithSuppressedContentLayout\(Runnable action\)/,
"expected chat page to centralize layout suppression for bulk content updates",
);
assert.match(
source,
/contentLayout\.suppressLayout\(true\);/,
"expected chat page to pause intermediate layout passes during bulk updates",
);
assert.match(
source,
/contentLayout\.suppressLayout\(false\);/,
"expected chat page to resume layout after bulk updates",
);
});