const test = require('node:test'); const assert = require('node:assert/strict'); const path = require('node:path'); const { loadHandlebarsTemplates, renderTemplate } = require('../src/generator.js'); function withRepoCwd(callback) { const originalCwd = process.cwd(); const repoRoot = path.join(__dirname, '..'); try { process.chdir(repoRoot); callback(); } finally { process.chdir(originalCwd); } } function renderBookmarksWithSite(site) { loadHandlebarsTemplates(); return renderTemplate( 'bookmarks', { pageId: 'bookmarks', homePageId: 'bookmarks', title: '书签', subtitle: '测试', siteCardStyle: '', icons: { mode: 'favicon', region: 'com' }, categories: [ { name: '分类', icon: 'fas fa-folder', sites: [site], }, ], }, false ); } test('站点配置包含 faviconUrl(本地 assets 路径)时,渲染 bookmarks 不应崩溃', () => { withRepoCwd(() => { const html = renderBookmarksWithSite({ name: '内部系统', url: 'https://intranet.example/', faviconUrl: 'assets/menav.svg', icon: 'fas fa-link', external: true, }); assert.match(html, /data-favicon-url="assets\/menav\.svg"/); assert.match(html, /src="assets\/menav\.svg"/); }); }); test('站点配置包含 faviconUrl(在线 ico)时,渲染 bookmarks 不应崩溃', () => { withRepoCwd(() => { const html = renderBookmarksWithSite({ name: 'WebCull', url: 'https://example.com/', faviconUrl: 'https://content.webcull.com/images/websites/icons/470/695/b788b0.ico', icon: 'fas fa-link', external: true, }); assert.match( html, /data-favicon-url="https:\/\/content\.webcull\.com\/images\/websites\/icons\/470\/695\/b788b0\.ico"/ ); assert.match( html, /src="https:\/\/content\.webcull\.com\/images\/websites\/icons\/470\/695\/b788b0\.ico"/ ); }); });