Files
ucvl-home-vision/test_calendar.js
T

18 lines
1.1 KiB
JavaScript

'use strict';
const test=require('node:test'),assert=require('node:assert/strict'),cal=require('./web/calendar.js');
test('Spring Festival and leap month are bidirectional',()=>{
assert.deepEqual(cal.lunar('2024-02-10'),{year:2024,month:1,day:1,leap:false});
assert.equal(cal.solar('2024-01-01'),'2024-02-10');
assert.deepEqual(cal.lunar('2023-03-22'),{year:2023,month:2,day:1,leap:true});
assert.equal(cal.solar('2023-02-01',true),'2023-03-22');
assert.equal(cal.solar('2023-02-01',false),'2023-02-20');
});
test('all days across a leap year round trip',()=>{
for(let n=0;n<366;n++){const s=new Date(Date.UTC(2024,0,1+n,12)).toISOString().slice(0,10),l=cal.lunar(s);assert.equal(cal.solar(cal.iso(l),l.leap),s);}
});
test('invalid dates, nonexistent leap months and range are explicit',()=>{
for(const s of ['2026-02-30','2026-13-01','bad'])assert.throws(()=>cal.solarDate(s));
assert.throws(()=>cal.solar('2024-02-01',true));assert.throws(()=>cal.solar('2024-12-31'));assert.throws(()=>cal.lunar('1800-01-01'));
assert.equal(cal.describe('1800-01-01'),'1800-01-01(公历)');
});