Fix project reopen persistence
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
* Description: Static regression tests for resilient project save/reopen behavior.
|
||||
* 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 backend = path.join(root, 'backend');
|
||||
const layoutFilesPath = path.join(backend, 'layout_files.py');
|
||||
const layoutFilesPy = fs.readFileSync(layoutFilesPath, 'utf8');
|
||||
const serverPy = fs.readFileSync(path.join(backend, 'server.py'), 'utf8');
|
||||
const gdsBuilderPy = fs.readFileSync(path.join(backend, 'gds_builder.py'), 'utf8');
|
||||
const routedPreviewPy = fs.readFileSync(path.join(backend, 'routed_layout_preview.py'), 'utf8');
|
||||
const canvasHtml = fs.readFileSync(path.join(root, 'frontend', 'canvas.html'), 'utf8');
|
||||
|
||||
assert(
|
||||
fs.existsSync(layoutFilesPath),
|
||||
'backend/layout_files.py should centralize saved layout YAML filtering and parsing'
|
||||
);
|
||||
assert(
|
||||
layoutFilesPy.includes('ROUTE_SIDECAR_SUFFIXES') &&
|
||||
layoutFilesPy.includes('def is_layout_cell_filename') &&
|
||||
layoutFilesPy.includes('def parse_layout_cell_content') &&
|
||||
layoutFilesPy.includes('def load_layout_cell_files'),
|
||||
'layout file helpers should exclude route sidecars and validate saved layout cells'
|
||||
);
|
||||
assert(
|
||||
serverPy.includes('is_layout_cell_filename') &&
|
||||
serverPy.includes('load_layout_cell_files(root)') &&
|
||||
serverPy.includes('parse_layout_cell_content(content') &&
|
||||
serverPy.includes('except LayoutFileError as e'),
|
||||
'project list/load/save endpoints should filter invalid YAML and reject malformed saves'
|
||||
);
|
||||
assert(
|
||||
gdsBuilderPy.includes('TemporaryDirectory(prefix="mxpic_gds_project_"') &&
|
||||
gdsBuilderPy.includes('write_layout_cells_to_directory(cells, staged_project_dir)'),
|
||||
'Build GDS should call mxpic_router with a clean staged project directory'
|
||||
);
|
||||
assert(
|
||||
routedPreviewPy.includes('staged_project_dir') &&
|
||||
routedPreviewPy.includes('write_layout_cells_to_directory(staged_cells, staged_project_dir)') &&
|
||||
routedPreviewPy.includes('project_dir=staged_project_dir'),
|
||||
'Build Layout preview should stage valid cells before calling mxpic_router'
|
||||
);
|
||||
assert(
|
||||
canvasHtml.includes('(data.warnings || []).forEach(warning => addLog(warning))') &&
|
||||
canvasHtml.includes('const parsedCellPages = [];') &&
|
||||
canvasHtml.includes('Skipped saved cell'),
|
||||
'canvas project loading should report skipped files and keep loading remaining valid cells'
|
||||
);
|
||||
Reference in New Issue
Block a user