Skip to content

Commit d722ac5

Browse files
committed
test: add cases for traverseFiber
1 parent 857f1ae commit d722ac5

File tree

3 files changed

+51
-1
lines changed

3 files changed

+51
-1
lines changed

packages/bippy/src/core.test.tsx

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import type React from 'react';
2+
import { render, type RenderOptions } from '@testing-library/react';
3+
import { describe, expect, it, vi } from 'vitest';
4+
import { instrument, traverseFiber } from './core.js';
5+
import type { FiberRoot } from './types.js';
6+
7+
describe('traverseFiber', () => {
8+
const onCommitFiberRoot = vi.fn();
9+
instrument({ onCommitFiberRoot });
10+
11+
const renderWithFiber = (ui: React.ReactNode, options?: RenderOptions) => {
12+
const result = render(ui, options);
13+
const fiber: FiberRoot = onCommitFiberRoot.mock.lastCall?.[1];
14+
return { ...result, fiber };
15+
};
16+
17+
const { fiber } = renderWithFiber(
18+
<div key="root">
19+
<div key="a">
20+
<div key="a1" />
21+
<div key="a2" />
22+
</div>
23+
<div key="b" />
24+
<div key="c" />
25+
<div key="d">
26+
<div key="d1">
27+
<div key="d11" />
28+
</div>
29+
</div>
30+
</div>,
31+
);
32+
33+
it('should traverse a fiber', () => {
34+
const handler = vi.fn();
35+
traverseFiber(fiber.current, fiber => handler(fiber.key));
36+
const keys = handler.mock.calls.map(call => call[0]).slice(1);
37+
const expected = ['root', 'a', 'a1', 'a2', 'b', 'c', 'd', 'd1', 'd11'];
38+
expect(keys).toEqual(expected);
39+
});
40+
41+
it('should traverse a fiber in reverse', () => {
42+
const handler = vi.fn();
43+
const d11 = traverseFiber(fiber.current, fiber => fiber.key === 'd11');
44+
expect(d11?.key).toBe('d11');
45+
traverseFiber(d11, fiber => handler(fiber.key), true);
46+
const keys = handler.mock.calls.map(call => call[0]).slice(0, -1);
47+
expect(keys).toEqual(['d11', 'd1', 'd', 'root']);
48+
});
49+
});

setup-test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
import './src/rdt-hook';

tsconfig.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"compilerOptions": {
3-
"jsx": "react",
3+
"jsx": "react-jsx",
44
"module": "NodeNext",
55
"esModuleInterop": true,
66
"strictNullChecks": true,

0 commit comments

Comments
 (0)