UNPKG

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
"use strict"; 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); }); }); });