68 lines
2.0 KiB
JavaScript
Executable File
68 lines
2.0 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 fontRootCandidates = [
|
||
path.join(__dirname, '..', 'fonts'),
|
||
path.join(__dirname, '..', 'frontend', 'public', 'fonts'),
|
||
]
|
||
const fontRoot = fontRootCandidates.find((dir) => fs.existsSync(dir))
|
||
assert(fontRoot, '未找到字体目录(fonts 或 frontend/public/fonts)')
|
||
|
||
const fontFile = findFirstFontFile(fontRoot)
|
||
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()
|