#!/usr/bin/env node const fs = require('fs') const path = require('path') const { wrapTextByChars } = require('../miniprogram/utils/core/text-layout') const { generateSvgFromFont } = require('../miniprogram/utils/core/svg-builder') const opentype = require('../frontend/node_modules/opentype.js/dist/opentype.js') function findFirstFontFile(rootDir) { const entries = fs.readdirSync(rootDir, { withFileTypes: true }) for (const entry of entries) { const fullPath = path.join(rootDir, entry.name) if (entry.isDirectory()) { const nested = findFirstFontFile(fullPath) if (nested) return nested continue } if (/\.(ttf|otf)$/i.test(entry.name)) { return fullPath } } return null } function assert(condition, message) { if (!condition) { throw new Error(message) } } function run() { console.log('开始执行小程序核心模块测试...') const wrapped = wrapTextByChars('123456', 2) assert(wrapped === '12\n34\n56', 'wrapTextByChars 结果不符合预期') const fontFile = findFirstFontFile(path.join(__dirname, '..', 'frontend', 'public', 'fonts')) assert(fontFile, '未找到可用字体文件') const buffer = fs.readFileSync(fontFile) const font = opentype.parse(buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength)) const result = generateSvgFromFont({ text: '星程字体转换', font, fontSize: 120, fillColor: '#000000', letterSpacing: 0, }) assert(typeof result.svg === 'string' && result.svg.includes(' 0 && result.height > 0, 'SVG 尺寸计算无效') console.log('小程序核心模块测试通过。') } run()