diff --git a/tests/test_issue4346_vscroll_footer_jitter.py b/tests/test_issue4346_vscroll_footer_jitter.py index 0cab4af8..8d3bbc02 100644 --- a/tests/test_issue4346_vscroll_footer_jitter.py +++ b/tests/test_issue4346_vscroll_footer_jitter.py @@ -1783,6 +1783,9 @@ console.log(JSON.stringify({ _extract_func_script(JS) + """ const fn = extractFunc('renderMessages'); +const resetAttrsStart = src.indexOf('const _recycleResetAttrs='); +const resetAttrsEnd = src.indexOf('let _scrollbarDragActive=false;', resetAttrsStart); +const resetAttrs = src.slice(resetAttrsStart, resetAttrsEnd); const assistantStart = fn.indexOf('if(!currentAssistantTurn){'); const assistantEnd = fn.indexOf('const seg=document.createElement', assistantStart); const assistantBranch = fn.slice(assistantStart, assistantEnd); @@ -1796,7 +1799,7 @@ console.log(JSON.stringify({ clears_transparent_collapse: assistantBranch.includes(""" + recycle_reset_loop_needle + """), - reset_list_contains_transparent_collapse: fn.includes(""" + reset_list_contains_transparent_collapse: resetAttrs.includes(""" + transparent_collapse_attr_needle + """), })); diff --git a/tests/test_issue4793_dom_recycle_hardening.py b/tests/test_issue4793_dom_recycle_hardening.py index 13bb45b7..1e3cf23c 100644 --- a/tests/test_issue4793_dom_recycle_hardening.py +++ b/tests/test_issue4793_dom_recycle_hardening.py @@ -61,6 +61,8 @@ function extractBody(startMarker, endMarker, startFrom = 0) {{ def test_recycled_assistant_turn_reuse_clears_live_anchor_attrs(): script = _js_prefix() + """ const recycleChunk = extractBetween("if(!currentAssistantTurn){", "const seg=document.createElement('div');"); +const resetListChunk = extractBetween("const _recycleResetAttrs=[", "let _scrollbarDragActive=false;") + .replace("const _recycleResetAttrs=", "var _recycleResetAttrs="); const removedAttrs = []; const role = { replacement: null, @@ -73,13 +75,7 @@ const recycled = { removeAttribute(name) { removedAttrs.push(name); }, querySelector(selector) { return selector === '.msg-role.assistant' ? role : null; }, }; -const _recycleResetAttrs = [ - 'data-transparent-turn-collapsed', - 'data-transparent-turn-toggle-bound', - 'data-anchor-scene-live-owner', - 'data-anchor-stream-id', - 'data-live-assistant-turn', -]; +eval(resetListChunk); const _recycleStash = new Map([[7, recycled]]); const _msgNodeRecycleEnabled = true; let currentAssistantTurn = null; @@ -96,6 +92,7 @@ const _formatTurnTps = value => `tps:${value}`; eval(recycleChunk); console.log(JSON.stringify({ removedAttrs, + resetAttrs: _recycleResetAttrs, blocksInnerHTML: blocks.innerHTML, roleHtml: role.replacement, currentAssistantTurnIsRecycled: currentAssistantTurn === recycled, @@ -108,6 +105,13 @@ console.log(JSON.stringify({ """ result = _run_node(script) + assert result["resetAttrs"] == [ + "data-transparent-turn-collapsed", + "data-transparent-turn-toggle-bound", + "data-anchor-scene-live-owner", + "data-anchor-stream-id", + "data-live-assistant-turn", + ] assert result["removedAttrs"] == [ "data-transparent-turn-collapsed", "data-transparent-turn-toggle-bound", @@ -126,6 +130,8 @@ console.log(JSON.stringify({ def test_recycled_assistant_turn_reuse_keeps_block_clear_and_role_refresh(): script = _js_prefix() + """ const recycleChunk = extractBetween("if(!currentAssistantTurn){", "const seg=document.createElement('div');"); +const resetListChunk = extractBetween("const _recycleResetAttrs=[", "let _scrollbarDragActive=false;") + .replace("const _recycleResetAttrs=", "var _recycleResetAttrs="); const removedAttrs = []; const role = { replacement: null, @@ -138,13 +144,7 @@ const recycled = { removeAttribute(name) { removedAttrs.push(name); }, querySelector(selector) { return selector === '.msg-role.assistant' ? role : null; }, }; -const _recycleResetAttrs = [ - 'data-transparent-turn-collapsed', - 'data-transparent-turn-toggle-bound', - 'data-anchor-scene-live-owner', - 'data-anchor-stream-id', - 'data-live-assistant-turn', -]; +eval(resetListChunk); const _recycleStash = new Map([[7, recycled]]); const _msgNodeRecycleEnabled = true; let currentAssistantTurn = null;