mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-28 19:01:34 +00:00
131 lines
5.0 KiB
JavaScript
131 lines
5.0 KiB
JavaScript
// #608: rangeLine keeps partial keyboard text local until commit, then writes
|
|
// one slider-representable value. This must exercise the shipped browser bundle:
|
|
// source-level tests cannot reproduce Lit's DOM/property synchronisation.
|
|
import { launch, checkAll, finish } from './serve.mjs';
|
|
|
|
const { page, browser } = await launch({ width: 760, height: 900 });
|
|
|
|
const settle = () => page.evaluate(async () => {
|
|
const c = window.__card;
|
|
c.requestUpdate();
|
|
await c.updateComplete;
|
|
await new Promise((resolve) => requestAnimationFrame(() => requestAnimationFrame(resolve)));
|
|
});
|
|
|
|
await page.evaluate(async () => {
|
|
const c = window.__card;
|
|
c._setMode('plan');
|
|
await c.updateComplete;
|
|
c._openRoomEdit(c._curSpaceCfg.rooms[0]);
|
|
await c.updateComplete;
|
|
});
|
|
await settle();
|
|
|
|
const roomInput = page.locator('hp-dialog[data-kind="room"] #room-name-scale');
|
|
await roomInput.focus();
|
|
await roomInput.fill('');
|
|
await roomInput.pressSequentially('120');
|
|
|
|
const out = await page.evaluate(() => {
|
|
const c = window.__card;
|
|
const dialog = (c.shadowRoot || c.renderRoot).querySelector('hp-dialog[data-kind="room"]');
|
|
const input = dialog.querySelector('#room-name-scale');
|
|
const slider = input.closest('.hpf-range').querySelector('ha-slider, input[type="range"]');
|
|
const save = dialog.querySelector('.dialog-action-commit [data-hp="dialog-confirm"]');
|
|
return {
|
|
roomPartialTextStaysVisible: input.value === '120',
|
|
roomPartialDoesNotWriteDraft: c._roomNameScale === 1,
|
|
roomPartialDoesNotMoveSlider: Number(slider.value) === 100,
|
|
roomPartialDoesNotDirtyForm: save.disabled === true,
|
|
};
|
|
});
|
|
|
|
await roomInput.dispatchEvent('change');
|
|
await settle();
|
|
Object.assign(out, await page.evaluate(() => {
|
|
const c = window.__card;
|
|
const dialog = (c.shadowRoot || c.renderRoot).querySelector('hp-dialog[data-kind="room"]');
|
|
const input = dialog.querySelector('#room-name-scale');
|
|
const slider = input.closest('.hpf-range').querySelector('ha-slider, input[type="range"]');
|
|
return {
|
|
roomCommitWrites120Once: c._roomNameScale === 1.2,
|
|
roomCommitSynchronizesFieldAndSlider: input.value === '120' && Number(slider.value) === 120,
|
|
};
|
|
}));
|
|
|
|
await roomInput.focus();
|
|
await roomInput.fill('');
|
|
await roomInput.dispatchEvent('change');
|
|
await settle();
|
|
Object.assign(out, await page.evaluate(() => {
|
|
const c = window.__card;
|
|
const dialog = (c.shadowRoot || c.renderRoot).querySelector('hp-dialog[data-kind="room"]');
|
|
const input = dialog.querySelector('#room-name-scale');
|
|
const save = dialog.querySelector('.dialog-action-commit [data-hp="dialog-confirm"]');
|
|
return {
|
|
emptyCommitRestoresConfirmedValue: input.value === '120',
|
|
emptyCommitDoesNotChangeDraft: c._roomNameScale === 1.2,
|
|
emptyCommitKeepsDirtyState: save.disabled === false,
|
|
};
|
|
}));
|
|
|
|
await page.evaluate(async () => {
|
|
const c = window.__card;
|
|
c._roomDialog = false;
|
|
c._openSpaceDialog('edit', c._space);
|
|
c.requestUpdate();
|
|
await c.updateComplete;
|
|
});
|
|
await settle();
|
|
|
|
const spaceInput = page.locator('hp-dialog[data-kind="space"] #space-card-font');
|
|
await spaceInput.focus();
|
|
await spaceInput.fill('');
|
|
await spaceInput.pressSequentially('123');
|
|
Object.assign(out, await page.evaluate(() => {
|
|
const c = window.__card;
|
|
const dialog = (c.shadowRoot || c.renderRoot).querySelector('hp-dialog[data-kind="space"]');
|
|
return {
|
|
spacePartialDoesNotWriteDraft: c._spaceDialog.cardFontScale === 1,
|
|
spacePartialTextStaysVisible: dialog.querySelector('#space-card-font').value === '123',
|
|
};
|
|
}));
|
|
await spaceInput.dispatchEvent('change');
|
|
await settle();
|
|
Object.assign(out, await page.evaluate(() => {
|
|
const c = window.__card;
|
|
const dialog = (c.shadowRoot || c.renderRoot).querySelector('hp-dialog[data-kind="space"]');
|
|
const input = dialog.querySelector('#space-card-font');
|
|
const slider = input.closest('.hpf-range').querySelector('ha-slider, input[type="range"]');
|
|
return {
|
|
offStepCommitSnapsTo125: c._spaceDialog.cardFontScale === 1.25,
|
|
offStepCommitSynchronizesFieldAndSlider: input.value === '125' && Number(slider.value) === 125,
|
|
};
|
|
}));
|
|
|
|
await spaceInput.focus();
|
|
await spaceInput.fill('');
|
|
await spaceInput.pressSequentially('222');
|
|
await page.evaluate(() => {
|
|
const c = window.__card;
|
|
const dialog = (c.shadowRoot || c.renderRoot).querySelector('hp-dialog[data-kind="space"]');
|
|
const input = dialog.querySelector('#space-card-font');
|
|
const slider = input.closest('.hpf-range').querySelector('ha-slider, input[type="range"]');
|
|
slider.value = 175;
|
|
slider.dispatchEvent(new Event('input', { bubbles: true }));
|
|
});
|
|
await settle();
|
|
Object.assign(out, await page.evaluate(() => {
|
|
const c = window.__card;
|
|
const dialog = (c.shadowRoot || c.renderRoot).querySelector('hp-dialog[data-kind="space"]');
|
|
const input = dialog.querySelector('#space-card-font');
|
|
const slider = input.closest('.hpf-range').querySelector('ha-slider, input[type="range"]');
|
|
return {
|
|
sliderWinsOverPartialText: c._spaceDialog.cardFontScale === 1.75,
|
|
sliderSynchronizesField: input.value === '175' && Number(slider.value) === 175,
|
|
};
|
|
}));
|
|
|
|
checkAll(out);
|
|
await finish(browser, out);
|