blob: 93edff55395579c43bd0585cc0c7d28e53c4d306 [file] [log] [blame]
import LazyFactory from '@superset-ui/core/src/dimension/svg/LazyFactory';
describe('LazyFactory', () => {
describe('createInContainer()', () => {
it('creates node in the specified container', () => {
const factory = new LazyFactory(() => document.createElement('div'));
const div = factory.createInContainer();
const innerDiv = factory.createInContainer(div);
expect(div.parentNode).toEqual(document.body);
expect(innerDiv.parentNode).toEqual(div);
});
it('reuses existing', () => {
const factoryFn = jest.fn(() => document.createElement('div'));
const factory = new LazyFactory(factoryFn);
const div1 = factory.createInContainer();
const div2 = factory.createInContainer();
expect(div1).toBe(div2);
expect(factoryFn).toHaveBeenCalledTimes(1);
});
});
describe('removeFromContainer', () => {
it('removes node from container', () => {
const factory = new LazyFactory(() => document.createElement('div'));
const div = factory.createInContainer();
const innerDiv = factory.createInContainer(div);
expect(div.parentNode).toEqual(document.body);
expect(innerDiv.parentNode).toEqual(div);
factory.removeFromContainer();
factory.removeFromContainer(div);
expect(div.parentNode).toBeNull();
expect(innerDiv.parentNode).toBeNull();
});
it('does not remove if others are using', () => {
const factory = new LazyFactory(() => document.createElement('div'));
const div1 = factory.createInContainer();
factory.createInContainer();
factory.removeFromContainer();
expect(div1.parentNode).toEqual(document.body);
factory.removeFromContainer();
expect(div1.parentNode).toBeNull();
});
it('does not crash if try to remove already removed node', () => {
const factory = new LazyFactory(() => document.createElement('div'));
factory.createInContainer();
factory.removeFromContainer();
expect(() => factory.removeFromContainer()).not.toThrow();
});
});
});