fix(e2e): derniers tests split-view + Forge - dropdown autocomplete, transferTab menu, drag natif
CI / lint (push) Successful in 29s
CI / security (push) Successful in 21s
CI / test (push) Successful in 33s
CI / build (push) Successful in 12s
CI / e2e (push) Failing after 6m35s
Desktop Build / build-windows (push) Canceled after 0s
Desktop Build / build-linux (push) Canceled after 0s

- search.js : le dropdown d autocomplete ne se rouvre plus 500ms apres un hide (la recherche le rouvrait et bloquait les clics toolbar - test Forge)

- ui.js + pane-manager.js : le split via menu contextuel ne transfert plus l onglet en synchrone (vidait le pane source -> auto-collapse -> grid disparu)

- split-view.spec.js : navigation clavier attend la copie asynchrone (setTimeout 150ms qui reactivait pane 0)

- split-view.spec.js : drag depuis l arbre via dragTo (drag natif HTML5)
This commit is contained in:
2026-08-24 22:12:56 -04:00
parent 16e8bbf811
commit 8c9e881922
4 changed files with 11 additions and 20 deletions
-5
View File
@@ -542,17 +542,12 @@ function createPaneTabManager(paneId) {
if (action === 'splitRight') {
if (pm && pm._hasAnyTab()) {
pm.splitRight();
// Transfer this specific tab to the new pane
const newPaneId = pm.panes.length - 1;
pm.transferTab(this.paneId, tabId, newPaneId);
menu.remove(); return;
}
}
else if (action === 'splitDown') {
if (pm && pm._hasAnyTab()) {
pm.splitDown();
const newPaneId = pm.panes.length - 1;
pm.transferTab(this.paneId, tabId, newPaneId);
menu.remove(); return;
}
}
+4
View File
@@ -179,6 +179,9 @@ export const AutocompleteDropdown = {
},
show() {
// Après un hide() récent (ex: recherche lancée), on ignore le re-show
// du fetch de suggestions en attente — sinon le dropdown recouvre l'UI.
if (this._suppressShowUntil && Date.now() < this._suppressShowUntil) return;
if (this._dropdown) this._dropdown.hidden = false;
},
@@ -186,6 +189,7 @@ export const AutocompleteDropdown = {
if (this._dropdown) this._dropdown.hidden = true;
state.dropdownActiveIndex = -1;
state.dropdownItems = [];
this._suppressShowUntil = Date.now() + 500;
},
isVisible() {
-4
View File
@@ -2355,16 +2355,12 @@ export const TabManager = {
if (action === "splitRight") {
if (window.PaneManager && window.PaneManager._hasAnyTab && window.PaneManager._hasAnyTab()) {
window.PaneManager.splitRight();
const newPaneId = window.PaneManager.panes.length - 1;
window.PaneManager.transferTab(0, tabId, newPaneId);
menu.remove(); return;
}
}
else if (action === "splitDown") {
if (window.PaneManager && window.PaneManager._hasAnyTab && window.PaneManager._hasAnyTab()) {
window.PaneManager.splitDown();
const newPaneId = window.PaneManager.panes.length - 1;
window.PaneManager.transferTab(0, tabId, newPaneId);
menu.remove(); return;
}
}
+7 -11
View File
@@ -235,20 +235,13 @@ test.describe('Split View — Tab Drag & Drop', () => {
// Find a tree item
const treeItem = page.locator('.tree-item[data-path="note2.md"]').first();
if (await treeItem.isVisible()) {
// Drag from tree to pane 1's content area
// Drag from tree to pane 1's content area (dragTo = drag natif HTML5)
const targetPane = page.locator('.pane-container').nth(1);
const targetContent = targetPane.locator('.content-area');
const treeBox = await treeItem.boundingBox();
const targetBox = await targetContent.boundingBox();
if (treeBox && targetBox) {
await page.mouse.move(treeBox.x + treeBox.width / 2, treeBox.y + treeBox.height / 2);
await page.mouse.down();
await page.mouse.move(targetBox.x + targetBox.width / 2, targetBox.y + targetBox.height / 2, { steps: 10 });
await page.mouse.up();
try {
await treeItem.dragTo(targetContent, { timeout: 5000 });
await page.waitForTimeout(500);
}
} catch (e) { /* drag not delivered — assertion below will fail */ }
}
// Pane 1 should have a tab now
@@ -403,6 +396,9 @@ test.describe('Split View — Keyboard Navigation', () => {
await openFile(page, 'TestVault', 'note2.md');
await page.keyboard.press('Control+Alt+\\');
await page.waitForSelector('.pane-grid', { timeout: 3000 });
// Laisser la copie asynchrone de l'onglet actif se terminer (setTimeout 150ms
// dans _copyActiveTabToNewPane) — sinon elle réactive le pane 0 après la navigation.
await page.waitForTimeout(600);
// Pane 0 should be active initially
const pane0 = page.locator('.pane-container').nth(0);