reakit
Version:
Toolkit for building accessible rich web apps with React
147 lines (135 loc) • 3.9 kB
text/typescript
import * as React from "react";
import { renderHook, act } from "reakit-test-utils/hooks";
import { jestSerializerStripFunctions } from "reakit-test-utils/jestSerializerStripFunctions";
import { useCompositeState, CompositeInitialState } from "../CompositeState";
expect.addSnapshotSerializer(jestSerializerStripFunctions);
function render({
baseId = "base",
...initialState
}: CompositeInitialState = {}) {
return renderHook(() => useCompositeState({ baseId, ...initialState }))
.result;
}
function createRef() {
const ref = React.createRef() as React.MutableRefObject<HTMLElement>;
ref.current = document.createElement("div");
return ref;
}
test("initial state", () => {
const result = render();
expect(result.current).toMatchInlineSnapshot(`
Object {
"baseId": "base",
"currentId": undefined,
"groups": Array [],
"items": Array [],
"loop": false,
"orientation": undefined,
"rtl": false,
"shift": false,
"unstable_hasActiveWidget": false,
"unstable_idCountRef": Object {
"current": 0,
},
"unstable_includesBaseElement": false,
"unstable_moves": 0,
"unstable_virtual": false,
"wrap": false,
}
`);
});
test("setRTL", () => {
const result = render();
expect(result.current.rtl).not.toBe(true);
act(() => result.current.setRTL(true));
expect(result.current.rtl).toBe(true);
});
test("setOrientation", () => {
const result = render();
expect(result.current.orientation).not.toBe("horizontal");
act(() => result.current.setOrientation("horizontal"));
expect(result.current.orientation).toBe("horizontal");
});
test("setCurrentId", () => {
const result = render();
act(() => result.current.setCurrentId("a"));
expect(result.current.currentId).toBe("a");
});
test("setLoop", () => {
const result = render();
expect(result.current.loop).not.toBe(true);
act(() => result.current.setLoop(true));
expect(result.current.loop).toBe(true);
});
test("setWrap", () => {
const result = render();
expect(result.current.wrap).not.toBe(true);
act(() => result.current.setWrap(true));
expect(result.current.wrap).toBe(true);
});
test("registerItem", () => {
const result = render();
act(() => result.current.registerItem({ id: "1", ref: createRef() }));
expect(result.current).toMatchInlineSnapshot(`
Object {
"baseId": "base",
"currentId": "1",
"groups": Array [],
"items": Array [
Object {
"groupId": undefined,
"id": "1",
"ref": Object {
"current": <div />,
},
},
],
"loop": false,
"orientation": undefined,
"rtl": false,
"shift": false,
"unstable_hasActiveWidget": false,
"unstable_idCountRef": Object {
"current": 0,
},
"unstable_includesBaseElement": false,
"unstable_moves": 0,
"unstable_virtual": false,
"wrap": false,
}
`);
});
test("unregisterItem", () => {
const result = render();
act(() => result.current.registerItem({ id: "1", ref: createRef() }));
act(() => result.current.registerItem({ id: "2", ref: createRef() }));
act(() => result.current.unregisterItem("1"));
expect(result.current).toMatchInlineSnapshot(`
Object {
"baseId": "base",
"currentId": "2",
"groups": Array [],
"items": Array [
Object {
"groupId": undefined,
"id": "2",
"ref": Object {
"current": <div />,
},
},
],
"loop": false,
"orientation": undefined,
"rtl": false,
"shift": false,
"unstable_hasActiveWidget": false,
"unstable_idCountRef": Object {
"current": 0,
},
"unstable_includesBaseElement": false,
"unstable_moves": 0,
"unstable_virtual": false,
"wrap": false,
}
`);
});