public void NextSunday()
        {
            var monday     = new DateTime(2020, 8, 24);
            var nextSunday = monday.AddDays(6);

            Assert.AreEqual(nextSunday, EasterCalculator.NextSunday(monday));
        }
예제 #2
0
        public IPublicHolidayCalculator GetCalculator(PublicHoliday holiday)
        {
            IPublicHolidayCalculator calculator = null;

            switch (holiday.HolidayType)
            {
            case PublicHolidayType.FixedDate:
                calculator = new FixedDayCalculator();
                break;

            case PublicHolidayType.BasedOnAnotherHoliday:
                calculator = new BasedOnOtherHolidayCalculator();
                break;

            case PublicHolidayType.RepeatEveryXYear:
                calculator = new YearRepetitionCalculator();
                break;

            case PublicHolidayType.Easter:
                calculator = new EasterCalculator();
                break;

            case PublicHolidayType.SpecificDayInWeek:
                calculator = new SpecificWeekDayCalculator();
                break;

            default:
                throw new ArgumentException();
            }

            return(calculator);
        }
예제 #3
0
        private List <DateTime> GetEasterSundayAndMonday(int year)
        {
            List <DateTime> dates  = new List <DateTime>();
            DateTime        easter = EasterCalculator.GetEasterSunday(year);

            dates.Add(easter);
            dates.Add(easter.AddDays(1));
            return(dates);
        }
예제 #4
0
        static void Main(string[] args)
        {
            var holidays = EasterCalculator.EasterHolidays("2020");

            foreach (var holiday in holidays)
            {
                Console.WriteLine(holiday.ToLongDateString());
            }

            Console.ReadLine();
        }
        public void GetPublicHolidayByYears_WhenPassedYearsAndHolidays_ThenReturnsExpectedDateList(List <int> years, PublicHoliday holiday, List <DateTime> expectedResult)
        {
            // Arrange
            var target = new EasterCalculator();

            // Act
            var actual = target.GetPublicHolidayByYears(years, holiday);

            // Assert
            actual.Should().BeEquivalentTo(expectedResult);
        }
예제 #6
0
        public override DateTime?GetInstance(int year)
        {
            if (dayCache.ContainsKey(year))
            {
                return(dayCache[year]);
            }
            var easter = EasterCalculator.CalculateEasterDate(year);
            var date   = easter.AddDays(daysOffset);

            dayCache.Add(year, date);
            return(date);
        }
        public void GetPublicHolidayByYears_WhenNullName_ThenThrows()
        {
            // Arrange
            var target  = new EasterCalculator();
            var holiday = new PublicHoliday {
                Name = null
            };

            // Act
            Action actual = () => target.GetPublicHolidayByYears(null, holiday);

            // Assert
            actual.Should().Throw <ArgumentException>().WithMessage("Cannot process a custom holidays without a name.");
        }
 public void EasterHolidaysException()
 {
     Assert.Throws <FormatException>(() => EasterCalculator.EasterHolidays("not a year"));
 }
 public void EasterHolidays2020()
 {
     DateTime[] holidays2020 = { new DateTime(2020, 4, 9), new DateTime(2020, 4, 10), new DateTime(2020, 4, 12), new DateTime(2020, 4, 13) };
     Assert.AreEqual(holidays2020, EasterCalculator.EasterHolidays("2020"));
 }
 public override DateTime?GetInstance(int year)
 {
     return(dayCache.GetOrAdd(year, () => EasterCalculator.CalculateEasterDate(year).AddDays(daysOffset)));
 }