You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
chore(widget): tests de la retención tras reordenar (#240) #241
Seguimiento de #240 (arreglo de #222). El comportamiento es correcto y está integrado; esta issue solo mejora sus tests. No es un bug.
Problema
Funciones sin lógica propia.holdAfterReorderDrop, releaseOnStripLeave y canPointerOpen (src/lib/anchor-panel.ts) envuelven un booleano (x => x, _ => false, h => !h), así que sus tests no pueden fallar. Los que comprueban la aridad (canPointerOpen.length, hoverPanel.length, clickPanel.length) y «never changes the panel state» (src/lib/anchor-panel.test.ts) no fijan ningún comportamiento.
La lógica con bordes reales no tiene test. La comprobación de «dentro de la ventana» al soltar un reordenado está en línea en src/Widget.tsx:1219:
Un error de < frente a <= dejaría la retención activa sin que nada la libere, y el hover no volvería a abrir el panel hasta salir de la tira.
Propuesta
Dejar la retención como un useRef<boolean> en Widget.tsx y quitar las tres funciones envoltorio y sus tests.
Extraer pointerInsideViewport(x, y, width, height) como función pura y cubrir los bordes en ambos ejes: 0, -1, width - 1 y width (y lo mismo con height).
Mantener el test de ProviderGauge sobre el enrutado de mouseenter a onPointerEnter, que sí aporta.
@DonatoSilva, como conoces este código desde #240, te ofrezco esta issue. Es un ajuste de tests sin cambio de comportamiento. Si te interesa, avísame aquí y te la asigno.
pointerInsideViewport(x, y, width, height) pasa a src/lib/pointer-viewport.ts como función pura, con los bordes cubiertos en ambos ejes (0, -1, width - 1 y width).
La retención queda como useRef<boolean> en Widget.tsx: se borran holdAfterReorderDrop, releaseOnStripLeave y canPointerOpen, que solo envolvían un booleano, y sus tests, que no podían fallar.
El pointerup usa ahora la función extraída, con window.innerWidth/innerHeight leídos al soltar, igual que antes.
Sin cambio de comportamiento: las mismas condiciones de retención y liberación que #240, y la guarda sigue solo en la vía del puntero (onPointerEnter), así que el foco y el clic no la consultan. No se tocan la regla de #222, REORDER_GUARD_MS ni el test de ProviderGauge sobre el enrutado de mouseenter.
Checks: npm test (vitest 69 archivos / 910 tests; node --test 298; 0 fallos), npm run typecheck, npm run build y node scripts/i18n-inventory.mjs --check, todo en verde. cargo test no aplica porque no hay cambios en src-tauri/.
Tres commits: el refactor con sus tests y el ODD, el inventario i18n regenerado (solo cambia la línea de hashes del árbol de src/) y la anotación de la entrega en la tarea.
Activity
egdev6 commentedon Nov 5, 2026
@DonatoSilva, como conoces este código desde #240, te ofrezco esta issue. Es un ajuste de tests sin cambio de comportamiento. Si te interesa, avísame aquí y te la asigno.
DonatoSilva commentedon Nov 5, 2026
Claro si, feliz de seguir colaborando en este proyecto
docs(odd): registrar la entrega de egdev6#241
DonatoSilva commentedon Nov 6, 2026
PR lista para revisión: #242
Qué cambia:
pointerInsideViewport(x, y, width, height)pasa asrc/lib/pointer-viewport.tscomo función pura, con los bordes cubiertos en ambos ejes (0,-1,width - 1ywidth).useRef<boolean>enWidget.tsx: se borranholdAfterReorderDrop,releaseOnStripLeaveycanPointerOpen, que solo envolvían un booleano, y sus tests, que no podían fallar.pointerupusa ahora la función extraída, conwindow.innerWidth/innerHeightleídos al soltar, igual que antes.Sin cambio de comportamiento: las mismas condiciones de retención y liberación que #240, y la guarda sigue solo en la vía del puntero (
onPointerEnter), así que el foco y el clic no la consultan. No se tocan la regla de #222,REORDER_GUARD_MSni el test deProviderGaugesobre el enrutado demouseenter.Checks:
npm test(vitest 69 archivos / 910 tests;node --test298; 0 fallos),npm run typecheck,npm run buildynode scripts/i18n-inventory.mjs --check, todo en verde.cargo testno aplica porque no hay cambios ensrc-tauri/.Tres commits: el refactor con sus tests y el ODD, el inventario i18n regenerado (solo cambia la línea de hashes del árbol de
src/) y la anotación de la entrega en la tarea.chore(widget): tests de la retención tras reordenar (egdev6#241)
chore(i18n): regenerar el inventario tras egdev6#241
docs(odd): registrar la entrega de egdev6#241 y el review del mantenedor
chore(widget): tests de la retención tras reordenar (#241) (#242)