+ ASSERT_EQ(30, PreviousMonthNumberofDays(12, 2015));
+
+ // Test the year 2016 (has a leap year).
+
+ ASSERT_EQ(31, PreviousMonthNumberofDays(1, 2016));
+ ASSERT_EQ(31, PreviousMonthNumberofDays(2, 2016));
+ ASSERT_EQ(29, PreviousMonthNumberofDays(3, 2016));
+ ASSERT_EQ(31, PreviousMonthNumberofDays(4, 2016));
+ ASSERT_EQ(30, PreviousMonthNumberofDays(5, 2016));
+ ASSERT_EQ(31, PreviousMonthNumberofDays(6, 2016));
+ ASSERT_EQ(30, PreviousMonthNumberofDays(7, 2016));
+ ASSERT_EQ(31, PreviousMonthNumberofDays(8, 2016));
+ ASSERT_EQ(31, PreviousMonthNumberofDays(9, 2016));
+ ASSERT_EQ(30, PreviousMonthNumberofDays(10, 2016));
+ ASSERT_EQ(31, PreviousMonthNumberofDays(11, 2016));
+ ASSERT_EQ(30, PreviousMonthNumberofDays(12, 2016));
+ ASSERT_EQ(31, PreviousMonthNumberofDays(1, 2017));
+
+ // Test the leap year section.
+
+ ASSERT_EQ(29, PreviousMonthNumberofDays(3, 2016));
+ ASSERT_EQ(29, PreviousMonthNumberofDays(3, 2012));
+ ASSERT_EQ(29, PreviousMonthNumberofDays(3, 2008));
+ ASSERT_EQ(29, PreviousMonthNumberofDays(3, 2004));
+ ASSERT_EQ(29, PreviousMonthNumberofDays(3, 2000));
+
+ ASSERT_EQ(28, PreviousMonthNumberofDays(3, 2015));
+ ASSERT_EQ(28, PreviousMonthNumberofDays(3, 2014));
+ ASSERT_EQ(28, PreviousMonthNumberofDays(3, 2013));
+
+ ASSERT_EQ(28, PreviousMonthNumberofDays(3, 2041));
+ ASSERT_EQ(28, PreviousMonthNumberofDays(3, 2042));
+ ASSERT_EQ(28, PreviousMonthNumberofDays(3, 2043));
+ ASSERT_EQ(29, PreviousMonthNumberofDays(3, 2044));
+ ASSERT_EQ(28, PreviousMonthNumberofDays(3, 2045));
+ ASSERT_EQ(28, PreviousMonthNumberofDays(3, 2046));
+ ASSERT_EQ(28, PreviousMonthNumberofDays(3, 2047));
+ ASSERT_EQ(29, PreviousMonthNumberofDays(3, 2048));
+ ASSERT_EQ(28, PreviousMonthNumberofDays(3, 2049));
+ ASSERT_EQ(28, PreviousMonthNumberofDays(3, 2050));
+
+ ASSERT_EQ(28, PreviousMonthNumberofDays(3, 1900));
+ ASSERT_EQ(28, PreviousMonthNumberofDays(3, 2200));
+ ASSERT_EQ(28, PreviousMonthNumberofDays(3, 2300));
+ ASSERT_EQ(29, PreviousMonthNumberofDays(3, 2400));
+ ASSERT_EQ(28, PreviousMonthNumberofDays(3, 2500));
+ ASSERT_EQ(28, PreviousMonthNumberofDays(3, 2600));
+ ASSERT_EQ(28, PreviousMonthNumberofDays(3, 2700));
+ ASSERT_EQ(29, PreviousMonthNumberofDays(3, 2800));
+ ASSERT_EQ(28, PreviousMonthNumberofDays(3, 2900));
+ ASSERT_EQ(28, PreviousMonthNumberofDays(3, 3000));
+
+}
+
+TEST(CommonFunctions, monthViewGenerator){
+
+ XCCalendarMonthViewGrid monthView = GenerateMonthGrid(6, 2016);
+
+ // First week.
+
+ ASSERT_EQ(30, monthView.weekList[0].dayList[0].day);
+ ASSERT_EQ(5, monthView.weekList[0].dayList[0].month);
+ ASSERT_EQ(2016, monthView.weekList[0].dayList[0].year);
+ ASSERT_EQ(false, monthView.weekList[0].dayList[0].isInMonth);
+
+ ASSERT_EQ(31, monthView.weekList[0].dayList[1].day);
+ ASSERT_EQ(5, monthView.weekList[0].dayList[1].month);
+ ASSERT_EQ(2016, monthView.weekList[0].dayList[1].year);
+ ASSERT_EQ(false, monthView.weekList[0].dayList[1].isInMonth);
+
+ ASSERT_EQ(1, monthView.weekList[0].dayList[2].day);
+ ASSERT_EQ(6, monthView.weekList[0].dayList[2].month);
+ ASSERT_EQ(2016, monthView.weekList[0].dayList[2].year);
+ ASSERT_EQ(true, monthView.weekList[0].dayList[2].isInMonth);
+
+ ASSERT_EQ(2, monthView.weekList[0].dayList[3].day);
+ ASSERT_EQ(6, monthView.weekList[0].dayList[3].month);
+ ASSERT_EQ(2016, monthView.weekList[0].dayList[3].year);
+ ASSERT_EQ(true, monthView.weekList[0].dayList[3].isInMonth);
+
+ ASSERT_EQ(3, monthView.weekList[0].dayList[4].day);
+ ASSERT_EQ(6, monthView.weekList[0].dayList[4].month);
+ ASSERT_EQ(2016, monthView.weekList[0].dayList[4].year);
+ ASSERT_EQ(true, monthView.weekList[0].dayList[4].isInMonth);
+
+ ASSERT_EQ(4, monthView.weekList[0].dayList[5].day);
+ ASSERT_EQ(6, monthView.weekList[0].dayList[5].month);
+ ASSERT_EQ(2016, monthView.weekList[0].dayList[5].year);
+ ASSERT_EQ(true, monthView.weekList[0].dayList[5].isInMonth);
+
+ ASSERT_EQ(5, monthView.weekList[0].dayList[6].day);
+ ASSERT_EQ(6, monthView.weekList[0].dayList[6].month);
+ ASSERT_EQ(2016, monthView.weekList[0].dayList[6].year);
+ ASSERT_EQ(true, monthView.weekList[0].dayList[6].isInMonth);
+
+ // Second week.
+
+ ASSERT_EQ(6, monthView.weekList[1].dayList[0].day);
+ ASSERT_EQ(6, monthView.weekList[1].dayList[0].month);
+ ASSERT_EQ(2016, monthView.weekList[1].dayList[0].year);
+ ASSERT_EQ(true, monthView.weekList[1].dayList[0].isInMonth);
+
+ ASSERT_EQ(7, monthView.weekList[1].dayList[1].day);
+ ASSERT_EQ(6, monthView.weekList[1].dayList[1].month);
+ ASSERT_EQ(2016, monthView.weekList[1].dayList[1].year);
+ ASSERT_EQ(true, monthView.weekList[1].dayList[1].isInMonth);
+
+ ASSERT_EQ(8, monthView.weekList[1].dayList[2].day);
+ ASSERT_EQ(6, monthView.weekList[1].dayList[2].month);
+ ASSERT_EQ(2016, monthView.weekList[1].dayList[2].year);
+ ASSERT_EQ(true, monthView.weekList[1].dayList[2].isInMonth);
+
+ ASSERT_EQ(9, monthView.weekList[1].dayList[3].day);
+ ASSERT_EQ(6, monthView.weekList[1].dayList[3].month);
+ ASSERT_EQ(2016, monthView.weekList[1].dayList[3].year);
+ ASSERT_EQ(true, monthView.weekList[1].dayList[3].isInMonth);
+
+ ASSERT_EQ(10, monthView.weekList[1].dayList[4].day);
+ ASSERT_EQ(6, monthView.weekList[1].dayList[4].month);
+ ASSERT_EQ(2016, monthView.weekList[1].dayList[4].year);
+ ASSERT_EQ(true, monthView.weekList[1].dayList[4].isInMonth);
+
+ ASSERT_EQ(11, monthView.weekList[1].dayList[5].day);
+ ASSERT_EQ(6, monthView.weekList[1].dayList[5].month);
+ ASSERT_EQ(2016, monthView.weekList[1].dayList[5].year);
+ ASSERT_EQ(true, monthView.weekList[1].dayList[5].isInMonth);
+
+ ASSERT_EQ(12, monthView.weekList[1].dayList[6].day);
+ ASSERT_EQ(6, monthView.weekList[1].dayList[6].month);
+ ASSERT_EQ(2016, monthView.weekList[1].dayList[6].year);
+ ASSERT_EQ(true, monthView.weekList[1].dayList[6].isInMonth);
+
+ // Third Week.
+
+ ASSERT_EQ(13, monthView.weekList[2].dayList[0].day);
+ ASSERT_EQ(6, monthView.weekList[2].dayList[0].month);
+ ASSERT_EQ(2016, monthView.weekList[2].dayList[0].year);
+ ASSERT_EQ(true, monthView.weekList[2].dayList[0].isInMonth);
+
+ ASSERT_EQ(14, monthView.weekList[2].dayList[1].day);
+ ASSERT_EQ(6, monthView.weekList[2].dayList[1].month);
+ ASSERT_EQ(2016, monthView.weekList[2].dayList[1].year);
+ ASSERT_EQ(true, monthView.weekList[2].dayList[1].isInMonth);
+
+ ASSERT_EQ(15, monthView.weekList[2].dayList[2].day);
+ ASSERT_EQ(6, monthView.weekList[2].dayList[2].month);
+ ASSERT_EQ(2016, monthView.weekList[2].dayList[2].year);
+ ASSERT_EQ(true, monthView.weekList[2].dayList[2].isInMonth);
+
+ ASSERT_EQ(16, monthView.weekList[2].dayList[3].day);
+ ASSERT_EQ(6, monthView.weekList[2].dayList[3].month);
+ ASSERT_EQ(2016, monthView.weekList[2].dayList[3].year);
+ ASSERT_EQ(true, monthView.weekList[2].dayList[3].isInMonth);
+
+ ASSERT_EQ(17, monthView.weekList[2].dayList[4].day);
+ ASSERT_EQ(6, monthView.weekList[2].dayList[4].month);
+ ASSERT_EQ(2016, monthView.weekList[2].dayList[4].year);
+ ASSERT_EQ(true, monthView.weekList[2].dayList[4].isInMonth);
+
+ ASSERT_EQ(18, monthView.weekList[2].dayList[5].day);
+ ASSERT_EQ(6, monthView.weekList[2].dayList[5].month);
+ ASSERT_EQ(2016, monthView.weekList[2].dayList[5].year);
+ ASSERT_EQ(true, monthView.weekList[2].dayList[5].isInMonth);
+
+ ASSERT_EQ(19, monthView.weekList[2].dayList[6].day);
+ ASSERT_EQ(6, monthView.weekList[2].dayList[6].month);
+ ASSERT_EQ(2016, monthView.weekList[2].dayList[6].year);
+ ASSERT_EQ(true, monthView.weekList[2].dayList[6].isInMonth);
+
+ // Fourth week.
+
+ ASSERT_EQ(20, monthView.weekList[3].dayList[0].day);
+ ASSERT_EQ(6, monthView.weekList[3].dayList[0].month);
+ ASSERT_EQ(2016, monthView.weekList[3].dayList[0].year);
+ ASSERT_EQ(true, monthView.weekList[3].dayList[0].isInMonth);
+
+ ASSERT_EQ(21, monthView.weekList[3].dayList[1].day);
+ ASSERT_EQ(6, monthView.weekList[3].dayList[1].month);
+ ASSERT_EQ(2016, monthView.weekList[3].dayList[1].year);
+ ASSERT_EQ(true, monthView.weekList[3].dayList[1].isInMonth);
+
+ ASSERT_EQ(22, monthView.weekList[3].dayList[2].day);
+ ASSERT_EQ(6, monthView.weekList[3].dayList[2].month);
+ ASSERT_EQ(2016, monthView.weekList[3].dayList[2].year);
+ ASSERT_EQ(true, monthView.weekList[3].dayList[2].isInMonth);
+
+ ASSERT_EQ(23, monthView.weekList[3].dayList[3].day);
+ ASSERT_EQ(6, monthView.weekList[3].dayList[3].month);
+ ASSERT_EQ(2016, monthView.weekList[3].dayList[3].year);
+ ASSERT_EQ(true, monthView.weekList[3].dayList[3].isInMonth);
+
+ ASSERT_EQ(24, monthView.weekList[3].dayList[4].day);
+ ASSERT_EQ(6, monthView.weekList[3].dayList[4].month);
+ ASSERT_EQ(2016, monthView.weekList[3].dayList[4].year);
+ ASSERT_EQ(true, monthView.weekList[3].dayList[4].isInMonth);
+
+ ASSERT_EQ(25, monthView.weekList[3].dayList[5].day);
+ ASSERT_EQ(6, monthView.weekList[3].dayList[5].month);
+ ASSERT_EQ(2016, monthView.weekList[3].dayList[5].year);
+ ASSERT_EQ(true, monthView.weekList[3].dayList[5].isInMonth);
+
+ ASSERT_EQ(26, monthView.weekList[3].dayList[6].day);
+ ASSERT_EQ(6, monthView.weekList[3].dayList[6].month);
+ ASSERT_EQ(2016, monthView.weekList[3].dayList[6].year);
+ ASSERT_EQ(true, monthView.weekList[3].dayList[6].isInMonth);
+
+ // Fifth week.
+
+ ASSERT_EQ(27, monthView.weekList[4].dayList[0].day);
+ ASSERT_EQ(6, monthView.weekList[4].dayList[0].month);
+ ASSERT_EQ(2016, monthView.weekList[4].dayList[0].year);
+ ASSERT_EQ(true, monthView.weekList[4].dayList[0].isInMonth);
+
+ ASSERT_EQ(28, monthView.weekList[4].dayList[1].day);
+ ASSERT_EQ(6, monthView.weekList[4].dayList[1].month);
+ ASSERT_EQ(2016, monthView.weekList[4].dayList[1].year);
+ ASSERT_EQ(true, monthView.weekList[4].dayList[1].isInMonth);
+
+ ASSERT_EQ(29, monthView.weekList[4].dayList[2].day);
+ ASSERT_EQ(6, monthView.weekList[4].dayList[2].month);
+ ASSERT_EQ(2016, monthView.weekList[4].dayList[2].year);
+ ASSERT_EQ(true, monthView.weekList[4].dayList[2].isInMonth);
+
+ ASSERT_EQ(30, monthView.weekList[4].dayList[3].day);
+ ASSERT_EQ(6, monthView.weekList[4].dayList[3].month);
+ ASSERT_EQ(2016, monthView.weekList[4].dayList[3].year);
+ ASSERT_EQ(true, monthView.weekList[4].dayList[3].isInMonth);
+
+ ASSERT_EQ(1, monthView.weekList[4].dayList[4].day);
+ ASSERT_EQ(7, monthView.weekList[4].dayList[4].month);
+ ASSERT_EQ(2016, monthView.weekList[4].dayList[4].year);
+ ASSERT_EQ(false, monthView.weekList[4].dayList[4].isInMonth);
+
+ ASSERT_EQ(2, monthView.weekList[4].dayList[5].day);
+ ASSERT_EQ(7, monthView.weekList[4].dayList[5].month);
+ ASSERT_EQ(2016, monthView.weekList[4].dayList[5].year);
+ ASSERT_EQ(false, monthView.weekList[4].dayList[5].isInMonth);
+
+ ASSERT_EQ(3, monthView.weekList[4].dayList[6].day);
+ ASSERT_EQ(7, monthView.weekList[4].dayList[6].month);
+ ASSERT_EQ(2016, monthView.weekList[4].dayList[6].year);
+ ASSERT_EQ(false, monthView.weekList[4].dayList[6].isInMonth);
+
+ // Test February 2016 (leap year).
+
+ monthView = GenerateMonthGrid(2, 2016);
+
+ // First week.
+
+ ASSERT_EQ(1, monthView.weekList[0].dayList[0].day);
+ ASSERT_EQ(2, monthView.weekList[0].dayList[0].month);
+ ASSERT_EQ(2016, monthView.weekList[0].dayList[0].year);
+ ASSERT_EQ(true, monthView.weekList[0].dayList[0].isInMonth);
+
+ ASSERT_EQ(2, monthView.weekList[0].dayList[1].day);
+ ASSERT_EQ(2, monthView.weekList[0].dayList[1].month);
+ ASSERT_EQ(2016, monthView.weekList[0].dayList[1].year);
+ ASSERT_EQ(true, monthView.weekList[0].dayList[1].isInMonth);
+
+ ASSERT_EQ(3, monthView.weekList[0].dayList[2].day);
+ ASSERT_EQ(2, monthView.weekList[0].dayList[2].month);
+ ASSERT_EQ(2016, monthView.weekList[0].dayList[2].year);
+ ASSERT_EQ(true, monthView.weekList[0].dayList[2].isInMonth);
+
+ ASSERT_EQ(4, monthView.weekList[0].dayList[3].day);
+ ASSERT_EQ(2, monthView.weekList[0].dayList[3].month);
+ ASSERT_EQ(2016, monthView.weekList[0].dayList[3].year);
+ ASSERT_EQ(true, monthView.weekList[0].dayList[3].isInMonth);
+
+ ASSERT_EQ(5, monthView.weekList[0].dayList[4].day);
+ ASSERT_EQ(2, monthView.weekList[0].dayList[4].month);
+ ASSERT_EQ(2016, monthView.weekList[0].dayList[4].year);
+ ASSERT_EQ(true, monthView.weekList[0].dayList[4].isInMonth);
+
+ ASSERT_EQ(6, monthView.weekList[0].dayList[5].day);
+ ASSERT_EQ(2, monthView.weekList[0].dayList[5].month);
+ ASSERT_EQ(2016, monthView.weekList[0].dayList[5].year);
+ ASSERT_EQ(true, monthView.weekList[0].dayList[5].isInMonth);
+
+ ASSERT_EQ(7, monthView.weekList[0].dayList[6].day);
+ ASSERT_EQ(2, monthView.weekList[0].dayList[6].month);
+ ASSERT_EQ(2016, monthView.weekList[0].dayList[6].year);
+ ASSERT_EQ(true, monthView.weekList[0].dayList[6].isInMonth);
+
+ // Second week.
+
+ ASSERT_EQ(8, monthView.weekList[1].dayList[0].day);
+ ASSERT_EQ(2, monthView.weekList[1].dayList[0].month);
+ ASSERT_EQ(2016, monthView.weekList[1].dayList[0].year);
+ ASSERT_EQ(true, monthView.weekList[1].dayList[0].isInMonth);
+
+ ASSERT_EQ(9, monthView.weekList[1].dayList[1].day);
+ ASSERT_EQ(2, monthView.weekList[1].dayList[1].month);
+ ASSERT_EQ(2016, monthView.weekList[1].dayList[1].year);
+ ASSERT_EQ(true, monthView.weekList[1].dayList[1].isInMonth);
+
+ ASSERT_EQ(10, monthView.weekList[1].dayList[2].day);
+ ASSERT_EQ(2, monthView.weekList[1].dayList[2].month);
+ ASSERT_EQ(2016, monthView.weekList[1].dayList[2].year);
+ ASSERT_EQ(true, monthView.weekList[1].dayList[2].isInMonth);
+
+ ASSERT_EQ(11, monthView.weekList[1].dayList[3].day);
+ ASSERT_EQ(2, monthView.weekList[1].dayList[3].month);
+ ASSERT_EQ(2016, monthView.weekList[1].dayList[3].year);
+ ASSERT_EQ(true, monthView.weekList[1].dayList[3].isInMonth);
+
+ ASSERT_EQ(12, monthView.weekList[1].dayList[4].day);
+ ASSERT_EQ(2, monthView.weekList[1].dayList[4].month);
+ ASSERT_EQ(2016, monthView.weekList[1].dayList[4].year);
+ ASSERT_EQ(true, monthView.weekList[1].dayList[4].isInMonth);
+
+ ASSERT_EQ(13, monthView.weekList[1].dayList[5].day);
+ ASSERT_EQ(2, monthView.weekList[1].dayList[5].month);
+ ASSERT_EQ(2016, monthView.weekList[1].dayList[5].year);
+ ASSERT_EQ(true, monthView.weekList[1].dayList[5].isInMonth);
+
+ ASSERT_EQ(14, monthView.weekList[1].dayList[6].day);
+ ASSERT_EQ(2, monthView.weekList[1].dayList[6].month);
+ ASSERT_EQ(2016, monthView.weekList[1].dayList[6].year);
+ ASSERT_EQ(true, monthView.weekList[1].dayList[6].isInMonth);
+
+ // Third Week.
+
+ ASSERT_EQ(15, monthView.weekList[2].dayList[0].day);
+ ASSERT_EQ(2, monthView.weekList[2].dayList[0].month);
+ ASSERT_EQ(2016, monthView.weekList[2].dayList[0].year);
+ ASSERT_EQ(true, monthView.weekList[2].dayList[0].isInMonth);
+
+ ASSERT_EQ(16, monthView.weekList[2].dayList[1].day);
+ ASSERT_EQ(2, monthView.weekList[2].dayList[1].month);
+ ASSERT_EQ(2016, monthView.weekList[2].dayList[1].year);
+ ASSERT_EQ(true, monthView.weekList[2].dayList[1].isInMonth);
+
+ ASSERT_EQ(17, monthView.weekList[2].dayList[2].day);
+ ASSERT_EQ(2, monthView.weekList[2].dayList[2].month);
+ ASSERT_EQ(2016, monthView.weekList[2].dayList[2].year);
+ ASSERT_EQ(true, monthView.weekList[2].dayList[2].isInMonth);
+
+ ASSERT_EQ(18, monthView.weekList[2].dayList[3].day);
+ ASSERT_EQ(2, monthView.weekList[2].dayList[3].month);
+ ASSERT_EQ(2016, monthView.weekList[2].dayList[3].year);
+ ASSERT_EQ(true, monthView.weekList[2].dayList[3].isInMonth);
+
+ ASSERT_EQ(19, monthView.weekList[2].dayList[4].day);
+ ASSERT_EQ(2, monthView.weekList[2].dayList[4].month);
+ ASSERT_EQ(2016, monthView.weekList[2].dayList[4].year);
+ ASSERT_EQ(true, monthView.weekList[2].dayList[4].isInMonth);
+
+ ASSERT_EQ(20, monthView.weekList[2].dayList[5].day);
+ ASSERT_EQ(2, monthView.weekList[2].dayList[5].month);
+ ASSERT_EQ(2016, monthView.weekList[2].dayList[5].year);
+ ASSERT_EQ(true, monthView.weekList[2].dayList[5].isInMonth);
+
+ ASSERT_EQ(21, monthView.weekList[2].dayList[6].day);
+ ASSERT_EQ(2, monthView.weekList[2].dayList[6].month);
+ ASSERT_EQ(2016, monthView.weekList[2].dayList[6].year);
+ ASSERT_EQ(true, monthView.weekList[2].dayList[6].isInMonth);
+
+ // Fourth week.
+
+ ASSERT_EQ(22, monthView.weekList[3].dayList[0].day);
+ ASSERT_EQ(2, monthView.weekList[3].dayList[0].month);
+ ASSERT_EQ(2016, monthView.weekList[3].dayList[0].year);
+ ASSERT_EQ(true, monthView.weekList[3].dayList[0].isInMonth);
+
+ ASSERT_EQ(23, monthView.weekList[3].dayList[1].day);
+ ASSERT_EQ(2, monthView.weekList[3].dayList[1].month);
+ ASSERT_EQ(2016, monthView.weekList[3].dayList[1].year);
+ ASSERT_EQ(true, monthView.weekList[3].dayList[1].isInMonth);
+
+ ASSERT_EQ(24, monthView.weekList[3].dayList[2].day);
+ ASSERT_EQ(2, monthView.weekList[3].dayList[2].month);
+ ASSERT_EQ(2016, monthView.weekList[3].dayList[2].year);
+ ASSERT_EQ(true, monthView.weekList[3].dayList[2].isInMonth);
+
+ ASSERT_EQ(25, monthView.weekList[3].dayList[3].day);
+ ASSERT_EQ(2, monthView.weekList[3].dayList[3].month);
+ ASSERT_EQ(2016, monthView.weekList[3].dayList[3].year);
+ ASSERT_EQ(true, monthView.weekList[3].dayList[3].isInMonth);
+
+ ASSERT_EQ(26, monthView.weekList[3].dayList[4].day);
+ ASSERT_EQ(2, monthView.weekList[3].dayList[4].month);
+ ASSERT_EQ(2016, monthView.weekList[3].dayList[4].year);
+ ASSERT_EQ(true, monthView.weekList[3].dayList[4].isInMonth);
+
+ ASSERT_EQ(27, monthView.weekList[3].dayList[5].day);
+ ASSERT_EQ(2, monthView.weekList[3].dayList[5].month);
+ ASSERT_EQ(2016, monthView.weekList[3].dayList[5].year);
+ ASSERT_EQ(true, monthView.weekList[3].dayList[5].isInMonth);
+
+ ASSERT_EQ(28, monthView.weekList[3].dayList[6].day);
+ ASSERT_EQ(2, monthView.weekList[3].dayList[6].month);
+ ASSERT_EQ(2016, monthView.weekList[3].dayList[6].year);
+ ASSERT_EQ(true, monthView.weekList[3].dayList[6].isInMonth);
+
+ // Fifth week.
+
+ ASSERT_EQ(29, monthView.weekList[4].dayList[0].day);
+ ASSERT_EQ(2, monthView.weekList[4].dayList[0].month);
+ ASSERT_EQ(2016, monthView.weekList[4].dayList[0].year);
+ ASSERT_EQ(true, monthView.weekList[4].dayList[0].isInMonth);
+
+ ASSERT_EQ(1, monthView.weekList[4].dayList[1].day);
+ ASSERT_EQ(3, monthView.weekList[4].dayList[1].month);
+ ASSERT_EQ(2016, monthView.weekList[4].dayList[1].year);
+ ASSERT_EQ(false, monthView.weekList[4].dayList[1].isInMonth);
+
+ ASSERT_EQ(2, monthView.weekList[4].dayList[2].day);
+ ASSERT_EQ(3, monthView.weekList[4].dayList[2].month);
+ ASSERT_EQ(2016, monthView.weekList[4].dayList[2].year);
+ ASSERT_EQ(false, monthView.weekList[4].dayList[2].isInMonth);
+
+ ASSERT_EQ(3, monthView.weekList[4].dayList[3].day);
+ ASSERT_EQ(3, monthView.weekList[4].dayList[3].month);
+ ASSERT_EQ(2016, monthView.weekList[4].dayList[3].year);
+ ASSERT_EQ(false, monthView.weekList[4].dayList[3].isInMonth);
+
+ ASSERT_EQ(4, monthView.weekList[4].dayList[4].day);
+ ASSERT_EQ(3, monthView.weekList[4].dayList[4].month);
+ ASSERT_EQ(2016, monthView.weekList[4].dayList[4].year);
+ ASSERT_EQ(false, monthView.weekList[4].dayList[4].isInMonth);
+
+ ASSERT_EQ(5, monthView.weekList[4].dayList[5].day);
+ ASSERT_EQ(3, monthView.weekList[4].dayList[5].month);
+ ASSERT_EQ(2016, monthView.weekList[4].dayList[5].year);
+ ASSERT_EQ(false, monthView.weekList[4].dayList[5].isInMonth);
+
+ ASSERT_EQ(6, monthView.weekList[4].dayList[6].day);
+ ASSERT_EQ(3, monthView.weekList[4].dayList[6].month);
+ ASSERT_EQ(2016, monthView.weekList[4].dayList[6].year);
+ ASSERT_EQ(false, monthView.weekList[4].dayList[6].isInMonth);
+
+ // Generate a month grid for February 2100 (not a leap year).
+
+ monthView = GenerateMonthGrid(2, 2100);
+
+ // First week.
+
+ ASSERT_EQ(4, monthView.weekList.size());
+
+ ASSERT_EQ(1, monthView.weekList[0].dayList[0].day);
+ ASSERT_EQ(2, monthView.weekList[0].dayList[0].month);
+ ASSERT_EQ(2100, monthView.weekList[0].dayList[0].year);
+ ASSERT_EQ(true, monthView.weekList[0].dayList[0].isInMonth);
+
+ ASSERT_EQ(2, monthView.weekList[0].dayList[1].day);
+ ASSERT_EQ(2, monthView.weekList[0].dayList[1].month);
+ ASSERT_EQ(2100, monthView.weekList[0].dayList[1].year);
+ ASSERT_EQ(true, monthView.weekList[0].dayList[1].isInMonth);
+
+ ASSERT_EQ(3, monthView.weekList[0].dayList[2].day);
+ ASSERT_EQ(2, monthView.weekList[0].dayList[2].month);
+ ASSERT_EQ(2100, monthView.weekList[0].dayList[2].year);
+ ASSERT_EQ(true, monthView.weekList[0].dayList[2].isInMonth);
+
+ ASSERT_EQ(4, monthView.weekList[0].dayList[3].day);
+ ASSERT_EQ(2, monthView.weekList[0].dayList[3].month);
+ ASSERT_EQ(2100, monthView.weekList[0].dayList[3].year);
+ ASSERT_EQ(true, monthView.weekList[0].dayList[3].isInMonth);
+
+ ASSERT_EQ(5, monthView.weekList[0].dayList[4].day);
+ ASSERT_EQ(2, monthView.weekList[0].dayList[4].month);
+ ASSERT_EQ(2100, monthView.weekList[0].dayList[4].year);
+ ASSERT_EQ(true, monthView.weekList[0].dayList[4].isInMonth);
+
+ ASSERT_EQ(6, monthView.weekList[0].dayList[5].day);
+ ASSERT_EQ(2, monthView.weekList[0].dayList[5].month);
+ ASSERT_EQ(2100, monthView.weekList[0].dayList[5].year);
+ ASSERT_EQ(true, monthView.weekList[0].dayList[5].isInMonth);
+
+ ASSERT_EQ(7, monthView.weekList[0].dayList[6].day);
+ ASSERT_EQ(2, monthView.weekList[0].dayList[6].month);
+ ASSERT_EQ(2100, monthView.weekList[0].dayList[6].year);
+ ASSERT_EQ(true, monthView.weekList[0].dayList[6].isInMonth);
+
+ // Second week.
+
+ ASSERT_EQ(8, monthView.weekList[1].dayList[0].day);
+ ASSERT_EQ(2, monthView.weekList[1].dayList[0].month);
+ ASSERT_EQ(2100, monthView.weekList[1].dayList[0].year);
+ ASSERT_EQ(true, monthView.weekList[1].dayList[0].isInMonth);
+
+ ASSERT_EQ(9, monthView.weekList[1].dayList[1].day);
+ ASSERT_EQ(2, monthView.weekList[1].dayList[1].month);
+ ASSERT_EQ(2100, monthView.weekList[1].dayList[1].year);
+ ASSERT_EQ(true, monthView.weekList[1].dayList[1].isInMonth);
+
+ ASSERT_EQ(10, monthView.weekList[1].dayList[2].day);
+ ASSERT_EQ(2, monthView.weekList[1].dayList[2].month);
+ ASSERT_EQ(2100, monthView.weekList[1].dayList[2].year);
+ ASSERT_EQ(true, monthView.weekList[1].dayList[2].isInMonth);
+
+ ASSERT_EQ(11, monthView.weekList[1].dayList[3].day);
+ ASSERT_EQ(2, monthView.weekList[1].dayList[3].month);
+ ASSERT_EQ(2100, monthView.weekList[1].dayList[3].year);
+ ASSERT_EQ(true, monthView.weekList[1].dayList[3].isInMonth);
+
+ ASSERT_EQ(12, monthView.weekList[1].dayList[4].day);
+ ASSERT_EQ(2, monthView.weekList[1].dayList[4].month);
+ ASSERT_EQ(2100, monthView.weekList[1].dayList[4].year);
+ ASSERT_EQ(true, monthView.weekList[1].dayList[4].isInMonth);
+
+ ASSERT_EQ(13, monthView.weekList[1].dayList[5].day);
+ ASSERT_EQ(2, monthView.weekList[1].dayList[5].month);
+ ASSERT_EQ(2100, monthView.weekList[1].dayList[5].year);
+ ASSERT_EQ(true, monthView.weekList[1].dayList[5].isInMonth);
+
+ ASSERT_EQ(14, monthView.weekList[1].dayList[6].day);
+ ASSERT_EQ(2, monthView.weekList[1].dayList[6].month);
+ ASSERT_EQ(2100, monthView.weekList[1].dayList[6].year);
+ ASSERT_EQ(true, monthView.weekList[1].dayList[6].isInMonth);
+
+ // Third Week.
+
+ ASSERT_EQ(15, monthView.weekList[2].dayList[0].day);
+ ASSERT_EQ(2, monthView.weekList[2].dayList[0].month);
+ ASSERT_EQ(2100, monthView.weekList[2].dayList[0].year);
+ ASSERT_EQ(true, monthView.weekList[2].dayList[0].isInMonth);
+
+ ASSERT_EQ(16, monthView.weekList[2].dayList[1].day);
+ ASSERT_EQ(2, monthView.weekList[2].dayList[1].month);
+ ASSERT_EQ(2100, monthView.weekList[2].dayList[1].year);
+ ASSERT_EQ(true, monthView.weekList[2].dayList[1].isInMonth);
+
+ ASSERT_EQ(17, monthView.weekList[2].dayList[2].day);
+ ASSERT_EQ(2, monthView.weekList[2].dayList[2].month);
+ ASSERT_EQ(2100, monthView.weekList[2].dayList[2].year);
+ ASSERT_EQ(true, monthView.weekList[2].dayList[2].isInMonth);
+
+ ASSERT_EQ(18, monthView.weekList[2].dayList[3].day);
+ ASSERT_EQ(2, monthView.weekList[2].dayList[3].month);
+ ASSERT_EQ(2100, monthView.weekList[2].dayList[3].year);
+ ASSERT_EQ(true, monthView.weekList[2].dayList[3].isInMonth);
+
+ ASSERT_EQ(19, monthView.weekList[2].dayList[4].day);
+ ASSERT_EQ(2, monthView.weekList[2].dayList[4].month);
+ ASSERT_EQ(2100, monthView.weekList[2].dayList[4].year);
+ ASSERT_EQ(true, monthView.weekList[2].dayList[4].isInMonth);
+
+ ASSERT_EQ(20, monthView.weekList[2].dayList[5].day);
+ ASSERT_EQ(2, monthView.weekList[2].dayList[5].month);
+ ASSERT_EQ(2100, monthView.weekList[2].dayList[5].year);
+ ASSERT_EQ(true, monthView.weekList[2].dayList[5].isInMonth);
+
+ ASSERT_EQ(21, monthView.weekList[2].dayList[6].day);
+ ASSERT_EQ(2, monthView.weekList[2].dayList[6].month);
+ ASSERT_EQ(2100, monthView.weekList[2].dayList[6].year);
+ ASSERT_EQ(true, monthView.weekList[2].dayList[6].isInMonth);
+
+ // Fourth week.
+
+ ASSERT_EQ(22, monthView.weekList[3].dayList[0].day);
+ ASSERT_EQ(2, monthView.weekList[3].dayList[0].month);
+ ASSERT_EQ(2100, monthView.weekList[3].dayList[0].year);
+ ASSERT_EQ(true, monthView.weekList[3].dayList[0].isInMonth);
+
+ ASSERT_EQ(23, monthView.weekList[3].dayList[1].day);
+ ASSERT_EQ(2, monthView.weekList[3].dayList[1].month);
+ ASSERT_EQ(2100, monthView.weekList[3].dayList[1].year);
+ ASSERT_EQ(true, monthView.weekList[3].dayList[1].isInMonth);
+
+ ASSERT_EQ(24, monthView.weekList[3].dayList[2].day);
+ ASSERT_EQ(2, monthView.weekList[3].dayList[2].month);
+ ASSERT_EQ(2100, monthView.weekList[3].dayList[2].year);
+ ASSERT_EQ(true, monthView.weekList[3].dayList[2].isInMonth);
+
+ ASSERT_EQ(25, monthView.weekList[3].dayList[3].day);
+ ASSERT_EQ(2, monthView.weekList[3].dayList[3].month);
+ ASSERT_EQ(2100, monthView.weekList[3].dayList[3].year);
+ ASSERT_EQ(true, monthView.weekList[3].dayList[3].isInMonth);
+
+ ASSERT_EQ(26, monthView.weekList[3].dayList[4].day);
+ ASSERT_EQ(2, monthView.weekList[3].dayList[4].month);
+ ASSERT_EQ(2100, monthView.weekList[3].dayList[4].year);
+ ASSERT_EQ(true, monthView.weekList[3].dayList[4].isInMonth);