Phase 2 of element registry migration - eliminate hardcoded coordinates: Element tracker additions: - wxTreeCtrl items (clickTreeItem, findTreeItem) - wxDataViewCtrl items and column headers - wxPropertyGrid rows - wxListBox items - wxSpinButton arrows - wxSlider thumb/track - wxTextCtrl area - wxSearchCtrl field - wxAuiManager pane content areas - wxCalendarCtrl dates Test migrations: - 24 test files updated to use element registry helpers - Replaced coordinate-based clicks with semantic selectors - Added find-hardcoded-coords.sh script for auditing Remaining coordinates are legitimate (scroll positioning, drawing, test.fail blocks). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
139 lines
4.8 KiB
TypeScript
139 lines
4.8 KiB
TypeScript
import { test, expect } from './utils/fixtures';
|
|
import { clickByLabel, clickTreeItem, findAllTreeItems } from './utils/element-tracker';
|
|
|
|
test.describe('wxTreeCtrl Tests', () => {
|
|
test.beforeEach(async ({ page }) => {
|
|
await page.goto('/standalone/tree/tree_test.html');
|
|
// Wait for app to initialize
|
|
await page.waitForFunction(() => {
|
|
return document.querySelector('canvas') !== null;
|
|
}, { timeout: 30000 });
|
|
await page.waitForTimeout(1000);
|
|
});
|
|
|
|
test('Tree test app loads successfully', async ({ page, testLogger }) => {
|
|
await page.waitForTimeout(500);
|
|
|
|
const hasStartupLog = testLogger.consoleLogs.some(log =>
|
|
log.includes('TREE_TEST') && log.includes('started successfully')
|
|
);
|
|
|
|
await page.screenshot({ path: 'test-results/tree-01-loaded.png' });
|
|
|
|
expect(testLogger.errors.filter(e => !e.includes('favicon'))).toHaveLength(0);
|
|
});
|
|
|
|
test('Tree is populated with KiCad-like hierarchy', async ({ page, testLogger }) => {
|
|
// Wait a bit longer for async console events to be captured
|
|
await page.waitForTimeout(1000);
|
|
|
|
// Check for the populated message - it should be in console logs OR
|
|
// we verify tree rendered correctly by checking for expected tree events
|
|
const hasPopulatedLog = testLogger.consoleLogs.some(log =>
|
|
log.includes('Tree populated with KiCad-like hierarchy') ||
|
|
log.includes('TREE_EVENT')
|
|
);
|
|
|
|
await page.screenshot({ path: 'test-results/tree-02-hierarchy.png' });
|
|
|
|
// If no console logs captured during init, verify tree exists by checking
|
|
// that subsequent tree operations work (expand events prove tree is populated)
|
|
if (!hasPopulatedLog) {
|
|
// Click Expand All button to verify tree is actually populated
|
|
await clickByLabel(page, 'Expand All');
|
|
await page.waitForTimeout(500);
|
|
|
|
const hasExpandEvent = testLogger.consoleLogs.some(log =>
|
|
log.includes('Expanding') || log.includes('All items expanded')
|
|
);
|
|
expect(hasExpandEvent).toBe(true);
|
|
} else {
|
|
expect(hasPopulatedLog).toBe(true);
|
|
}
|
|
});
|
|
|
|
test('Tree item can be selected', async ({ page, testLogger }) => {
|
|
await page.waitForTimeout(500);
|
|
|
|
// Click on a tree item using element registry
|
|
const clicked = await clickTreeItem(page, 'Schematic');
|
|
expect(clicked).toBe(true);
|
|
await page.waitForTimeout(300);
|
|
|
|
await page.screenshot({ path: 'test-results/tree-03-selected.png' });
|
|
|
|
const hasSelectionEvent = testLogger.consoleLogs.some(log =>
|
|
log.includes('Selection changed')
|
|
);
|
|
});
|
|
|
|
test('Expand All button works', async ({ page, testLogger }) => {
|
|
await page.waitForTimeout(500);
|
|
|
|
// Click Expand All button using element registry
|
|
await clickByLabel(page, 'Expand All');
|
|
await page.waitForTimeout(500);
|
|
|
|
await page.screenshot({ path: 'test-results/tree-04-expanded.png' });
|
|
|
|
const hasExpandEvent = testLogger.consoleLogs.some(log =>
|
|
log.includes('All items expanded')
|
|
);
|
|
expect(hasExpandEvent).toBe(true);
|
|
});
|
|
|
|
test('Collapse All button works', async ({ page, testLogger }) => {
|
|
await page.waitForTimeout(500);
|
|
|
|
// Click Collapse All button using element registry
|
|
await clickByLabel(page, 'Collapse All');
|
|
await page.waitForTimeout(500);
|
|
|
|
await page.screenshot({ path: 'test-results/tree-05-collapsed.png' });
|
|
|
|
const hasCollapseEvent = testLogger.consoleLogs.some(log =>
|
|
log.includes('All items collapsed')
|
|
);
|
|
expect(hasCollapseEvent).toBe(true);
|
|
});
|
|
|
|
test('Add Item button works with selection', async ({ page, testLogger }) => {
|
|
await page.waitForTimeout(500);
|
|
|
|
// First select an item using element registry
|
|
const clicked = await clickTreeItem(page, 'Schematic');
|
|
expect(clicked).toBe(true);
|
|
await page.waitForTimeout(300);
|
|
|
|
// Click Add Item button using element registry
|
|
await clickByLabel(page, 'Add Item');
|
|
await page.waitForTimeout(500);
|
|
|
|
await page.screenshot({ path: 'test-results/tree-06-added.png' });
|
|
|
|
const hasAddEvent = testLogger.consoleLogs.some(log =>
|
|
log.includes('Added new item') || log.includes('No item selected')
|
|
);
|
|
expect(hasAddEvent).toBe(true);
|
|
});
|
|
|
|
test('Delete Item button works with selection', async ({ page, testLogger }) => {
|
|
await page.waitForTimeout(500);
|
|
|
|
// First select an item (not root) using element registry
|
|
const clicked = await clickTreeItem(page, 'Libraries');
|
|
expect(clicked).toBe(true);
|
|
await page.waitForTimeout(300);
|
|
|
|
// Click Delete Selected button using element registry
|
|
await clickByLabel(page, 'Delete Selected');
|
|
await page.waitForTimeout(500);
|
|
|
|
await page.screenshot({ path: 'test-results/tree-07-deleted.png' });
|
|
|
|
const hasDeleteEvent = testLogger.consoleLogs.some(log =>
|
|
log.includes('Deleted item') || log.includes('Cannot delete')
|
|
);
|
|
expect(hasDeleteEvent).toBe(true);
|
|
});
|
|
});
|