react-native-lunar-calendars
Version:
React Native Calendar Components with Lunar Calendar Support - Fork of react-native-calendars with Vietnamese lunar calendar functionality
138 lines (137 loc) • 6.52 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var index_1 = __importDefault(require("../index"));
describe('Lunar Calendar Calculations', function () {
var dayComponent;
beforeEach(function () {
dayComponent = new index_1.default({});
});
describe('jdn (Julian Day Number)', function () {
it('should calculate correct Julian Day Number for known dates', function () {
// Test some known dates
expect(dayComponent.jdn(1, 1, 2000)).toBe(2451545);
expect(dayComponent.jdn(15, 6, 2024)).toBe(2460488);
expect(dayComponent.jdn(31, 12, 2024)).toBe(2460687);
});
it('should handle leap years correctly', function () {
// 2024 is a leap year
expect(dayComponent.jdn(29, 2, 2024)).toBe(2460371);
// 2023 is not a leap year
expect(dayComponent.jdn(28, 2, 2023)).toBe(2460006);
});
});
describe('getLunarDate', function () {
it('should return correct lunar date for known solar dates', function () {
// Test Tet 2024 (Lunar New Year)
var tet2024 = dayComponent.getLunarDate(10, 2, 2024);
expect(tet2024.day).toBe(1);
expect(tet2024.month).toBe(1);
expect(tet2024.year).toBe(2024);
expect(tet2024.leap).toBe(0);
});
it('should handle leap lunar months', function () {
// Test a known leap lunar month
var leapMonthDate = dayComponent.getLunarDate(15, 6, 2024);
// This should be in a leap month if applicable
expect(leapMonthDate.day).toBeGreaterThan(0);
expect(leapMonthDate.month).toBeGreaterThan(0);
});
it('should return valid lunar date for edge cases', function () {
// Test first supported year
var firstYear = dayComponent.getLunarDate(1, 1, 1800);
expect(firstYear.day).toBeGreaterThan(0);
expect(firstYear.month).toBeGreaterThan(0);
expect(firstYear.year).toBe(1800);
// Test last supported year
var lastYear = dayComponent.getLunarDate(31, 12, 2199);
expect(lastYear.day).toBeGreaterThan(0);
expect(lastYear.month).toBeGreaterThan(0);
expect(lastYear.year).toBe(2199);
});
it('should handle unsupported years gracefully', function () {
// Years outside supported range should be handled
var beforeRange = dayComponent.getLunarDate(1, 1, 1799);
var afterRange = dayComponent.getLunarDate(1, 1, 2200);
// Should return some valid structure even for unsupported years
expect(beforeRange).toBeDefined();
expect(afterRange).toBeDefined();
});
});
describe('getYearInfo', function () {
it('should return correct year info for different centuries', function () {
// Test 19th century
var year1900 = dayComponent.getYearInfo(1900);
expect(year1900).toBeDefined();
expect(year1900.length).toBeGreaterThan(0);
// Test 20th century
var year2000 = dayComponent.getYearInfo(2000);
expect(year2000).toBeDefined();
expect(year2000.length).toBeGreaterThan(0);
// Test 21st century
var year2100 = dayComponent.getYearInfo(2100);
expect(year2100).toBeDefined();
expect(year2100.length).toBeGreaterThan(0);
});
it('should handle leap years in lunar calendar', function () {
// Test a known leap year in lunar calendar
var leapYear = dayComponent.getYearInfo(2024);
expect(leapYear).toBeDefined();
// Check if it contains leap month information
var hasLeapMonth = leapYear.some(function (month) { return month.leap === 1; });
expect(hasLeapMonth).toBeDefined();
});
});
describe('decodeLunarYear', function () {
it('should decode lunar year correctly', function () {
// Test with a known year code
var yearCode = 0x30baa3; // Example year code
var decoded = dayComponent.decodeLunarYear(1800, yearCode);
expect(decoded).toBeDefined();
expect(Array.isArray(decoded)).toBe(true);
expect(decoded.length).toBeGreaterThan(0);
// Each month should have valid properties
decoded.forEach(function (month) {
expect(month.day).toBe(1);
expect(month.month).toBeGreaterThan(0);
expect(month.month).toBeLessThanOrEqual(12);
expect(month.year).toBe(1800);
expect(typeof month.leap).toBe('number');
expect(month.jd).toBeGreaterThan(0);
});
});
});
describe('findLunarDate', function () {
it('should find correct lunar date from Julian Day Number', function () {
var jd = dayComponent.jdn(10, 2, 2024); // Tet 2024
var yearInfo = dayComponent.getYearInfo(2024);
var lunarDate = dayComponent.findLunarDate(jd, yearInfo);
expect(lunarDate.day).toBe(1);
expect(lunarDate.month).toBe(1);
expect(lunarDate.year).toBe(2024);
expect(lunarDate.leap).toBe(0);
});
it('should handle dates outside supported range', function () {
var firstDay = dayComponent.jdn(25, 1, 1800);
var lastDay = dayComponent.jdn(31, 12, 2199);
// Test before supported range
var beforeRange = dayComponent.findLunarDate(firstDay - 1, []);
expect(beforeRange).toBeDefined();
// Test after supported range
var afterRange = dayComponent.findLunarDate(lastDay + 1, []);
expect(afterRange).toBeDefined();
});
});
describe('LunarDate constructor', function () {
it('should create lunar date object correctly', function () {
var lunarDate = new dayComponent.LunarDate(15, 6, 2024, 0, 2460488);
expect(lunarDate.day).toBe(15);
expect(lunarDate.month).toBe(6);
expect(lunarDate.year).toBe(2024);
expect(lunarDate.leap).toBe(0);
expect(lunarDate.jd).toBe(2460488);
});
});
});