61 lines
1.7 KiB
JavaScript
Executable File
61 lines
1.7 KiB
JavaScript
Executable File
#!/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('<svg'), 'SVG 内容无效')
|
|
assert(result.svg.includes('<path'), 'SVG 未生成路径')
|
|
assert(result.width > 0 && result.height > 0, 'SVG 尺寸计算无效')
|
|
|
|
console.log('小程序核心模块测试通过。')
|
|
}
|
|
|
|
run()
|