/* * Description: Static and helper regression tests for MXPIC EDA frontend/backend integration contracts. * Inside functions: N/A - assertion-based test/module script. * Developer : Qin Yue @ 2026 * Organization : OptiHK Limited */ const assert = require('assert'); const fs = require('fs'); const path = require('path'); const root = path.resolve(__dirname, '..'); const canvasHtml = fs.readFileSync(path.join(root, 'frontend', 'canvas.html'), 'utf8'); assert( canvasHtml.includes('loadedProjectPage'), 'project loading should reuse the saved project canvas instead of creating a duplicate empty project tab' ); assert( canvasHtml.includes('nonProjectPages'), 'project composite map should exclude the saved project page itself' ); assert( canvasHtml.includes('layoutToCanvasY'), 'loading saved layout YAML should convert GDS/layout Y coordinates back to canvas coordinates' ); assert( canvasHtml.includes('buildElementNodesFromYaml'), 'project loading should rebuild saved anchor/port element nodes from YAML elements' ); assert( canvasHtml.includes('Object.entries(doc.elements || {})'), 'project loading should read doc.elements, not only doc.instances' ); assert( canvasHtml.includes('nodeNameMap[elementName] = nodeId'), 'loaded element names should be registered so saved links can reconnect to anchors and ports' ); assert( canvasHtml.includes('getAvailableComponentsForLoadedComponent'), 'project loading should reconstruct PDK component selection options for saved instances' ); assert( canvasHtml.includes('availableComponents: instIsForge ? [FORGE_COMPONENT_LABEL] : loadedAvailableComponents'), 'loaded PDK instances should keep availableComponents so the right panel can show the PDK selector' ); assert( canvasHtml.includes('Array.from(new Set([FORGE_COMPONENT_LABEL, ...sameCategoryComponents'), 'loaded PDK selector choices should include forge and same-category library components' );