mirror of
https://github.com/zoriya/v10.git
synced 2026-08-16 02:45:09 +00:00
45 lines
1.5 KiB
TypeScript
45 lines
1.5 KiB
TypeScript
import { afterEach, describe, expect, it, vi } from 'vitest';
|
|
|
|
import { PopoverElement } from '../popover-element';
|
|
|
|
let tagCounter = 0;
|
|
|
|
function createPopover(): PopoverElement {
|
|
const tag = `test-popover-${tagCounter++}`;
|
|
customElements.define(tag, class extends PopoverElement {});
|
|
return document.createElement(tag) as PopoverElement;
|
|
}
|
|
|
|
function makeDOMRect(x: number, y: number, width: number, height: number): DOMRect {
|
|
return new DOMRect(x, y, width, height);
|
|
}
|
|
|
|
afterEach(() => {
|
|
vi.restoreAllMocks();
|
|
document.body.innerHTML = '';
|
|
});
|
|
|
|
describe('PopoverElement', () => {
|
|
it('exposes the positioned side on the popup', async () => {
|
|
const trigger = document.createElement('button');
|
|
const popover = createPopover();
|
|
|
|
popover.id = 'popover';
|
|
popover.open = true;
|
|
popover.side = 'top';
|
|
popover.boundary = 'viewport';
|
|
trigger.setAttribute('commandfor', popover.id);
|
|
|
|
vi.spyOn(trigger, 'getBoundingClientRect').mockReturnValue(makeDOMRect(100, 10, 40, 20));
|
|
vi.spyOn(popover, 'getBoundingClientRect').mockReturnValue(makeDOMRect(0, 0, 100, 60));
|
|
vi.spyOn(document.documentElement, 'getBoundingClientRect').mockReturnValue(makeDOMRect(0, 0, 300, 200));
|
|
Object.defineProperty(popover, 'offsetWidth', { configurable: true, value: 100 });
|
|
Object.defineProperty(popover, 'offsetHeight', { configurable: true, value: 60 });
|
|
|
|
document.body.append(trigger, popover);
|
|
await popover.updateComplete;
|
|
|
|
expect(popover.getAttribute('data-side')).toBe('bottom');
|
|
});
|
|
});
|