lunisolar
Version:
专业农历库,支持公历阴历互转,支持各类黄历数据查询,如八字四柱、阴历、神煞宜忌、时辰吉凶、建除十二神、胎神占方、五行纳音等。支持自定义插件。
159 lines (146 loc) • 5.83 kB
text/typescript
import { Markers } from '../../src/class/markers'
import festivals from '../../src/markers/festivals.zh'
import festivalsCN from '../../src/markers/festivals.zh-cn'
import lunisolar from '../../src'
describe('Test class Markers', () => {
Markers.add(festivals)
it('test Markers.add ', () => {
expect(Markers.store.formatList).toEqual(['MMDD', 'M,d,dR', 'M,d,dRr', 'lMn,lDn'])
// console.log(gbMarkers.formatMap.keys())
expect(Array.from(Markers.store.formatMap.keys())).toEqual([
'MMDD',
'M,d,dR',
'M,d,dRr',
'lMn,lDn'
])
const d1004 = Markers.store.formatMap.get('MMDD')?.get('1004')
const d1004a = d1004 ? d1004[0] : undefined
expect(d1004a?.tag).toEqual(['international', 'environment'])
expect(
d1004?.map(v => {
return v.name
})
).toEqual(['世界動物日'])
})
it('Test markers.list and markers.add and markers.remove', () => {
const lsr = lunisolar('2023-10-19')
const markers = new Markers(lsr)
markers.add({ name: '这天要值班', tag: '备忘' })
markers.add({ name: '今天我生日', tag: '生日' })
// for (const item of markers) { // ES6
// console.log('test markers item', item)
// }
expect(markers.list.map(v => v.name)).toEqual(['这天要值班', '今天我生日'])
markers
.remove('生日', true)
.add({ name: '重阳准备', tag: ['备忘2'], data: { desc: '樵园已经开始封路' } })
expect(markers.list.map(v => v.name)).toEqual(['这天要值班', '重阳准备'])
const marker = markers.list.find(v => v.name === '重阳准备')
expect(marker?.data?.desc || '').toBe('樵园已经开始封路')
})
it('Test Markers.remove', () => {
Markers.remove('MMDD', '0303', '全國愛耳日')
const markers = new Markers(lunisolar('2023-01-01'))
const markers0303 = new Markers(lunisolar('2023-03-03'))
expect(markers.toString()).toBe('元旦')
expect(markers0303.toString()).toBe('世界野生動植物日,國際愛耳日')
})
it('Test markers reset and clean', () => {
const lsr = lunisolar('2023-10-23')
lsr.markers.add({ name: '测试', tag: 'test' })
expect(lsr.markers.list.map(v => v.name)).toEqual(['重陽節', '测试'])
lsr.markers.reset()
expect(lsr.markers.list.map(v => v.name)).toEqual(['重陽節'])
lsr.markers.add({ name: '测试2', tag: 'test' })
expect(lsr.markers.list.map(v => v.name)).toEqual(['重陽節', '测试2'])
lsr.markers.clean(1)
expect(lsr.markers.list.map(v => v.name)).toEqual(['测试2'])
lsr.markers.clean(2)
expect(lsr.markers.list.map(v => v.name)).toEqual([])
})
it('test markers filter and find', () => {
lunisolar.Markers.clean().add(festivalsCN, '节日')
const lsr = lunisolar('2023-03-03')
lsr.markers.add({ name: '抄经', tag: 'work', data: { desc: '临写一次经飞经' } })
expect(lsr.markers.toString()).toBe('世界野生动植物日,全国爱耳日,国际爱耳日,抄经')
expect(lsr.markers.find({ name: '世界野生动植物日' })?.tag.join(',')).toBe(
'international,environment,节日'
)
expect(lsr.markers.find(v => v.name === '抄经')?.data?.desc ?? '').toBe('临写一次经飞经')
expect(
lsr.markers
.filter({ tag: 'health' })
.map(v => v.name)
.join(',')
).toBe('全国爱耳日,国际爱耳日')
})
it('测试自定义节日列表', () => {
const markersSetting: MarkersSetting = [
{
format: 'MMDD', // 将会使用lunisolar().format('MMDD')方法格式化日期
markers: {
'1019': {
// 如果format方法返回值与此key匹配,则为当前日期会取得此marker
tag: '生日',
name: '我的生日'
},
'0919': {
tag: ['生日', '吐槽'], // tag可以是数组
name: '假的生日',
data: {
// 可以通过data,设定任何信息以便取用
desc: '身份证是的生日写早了一个月, 所以公司都提早一个月给我庆生',
color: '#aa0000'
}
}
}
},
{
format: 'lMn,lDn', // 农历月日
markers: {
'4,14': {
// 农历四月十四
tag: '生日',
name: '吕洞宾诞辰',
data: {
desc: '西樵山大仙诞交通管制',
color: '#00cccc'
}
}
}
}
]
// 再编写自定义的日期备注列表
const markersSetting2: MarkersSetting = [
{
format: 'MMDD', // 将会使用lunisolar().format('MMDD')方法格式化日期
markers: {
'1003': [
{
//同一日期可以设定多个marker
tag: '任务',
name: '带家人出去吃饭'
},
{
tag: ['任务', '保险'],
name: '交汽车保险'
}
]
}
}
]
lunisolar.Markers.add(markersSetting, '自定义节日').add(markersSetting2, '自定义备忘')
const lsr1003 = lunisolar('2023-10-03').markers.list
expect(lsr1003.map(v => v.name)).toEqual(['带家人出去吃饭', '交汽车保险'])
const lsr0919 = lunisolar('2023-09-19')
expect(lsr0919.markers.toString()).toBe('假的生日')
expect(lsr0919.markers.find({ name: '假的生日' })?.data?.desc).toBe(
'身份证是的生日写早了一个月, 所以公司都提早一个月给我庆生'
)
lunisolar.Markers.removeByTag('吐槽')
expect(lunisolar('2023-09-19').markers.toString()).toBe('')
expect(lsr0919.markers.toString()).toBe('假的生日')
lsr0919.markers.reset()
expect(lsr0919.markers.toString()).toBe('')
})
})