Skip to content

Commit

Permalink
Add useActiveNode test
Browse files Browse the repository at this point in the history
  • Loading branch information
jamesplease committed Jun 17, 2021
1 parent 2cfbd5b commit a1c4bd7
Show file tree
Hide file tree
Showing 3 changed files with 107 additions and 1 deletion.
84 changes: 84 additions & 0 deletions src/hooks/use-active-node.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
import React, { useState } from 'react';
import '@testing-library/jest-dom';
import {
render,
fireEvent,
createEvent,
screen,
act,
} from '@testing-library/react';
import {
FocusRoot,
FocusNode,
useFocusStoreDangerously,
useActiveNode,
} from '../index';

describe('useActiveNode', () => {
it('returns the expected node', (done) => {
let focusStore;
let activeNode;

function TestComponent() {
focusStore = useFocusStoreDangerously();
activeNode = useActiveNode();

return (
<>
<FocusNode focusId="nodeA" data-testid="nodeA" />
<FocusNode focusId="nodeB" data-testid="nodeB" />
</>
);
}

render(
<FocusRoot pointerEvents>
<TestComponent />
</FocusRoot>
);

let focusState = focusStore.getState();
expect(focusState.focusedNodeId).toEqual('nodeA');
expect(focusState.focusHierarchy).toEqual(['root', 'nodeA']);
expect(activeNode).toEqual(null);

fireEvent.keyDown(window, {
code: 'ArrowRight',
key: 'ArrowRight',
});

focusState = focusStore.getState();
expect(focusState.focusedNodeId).toEqual('nodeB');
expect(focusState.focusHierarchy).toEqual(['root', 'nodeB']);

fireEvent.mouseMove(window);

requestAnimationFrame(() => {
const nodeA = screen.getByTestId('nodeA');
const nodeB = screen.getByTestId('nodeB');

fireEvent.mouseOver(nodeB);

const clickEventB = createEvent.click(nodeB, { button: 0 });
fireEvent(nodeB, clickEventB);

focusState = focusStore.getState();
expect(activeNode).toBe(focusState.nodes.nodeB);

fireEvent.mouseOver(nodeA);

focusState = focusStore.getState();
expect(focusState.focusedNodeId).toEqual('nodeA');
expect(focusState.focusHierarchy).toEqual(['root', 'nodeA']);
expect(activeNode).toBe(focusState.nodes.nodeB);

const clickEventA = createEvent.click(nodeA, { button: 0 });
fireEvent(nodeA, clickEventA);

focusState = focusStore.getState();
expect(activeNode).toBe(focusState.nodes.nodeA);

done();
});
});
});
1 change: 0 additions & 1 deletion src/hooks/use-focus-events.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -299,7 +299,6 @@ describe('useFocusEvents', () => {
expect(nodeBOnActive.mock.calls.length).toBe(1);
expect(nodeBOnInactive.mock.calls.length).toBe(0);

// Okay
fireEvent.mouseOver(nodeA);

focusState = focusStore.getState();
Expand Down
23 changes: 23 additions & 0 deletions src/hooks/use-focus-node.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,4 +56,27 @@ describe('useFocusNode', () => {

expect(focusNode).toBe(focusStore.getState().nodes.nodeA);
});

it('returns null if the node does not exist', () => {
let focusNode;

function TestComponent() {
focusNode = useFocusNode('nodeABC');

return (
<>
<FocusNode focusId="nodeA" data-testid="nodeA" />
<FocusNode focusId="nodeB" data-testid="nodeB" />
</>
);
}

render(
<FocusRoot>
<TestComponent />
</FocusRoot>
);

expect(focusNode).toEqual(null);
});
});

0 comments on commit a1c4bd7

Please sign in to comment.