1+ import { Slot } from "@wry/context" ;
12import * as assert from "assert" ;
2- import { wrap , setTimeout , asyncFromGen , noContext } from '../index.js' ;
3+ import {
4+ wrap ,
5+ setTimeout ,
6+ asyncFromGen ,
7+ noContext ,
8+ nonReactive ,
9+ } from '../index.js' ;
310
411describe ( "asyncFromGen" , function ( ) {
512 it ( "is importable" , function ( ) {
@@ -154,4 +161,48 @@ describe("noContext", function () {
154161 parent . dirty ( ) ;
155162 assert . deepEqual ( parent ( ) , [ 4 , 2 ] ) ;
156163 } ) ;
157- } ) ;
164+ } ) ;
165+
166+ describe ( "nonReactive" , function ( ) {
167+ const otherSlot = new Slot < string > ( ) ;
168+
169+ it ( "censors only optimism-related context" , function ( ) {
170+ let innerCounter = 0 ;
171+ const inner = wrap ( ( ) => ++ innerCounter ) ;
172+ const outer = wrap ( ( ) => ( {
173+ fromInner : nonReactive ( ( ) => inner ( ) ) ,
174+ fromOther : nonReactive ( ( ) => otherSlot . getValue ( ) ) ,
175+ } ) ) ;
176+ assert . strictEqual ( otherSlot . getValue ( ) , undefined ) ;
177+ otherSlot . withValue ( "preserved" , ( ) => {
178+ assert . deepEqual ( outer ( ) , { fromInner : 1 , fromOther : "preserved" } ) ;
179+ assert . deepEqual ( outer ( ) , { fromInner : 1 , fromOther : "preserved" } ) ;
180+ inner . dirty ( ) ;
181+ assert . deepEqual ( outer ( ) , { fromInner : 1 , fromOther : "preserved" } ) ;
182+ assert . strictEqual ( inner ( ) , 2 ) ;
183+ outer . dirty ( ) ;
184+ assert . deepEqual ( outer ( ) , { fromInner : 2 , fromOther : "preserved" } ) ;
185+ } ) ;
186+ assert . strictEqual ( otherSlot . getValue ( ) , undefined ) ;
187+ } ) ;
188+
189+ it ( "same test using noContext, for comparison" , function ( ) {
190+ let innerCounter = 0 ;
191+ const inner = wrap ( ( ) => ++ innerCounter ) ;
192+ const outer = wrap ( ( ) => ( {
193+ fromInner : noContext ( inner ) ,
194+ fromOther : noContext ( ( ) => otherSlot . getValue ( ) ) ,
195+ } ) ) ;
196+ assert . strictEqual ( otherSlot . getValue ( ) , undefined ) ;
197+ otherSlot . withValue ( "preserved" , ( ) => {
198+ assert . deepEqual ( outer ( ) , { fromInner : 1 , fromOther : void 0 } ) ;
199+ assert . deepEqual ( outer ( ) , { fromInner : 1 , fromOther : void 0 } ) ;
200+ inner . dirty ( ) ;
201+ assert . deepEqual ( outer ( ) , { fromInner : 1 , fromOther : void 0 } ) ;
202+ assert . strictEqual ( inner ( ) , 2 ) ;
203+ outer . dirty ( ) ;
204+ assert . deepEqual ( outer ( ) , { fromInner : 2 , fromOther : void 0 } ) ;
205+ } ) ;
206+ assert . strictEqual ( otherSlot . getValue ( ) , undefined ) ;
207+ } ) ;
208+ } ) ;
0 commit comments