fix(terminal): preserve animation-frame first fit
This commit is contained in:
@@ -12,10 +12,17 @@ export const scheduleTerminalFits = (deps: {
|
||||
deps.sendResize();
|
||||
};
|
||||
|
||||
deps.raf(refit);
|
||||
void deps.fontsReady.then(refit).catch(() => undefined);
|
||||
void deps
|
||||
.loadNerdFont()
|
||||
const initialFit = new Promise<void>((resolve) => {
|
||||
deps.raf(() => {
|
||||
refit();
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
|
||||
void Promise.all([deps.fontsReady, initialFit])
|
||||
.then(refit)
|
||||
.catch(() => undefined);
|
||||
void Promise.all([deps.loadNerdFont(), initialFit])
|
||||
.then(refit)
|
||||
.catch(() => undefined);
|
||||
};
|
||||
|
||||
@@ -7,6 +7,33 @@ const flush = async () => {
|
||||
};
|
||||
|
||||
describe('scheduleTerminalFits', () => {
|
||||
test('waits for the first animation frame before font-triggered fits', async () => {
|
||||
const fit = vi.fn();
|
||||
const sendResize = vi.fn();
|
||||
let rafCb: (() => void) | undefined;
|
||||
|
||||
scheduleTerminalFits({
|
||||
fit,
|
||||
sendResize,
|
||||
fontsReady: Promise.resolve(),
|
||||
loadNerdFont: () => Promise.resolve(),
|
||||
raf: (cb) => {
|
||||
rafCb = cb;
|
||||
},
|
||||
isAborted: () => false,
|
||||
});
|
||||
await flush();
|
||||
|
||||
expect(fit).not.toHaveBeenCalled();
|
||||
expect(sendResize).not.toHaveBeenCalled();
|
||||
|
||||
rafCb?.();
|
||||
await flush();
|
||||
|
||||
expect(fit).toHaveBeenCalledTimes(3);
|
||||
expect(sendResize).toHaveBeenCalledTimes(3);
|
||||
});
|
||||
|
||||
test('fits in rAF and again after fonts.ready and nerd-font load', async () => {
|
||||
const fit = vi.fn();
|
||||
const sendResize = vi.fn();
|
||||
|
||||
Reference in New Issue
Block a user