Skip to content

Commit 2e4d786

Browse files
committed
rename some instances of profiler to renderStream
1 parent 6e36177 commit 2e4d786

File tree

6 files changed

+52
-49
lines changed

6 files changed

+52
-49
lines changed

src/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ export type {
22
NextRenderOptions,
33
RenderStream,
44
RenderStreamWithRenderFn,
5+
RenderStreamOptions,
56
} from "./profile/profile.js";
67
export {
78
createRenderStream,
@@ -12,6 +13,8 @@ export {
1213
export type { SyncScreen } from "./profile/Render.js";
1314

1415
export { renderToRenderStream } from "./renderToRenderStream.js";
16+
export type { RenderStreamWithRenderResult } from "./renderToRenderStream.js";
1517
export { renderHookToSnapshotStream } from "./renderHookToSnapshotStream.js";
18+
export type { SnapshotStream } from "./renderHookToSnapshotStream.js";
1619

1720
export type { Assertable } from "./assertable.js";

src/jest/ProfiledComponent.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@ import { assertableSymbol } from "../assertable.js";
1111

1212
export const toRerender: MatcherFunction<[options?: NextRenderOptions]> =
1313
async function (actual, options) {
14-
const _profiler = actual as RenderStream<any> | Assertable;
15-
const profiler =
16-
assertableSymbol in _profiler ? _profiler[assertableSymbol] : _profiler;
14+
const _stream = actual as RenderStream<any> | Assertable;
15+
const stream =
16+
assertableSymbol in _stream ? _stream[assertableSymbol] : _stream;
1717
const hint = this.utils.matcherHint("toRerender", "ProfiledComponent", "");
1818
let pass = true;
1919
try {
20-
await profiler.peekRender({ timeout: 100, ...options });
20+
await stream.peekRender({ timeout: 100, ...options });
2121
} catch (e) {
2222
if (e instanceof WaitForRenderTimeoutError) {
2323
pass = false;
@@ -44,26 +44,26 @@ const failed = {};
4444
export const toRenderExactlyTimes: MatcherFunction<
4545
[times: number, options?: NextRenderOptions]
4646
> = async function (actual, times, optionsPerRender) {
47-
const _profiler = actual as RenderStream<any> | Assertable;
48-
const profiler =
49-
assertableSymbol in _profiler ? _profiler[assertableSymbol] : _profiler;
47+
const _stream = actual as RenderStream<any> | Assertable;
48+
const stream =
49+
assertableSymbol in _stream ? _stream[assertableSymbol] : _stream;
5050
const options = { timeout: 100, ...optionsPerRender };
5151
const hint = this.utils.matcherHint("toRenderExactlyTimes");
5252
let pass = true;
5353
try {
54-
if (profiler.totalRenderCount() > times) {
54+
if (stream.totalRenderCount() > times) {
5555
throw failed;
5656
}
5757
try {
58-
while (profiler.totalRenderCount() < times) {
59-
await profiler.waitForNextRender(options);
58+
while (stream.totalRenderCount() < times) {
59+
await stream.waitForNextRender(options);
6060
}
6161
} catch (e) {
6262
// timeouts here should just fail the test, rethrow other errors
6363
throw e instanceof WaitForRenderTimeoutError ? failed : e;
6464
}
6565
try {
66-
await profiler.waitForNextRender(options);
66+
await stream.waitForNextRender(options);
6767
} catch (e) {
6868
// we are expecting a timeout here, so swallow that error, rethrow others
6969
if (!(e instanceof WaitForRenderTimeoutError)) {
@@ -83,7 +83,7 @@ export const toRenderExactlyTimes: MatcherFunction<
8383
return (
8484
hint +
8585
` Expected component to${pass ? " not" : ""} render exactly ${times}.` +
86-
` It rendered ${profiler.totalRenderCount()} times.`
86+
` It rendered ${stream.totalRenderCount()} times.`
8787
);
8888
},
8989
};

src/profile/context.tsx

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,33 @@
11
import * as React from "rehackt";
22

3-
export interface ProfilerContextValue {
3+
export interface RenderStreamContextValue {
44
renderedComponents: Array<React.ComponentType | string>;
55
}
66

7-
const ProfilerContext = React.createContext<ProfilerContextValue | undefined>(
8-
undefined
9-
);
7+
const RenderStreamContext = React.createContext<
8+
RenderStreamContextValue | undefined
9+
>(undefined);
1010

11-
export function ProfilerContextProvider({
11+
export function RenderStreamContextProvider({
1212
children,
1313
value,
1414
}: {
1515
children: React.ReactNode;
16-
value: ProfilerContextValue;
16+
value: RenderStreamContextValue;
1717
}) {
18-
const parentContext = useProfilerContext();
18+
const parentContext = useRenderStreamContext();
1919

2020
if (parentContext) {
21-
throw new Error("Profilers should not be nested in the same tree");
21+
throw new Error("Render streams should not be nested in the same tree");
2222
}
2323

2424
return (
25-
<ProfilerContext.Provider value={value}>
25+
<RenderStreamContext.Provider value={value}>
2626
{children}
27-
</ProfilerContext.Provider>
27+
</RenderStreamContext.Provider>
2828
);
2929
}
3030

31-
export function useProfilerContext() {
32-
return React.useContext(ProfilerContext);
31+
export function useRenderStreamContext() {
32+
return React.useContext(RenderStreamContext);
3333
}

src/profile/profile.tsx

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,11 @@ import * as React from "rehackt";
33
import type { Render, BaseRender } from "./Render.js";
44
import { RenderInstance } from "./Render.js";
55
import { applyStackTrace, captureStackTrace } from "./traces.js";
6-
import type { ProfilerContextValue } from "./context.js";
7-
import { ProfilerContextProvider, useProfilerContext } from "./context.js";
6+
import type { RenderStreamContextValue } from "./context.js";
7+
import {
8+
RenderStreamContextProvider,
9+
useRenderStreamContext,
10+
} from "./context.js";
811
import { disableActWarnings } from "./disableActWarnings.js";
912
import { render as baseRender, RenderOptions } from "@testing-library/react";
1013
import { Assertable, markAssertable } from "../assertable.js";
@@ -87,7 +90,7 @@ export interface RenderStreamWithRenderFn<Snapshot extends ValidSnapshot>
8790
render: typeof baseRender;
8891
}
8992

90-
export type ProfilerOptions<Snapshot extends ValidSnapshot> = {
93+
export type RenderStreamOptions<Snapshot extends ValidSnapshot> = {
9194
onRender?: (
9295
info: BaseRender & {
9396
snapshot: Snapshot;
@@ -109,7 +112,7 @@ export function createRenderStream<Snapshot extends ValidSnapshot = void>({
109112
snapshotDOM = false,
110113
initialSnapshot,
111114
skipNonTrackingRenders,
112-
}: ProfilerOptions<Snapshot> = {}): RenderStreamWithRenderFn<Snapshot> {
115+
}: RenderStreamOptions<Snapshot> = {}): RenderStreamWithRenderFn<Snapshot> {
113116
let nextRender: Promise<Render<Snapshot>> | undefined;
114117
let resolveNextRender: ((render: Render<Snapshot>) => void) | undefined;
115118
let rejectNextRender: ((error: unknown) => void) | undefined;
@@ -144,7 +147,7 @@ export function createRenderStream<Snapshot extends ValidSnapshot = void>({
144147
}));
145148
};
146149

147-
const profilerContext: ProfilerContextValue = {
150+
const profilerContext: RenderStreamContextValue = {
148151
renderedComponents: [],
149152
};
150153

@@ -214,11 +217,11 @@ export function createRenderStream<Snapshot extends ValidSnapshot = void>({
214217
let iteratorPosition = 0;
215218
function Wrapper({ children }: { children: React.ReactNode }) {
216219
return (
217-
<ProfilerContextProvider value={profilerContext}>
220+
<RenderStreamContextProvider value={profilerContext}>
218221
<React.Profiler id="test" onRender={profilerOnRender}>
219222
{children}
220223
</React.Profiler>
221-
</ProfilerContextProvider>
224+
</RenderStreamContextProvider>
222225
);
223226
}
224227

@@ -376,7 +379,7 @@ export function useTrackRenders({ name }: { name?: string } = {}) {
376379
);
377380
}
378381

379-
const ctx = useProfilerContext();
382+
const ctx = useRenderStreamContext();
380383

381384
if (!ctx) {
382385
throw new Error(

src/renderHookToSnapshotStream.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { Render } from "./profile/Render.js";
88
import { createElement } from "react";
99
import { Assertable, assertableSymbol, markAssertable } from "./assertable.js";
1010

11-
export interface ProfiledHook<Snapshot extends ValidSnapshot>
11+
export interface SnapshotStream<Snapshot extends ValidSnapshot, Props>
1212
extends Assertable {
1313
/**
1414
* An array of all renders that have happened so far.
@@ -44,11 +44,6 @@ export interface ProfiledHook<Snapshot extends ValidSnapshot>
4444
* Does not advance the render iterator.
4545
*/
4646
waitForNextSnapshot(options?: NextRenderOptions): Promise<Snapshot>;
47-
}
48-
49-
interface HookSnapshotStream<Props, ReturnValue extends ValidSnapshot>
50-
extends ProfiledHook<ReturnValue>,
51-
Assertable {
5247
rerender: (rerenderCallbackProps: Props) => void;
5348
unmount: () => void;
5449
}
@@ -59,7 +54,7 @@ export function renderHookToSnapshotStream<
5954
>(
6055
renderCallback: (props: Props) => ReturnValue,
6156
{ initialProps, ...options }: RenderHookOptions<Props> = {}
62-
): HookSnapshotStream<Props, ReturnValue> {
57+
): SnapshotStream<ReturnValue, Props> {
6358
const { render, ...stream } = createRenderStream<ReturnValue>();
6459

6560
const ProfiledHook: React.FC<Props> = (props) => {

src/renderToRenderStream.ts

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,19 @@ import {
44
} from "@testing-library/react";
55
import {
66
createRenderStream,
7-
ProfiledComponentFields,
8-
ProfiledComponentOnlyFields,
9-
ProfilerOptions,
7+
RenderStreamOptions,
8+
RenderStream,
109
ValidSnapshot,
1110
} from "./profile/profile.js";
1211

1312
type RenderOptions<Snapshot extends ValidSnapshot = void> = BaseOptions &
14-
ProfilerOptions<Snapshot>;
13+
RenderStreamOptions<Snapshot>;
1514

16-
type RenderResult<Snapshot extends ValidSnapshot = void> =
17-
ProfiledComponentFields<Snapshot> &
18-
ProfiledComponentOnlyFields<Snapshot> & {
19-
renderResultPromise: Promise<BaseResult>;
20-
};
15+
export interface RenderStreamWithRenderResult<
16+
Snapshot extends ValidSnapshot = void,
17+
> extends RenderStream<Snapshot> {
18+
renderResultPromise: Promise<BaseResult>;
19+
}
2120

2221
/**
2322
* Render into a container which is appended to document.body. It should be used with cleanup.
@@ -32,13 +31,16 @@ export function renderToRenderStream<Snapshot extends ValidSnapshot = void>(
3231
skipNonTrackingRenders,
3332
...options
3433
}: RenderOptions<Snapshot> = {}
35-
): RenderResult<Snapshot> {
34+
): RenderStreamWithRenderResult<Snapshot> {
3635
const { render, ...stream } = createRenderStream<Snapshot>({
3736
onRender,
3837
snapshotDOM,
3938
initialSnapshot,
4039
skipNonTrackingRenders,
4140
});
41+
// `render` needs to be called asynchronously here, because the definition of `ui`
42+
// might contain components that reference the return value of `renderToRenderStream`
43+
// itself, e.g. `replaceSnapshot` or `mergeSnapshot`.
4244
const renderResultPromise = Promise.resolve().then(() => render(ui, options));
4345
return { ...stream, renderResultPromise };
4446
}

0 commit comments

Comments
 (0)