diff --git a/README.md b/README.md index 1fbe85d..4cc374f 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Usage com.github.chanmratekoko myanmar-calendar - 1.0.7.RELEASE + 1.0.8.RELEASE ``` @@ -136,14 +136,23 @@ The following pattern letters are defined ('S', 's', 'B', 'y', 'k', 'M', 'p', 'f ```java // နှစ်အလိုက် မြန်မာ လအမည်များ တွက်ချက်ခြင်း // Output: Month Names (Relevant Myanmar month names for a given Myanmar year.) -MyanmarMonths myanmarMonth = MyanmarCalendarKernel.calculateRelatedMyanmarMonths(1381, 0); +MyanmarMonths myanmarMonth = MyanmarMonths.of(1381, 0); ``` ### Create the header for the Myanmar Calendar. +#### Myanmar Calendar Style Header ```java -// Output : သာသနာနှစ် ၂၅၆၂ ခု မြန်မာနှစ် ၁၃၈၀ ခု ကဆုန် - နယုန် -String header = MyanmarCalendarKernel.getCalendarHeader(1380, 2, 14); +// Output: သာသနာနှစ် ၂၅၆၂ ခု မြန်မာနှစ် ၁၃၈၀ ခု ကဆုန် - နယုန် +// Output: Sasana Year 2561 - 2562 Ku Myanmar Year 1379 - 1380 Ku Late Kason - Kason +String header = MyanmarCalendarKernel.getCalendarHeader(1380, 2); +``` + +#### Western Calendar Style Header +```java +// Output: သာသနာနှစ် ၂၅၆၇ - ၂၅၆၈ ခု မြန်မာနှစ် ၁၃၈၅ - ၁၃၈၆ ခု တပေါင်း - တန်ခူး +// Output: Sasana Year 2567 - 2568 Ku Myanmar Year 1385 - 1386 Ku Tabaung - Tagu +String header = MyanmarCalendarKernel.getCalendarHeaderForWesternStyle(2024, 4); ``` ### Thingyan (Myanmar New Year) @@ -176,6 +185,10 @@ boolean isHoliday = HolidayCalculator.isHoliday(MyanmarDate.now()); List holidayNameList = HolidayCalculator.getHoliday(MyanmarDate.now()); ``` +```java +// Check Anniversary +List anniversary = HolidayCalculator.getAnniversary(MyanmarDate.of(2017,1 ,1)); +``` ### Astrological information Converter @@ -230,11 +243,11 @@ astro.getMahayatkyan(); // Output: Shanyat or empty astro.getShanyat(); -// နဂါး လှည့် +// နဂါးခေါင်း လှည့်ရာအရပ် // Output: west or north or east or south astro.getNagahle(); -// မဟာဘုတ် +// မဟာဘုတ်၊ ဇာတာခွင် // Output: Binga or Atun or Yaza or Adipati or Marana or Thike or Puti astro.getMahabote(); diff --git a/pom.xml b/pom.xml index a0a586d..6f82e0b 100644 --- a/pom.xml +++ b/pom.xml @@ -4,9 +4,14 @@ 4.0.0 com.github.chanmratekoko myanmar-calendar - 1.0.7.RELEASE + 1.0.8.RELEASE Myanmar Calendar - Myanmar Calendar + + The Myanmar Calendar Library provides precise calculations for the traditional Burmese calendar system, + offering seamless date conversions and cultural observance integration. As an open-source library, it is + designed for easy integration into your applications, with added features like localization support and + user-friendly documentation. + https://chanmratekoko.github.io/mmcalendar/ @@ -53,13 +58,13 @@ 8 8 - 4.13.1 + 4.13.2 0.8.11 UTF-8 - jacoco - ${project.basedir}/src/test/ - target/classes - src/main/resources/**/* + jacoco + reuseReports + ${project.basedir}/../target/jacoco.exec + java @@ -87,7 +92,7 @@ org.hamcrest hamcrest-library - 1.3 + 2.2 test @@ -125,7 +130,7 @@ maven-compiler-plugin - 3.8.1 + 3.6.1 ${jdk.version} ${jdk.version} @@ -242,6 +247,7 @@ ${jacoco-maven-plugin.version} + jacoco-initialize prepare-agent diff --git a/src/main/java/mmcalendar/HolidayCalculator.java b/src/main/java/mmcalendar/HolidayCalculator.java index d6dc347..bfb0e53 100644 --- a/src/main/java/mmcalendar/HolidayCalculator.java +++ b/src/main/java/mmcalendar/HolidayCalculator.java @@ -204,7 +204,7 @@ private static List getAnniversaryDay(double jd, CalendarType calendarTy List holiday = new ArrayList<>(); - WesternDate wd = WesternDateConverter.convert(jd, calendarType); + WesternDate wd = WesternDate.of(jd, calendarType); double doe = dateOfEaster(wd.getYear()); if ((wd.getYear() <= 2017) && (wd.getMonth() == 1) && (wd.getDay() == 1)) { @@ -332,7 +332,7 @@ public static List getHoliday(MyanmarDate myanmarDate) { */ public static List getHoliday(MyanmarDate myanmarDate, CalendarType calendarType) { - WesternDate westernDate = WesternDateConverter.convert(myanmarDate.getJulianDayNumber(), calendarType); + WesternDate westernDate = WesternDate.of(myanmarDate.getJulianDayNumber(), calendarType); // Office Off List hde = englishHoliday(westernDate.getYear(), westernDate.getMonth(), westernDate.getDay()); List hdm = myanmarHoliday(myanmarDate.getYearValue(), myanmarDate.getMonth(), myanmarDate.getDayOfMonth(), @@ -358,14 +358,6 @@ public static boolean isHoliday(MyanmarDate myanmarDate) { return !getHoliday(myanmarDate).isEmpty(); } - /** - * @param holidayList List Of Holiday - * @return boolean - */ - public static boolean isHoliday(List holidayList) { - return !holidayList.isEmpty(); - } - /** * @param myanmarDate MyanmarDate Object * @return List of holiday String diff --git a/src/main/java/mmcalendar/Language.java b/src/main/java/mmcalendar/Language.java index 2401113..2a83f06 100644 --- a/src/main/java/mmcalendar/Language.java +++ b/src/main/java/mmcalendar/Language.java @@ -1,5 +1,9 @@ package mmcalendar; + +/** + * Representing different languages and their corresponding punctuation marks. + */ public enum Language { ENGLISH(0, ", ", "."), @@ -15,20 +19,43 @@ public enum Language { private final String punctuation; + /** + * Constructor for the Language enum. + * + * @param languageIndex The index of the language. + * @param punctuationMark The punctuation mark used in the language for separation. + * @param punctuation The punctuation mark used in the language for ending a sentence. + */ Language(int languageIndex, String punctuationMark, String punctuation) { this.languageIndex = languageIndex; this.punctuationMark = punctuationMark; this.punctuation = punctuation; } + + /** + * Get the index of the language. + * + * @return The language index. + */ public int getLanguageIndex() { return languageIndex; } + /** + * Get the punctuation mark used for separation in the language. + * + * @return The punctuation mark for separation. + */ public String getPunctuationMark() { return this.punctuationMark; } + /** + * Get the punctuation mark used for ending a sentence in the language. + * + * @return The punctuation mark for ending a sentence. + */ public String getPunctuation() { return this.punctuation; } diff --git a/src/main/java/mmcalendar/LanguageTranslator.java b/src/main/java/mmcalendar/LanguageTranslator.java index c725d58..8cc4175 100644 --- a/src/main/java/mmcalendar/LanguageTranslator.java +++ b/src/main/java/mmcalendar/LanguageTranslator.java @@ -205,7 +205,7 @@ private LanguageTranslator() { */ private static String translateSentence(String str, int fromLn, int toLn) { for (String[] dic : CATALOG) { - str = str.replaceAll(dic[fromLn], dic[toLn]); + str = str.replace(dic[fromLn], dic[toLn]); } return str; } diff --git a/src/main/java/mmcalendar/MyanmarCalendarKernel.java b/src/main/java/mmcalendar/MyanmarCalendarKernel.java index b825922..68a985f 100644 --- a/src/main/java/mmcalendar/MyanmarCalendarKernel.java +++ b/src/main/java/mmcalendar/MyanmarCalendarKernel.java @@ -52,7 +52,6 @@ public static MyanmarMonths calculateRelatedMyanmarMonths(int myear, int mmonth) mmonth = ei; } - // populateMonthLists return populateMonthLists(m1.getYearType(), si, ei, mmonth); } @@ -88,14 +87,80 @@ private static MyanmarMonths populateMonthLists(int yearType, int si, int ei, in return new MyanmarMonths(monthList, monthNameList, currentIndex); } + /** + * Western Calendar Title for month + * + * @param year Western Year + * @param month Western Month [1 = Jan, ... , 12 = Dec] + * Month value is 1-based. e.g., 1 for January. + * @return Calendar Title for month + */ + public static String getCalendarHeaderForWesternStyle(int year, int month) { + return getCalendarHeaderForWesternStyle(year, month, Config.getInstance().getLanguage()); + } - public static String getCalendarHeader(int myear, int mmonth, int mmday) { - return getCalendarHeader(myear, mmonth, mmday, Config.getInstance().getLanguage()); + /** + * Western Calendar Title for month + * + * @param year Western Year + * @param month Western Month [1 = Jan, ... , 12 = Dec] + * Month value is 1-based. e.g., 1 for January. + * @param language Language + * @return Calendar Title for month + */ + public static String getCalendarHeaderForWesternStyle(int year, int month, Language language) { + // time zone is irrelevant + int monthLength = WesternDateKernel.getLengthOfMonth(year, month, Config.getInstance().getCalendarType().getNumber()); + MyanmarDate startDate = MyanmarDate.of(year, month, 1); + double je = startDate.getJulianDayNumber() + monthLength - 1; + MyanmarDate endDate = MyanmarDate.of(je); + return getCalendarHeader(startDate, endDate, language); } - public static String getCalendarHeader(int myear, int mmonth, int mmday, Language language) { + /** + * Calendar Title for month + * + * @param myear Myanmar Year + * @param mmonth Myanmar month [Tagu=1, Kason=2, Nayon=3, 1st Waso=0, (2nd) + * Waso=4, Wagaung=5, Tawthalin=6, Thadingyut=7, Tazaungmon=8, + * Nadaw=9, Pyatho=10, Tabodwe=11, Tabaung=12, Late Tagu=13 + * Late Kason=14 ] + * @return Calendar Title for month + */ + public static String getCalendarHeader(int myear, int mmonth) { + return getCalendarHeader(myear, mmonth, Config.getInstance().getLanguage()); + } + + /** + * Calendar Title for month + * + * @param myear Myanmar Year + * @param mmonth Myanmar month [Tagu=1, Kason=2, Nayon=3, 1st Waso=0, (2nd) + * Waso=4, Wagaung=5, Tawthalin=6, Thadingyut=7, Tazaungmon=8, + * Nadaw=9, Pyatho=10, Tabodwe=11, Tabaung=12, Late Tagu=13 + * Late Kason=14 ] + * @param language Language + * @return Calendar Title for month + */ + public static String getCalendarHeader(int myear, int mmonth, Language language) { + return getCalendarHeader(myear, mmonth, 1, language); + } + + /** + * Calendar Title for month + * + * @param myear Myanmar Year + * @param mmonth Myanmar month [Tagu=1, Kason=2, Nayon=3, 1st Waso=0, (2nd) + * Waso=4, Wagaung=5, Tawthalin=6, Thadingyut=7, Tazaungmon=8, + * Nadaw=9, Pyatho=10, Tabodwe=11, Tabaung=12, Late Tagu=13 + * Late Kason=14 ] + * @param mday day of month [from 1 to 29 or 30] + * @param language Language + * @return Calendar Title for month + */ + public static String getCalendarHeader(int myear, int mmonth, int mday, Language language) { // Find julian day number of start of the month - double julianDate = MyanmarDateKernel.myanmarDateToJulian(myear, mmonth, mmday); + double julianDate = MyanmarDateKernel.myanmarDateToJulian(myear, mmonth, mday); MyanmarDate myanmarDate = MyanmarDate.of(julianDate); @@ -124,7 +189,8 @@ private static String getCalendarHeader(MyanmarDate startDateOfMonth, MyanmarDat if (endDateOfMonth.getYearValue() >= 2) { //if Myanmar year after 2 ME - str.append(getHeaderForMyanmarYear(startDateOfMonth, endDateOfMonth, language)) + str.append(" ") + .append(getHeaderForMyanmarYear(startDateOfMonth, endDateOfMonth, language)) .append(" "); str.append(getHeaderForMyanmarMonth(startDateOfMonth, endDateOfMonth, language)); @@ -133,7 +199,7 @@ private static String getCalendarHeader(MyanmarDate startDateOfMonth, MyanmarDat return str.toString(); } - private static String getHeaderForBuddhistEra(MyanmarDate startDate, MyanmarDate endDate, Language language) { + public static String getHeaderForBuddhistEra(MyanmarDate startDate, MyanmarDate endDate, Language language) { StringBuilder buddhistEraStringBuilder = new StringBuilder(); @@ -147,13 +213,12 @@ private static String getHeaderForBuddhistEra(MyanmarDate startDate, MyanmarDate } buddhistEraStringBuilder.append(" ") - .append(LanguageTranslator.translate("Ku", language)) - .append(" "); + .append(LanguageTranslator.translate("Ku", language)); return buddhistEraStringBuilder.toString(); } - private static String getHeaderForMyanmarYear(MyanmarDate startDateOfMonth, MyanmarDate endDateOfMonth, Language language) { + public static String getHeaderForMyanmarYear(MyanmarDate startDateOfMonth, MyanmarDate endDateOfMonth, Language language) { StringBuilder myanmarYearStringBuilder = new StringBuilder(); @@ -177,7 +242,7 @@ private static String getHeaderForMyanmarYear(MyanmarDate startDateOfMonth, Myan return myanmarYearStringBuilder.toString(); } - private static String getHeaderForMyanmarMonth(MyanmarDate startDateOfMonth, MyanmarDate endDateOfMonth, Language language) { + public static String getHeaderForMyanmarMonth(MyanmarDate startDateOfMonth, MyanmarDate endDateOfMonth, Language language) { StringBuilder myanmarMonthStringBuilder = new StringBuilder(); diff --git a/src/main/java/mmcalendar/MyanmarDate.java b/src/main/java/mmcalendar/MyanmarDate.java index 889ba63..7116f0b 100644 --- a/src/main/java/mmcalendar/MyanmarDate.java +++ b/src/main/java/mmcalendar/MyanmarDate.java @@ -1,7 +1,5 @@ package mmcalendar; -import mmcalendar.util.DateTimeUtils; - import java.io.Serializable; import java.time.*; import java.util.Calendar; @@ -95,20 +93,6 @@ protected MyanmarDate(int myear, int yearType, int yearLength, this.jd = jd; } - public MyanmarDate(MyanmarDate original) { - this.myear = original.myear; - this.yearType = original.yearType; - this.yearLength = original.yearLength; - this.mmonth = original.mmonth; - this.monthType = original.monthType; - this.monthLength = original.monthLength; - this.monthDay = original.monthDay; - this.fortnightDay = original.fortnightDay; - this.moonPhase = original.moonPhase; - this.weekDay = original.weekDay; - this.jd = original.jd; - } - //----------------------------------------------------------------------- /** @@ -167,6 +151,29 @@ public static MyanmarDate create( return create(myear, mmonth, monthDay); } + + /** + * Create Myanmar Date from myanmar year, length of the month, moon phase and fortnight day + * + * @param myear Myanmar Year + * @param myanmarMonthName Myanmar month [Tagu=1, Kason=2, Nayon=3, 1st Waso=0, (2nd) + * Waso=4, Wagaung=5, Tawthalin=6, Thadingyut=7, Tazaungmon=8, + * Nadaw=9, Pyatho=10, Tabodwe=11, Tabaung=12 , Late Tagu = 13, Late Kason = 14] + * @param moonPhase moon phase [0=waxing, 1=full moon, 2=waning, 3=new moon] + * @param fortnightDay fortnight day [1 to 15] + * @return Myanmar date + */ + public static MyanmarDate create( + int myear, + String myanmarMonthName, + String moonPhase, + int fortnightDay + ) { + int mmonth = MyanmarDateKernel.searchMyanmarMonthNumber(myanmarMonthName); + int moonPhaseValue = MyanmarDateKernel.searchMoonPhase(moonPhase); + return create(myear, mmonth, moonPhaseValue, fortnightDay); + } + //----------------------------------------------------------------------- public static MyanmarDate now() { LocalDateTime canberraDateTime = LocalDateTime.now(MYANMAR_ZONE_ID); @@ -191,24 +198,33 @@ public static MyanmarDate of(Calendar calendar) { return of(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH) + 1, calendar.get(Calendar.DAY_OF_MONTH), Config.getInstance().getCalendarType(), 0); } + + public static MyanmarDate of(LocalDate myanmarLocalDate) { + return of( + myanmarLocalDate.getYear(), + myanmarLocalDate.getMonthValue(), + myanmarLocalDate.getDayOfMonth() + ); + } + /** * LocalDateTime to Myanmar Date * - * @param myanmarDateTime java {@link LocalDateTime} + * @param myanmarLocalDateTime java {@link LocalDateTime} * @return the Myanmar date, not null * @see LocalDateTime *

