28 lines
1.9 KiB
JavaScript
28 lines
1.9 KiB
JavaScript
import assert from"node:assert/strict";
|
|
import test from"node:test";
|
|
import{configureReactNodeWidgetHost}from"../ui/src/regional/reactNodeWidgetHost.tsx";
|
|
import{executionResultPreviewState,installExecutionResultPreview}from"../ui/src/regional/executionResultPreview.tsx";
|
|
|
|
test("central execution preview chains lifecycle and keeps ephemeral node-local state",()=>{
|
|
const renders=[];let unmounted=0;
|
|
configureReactNodeWidgetHost({
|
|
createHost:()=>({className:"",dataset:{},remove(){}}),createContentHost:()=>({className:"",dataset:{},style:{},addEventListener(){},removeEventListener(){}}),
|
|
createRoot:()=>({render:value=>renders.push(value),unmount:()=>{unmounted++}}),schedule:action=>action(),applyPresentation:()=>{},observeHost:()=>()=>{},
|
|
});
|
|
function NodeType(){}
|
|
NodeType.prototype.onExecuted=function(){this.originalExecuted=true;return"executed"};
|
|
NodeType.prototype.onRemoved=function(){this.originalRemoved=true};
|
|
installExecutionResultPreview(NodeType,"BV Inspect Any",{id:"inspect",widgetName:"inspect_preview",messageKey:"text",placeholder:"Run"});
|
|
const node=new NodeType();node.addDOMWidget=()=>({serialize:true});
|
|
node.onNodeCreated();
|
|
assert.deepEqual(executionResultPreviewState(node),{text:"",truncated:false});
|
|
assert.equal(node.onExecuted({text:["hello"],type_name:["str"],truncated:[false]}),"executed");
|
|
assert.equal(node.originalExecuted,true);
|
|
assert.deepEqual(executionResultPreviewState(node),{text:"hello",typeName:"str",truncated:false});
|
|
assert.equal(renders.length,2);
|
|
node.onExecuted({other:["ignored"]});assert.equal(renders.length,2);
|
|
node.onRemoved();assert.equal(node.originalRemoved,true);assert.equal(unmounted,1);
|
|
assert.deepEqual(executionResultPreviewState(node),{text:"",truncated:false});
|
|
node.onExecuted({text:"late"});assert.equal(renders.length,2);assert.deepEqual(executionResultPreviewState(node),{text:"",truncated:false});
|
|
});
|