public void FiscalYearGetMonthsTest() { const int quarterCount = 8; Quarters halfyears = new Quarters(2006, YearQuarter.First, quarterCount, GetFiscalYearCalendar(FiscalYearAlignment.LastDay)); ITimePeriodCollection months = halfyears.GetMonths(); Assert.AreNotEqual(months, null); Assert.AreEqual(months.Count, TimeSpec.MonthsPerQuarter * quarterCount); Assert.AreEqual(months[0].Start, new DateTime(2006, 8, 27)); for (int i = 0; i < months.Count; i++) { Month month = (Month)months[i]; // last month of a leap year (6 weeks) // http://en.wikipedia.org/wiki/4-4-5_Calendar if ((month.YearMonth == YearMonth.August) && (month.Year == 2008 || month.Year == 2013 || month.Year == 2019)) { Assert.AreEqual(month.Duration.Subtract(TimeCalendar.DefaultEndOffset).Days, TimeSpec.FiscalDaysPerLeapMonth); } else if ((i + 1) % 3 == 0) // first and second month of quarter (4 weeks) { Assert.AreEqual(month.Duration.Subtract(TimeCalendar.DefaultEndOffset).Days, TimeSpec.FiscalDaysPerLongMonth); } else // third month of quarter (5 weeks) { Assert.AreEqual(month.Duration.Subtract(TimeCalendar.DefaultEndOffset).Days, TimeSpec.FiscalDaysPerShortMonth); } } Assert.AreEqual(months[(TimeSpec.MonthsPerQuarter * quarterCount) - 1].End, halfyears.End); } // FiscalYearGetMonthsTest