* Note: All the calculations are based on Myanmar Standard Time (UTC+06:30) * which is calculated on the basis of 97° 30' longitude. */ - public static MyanmarDate of(LocalDateTime myanmarDateTime) { + public static MyanmarDate of(LocalDateTime myanmarLocalDateTime) { return of( - myanmarDateTime.getYear(), - myanmarDateTime.getMonthValue(), - myanmarDateTime.getDayOfMonth(), - myanmarDateTime.getHour(), - myanmarDateTime.getMinute(), - myanmarDateTime.getSecond() + myanmarLocalDateTime.getYear(), + myanmarLocalDateTime.getMonthValue(), + myanmarLocalDateTime.getDayOfMonth(), + myanmarLocalDateTime.getHour(), + myanmarLocalDateTime.getMinute(), + myanmarLocalDateTime.getSecond() ); } @@ -289,36 +305,17 @@ public static MyanmarDate of(int year, int month, int day, int hour, int minute, return of(year, month, day, hour, minute, second, Config.getInstance().getCalendarType(), 0); } - /** - * @param year Western Year - * @param month Western Month [1 = Jan, ... , 12 = Dec] - * Month value is 1-based. e.g., 1 for January. - * @param day Western Day [1-31] - * @param hour Hour - * @param minute Minute - * @param second Second - * @param calendarType CalendarType Enum - * @param sg : Beginning of Gregorian calendar in JDN [Optional argument: - * default=2361222] - * @return {@link MyanmarDate} Object - */ - public static MyanmarDate of(int year, int month, int day, int hour, int minute, int second, - CalendarType calendarType, double sg) { - double julianDayNumber = WesternDateKernel.westernToJulian(year, month, day, hour, minute, second, calendarType, sg); - return of(julianDayNumber); - } - /** * Julian date to Myanmar Date - * + * @param julianDayNumber Julian day number * @return {@link MyanmarDate} Object */ public static MyanmarDate of(double julianDayNumber) { return MyanmarDateKernel.julianToMyanmarDate(julianDayNumber); } - //----------------------------------------------------------------------- + //----------------------------------------------------------------------- public String getBuddhistEra(Language language) { return LanguageTranslator.translate(myear + 1182.0, language); } @@ -327,6 +324,28 @@ public String getBuddhistEra() { return getBuddhistEra(Config.getInstance().getLanguage()); } + /** + * Creates MyanmarDate object based on the given parameters representing a date and time + * in the Western calendar system. + * + * @param year The year in the Western calendar. + * @param month The month in the Western calendar (1 = Jan, ... , 12 = Dec) + * Month value is 1-based. e.g., 1 for January. + * @param day The day of the month in the Western calendar. [1-31] + * @param hour The hour of the day (24-hour format). + * @param minute The minute of the hour. + * @param second The second of the minute. + * @param calendarType CalendarType Enum (The type of calendar used for the conversion.) + * @param sg : Beginning of Gregorian calendar in JDN [Optional argument: + * default=2361222] + * @return {@link MyanmarDate} Object representing the equivalent date in the Myanmar calendar. + */ + public static MyanmarDate of(int year, int month, int day, int hour, int minute, int second, + CalendarType calendarType, double sg) { + double julianDayNumber = WesternDateKernel.westernToJulian(year, month, day, hour, minute, second, calendarType, sg); + return of(julianDayNumber); + } + public int getBuddhistEraValue() { return myear + 1182; } @@ -387,7 +406,16 @@ public String getMonthName() { } public String getMonthName(Language language) { - return LanguageTranslator.translate(EMA[this.mmonth], language); + StringBuilder stringBuilder = new StringBuilder(); + + if (this.mmonth == 4 && this.yearType > 0) { + stringBuilder.append(LanguageTranslator.translate("Second", language)) + .append(" "); + } + + stringBuilder.append(LanguageTranslator.translate(EMA[this.mmonth], language)); + + return stringBuilder.toString(); } /** @@ -501,7 +529,7 @@ public String format(String pattern) { public String format(String pattern, Language language) { if (pattern == null || language == null) { - throw new NullPointerException(); + throw new IllegalArgumentException("Pattern or Language must not be null"); } char[] charArray = pattern.toCharArray(); @@ -597,16 +625,17 @@ public ZonedDateTime toMyanmarZonedDateTime() { } public ZonedDateTime toZonedDateTime(ZoneId zoneId) { - long epochSecond = DateTimeUtils.julianToUnixTime(this.jd); - return LocalDateTime.ofEpochSecond( - epochSecond, - 0, - ZoneOffset.ofTotalSeconds(0) + WesternDate wd = WesternDate.of(this.jd); + return LocalDateTime.of(wd.getYear(), + wd.getMonth(), + wd.getDay(), + wd.getHour(), + wd.getMinute(), + wd.getSecond() ).atZone(MYANMAR_ZONE_ID) .withZoneSameInstant(zoneId); } - /** * Java has a rough support for Julian day number. * It counts the days correctly. @@ -644,7 +673,7 @@ public LocalDateTime toLocalDateTime(ZoneId zoneId) { * @return {@link LocalDate} with Myanmar Timezone */ public LocalDate toMyanmarLocalDate() { - return toMyanmarLocalDate(MYANMAR_ZONE_ID); + return toLocalDate(MYANMAR_ZONE_ID); } /** @@ -657,7 +686,7 @@ public LocalDate toMyanmarLocalDate() { * @param zoneId zone * @return {@link LocalDate} */ - public LocalDate toMyanmarLocalDate(ZoneId zoneId) { + public LocalDate toLocalDate(ZoneId zoneId) { return toZonedDateTime(zoneId) .toLocalDate(); } @@ -745,10 +774,6 @@ public boolean equals(Object obj) { return yearType == other.yearType; } - public static MyanmarDate copyOf(MyanmarDate original) { - return new MyanmarDate(original); - } - /** * Checks if the Day, Month, and Year are the same, * while disregarding the Hour, Minute, and Second. diff --git a/src/main/java/mmcalendar/MyanmarDateKernel.java b/src/main/java/mmcalendar/MyanmarDateKernel.java index 6822ae7..99ec64c 100644 --- a/src/main/java/mmcalendar/MyanmarDateKernel.java +++ b/src/main/java/mmcalendar/MyanmarDateKernel.java @@ -223,16 +223,6 @@ public static Map checkWatat(int my) { return map; } - /** - * Myanmar date to Julian date (12 PM 00 Seconds) - * - * @param myanmarDate {@link MyanmarDate} Object - * @return julian day number - */ - public static double myanmarDateToJulian(MyanmarDate myanmarDate) { - return myanmarDateToJulian(myanmarDate.getYearValue(), myanmarDate.getMonth(), myanmarDate.getDayOfMonth()); - } - /** * Myanmar date to Julian date dependency: chk_my (my) * @@ -280,7 +270,7 @@ public static int myanmarDateToJulian(int myear, int mmonth, int mmday) { * @return Julian Day Number */ public static double getJulianDayNumber(int myear, String myanmarMonthName, int mmday) { - int mmonth = searchMyanmarMonth(myanmarMonthName); + int mmonth = searchMyanmarMonthNumber(myanmarMonthName); if (mmonth < 0) { throw new DateTimeException("Invalid value for myanmarMonthName : " + myanmarMonthName); } @@ -295,40 +285,55 @@ public static double getJulianDayNumber(int myear, String myanmarMonthName, int * Tabaung=12, Late Tagu=13, Late Kason=14] * @return myanmar month number */ - public static int searchMyanmarMonth(String myanmarMonthName) { - switch (myanmarMonthName) { - case "First Waso": + public static int searchMyanmarMonthNumber(String myanmarMonthName) { + switch (myanmarMonthName.toLowerCase()) { + case "first waso": return 0; - case "Tagu": + case "tagu": return 1; - case "Kason": + case "kason": return 2; - case "Nayon": + case "nayon": return 3; - case "Waso": + case "waso": return 4; - case "Wagaung": + case "wagaung": return 5; - case "Tawthalin": + case "tawthalin": return 6; - case "Thadingyut": + case "thadingyut": return 7; - case "Tazaungmon": + case "tazaungmon": return 8; - case "Nadaw": + case "nadaw": return 9; - case "Pyatho": + case "pyatho": return 10; - case "Tabodwe": + case "tabodwe": return 11; - case "Tabaung": + case "tabaung": return 12; - case "Late Tagu": + case "late tagu": return 13; - case "Late Kason": + case "late kason": return 14; default: return -1; } } + + public static int searchMoonPhase(String moonPhase) { + switch (moonPhase.toLowerCase()) { + case "waxing": + return 0; + case "full moon": + return 1; + case "waning": + return 2; + case "new moon": + return 3; + default: + return -1; + } + } } diff --git a/src/main/java/mmcalendar/MyanmarMonths.java b/src/main/java/mmcalendar/MyanmarMonths.java index 4405fb6..30a2ffa 100644 --- a/src/main/java/mmcalendar/MyanmarMonths.java +++ b/src/main/java/mmcalendar/MyanmarMonths.java @@ -23,6 +23,20 @@ protected MyanmarMonths(List monthList, List monthNameList, int this.calculationMonth = calculationMonth; } + /** + * Calculate related Myanmar month names by year + * + * @param myear Myanmar Year + * @param mmonth Myanmar month [Tagu=1, Kason=2, Nayon=3, 1st Waso=0, (2nd) + * Waso=4, Wagaung=5, Tawthalin=6, Thadingyut=7, Tazaungmon=8, + * Nadaw=9, Pyatho=10, Tabodwe=11, Tabaung=12, Late Tagu=13 + * Late Kason=14 ] + * @return {@link MyanmarMonths} Object + */ + public static MyanmarMonths of(int myear, int mmonth) { + return MyanmarCalendarKernel.calculateRelatedMyanmarMonths(myear, mmonth); + } + public List getMonthList() { return monthList; } diff --git a/src/main/java/mmcalendar/MyanmarYearConstants.java b/src/main/java/mmcalendar/MyanmarYearConstants.java index 0f88312..620dafc 100644 --- a/src/main/java/mmcalendar/MyanmarYearConstants.java +++ b/src/main/java/mmcalendar/MyanmarYearConstants.java @@ -29,6 +29,7 @@ public static Map getMyConst(int my) { // exception in watat year double exceptionInWatatYear = 0; int i; + int[][] fme; int[] wte; @@ -63,8 +64,9 @@ else if (my >= 798) { watatOffset = -1.1; numberOfMonths = -1; fme = new int[][]{ - {813, -1}, {849, -1}, {851, -1}, {854, -1}, {927, -1}, {933, -1}, {936, -1}, - {938, -1}, {949, -1}, {952, -1}, {963, -1}, {968, -1}, {1039, -1} + {813, -1}, {849, -1}, {851, -1}, {854, -1}, {927, -1}, {933, -1}, + {936, -1}, {938, -1}, {949, -1}, {952, -1}, {963, -1}, {968, -1}, + {1039, -1} }; wte = new int[]{}; } @@ -74,8 +76,8 @@ else if (my >= 798) { watatOffset = -1.1; numberOfMonths = -1; fme = new int[][]{ - {205, 1}, {246, 1}, {471, 1}, {572, -1}, {651, 1}, {653, 2}, {656, 1}, {672, 1}, - {729, 1}, {767, -1} + {205, 1}, {246, 1}, {471, 1}, {572, -1}, {651, 1}, {653, 2}, + {656, 1}, {672, 1}, {729, 1}, {767, -1} }; wte = new int[]{}; } diff --git a/src/main/java/mmcalendar/WesternDate.java b/src/main/java/mmcalendar/WesternDate.java index 5e1d592..a7fd558 100644 --- a/src/main/java/mmcalendar/WesternDate.java +++ b/src/main/java/mmcalendar/WesternDate.java @@ -29,6 +29,57 @@ public class WesternDate implements Serializable { this.second = second; } + public static WesternDate of(MyanmarDate date) { + return of(date.getJulianDayNumber()); + } + + public static WesternDate of(MyanmarDate date, CalendarType calendarType) { + return of(date.getJulianDayNumber(), calendarType); + } + + /** + * Julian date to Western date + * + * @param julianDate Julian date + * @return Western date (y=year, m=month, d=day, h=hour, n=minute, s=second) + * {@link WesternDate} object + */ + public static WesternDate of(double julianDate) { + return of(julianDate, Config.getInstance().getCalendarType()); + } + + /** + * Julian date to Western date Credit4 Gregorian date: (j2w) + * Credit4 Julian + * Calendar: + * + * @param julianDate julian date + * @param calendarType {@link CalendarType} Enum + * @return Western date (y=year, m=month, d=day, h=hour, n=minute, s=second) + * {@link WesternDate} object + */ + public static WesternDate of(double julianDate, CalendarType calendarType) { + return of(julianDate, calendarType, 0); + } + + + /** + * Julian date to Western date Credit4 Gregorian date: (j2w) + * Credit4 Julian + * Calendar: + * + * @param julianDate julian date + * @param calendarType calendar type [Optional argument: 0=english (default), + * 1=Gregorian, 2=Julian] + * @param sg Beginning of Gregorian calendar in JDN [Optional argument: + * (default=2361222) ] + * @return Western date (y=year, m=month, d=day, h=hour, n=minute, s=second) + * {@link WesternDate} object + */ + public static WesternDate of(double julianDate, CalendarType calendarType, double sg) { + return WesternDateKernel.julianToWestern(julianDate, calendarType.getNumber(), sg); + } + public int getYear() { return year; } @@ -42,8 +93,7 @@ public int getDay() { } /** - * - * @return hour [0-23] + * @return hour [0-23] */ public int getHour() { return hour; @@ -57,6 +107,45 @@ public int getSecond() { return second; } + + /** + * @return Julian day number + */ + public double toJulian() { + return toJulian(Config.getInstance().getCalendarType()); + } + + /** + * @param calendarType CalendarType enum + * [0-English, 1-Gregorian, 2-Julian] + * calendar type [Optional argument: 0=english (default), + * 1=Gregorian, 2=Julian] + * @return Julian day number + */ + public double toJulian(CalendarType calendarType) { + return toJulian(calendarType, 0); + } + + /** + * @param calendarType CalendarType enum + * [0-English, 1-Gregorian, 2-Julian] + * calendar type [Optional argument: 0=english (default), + * 1=Gregorian, 2=Julian] + * @param sg SG: Beginning of Gregorian calendar in JDN [Optional argument: + * (default = 2361222)] + * @return Julian day number + */ + public double toJulian(CalendarType calendarType, double sg) { + return WesternDateKernel.westernToJulian( + this.getYear(), + this.getMonth(), + this.getDay(), + this.getHour(), + this.getMinute(), + this.getSecond(), + calendarType, sg); + } + @Override public String toString() { return "WesternDate [year=" + year + ", month=" + month + ", day=" + day + ", hour=" + hour + ", minute=" diff --git a/src/main/java/mmcalendar/WesternDateConverter.java b/src/main/java/mmcalendar/WesternDateConverter.java deleted file mode 100644 index bc8754e..0000000 --- a/src/main/java/mmcalendar/WesternDateConverter.java +++ /dev/null @@ -1,54 +0,0 @@ -package mmcalendar; - -/** - * Western Date Converter - * - * @author Chan Mrate Ko Ko - * @version 1.0.2 - * @since 1.0 - */ -public class WesternDateConverter { - - /** - * Don't let anyone instantiate this class. - */ - private WesternDateConverter() { - } - - - /** - * Myanmar Date to Western Date - * - * @param myanmarDate {@link MyanmarDate} object - * @return Western date (y=year, m=month, d=day, h=hour, n=minute, s=second) - * {@link WesternDate} object - */ - public static WesternDate convert(MyanmarDate myanmarDate) { - return convert(myanmarDate.getJulianDayNumber()); - } - - /** - * Julian date to Western date - * - * @param julianDate Julian date - * @return Western date (y=year, m=month, d=day, h=hour, n=minute, s=second) - * {@link WesternDate} object - */ - public static WesternDate convert(double julianDate) { - return WesternDateKernel.julianToWestern(julianDate, Config.getInstance().getCalendarType()); - } - - /** - * Julian date to Western date Credit4 Gregorian date: - * Credit4 Julian - * Calendar: - * - * @param julianDate julian date - * @param calendarType CalendarType Enum - * @return Western date (y=year, m=month, d=day, h=hour, n=minute, s=second) - * {@link WesternDate} object - */ - public static WesternDate convert(double julianDate, CalendarType calendarType) { - return WesternDateKernel.julianToWestern(julianDate, calendarType.getNumber(), 0); - } -} diff --git a/src/main/java/mmcalendar/WesternDateKernel.java b/src/main/java/mmcalendar/WesternDateKernel.java index 4755b7e..5270369 100644 --- a/src/main/java/mmcalendar/WesternDateKernel.java +++ b/src/main/java/mmcalendar/WesternDateKernel.java @@ -191,18 +191,6 @@ public static double timeToDayFractionStartFrom12Noon(double hour, double minute return ((hour - 12) / 24 + minute / 1440 + second / 86400); } - /** - * @param westernDate WesternDate object - * @param calendarType CalendarType Enum - * @param sg SG: Beginning of Gregorian calendar in JDN [Optional argument: - * (default=2361222)] - * @return Julian number - */ - public static double westernToJulian(WesternDate westernDate, CalendarType calendarType, double sg) { - return westernToJulian(westernDate.getYear(), westernDate.getMonth(), westernDate.getDay(), westernDate.getHour(), - westernDate.getMinute(), westernDate.getSecond(), calendarType, sg); - } - /** * The month according to calendar type * diff --git a/src/main/java/mmcalendar/util/DateTimeUtils.java b/src/main/java/mmcalendar/util/DateTimeUtils.java deleted file mode 100644 index bd10208..0000000 --- a/src/main/java/mmcalendar/util/DateTimeUtils.java +++ /dev/null @@ -1,57 +0,0 @@ -package mmcalendar.util; - -import java.time.LocalDate; -import java.time.temporal.JulianFields; - -public class DateTimeUtils { - - /** - * Convert LocalDate to Julian Date - * - * @param localDate {@link LocalDate} - * @return Julian Date - */ - public static double toJulian(LocalDate localDate) { - return JulianFields.JULIAN_DAY.getFrom(localDate); - } - - - /** - * Unix epoch (or Unix time or POSIX time or Unix timestamp) to Julian day number - * - * @param ut Number of seconds from 1970 Jan 1 00:00:00 (UTC) - * @return Julian day number - */ - public static double unixTimeToJulian(long ut) { - return 2440587.5 + ut / 86400.0; // Convert to day (/24h/60min/60sec) and to JD - } - - // check - - /** - * Julian day number to Unix epoch (or Unix time or - * POSIX time or Unix timestamp) - * - * @param jd Julian day number - * @return unix Timestamp - */ - public static long julianToUnixTime(double jd) { - return (long) ((jd - 2440587.5) * 86400.0 + 0.5); - } - - /** - * Add Julian day number (utc time to myanmar time) to Julian day number - * @param jd UTC Julian day number - * @return Julian day number - */ - public static double utcToConvertMyanmarTime(double jd) { - // add myanmar time - return jd + (6.5 / 24.0); - } - - /** - * Don't let anyone instantiate this class. - */ - private DateTimeUtils() { - } -} diff --git a/src/test/java/Usage.java b/src/test/java/Usage.java new file mode 100644 index 0000000..d76bcf2 --- /dev/null +++ b/src/test/java/Usage.java @@ -0,0 +1,22 @@ +import mmcalendar.HolidayCalculator; +import mmcalendar.Language; +import mmcalendar.MyanmarCalendarKernel; +import mmcalendar.MyanmarDate; + +import java.util.List; + +public class Usage { + public static void main(String[] args) { +// String header = MyanmarCalendarKernel.getCalendarHeader(1380, 2, Language.ENGLISH); +// System.out.println(header); + + // Output : သာသနာနှစ် ၂၅၆၇ - ၂၅၆၈ ခု မြန်မာနှစ် ၁၃၈၅ - ၁၃၈၆ ခု တပေါင်း - တန်ခူး +// String header = MyanmarCalendarKernel.getCalendarHeaderForWesternStyle(2024, 4, Language.ENGLISH); +// System.out.println(header); + + List anniversary = HolidayCalculator.getAnniversary(MyanmarDate.of(2017,1 ,1)); + System.out.println(anniversary); + + } + +} diff --git a/src/test/java/mmcalendar/AstroBatchTest.java b/src/test/java/mmcalendar/AstroBatchTest.java index f80bad0..3da5fc3 100644 --- a/src/test/java/mmcalendar/AstroBatchTest.java +++ b/src/test/java/mmcalendar/AstroBatchTest.java @@ -31,7 +31,6 @@ public void textByYear(int year) throws IOException { String line; while ((line = reader.readLine()) != null) { -// System.out.println(line); testJulianToMyanmarDate(line); } diff --git a/src/test/java/mmcalendar/AstroKernelTest.java b/src/test/java/mmcalendar/AstroKernelTest.java index 5c92146..d0d5dcc 100644 --- a/src/test/java/mmcalendar/AstroKernelTest.java +++ b/src/test/java/mmcalendar/AstroKernelTest.java @@ -7,8 +7,6 @@ public class AstroKernelTest { - private static MyanmarDate myanmarDate; - @BeforeClass public static void beforeClass() { Config.initDefault( @@ -16,12 +14,10 @@ public static void beforeClass() { .setCalendarType(CalendarType.ENGLISH) .setLanguage(Language.ENGLISH) .build()); - myanmarDate = MyanmarDate.of(641, 12, 22); } @AfterClass public static void afterClass() { - myanmarDate = null; Config.initDefault( new Config.Builder() .setCalendarType(CalendarType.ENGLISH) @@ -84,8 +80,8 @@ public void calculateYatyaza() { @Test public void calculatePyathada() { - int yatyaza = AstroKernel.calculatePyathada(8, 3); - assertThat(1, is(yatyaza)); + int pyathada = AstroKernel.calculatePyathada(8, 3); + assertThat(1, is(pyathada)); } @Test diff --git a/src/test/java/mmcalendar/AstroTest.java b/src/test/java/mmcalendar/AstroTest.java index e3daa32..b444869 100644 --- a/src/test/java/mmcalendar/AstroTest.java +++ b/src/test/java/mmcalendar/AstroTest.java @@ -2,13 +2,16 @@ import org.junit.*; +import java.time.LocalDate; +import java.time.LocalDateTime; + import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertEquals; public class AstroTest { private static MyanmarDate myanmarDate; - // execute before class @BeforeClass public static void beforeClass() { @@ -46,16 +49,101 @@ public void after() { } @Test - public void convert() { + public void convertTest() { Astro astro = Astro.of(myanmarDate); - Assert.assertEquals("Thamanyo", astro.getThamanyo()); - Assert.assertEquals("Nagapor", astro.getNagapor()); + assertEquals("Thamanyo", astro.getThamanyo()); + assertEquals("Nagapor", astro.getNagapor()); assertThat(5, is(astro.getMahaboteValue())); - Assert.assertEquals("Thike", astro.getMahabote()); - Assert.assertEquals("Mahayatkyan", astro.getMahayatkyan()); + assertEquals("Thike", astro.getMahabote()); + assertEquals("Mahayatkyan", astro.getMahayatkyan()); + assertThat(2, is(astro.getNakhatValue())); + assertEquals("Human", astro.getNakhat()); + assertEquals("Mrigasiras", astro.getYearName()); + assertThat(1, is(astro.getNagahleValue())); + assertEquals("North", astro.getNagahle()); + + assertEquals("", astro.getYatyaza()); + assertEquals("", astro.getPyathada()); + assertEquals("", astro.getSabbath()); + assertEquals("", astro.getAmyeittasote()); + assertEquals("", astro.getWarameittugyi()); + assertEquals("", astro.getWarameittunge()); + assertEquals("", astro.getYatpote()); + assertEquals("", astro.getThamaphyu()); + assertEquals("", astro.getYatyotema()); + assertEquals("", astro.getShanyat()); + + } + + @Test + public void assertBooleanTest() { + Astro astro = Astro.of(myanmarDate); + + Assert.assertFalse(astro.isAmyeittasote()); + Assert.assertTrue(astro.isMahayatkyan()); + Assert.assertTrue(astro.isNagapor()); + Assert.assertFalse(astro.isShanyat()); + Assert.assertTrue(astro.isThamanyo()); + Assert.assertFalse(astro.isThamaphyu()); + Assert.assertFalse(astro.isWarameittugyi()); + Assert.assertFalse(astro.isWarameittunge()); + Assert.assertFalse(astro.isYatpote()); + Assert.assertFalse(astro.isYatyotema()); + Assert.assertFalse(astro.isYatyaza()); + Assert.assertFalse(astro.isPyathada()); + Assert.assertFalse(astro.isSabbath()); + } + + @Test + public void astroTestTwo() { + MyanmarDate myanmarDate = MyanmarDate.of(LocalDate.of(2024, 1, 4)); + Astro astro = Astro.of(myanmarDate); + + assertEquals("", astro.getThamanyo()); + assertEquals("", astro.getNagapor()); + assertThat(1, is(astro.getMahaboteValue())); + assertEquals("Atun", astro.getMahabote()); + assertEquals("", astro.getMahayatkyan()); assertThat(2, is(astro.getNakhatValue())); - Assert.assertEquals("Human", astro.getNakhat()); - Assert.assertEquals("Mrigasiras", astro.getYearName()); + assertEquals("Human", astro.getNakhat()); + assertEquals("Jyeshtha", astro.getYearName()); + + Assert.assertFalse(astro.isAmyeittasote()); + Assert.assertFalse(astro.isMahayatkyan()); + Assert.assertFalse(astro.isNagapor()); + Assert.assertFalse(astro.isShanyat()); + Assert.assertFalse(astro.isThamanyo()); + Assert.assertFalse(astro.isThamaphyu()); + Assert.assertFalse(astro.isWarameittugyi()); + Assert.assertTrue(astro.isWarameittunge()); + Assert.assertTrue(astro.isYatpote()); + Assert.assertFalse(astro.isYatyotema()); + Assert.assertFalse(astro.isYatyaza()); + Assert.assertTrue(astro.isPyathada()); + Assert.assertTrue(astro.isSabbath()); + } + + @Test + public void testAfternoonPyathada(){ + MyanmarDate myanmarDate = MyanmarDate.of(2024, 3, 13); + Astro astro = Astro.of(myanmarDate); + assertEquals("ရက်ရာဇာ၊ မွန်းလွဲ ပြဿဒါး", astro.getAstrologicalDay(Language.MYANMAR)); + } + + @Test + public void equalsTest() { + MyanmarDate myanmarDate = MyanmarDate.of(LocalDate.of(2024, 1, 4)); + Astro astro = Astro.of(myanmarDate); + MyanmarDate myanmarDateTwo = MyanmarDate.of(LocalDateTime.of(2024, 1, 4, 0, 0, 0)); + Astro astroResult = Astro.of(myanmarDateTwo); + assertEquals(astro, astroResult); + } + + @Test + public void hashCodeTest() { + MyanmarDate myanmarDate = MyanmarDate.of(LocalDate.of(2024, 1, 4)); + Astro astro = Astro.of(myanmarDate); + assertThat(-463661218, is(astro.hashCode())); } } diff --git a/src/test/java/mmcalendar/ConfigTest.java b/src/test/java/mmcalendar/ConfigTest.java index 614120b..ccd51e0 100644 --- a/src/test/java/mmcalendar/ConfigTest.java +++ b/src/test/java/mmcalendar/ConfigTest.java @@ -1,11 +1,19 @@ package mmcalendar; +import org.junit.BeforeClass; import org.junit.Test; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertEquals; public class ConfigTest { + @BeforeClass + public static void beforeClass() { + Config.getInstance(); + } + @Test public void initTest() { Config.initDefault( @@ -19,6 +27,8 @@ public void initTest() { Language language = Config.getInstance().getLanguage(); assertEquals(CalendarType.GREGORIAN, calendarType); + assertEquals("Gregorian", calendarType.getLabel()); + assertThat(1, is(calendarType.getNumber())); assertEquals(Language.MON, language); } @@ -37,4 +47,14 @@ public void initFunctional() { assertEquals(CalendarType.JULIAN, calendarType); assertEquals(Language.TAI, language); } + + @Test(expected = IllegalArgumentException.class) + public void buildExpection() { + Config.initDefault( + it -> + it.setCalendarType(null) + .setLanguage(null) + + ); + } } diff --git a/src/test/java/mmcalendar/DateTimeUtilsTest.java b/src/test/java/mmcalendar/DateTimeUtilsTest.java deleted file mode 100644 index cea910d..0000000 --- a/src/test/java/mmcalendar/DateTimeUtilsTest.java +++ /dev/null @@ -1,43 +0,0 @@ -package mmcalendar; - -import mmcalendar.util.DateTimeUtils; -import org.junit.Test; - -import java.time.LocalDate; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertEquals; - -public class DateTimeUtilsTest { - - @Test - public void toJulian() { - LocalDate localDate = LocalDate.of(2023, 12, 30); - double jd = DateTimeUtils.toJulian(localDate); - assertThat(2460309.0, is(jd)); - } - - @Test - public void unixTimeToJulian() { - long unix = 1703895000; - double jd = DateTimeUtils.unixTimeToJulian(unix); - assertThat(2460308.5069444445, is(jd)); - } - - @Test - public void julianToUnixTime() { - double jd = 2460308.5069444445; - long unix = DateTimeUtils.julianToUnixTime(jd); - assertThat(1703895000L, is(unix)); - } - - @Test - public void u2jVsj2u() { - long unix = 1703895000; - double jd = DateTimeUtils.unixTimeToJulian(unix); - long reverse = DateTimeUtils.julianToUnixTime(jd); - assertEquals(unix, reverse); - } - -} diff --git a/src/test/java/mmcalendar/HolidayCalculatorTest.java b/src/test/java/mmcalendar/HolidayCalculatorTest.java index 24e0c0e..24b898d 100644 --- a/src/test/java/mmcalendar/HolidayCalculatorTest.java +++ b/src/test/java/mmcalendar/HolidayCalculatorTest.java @@ -3,31 +3,32 @@ import org.junit.Assert; import org.junit.Test; -import java.util.Arrays; import java.util.Collections; import java.util.List; +import static org.junit.Assert.assertEquals; + public class HolidayCalculatorTest { @Test public void englishHoliday() { List holiday = HolidayCalculator.englishHoliday(2017, 1, 4); List actualList = Collections.singletonList("Independence Day"); - Assert.assertEquals(actualList, holiday); + assertEquals(actualList, holiday); } @Test public void myanmarHoliday() { List holiday = HolidayCalculator.myanmarHoliday(1385, 4, 15, 1); List actualList = Collections.singletonList("Start of Buddhist Lent"); - Assert.assertEquals(actualList, holiday); + assertEquals(actualList, holiday); } @Test public void thingyan() { List thingyan = HolidayCalculator.thingyan(2460052, 1385, 0); List actualList = Collections.singletonList("Myanmar New Year Day"); - Assert.assertEquals(actualList, thingyan); + assertEquals(actualList, thingyan); } @Test @@ -35,7 +36,7 @@ public void getHoliday() { MyanmarDate myanmarDate = MyanmarDate.of(2460052); List thingyan = HolidayCalculator.getHoliday(myanmarDate); List actualList = Collections.singletonList("Myanmar New Year Day"); - Assert.assertEquals(actualList, thingyan); + assertEquals(actualList, thingyan); } @Test @@ -45,4 +46,14 @@ public void isHoliday() { Assert.assertTrue("holiday", isHoliday); } + @Test + public void getAnniversary() { + MyanmarDate newYearDate = MyanmarDate.of(2017, 1, 1); + String newYear = HolidayCalculator.getAnniversary(newYearDate).get(0); + assertEquals("New Year Day", newYear); + + MyanmarDate aungSanBDDate = MyanmarDate.of(2024, 2, 13); + String aungSanBD = HolidayCalculator.getAnniversary(aungSanBDDate).get(0); + assertEquals("G. Aung San BD", aungSanBD); + } } diff --git a/src/test/java/mmcalendar/JavaDateTimeTest.java b/src/test/java/mmcalendar/JavaDateTimeTest.java index b2d31dc..bed7396 100644 --- a/src/test/java/mmcalendar/JavaDateTimeTest.java +++ b/src/test/java/mmcalendar/JavaDateTimeTest.java @@ -19,7 +19,7 @@ public void checkWithSystemTimeCalendar() { MyanmarDate myanmarDate = MyanmarDate.of(localDateTime); Assert.assertEquals(1385, myanmarDate.getYearValue()); - WesternDate westernDate = WesternDateKernel.julianToWestern(myanmarDate.getJulianDayNumber(), CalendarType.ENGLISH); + WesternDate westernDate = WesternDate.of(myanmarDate.getJulianDayNumber(), CalendarType.ENGLISH); Assert.assertEquals(2024, westernDate.getYear()); } diff --git a/src/test/java/mmcalendar/LanguageTest.java b/src/test/java/mmcalendar/LanguageTest.java new file mode 100644 index 0000000..fbc9adb --- /dev/null +++ b/src/test/java/mmcalendar/LanguageTest.java @@ -0,0 +1,17 @@ +package mmcalendar; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class LanguageTest { + + @Test + public void testLanguage() { + Language language = Language.MYANMAR; + + assertEquals(1, language.getLanguageIndex()); + assertEquals("၊ ", language.getPunctuationMark()); + assertEquals("။ ", language.getPunctuation()); + } +} diff --git a/src/test/java/mmcalendar/MyanmarCalendarKernelTest.java b/src/test/java/mmcalendar/MyanmarCalendarKernelTest.java index 9ed2a1f..4ae3258 100644 --- a/src/test/java/mmcalendar/MyanmarCalendarKernelTest.java +++ b/src/test/java/mmcalendar/MyanmarCalendarKernelTest.java @@ -16,11 +16,11 @@ public class MyanmarCalendarKernelTest { @BeforeClass public static void beforeClass() { -// Config.initDefault( -// new Config.Builder() -// .setCalendarType(CalendarType.ENGLISH) -// .setLanguage(Language.ENGLISH) -// .build()); + Config.initDefault( + new Config.Builder() + .setCalendarType(CalendarType.ENGLISH) + .setLanguage(Language.MYANMAR) + .build()); // သာသနာနှစ် ၂၅၆၇ ခု, မြန်မာနှစ် ၁၃၈၅ ခု, တန်ခူး လကွယ် ရက် အင်္ဂါနေ့ int jdn = 2460053; @@ -87,10 +87,54 @@ public void calculateRelatedMyanmarMonths() { Assert.assertEquals("Nayon", myanmarMonth.getCalculationMonthName()); } + + @Test + public void getCalendarHeaderForWesternStyle() { + String head = MyanmarCalendarKernel.getCalendarHeaderForWesternStyle(2024, 4); + String actual = "သာသနာနှစ် ၂၅၆၇ - ၂၅၆၈ ခု မြန်မာနှစ် ၁၃၈၅ - ၁၃၈၆ ခု တပေါင်း - တန်ခူး"; + Assert.assertEquals(actual, head); + } + @Test public void getCalendarHeader() { - String head = MyanmarCalendarKernel.getCalendarHeader(1380, 2, 14); - String actual = "သာသနာနှစ် ၂၅၆၂ ခု မြန်မာနှစ် ၁၃၈၀ ခု ကဆုန် - နယုန်"; + String head = MyanmarCalendarKernel.getCalendarHeader(1380, 2); + String actual = "သာသနာနှစ် ၂၅၆၁ - ၂၅၆၂ ခု မြန်မာနှစ် ၁၃၇၉ - ၁၃၈၀ ခု နှောင်းကဆုန် - ကဆုန်"; + Assert.assertEquals(actual, head); + } + + @Test + public void getCalendarHeader2() { + String monthName = "Tagu"; + int monthIndex = MyanmarDateKernel.searchMyanmarMonthNumber(monthName); + String head = MyanmarCalendarKernel.getCalendarHeader(1385, monthIndex); + String actual = "သာသနာနှစ် ၂၅၆၆ - ၂၅၆၇ ခု မြန်မာနှစ် ၁၃၈၄ - ၁၃၈၅ ခု နှောင်းတန်ခူး - တန်ခူး"; + Assert.assertEquals(actual, head); + } + + @Test + public void getHeaderForBuddhistEra() { + MyanmarDate startDate = MyanmarDate.of(2024, 1, 1); + MyanmarDate endDate = MyanmarDate.of(2024, 4, 30); + String head = MyanmarCalendarKernel.getHeaderForBuddhistEra(startDate, endDate, Language.MYANMAR); + String actual = "သာသနာနှစ် ၂၅၆၇ - ၂၅၆၈ ခု"; + Assert.assertEquals(actual, head); + } + + @Test + public void getHeaderForMyanmarYear() { + MyanmarDate startDate = MyanmarDate.of(2024, 4, 1); + MyanmarDate endDate = MyanmarDate.of(2024, 4, 30); + String head = MyanmarCalendarKernel.getHeaderForMyanmarYear(startDate, endDate, Language.MYANMAR); + String actual = "မြန်မာနှစ် ၁၃၈၅ - ၁၃၈၆ ခု"; + Assert.assertEquals(actual, head); + } + + @Test + public void getHeaderForMyanmarMonth() { + MyanmarDate startDate = MyanmarDate.of(2024, 4, 1); + MyanmarDate endDate = MyanmarDate.of(2024, 4, 30); + String head = MyanmarCalendarKernel.getHeaderForMyanmarMonth(startDate, endDate, Language.MYANMAR); + String actual = "တပေါင်း - တန်ခူး"; Assert.assertEquals(actual, head); } @@ -101,6 +145,12 @@ public void calculateMyanmarYearLength() { assertThat(385, is(yearLength)); } + @Test + public void calculateYearType() { + int yearType = MyanmarCalendarKernel.calculateYearType(myanmarDate.getYearValue()); + assertThat(2, is(yearType)); + } + @Test public void calculateLengthOfMonth() { // length of the month @@ -128,4 +178,11 @@ public void calculateDayOfMonthByYearType() { int monthDay = MyanmarCalendarKernel.calculateDayOfMonthByYearType(myanmarDate.getYearType(), myanmarDate.getMonth(), myanmarDate.getMoonPhaseValue(), myanmarDate.getFortnightDayValue()); assertThat(29, is(monthDay)); } + + @Test + public void calculateDayOfMonth() { + // day of month + int monthDay = MyanmarCalendarKernel.calculateDayOfMonth(myanmarDate.getYearValue(), myanmarDate.getMonth(), myanmarDate.getMoonPhaseValue(), myanmarDate.getFortnightDayValue()); + assertThat(29, is(monthDay)); + } } diff --git a/src/test/java/mmcalendar/MyanmarDateKernelTest.java b/src/test/java/mmcalendar/MyanmarDateKernelTest.java index 1510c95..2e8e4c3 100644 --- a/src/test/java/mmcalendar/MyanmarDateKernelTest.java +++ b/src/test/java/mmcalendar/MyanmarDateKernelTest.java @@ -5,21 +5,18 @@ import org.junit.BeforeClass; import org.junit.Test; -import java.time.LocalDateTime; +import java.time.DateTimeException; import java.util.Map; - +import static mmcalendar.Constants.EMA; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; - -import static org.hamcrest.Matchers.hasItem; import static org.junit.Assert.assertEquals; public class MyanmarDateKernelTest { @BeforeClass public static void beforeClass() { - // Config.init(CalendarType.ENGLISH, Language.ENGLISH); Config.initDefault( new Config.Builder() .setCalendarType(CalendarType.ENGLISH) @@ -102,16 +99,33 @@ public void getJulianDayNumber() { double julianDayNumber = MyanmarDateKernel.getJulianDayNumber(year, myanmarMonthName, day); - assertEquals(2458252.0, julianDayNumber, 0.0001); + assertEquals(2458252.0, julianDayNumber, 0.0001); + } - MyanmarDate myanmarDate = MyanmarDate.of(julianDayNumber); + @Test(expected = DateTimeException.class) + public void getJulianDayNumberException() { + MyanmarDateKernel.getJulianDayNumber(2024, "hello", 1); + } - Language language = Language.MYANMAR; - String aspects = "သာသနာနှစ် ၂၅၆၂ ခု, မြန်မာနှစ် ၁၃၈၀ ခု, ကဆုန် လဆုတ် ၁၄ ရက် တနင်္ဂနွေ နေ့"; - assertEquals(aspects, myanmarDate.toString(language)); + @Test + public void searchMyanmarMonth() { + for (int i = 0; i < EMA.length; i++) { + int monthIndex = MyanmarDateKernel.searchMyanmarMonthNumber(EMA[i]); + assertThat(i, is(monthIndex)); + } + + assertThat(-1, is(MyanmarDateKernel.searchMyanmarMonthNumber("hello"))); + } + + @Test + public void searchMoonPhase() { - LocalDateTime aspectDate = LocalDateTime.of(2018, 5, 13, 12, 0); - assertEquals(aspectDate, myanmarDate.toMyanmarLocalDateTime()); + String[] moonPhase = {"waxing", "full moon", "waning", "new moon"}; + for (int i = 0; i < moonPhase.length; i++) { + int index = MyanmarDateKernel.searchMoonPhase(moonPhase[i]); + assertThat(i, is(index)); + } + assertThat(-1, is(MyanmarDateKernel.searchMoonPhase("hello"))); } } diff --git a/src/test/java/mmcalendar/MyanmarDateTest.java b/src/test/java/mmcalendar/MyanmarDateTest.java index e68b9f7..702047c 100644 --- a/src/test/java/mmcalendar/MyanmarDateTest.java +++ b/src/test/java/mmcalendar/MyanmarDateTest.java @@ -1,10 +1,44 @@ package mmcalendar; +import org.junit.AfterClass; import org.junit.Assert; +import org.junit.BeforeClass; import org.junit.Test; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneOffset; +import java.util.Calendar; +import java.util.Date; + +import static mmcalendar.Constants.MYANMAR_ZONE_ID; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.*; + public class MyanmarDateTest { + @BeforeClass + public static void beforeClass() { + + Config.initDefault( + new Config.Builder() + .setCalendarType(CalendarType.ENGLISH) + .setLanguage(Language.MYANMAR) + .build()); + + } + + // execute after class + @AfterClass + public static void afterClass() { + Config.initDefault( + new Config.Builder() + .setCalendarType(CalendarType.ENGLISH) + .setLanguage(Language.MYANMAR) + .build()); + } + @Test public void outputsInEnglish() { MyanmarDate myanmarDate = MyanmarDate.of(1989, 4, 15); @@ -21,6 +55,183 @@ public void outputsInMyanmarBurmese() { Language language = Language.MYANMAR; String aspectMyanmarResult = "သာသနာနှစ် ၂၅၃၂ ခု, မြန်မာနှစ် ၁၃၅၀ ခု, နှောင်းတန်ခူး လဆန်း ၁၀ ရက် စနေနေ့"; Assert.assertEquals(aspectMyanmarResult, myanmarDate.format(format, language)); + assertTrue(myanmarDate.isWeekend()); + assertEquals("Late", myanmarDate.getMnt(Language.ENGLISH)); + } + + @Test + public void objectCreation() { + LocalDateTime localDateTime = LocalDateTime.now(MYANMAR_ZONE_ID); + MyanmarDate myanmarDate = MyanmarDate.of(localDateTime); + MyanmarDate myanmarDate2 = MyanmarDate.create(myanmarDate.getYearValue(), myanmarDate.getMonthName(Language.ENGLISH), myanmarDate.getMoonPhase(Language.ENGLISH), myanmarDate.getFortnightDayValue()); + assertTrue(myanmarDate.hasSameDay(myanmarDate2)); + MyanmarDate myanmarDate3 = MyanmarDate.of(myanmarDate.getJulianDayNumber()); + assertTrue(myanmarDate.hasSameDay(myanmarDate3)); + + MyanmarDate myanmarDate4 = MyanmarDate.ofEpochSecond(localDateTime.toEpochSecond(ZoneOffset.ofTotalSeconds(0)), MYANMAR_ZONE_ID); + assertTrue(myanmarDate.hasSameDay(myanmarDate4)); + + Calendar calendar = Calendar.getInstance(); + MyanmarDate myanmarDate5 = MyanmarDate.of(calendar); + assertTrue(myanmarDate.hasSameDay(myanmarDate5)); + + MyanmarDate myanmarDateFromJavaDate = MyanmarDate.of(new Date()); + assertTrue(myanmarDate.hasSameDay(myanmarDateFromJavaDate)); + + LocalDateTime returnMyanmarLocalDate = myanmarDate.toMyanmarLocalDateTime(); + + assertThat(localDateTime.getYear(), is(returnMyanmarLocalDate.getYear())); + assertThat(localDateTime.getMonthValue(), is(returnMyanmarLocalDate.getMonthValue())); + assertThat(localDateTime.getDayOfMonth(), is(returnMyanmarLocalDate.getDayOfMonth())); + assertThat(localDateTime.getHour(), is(returnMyanmarLocalDate.getHour())); + assertThat(localDateTime.getMinute(), is(returnMyanmarLocalDate.getMinute())); + assertThat(localDateTime.getSecond(), is(returnMyanmarLocalDate.getSecond())); + } + + @Test + public void toLocalDateTimeTest() { + LocalDateTime localDateTime = LocalDateTime.now(MYANMAR_ZONE_ID); + MyanmarDate myanmarDate = MyanmarDate.of(localDateTime); + + LocalDateTime returnMyanmarLocalDateTime = myanmarDate.toMyanmarLocalDateTime(); + + assertThat(localDateTime.getYear(), is(returnMyanmarLocalDateTime.getYear())); + assertThat(localDateTime.getMonthValue(), is(returnMyanmarLocalDateTime.getMonthValue())); + assertThat(localDateTime.getDayOfMonth(), is(returnMyanmarLocalDateTime.getDayOfMonth())); + assertThat(localDateTime.getHour(), is(returnMyanmarLocalDateTime.getHour())); + assertThat(localDateTime.getMinute(), is(returnMyanmarLocalDateTime.getMinute())); + assertThat(localDateTime.getSecond(), is(returnMyanmarLocalDateTime.getSecond())); + + LocalDateTime localDateTimeMM = myanmarDate.toLocalDateTime(MYANMAR_ZONE_ID); + assertEquals(returnMyanmarLocalDateTime, localDateTimeMM); + + LocalDate returnMyanmarLocalDate = myanmarDate.toMyanmarLocalDate(); + LocalDate localDate = myanmarDate.toLocalDate(MYANMAR_ZONE_ID); + + assertEquals(returnMyanmarLocalDate, localDate); + } + + @Test + public void timeTest() { + LocalDateTime localDateTime = LocalDateTime.now(MYANMAR_ZONE_ID); + MyanmarDate myanmarDate = MyanmarDate.of(localDateTime, MYANMAR_ZONE_ID); + + assertThat(localDateTime.getHour(), is(myanmarDate.getHour())); + assertThat(localDateTime.getMinute(), is(myanmarDate.getMinute())); + assertThat(localDateTime.getSecond(), is(myanmarDate.getSecond())); + } + + @Test + public void fieldTest() { + // 2023-August-01 + MyanmarDate myanmarDate = MyanmarDate.of(2460158); + assertThat(2567, is(myanmarDate.getBuddhistEraValue())); + assertEquals("၂၅၆၇", myanmarDate.getBuddhistEra()); + assertEquals("၁၃၈၅", myanmarDate.getYear()); + assertEquals("ဒု", myanmarDate.getMnt()); + assertEquals("ဒု", myanmarDate.getMnt(Language.MYANMAR)); + assertEquals("ဒု ဝါဆို", myanmarDate.getMonthName(Language.MYANMAR)); + assertThat(385, is(myanmarDate.lengthOfYear())); + assertEquals("လပြည့်", myanmarDate.getMoonPhase()); + assertEquals("", myanmarDate.getFortnightDay()); + assertEquals("အင်္ဂါ", myanmarDate.getWeekDay()); + assertFalse(myanmarDate.isWeekend()); } + @Test + public void formatTest() { + MyanmarDate myanmarDate = MyanmarDate.of(2024, 1, 6); + String format = "B y k၊ M p f r E n"; + String expected = "မြန်မာနှစ် ၁၃၈၅ ခု၊ နတ်တော် လဆုတ် ၁၀ ရက် စနေ နေ့"; + assertEquals(expected, myanmarDate.format(format, Language.MYANMAR)); + assertEquals(expected, myanmarDate.format(format)); + } + + @Test + public void formatExceptionTest() { + MyanmarDate myanmarDate = MyanmarDate.of(2024, 1, 6); + assertThrows(IllegalArgumentException.class, () -> { + myanmarDate.format(null, Language.MYANMAR); + }); + assertThrows(IllegalArgumentException.class, () -> { + myanmarDate.format("s", null); + }); + } + + @Test + public void hasSameDay(){ + MyanmarDate myanmarDate1 = MyanmarDate.of(2024, 1, 6); + MyanmarDate myanmarDate2 = MyanmarDate.of(2024, 1, 7); + assertFalse(myanmarDate1.hasSameDay(myanmarDate2)); + + MyanmarDate myanmarDate3 = MyanmarDate.of(2024, 1, 6); + MyanmarDate myanmarDate4 = MyanmarDate.of(2024, 2, 6); + assertFalse(myanmarDate3.hasSameDay(myanmarDate4)); + + MyanmarDate myanmarDate5 = MyanmarDate.of(2023, 1, 6); + MyanmarDate myanmarDate6 = MyanmarDate.of(2024, 1, 6); + assertFalse(myanmarDate5.hasSameDay(myanmarDate6)); + } + + @Test + public void hashEqual(){ + MyanmarDate myanmarDate1 = MyanmarDate.of(2024, 1, 6); + assertThat(806872610, is(myanmarDate1.hashCode())); + MyanmarDate myanmarDate2 = MyanmarDate.of(2460316); + assertEquals(myanmarDate1, myanmarDate2); + } + + @Test + public void startMyanmarDate() { + MyanmarDate myanmarDate = MyanmarDate.of(1954900.0); + String expected = "သာသနာနှစ် ၁၁၈၄ ခု, မြန်မာနှစ် ၂ ခု, တန်ခူး လဆုတ် ၁၁ ရက် ကြာသပတေး နေ့"; + assertEquals(expected, myanmarDate.toString()); + assertEquals("0640-03-23", myanmarDate.toMyanmarLocalDate().toString()); + + } + + @Test + public void beforeSkipDay() { + LocalDateTime startMyanmarLocalDate = LocalDateTime.of(640, 3, 23, 12, 0); + + LocalDateTime localDateTime = LocalDateTime.of(1752, 9, 2, 12, 0); + + while (startMyanmarLocalDate.isBefore(localDateTime)) { + + startMyanmarLocalDate = startMyanmarLocalDate.plusDays(1); + MyanmarDate aspectedMyanmarDate = MyanmarDate.of(startMyanmarLocalDate); + WesternDate wd = WesternDate.of(aspectedMyanmarDate.getJulianDayNumber()); + assertThat(startMyanmarLocalDate.getYear(), is(wd.getYear())); + assertThat(startMyanmarLocalDate.getMonthValue(), is(wd.getMonth())); + assertThat(startMyanmarLocalDate.getDayOfMonth(), is(wd.getDay())); + assertThat(startMyanmarLocalDate.getHour(), is(wd.getHour())); + assertThat(startMyanmarLocalDate.getMinute(), is(wd.getMinute())); + assertThat(startMyanmarLocalDate.getSecond(), is(wd.getSecond())); + } + } + + @Test + public void afterSkipDay() { + // To correct this, the Gregorian calendar was introduced by Pope Gregory XIII in 1582. + // The adjustment involved skipping 11 days to bring the calendar back in line with the astronomical year. + // In September 1752, the dates were adjusted by omitting the period from September 3rd to September 13th. + // So, in that year, September 2nd was followed by September 14th, effectively aligning the calendar with the new Gregorian system. + LocalDateTime startMyanmarLocalDate = LocalDateTime.of(1752, 9, 14, 12, 0); + + LocalDateTime localDateTime = LocalDateTime.now(MYANMAR_ZONE_ID); + + while (startMyanmarLocalDate.isBefore(localDateTime)) { + + startMyanmarLocalDate = startMyanmarLocalDate.plusDays(1); + MyanmarDate aspectedMyanmarDate = MyanmarDate.of(startMyanmarLocalDate); + WesternDate wd = WesternDate.of(aspectedMyanmarDate.getJulianDayNumber()); + + assertThat(startMyanmarLocalDate.getYear(), is(wd.getYear())); + assertThat(startMyanmarLocalDate.getMonthValue(), is(wd.getMonth())); + assertThat(startMyanmarLocalDate.getDayOfMonth(), is(wd.getDay())); + assertThat(startMyanmarLocalDate.getHour(), is(wd.getHour())); + assertThat(startMyanmarLocalDate.getMinute(), is(wd.getMinute())); + assertThat(startMyanmarLocalDate.getSecond(), is(wd.getSecond())); + } + } } diff --git a/src/test/java/mmcalendar/MyanmarMonthsTest.java b/src/test/java/mmcalendar/MyanmarMonthsTest.java index d108ead..2afc99c 100644 --- a/src/test/java/mmcalendar/MyanmarMonthsTest.java +++ b/src/test/java/mmcalendar/MyanmarMonthsTest.java @@ -24,9 +24,8 @@ public void getMyanmarMonth() { public void getAllMonthNames() { int year = 1381; List myanmarNameList = calculateRelatedMyanmarMonthNames(year); - myanmarNameList.forEach(System.out::println); - String[] aspects = { + final String[] aspects = { "Tagu", "Kason", "Nayon", @@ -45,6 +44,40 @@ public void getAllMonthNames() { assertArrayEquals(aspects, myanmarNameList.toArray()); } + @Test + public void getAllMonthNamesTai() { + int myear = 1381; + MyanmarMonths myanmarMonths = MyanmarCalendarKernel.calculateRelatedMyanmarMonths(myear, 0); + List myanmarNameList = myanmarMonths.getMonthNameList(Language.TAI); + + final String[] taiMonthNames = {"ႁႃႈ", "ႁူၵ်း", "ၸဵတ်း", "ပႅတ်ႇ", "ၵဝ်ႈ", + "သိပ်း", "သိပ်းဢဵတ်း", "သိပ်းသွင်", "ၸဵင်", "ၵမ်", "သၢမ်", "သီႇ", "ဝၢႆးႁႃႈ", + }; + + assertArrayEquals(taiMonthNames, myanmarNameList.toArray()); + + final String[] monthNames = { + "Tagu", "Kason", "Nayon", "Waso", "Wagaung", "Tawthalin", "Thadingyut", + "Tazaungmon", "Nadaw", "Pyatho", "Tabodwe", "Tabaung", "Late Tagu", + }; + + assertArrayEquals(monthNames, myanmarMonths.getMonthNameList(Language.ENGLISH).toArray()); + } + + @Test + public void getAllMonthNamesLate() { + int myear = 1385; + MyanmarMonths myanmarMonths = MyanmarCalendarKernel.calculateRelatedMyanmarMonths(myear, 13); + + final String[] monthNames = { + "Tagu", "Kason", "Nayon", "First Waso", "Second Waso", "Wagaung", + "Tawthalin", "Thadingyut", + "Tazaungmon", "Nadaw", "Pyatho", "Tabodwe", "Tabaung", "Late Tagu", + }; + + assertArrayEquals(monthNames, myanmarMonths.getMonthNameList(Language.ENGLISH).toArray()); + } + public static List calculateRelatedMyanmarMonthNames(int myear) { return MyanmarCalendarKernel.calculateRelatedMyanmarMonths(myear, 0).getMonthNameList(); } diff --git a/src/test/java/mmcalendar/MyanmarThingyanDateTimeTest.java b/src/test/java/mmcalendar/MyanmarThingyanDateTimeTest.java index 241d907..02242c4 100644 --- a/src/test/java/mmcalendar/MyanmarThingyanDateTimeTest.java +++ b/src/test/java/mmcalendar/MyanmarThingyanDateTimeTest.java @@ -4,9 +4,9 @@ import java.time.LocalTime; import java.time.ZonedDateTime; -import java.util.List; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; public class MyanmarThingyanDateTimeTest { @@ -35,4 +35,20 @@ public void create() { ZonedDateTime zonedDateTime = myanmarThingyanDateTime.getAkyaTime().toMyanmarZonedDateTime(); assertEquals("2024-04-14T00:24:45+06:30[Asia/Rangoon]", zonedDateTime.toString()); } + + @Test + public void calculateDoubleAkyatDay() { + MyanmarThingyanDateTime thingyan = MyanmarThingyanDateTime.of(1382); + + MyanmarDate akyatDaate1 = thingyan.getAkyatDays()[0]; + MyanmarDate akyatDaate2 = thingyan.getAkyatDays()[1]; + + String monthName = LanguageTranslator.translate(akyatDaate1.getMonthName(), Language.MYANMAR, Language.ENGLISH); + + MyanmarDate expectedDay1 = MyanmarDate.create(akyatDaate1.getYearValue(), monthName, akyatDaate1.getDayOfMonth()); + MyanmarDate expectedDay2 = MyanmarDate.create(akyatDaate2.getYearValue(), akyatDaate2.getMonth(), akyatDaate2.getDayOfMonth()); + + assertTrue(akyatDaate1.hasSameDay(expectedDay1)); + assertTrue(akyatDaate2.hasSameDay(expectedDay2)); + } } diff --git a/src/test/java/mmcalendar/ThingyanTest.java b/src/test/java/mmcalendar/ThingyanTest.java index 8da4912..7c22d08 100644 --- a/src/test/java/mmcalendar/ThingyanTest.java +++ b/src/test/java/mmcalendar/ThingyanTest.java @@ -1,19 +1,42 @@ package mmcalendar; -import static org.junit.Assert.assertEquals; - import org.junit.Test; +import java.time.DateTimeException; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; + public class ThingyanTest { - @Test - public void calculate() { - Thingyan thingyan = Thingyan.of(1379); - - assertEquals(2457858.0, thingyan.getAkyaDay(), 0); - assertEquals(2457857.7058919813, thingyan.getAkyaTime(), 0); + @Test(expected = DateTimeException.class) + public void catchException() { + Thingyan.of(1099); + } + + @Test + public void calculate() { + Thingyan thingyan = Thingyan.of(1379); + + assertEquals(2457858.0, thingyan.getAkyaDay(), 0); + assertEquals(2457857.7058919813, thingyan.getAkyaTime(), 0); + + assertEquals(2457860.0, thingyan.getAtatDay(), 0); + assertEquals(2457859.875810963, thingyan.getAtatTime(), 0); + } + + @Test + public void calculateDoubleAkyatDay() { + Thingyan thingyan = Thingyan.of(1382); + + assertEquals(2458953.0, thingyan.getAkyaDay(), 0); + assertEquals(2458953.4821614255, thingyan.getAkyaTime(), 0); + + assertEquals(2458956.0, thingyan.getAtatDay(), 0); + assertEquals(2458955.6520804074, thingyan.getAtatTime(), 0); + + double[] akyatDays = {2458954.0, 2458955.0}; - assertEquals(2457860.0, thingyan.getAtatDay(), 0); - assertEquals(2457859.875810963, thingyan.getAtatTime(), 0); - } + assertArrayEquals(akyatDays, thingyan.getAkyatDay(), 0); + } } diff --git a/src/test/java/mmcalendar/WesternDateConverterTest.java b/src/test/java/mmcalendar/WesternDateConverterTest.java deleted file mode 100644 index 6b0cde7..0000000 --- a/src/test/java/mmcalendar/WesternDateConverterTest.java +++ /dev/null @@ -1,28 +0,0 @@ -package mmcalendar; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.is; - -import org.junit.Test; - -public class WesternDateConverterTest { - - @Test - public void julianToWestern() { - - double jd = 2457857.7058912036; - WesternDate westernDate = WesternDateKernel.julianToWestern(jd, Config.getInstance().getCalendarType()); - - assertThat(2017, is(westernDate.getYear())); - assertThat(4, is(westernDate.getMonth())); - assertThat(14, is(westernDate.getDay())); - assertThat(4, is(westernDate.getHour())); - assertThat(56, is(westernDate.getMinute())); - assertThat(29, is(westernDate.getSecond())); - - double result = WesternDateKernel.westernToJulian(westernDate, Config.getInstance().getCalendarType(), 0); - - assertThat(jd, is(result)); - - } -} diff --git a/src/test/java/mmcalendar/WesternDateKernelTest.java b/src/test/java/mmcalendar/WesternDateKernelTest.java index d6cf950..cd6fa83 100644 --- a/src/test/java/mmcalendar/WesternDateKernelTest.java +++ b/src/test/java/mmcalendar/WesternDateKernelTest.java @@ -50,6 +50,8 @@ public void getJulianDayNumberOfStartOfMonth() { public void getLengthOfMonth() { assertThat(28, is(WesternDateKernel.getLengthOfMonth(2023, 2, 0))); assertThat(29, is(WesternDateKernel.getLengthOfMonth(2024, 2, 0))); + assertThat(19, is(WesternDateKernel.getLengthOfMonth(1752 , 9, 0))); + assertThat(29, is(WesternDateKernel.getLengthOfMonth(1600 , 2, 0))); } @Test diff --git a/src/test/java/mmcalendar/WesternDateTest.java b/src/test/java/mmcalendar/WesternDateTest.java new file mode 100644 index 0000000..d44ae7d --- /dev/null +++ b/src/test/java/mmcalendar/WesternDateTest.java @@ -0,0 +1,62 @@ +package mmcalendar; + +import org.junit.Test; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertEquals; + +public class WesternDateTest { + + @Test + public void ofMyanmarDate() { + MyanmarDate myanmarDate = MyanmarDate.of(2024, 1, 1); + WesternDate westernDate = WesternDate.of(myanmarDate); + assertThat(2024, is(westernDate.getYear())); + assertThat(1, is(westernDate.getMonth())); + assertThat(1, is(westernDate.getDay())); + assertThat(12, is(westernDate.getHour())); + assertThat(0, is(westernDate.getMinute())); + assertThat(0, is(westernDate.getSecond())); + + WesternDate westernDate1 = WesternDate.of(myanmarDate, CalendarType.ENGLISH); + assertEquals(westernDate, westernDate1); + } + + @Test + public void of() { + + double jd = 2457857.7058912036; + WesternDate westernDate = WesternDate.of(jd, Config.getInstance().getCalendarType()); + + assertThat(2017, is(westernDate.getYear())); + assertThat(4, is(westernDate.getMonth())); + assertThat(14, is(westernDate.getDay())); + assertThat(4, is(westernDate.getHour())); + assertThat(56, is(westernDate.getMinute())); + assertThat(29, is(westernDate.getSecond())); + + double result = westernDate.toJulian(Config.getInstance().getCalendarType(), 0); + + assertThat(jd, is(result)); + } + + @Test + public void to() { + + double jd = 2457857.7058912036; + WesternDate westernDate = WesternDate.of(jd); + + assertThat(2017, is(westernDate.getYear())); + assertThat(4, is(westernDate.getMonth())); + assertThat(14, is(westernDate.getDay())); + assertThat(4, is(westernDate.getHour())); + assertThat(56, is(westernDate.getMinute())); + assertThat(29, is(westernDate.getSecond())); + + double result = westernDate.toJulian(); + + assertThat(jd, is(result)); + + } +} diff --git a/src/test/java/mmcalendar/WesternDateTestSuite.java b/src/test/java/mmcalendar/WesternDateTestSuite.java index 2973387..f7e6364 100644 --- a/src/test/java/mmcalendar/WesternDateTestSuite.java +++ b/src/test/java/mmcalendar/WesternDateTestSuite.java @@ -6,7 +6,7 @@ @RunWith(Suite.class) @Suite.SuiteClasses({ - WesternDateConverterTest.class, + WesternDateTest.class, WesternDateKernelTest.class }) public class WesternDateTestSuite {