import React from 'react';
import ReactDOM from 'react-dom';
import 'jest-dom/extend-expect';
import {
resetBodyAndGetAppDiv,
runNumberOfFramesForward
} from './helpers/testHelpers';
import getSpringyDOMElement from './getSpringyDOMElement';
import SpringyDOMElement from './SpringyDOMElement';
describe('basics', () => {
it('can render a div', async () => {
const div = resetBodyAndGetAppDiv();
const SpringyDiv = getSpringyDOMElement('div');
ReactDOM.render(
Hello World
,
div
);
expect(div).toHaveTextContent('Hello World');
});
it('value changes over time', async () => {
const div = resetBodyAndGetAppDiv();
const SpringyDiv = getSpringyDOMElement('div');
ReactDOM.render(
,
div
);
const testDiv = div.querySelector('div');
await runNumberOfFramesForward(1);
expect(testDiv.style.left).toBe('10px');
ReactDOM.render(
,
div
);
await runNumberOfFramesForward(2);
expect(testDiv.style.left).not.toBe('10px');
await runNumberOfFramesForward(100);
expect(testDiv.style.left).toBe('20px');
});
it('multiple values are updated', async () => {
const div = resetBodyAndGetAppDiv();
const SpringyDiv = getSpringyDOMElement('div');
ReactDOM.render(
,
div
);
const testDiv = div.querySelector('div');
await runNumberOfFramesForward(1);
expect(testDiv.style.left).toBe('10px');
expect(testDiv.style.top).toBe('10px');
ReactDOM.render(
,
div
);
await runNumberOfFramesForward(2);
expect(testDiv.style.left).not.toBe('10px');
expect(testDiv.style.top).not.toBe('10px');
await runNumberOfFramesForward(100);
expect(testDiv.style.left).toBe('20px');
expect(testDiv.style.top).toBe('20px');
});
it('can have springy styles and regular styles and other props', async () => {
const div = resetBodyAndGetAppDiv();
const SpringyDiv = getSpringyDOMElement('div');
ReactDOM.render(
,
div
);
const testDiv = div.querySelector('div');
await runNumberOfFramesForward(1);
expect(testDiv.style.left).toBe('10px');
expect(testDiv.style.width).toBe('10px');
expect(testDiv.tabIndex).toBe(1);
});
it('ref is properly forwarded', async () => {
const div = resetBodyAndGetAppDiv();
const SpringyDiv = getSpringyDOMElement('div');
let refDiv;
ReactDOM.render(
refDiv = ref}
/>,
div
);
const testDiv = div.querySelector('div');
expect(testDiv).toBe(refDiv);
});
it('instanceRef is a SpringyDOMElement instance', async () => {
const div = resetBodyAndGetAppDiv();
const SpringyDiv = getSpringyDOMElement('div');
let instanceRef;
ReactDOM.render(
instanceRef = ref}
/>,
div
);
expect(instanceRef).toBeInstanceOf(SpringyDOMElement);
});
it('calls property update listener', async () => {
const div = resetBodyAndGetAppDiv();
const SpringyDiv = getSpringyDOMElement('div');
const spy = jest.fn();
ReactDOM.render(
,
div
);
await runNumberOfFramesForward(1);
ReactDOM.render(
,
div
);
await runNumberOfFramesForward(1);
expect(spy).toHaveBeenCalled();
expect(spy.mock.calls[0][0]).toBe('left');
});
it('calls onRest listener', async () => {
const div = resetBodyAndGetAppDiv();
const SpringyDiv = getSpringyDOMElement('div');
const spy = jest.fn();
ReactDOM.render(
,
div
);
await runNumberOfFramesForward(1);
ReactDOM.render(
,
div
);
await runNumberOfFramesForward(100);
expect(spy).toHaveBeenCalled();
expect(spy.mock.calls[0][0]).toBe('left');
expect(spy.mock.calls[0][1]).toBe(20);
});
});