@dan-uni/dan-any
Version:
A danmaku transformer lib, supporting danmaku from different platforms.
130 lines (125 loc) • 4.5 kB
text/typescript
//基于以下注释,根据vitest生成测试用例
import { createCanvas } from 'canvas'
import { describe, expect, it } from 'vitest'
import { UniPool } from './index'
const xml = `<i>
<chatserver>chat.bilibili.com</chatserver>
<chatid>1156756312</chatid>
<mission>0</mission>
<maxlimit>2947</maxlimit>
<state>0</state>
<real_name>0</real_name>
<source>k-v</source>
<d p="13.213,1,25,16777215,1686314041,3,ff41173d,1335658005672492032">喜欢</d>
<d p="13.213,1,25,16777215,1686590010,0,296b35b5,1337972999512832512">来了 哈哈~~</d>
<d p="13.246,1,25,16777215,1686276875,0,5664cfc4,1335346233459549696">就是</d>
<d p="13.266,1,25,16777215,1686283375,0,c7e6646f,1335400761013670912">什么鬼?</d>
<d p="13.284,1,25,16777215,1686291338,0,38662881,1335467554877267456">哇哦</d>
<d p="13.306,1,25,16777215,1686268410,0,4c01de10,1335275224983600896">试试</d>
<d p="13.331,1,25,16777215,1686948453,3,56a3c5d5,1340979831550069760">不喜欢</d>
<d p="13.374,1,25,16777215,1686300770,3,647fe355,1335546672880933888">不喜欢</d>
<d p="13.376,1,25,16777215,1686297921,0,469d94b8,1335522778300134400">哦豁</d>
<d p="13.419,1,25,8700107,1686268005,0,be402447,1335271828100244224">太酷啦</d>
<d p="13.419,1,25,16777215,1686316828,3,7ffb6619,1335681385016736768">喜欢</d>
<d p="13.459,1,25,16777215,1686299729,0,45834405,1335537942797634048">一般,不好看</d>
<d p="13.462,1,25,16777215,1686302133,0,3cab672c,1335558106620590080">哈哈哈</d>
<d p="13.481,1,25,16777215,1686297342,0,ce67fafd,1335517923728804864">?</d>
<d p="13.499,1,25,16777215,1686301548,3,2848bf1c,1335553202649003264">不喜欢</d>
</i>`
describe('转化自', () => {
it('bili(xml)[双向]', () => {
const pool = UniPool.fromBiliXML(xml)
console.info(xml)
console.info(pool)
console.info(pool.toBiliXML())
console.info(pool.toBiliXML({ avoidSenderIDWithAt: true }))
const imp = UniPool.import(xml)
expect(imp.fmt).toBe('bili.xml')
expect(imp.pool).toEqual(pool)
})
it('artplayer(json)', () => {
const json = {
danmuku: [
{
text: 'artplayer测试弹幕', // 弹幕文本
time: 10, // 弹幕时间, 默认为当前播放器时间
mode: 0, // 弹幕模式: 0: 滚动(默认),1: 顶部,2: 底部
color: '#FFFFFF', // 弹幕颜色,默认为白色
border: false, // 弹幕是否有描边, 默认为 false
style: { border: '10rem' }, // 弹幕自定义样式, 默认为空对象
},
],
},
pool = UniPool.fromArtplayer(json, 'playerid-test', 'acfun')
console.info(json)
console.info(pool)
const imp = UniPool.import(json)
expect(imp.fmt).toBe('artplayer.json')
// expect(imp.pool).toEqual(pool)
})
it('ass[双向]', () => {
const canvas = createCanvas(50, 50)
const pool = UniPool.fromBiliXML(xml)
const ass = pool.toASS(canvas.getContext('2d'))
console.info(ass)
console.info(UniPool.fromASS(ass))
const imp = UniPool.import(ass)
expect(imp.fmt).toBe('common.ass')
expect(imp.pool).toEqual(pool)
})
it('pb[双向]', () => {
const pool = UniPool.fromBiliXML(xml)
const pb = pool.toPb()
console.info(UniPool.fromPb(pb))
const imp = UniPool.import(pb)
expect(imp.fmt).toBe('danuni.pb.bin')
expect(imp.pool).toEqual(pool)
})
it('DDplay[双向]', () => {
const pool = UniPool.fromBiliXML(xml)
const ddplay = pool.toDDplay()
console.info(UniPool.fromDDPlay(ddplay, '1'))
const imp = UniPool.import(ddplay)
expect(imp.fmt).toBe('ddplay.json')
// expect(imp.pool).toEqual(pool)
})
})
describe('共通值', () => {
const pool = UniPool.fromBiliXML(xml)
it('获取shared', () => {
console.info(pool.shared)
})
it('按pool分组', () => {
console.info(pool.split('pool'))
})
})
describe('其它', () => {
const pool = UniPool.fromBiliXML(xml)
it('最小化', () => {
console.info(pool.minify())
})
it('合并范围内重复', () => {
console.info(pool.merge(10).minify())
})
it('禁止DMID生成', () => {
console.info(
UniPool.fromBiliXML(xml, {
dmid: false,
}),
)
})
it('自定义DMID生成长度', () => {
console.info(
UniPool.fromBiliXML(xml, {
dmid: 64,
}),
)
})
it('自定义DMID生成器', () => {
console.info(
UniPool.fromBiliXML(xml, {
dmid: (dan) => dan.ctime.toString() + Math.random(),
}),
)
})
})