| let originalFn: () => DOMRect; |
| |
| const textToWidth = { |
| paris: 200, |
| tokyo: 300, |
| beijing: 400, |
| }; |
| |
| export const SAMPLE_TEXT = Object.keys(textToWidth); |
| |
| export function addDummyFill() { |
| // @ts-ignore - fix jsdom |
| originalFn = SVGElement.prototype.getBBox; |
| |
| // @ts-ignore - fix jsdom |
| SVGElement.prototype.getBBox = function getBBox() { |
| let width = textToWidth[this.textContent as keyof typeof textToWidth] || 200; |
| let height = 20; |
| |
| if (this.getAttribute('class') === 'test-class') { |
| width /= 2; |
| } |
| |
| if (this.style.fontFamily === 'Lobster') { |
| width *= 1.25; |
| } |
| |
| if (this.style.fontSize) { |
| const size = Number(this.style.fontSize.replace('px', '')); |
| const ratio = size / 20; |
| width *= ratio; |
| height *= ratio; |
| } |
| |
| if (this.style.fontStyle === 'italic') { |
| width *= 1.5; |
| } |
| |
| if (this.style.fontWeight === '700') { |
| width *= 2; |
| } |
| |
| if (this.style.letterSpacing) { |
| width *= 1.1; |
| } |
| |
| return { |
| x: 0, |
| y: 0, |
| width, |
| height, |
| top: 0, |
| left: 0, |
| right: 0, |
| bottom: 0, |
| }; |
| }; |
| } |
| |
| export function removeDummyFill() { |
| // @ts-ignore - fix jsdom |
| SVGElement.prototype.getBBox = originalFn; |
| } |