From 1a8ee88914d0362b82d9718462ffa00e37d5a062 Mon Sep 17 00:00:00 2001 From: Brian Vaughn Date: Mon, 9 Nov 2020 10:46:24 -0500 Subject: [PATCH] Added failing tests for mutable source mutate during render --- .../useMutableSource-test.internal.js | 35 ++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/packages/react-reconciler/src/__tests__/useMutableSource-test.internal.js b/packages/react-reconciler/src/__tests__/useMutableSource-test.internal.js index 9b0d868568e6d..c5ba1eb93fbe1 100644 --- a/packages/react-reconciler/src/__tests__/useMutableSource-test.internal.js +++ b/packages/react-reconciler/src/__tests__/useMutableSource-test.internal.js @@ -25,9 +25,9 @@ function loadModules() { jest.useFakeTimers(); ReactFeatureFlags = require('shared/ReactFeatureFlags'); - ReactFeatureFlags.enableSchedulerTracing = true; ReactFeatureFlags.enableProfilerTimer = true; + React = require('react'); ReactNoop = require('react-noop-renderer'); Scheduler = require('scheduler'); @@ -1718,6 +1718,39 @@ describe('useMutableSource', () => { }); }); + // See https://github.com/facebook/react/issues/19948 + it('should recover from mutations during read', () => { + const source = createSource('initial'); + const mutableSource = createMutableSource(source, param => param.version); + + function MutateDuringRead() { + const value = useMutableSource( + mutableSource, + defaultGetSnapshot, + defaultSubscribe, + ); + Scheduler.unstable_yieldValue('MutateDuringRead:' + value); + // This is not a supported/recommended pattern. + if (value === 'initial') { + source.value = 'updated'; + } + return null; + } + + act(() => { + ReactNoop.renderLegacySyncRoot( + + + , + ); + }); + + expect(Scheduler).toHaveYielded([ + 'MutateDuringRead:initial', + 'MutateDuringRead:updated', + ]); + }); + if (__DEV__) { describe('dev warnings', () => { // @gate experimental