public void BclEquivalence(
            [ValueSource(typeof(BclCalendars), nameof(BclCalendars.MappedCalendars))] Calendar calendar,
            [ValueSource(nameof(CalendarWeekRules))] CalendarWeekRule bclRule,
            [ValueSource(nameof(BclDaysOfWeek))] DayOfWeek firstDayOfWeek)
        {
            var nodaCalendar = BclCalendars.CalendarSystemForCalendar(calendar);
            var nodaRule     = WeekYearRules.FromCalendarWeekRule(bclRule, firstDayOfWeek);
            var startYear    = new LocalDate(2016, 1, 1).WithCalendar(nodaCalendar).Year;

            for (int year = startYear; year < startYear + 30; year++)
            {
                var startDate = new LocalDate(year, 1, 1, nodaCalendar).PlusDays(-15);
                for (int day = 0; day < 30; day++)
                {
                    var date    = startDate.PlusDays(day);
                    var bclDate = date.ToDateTimeUnspecified();
                    var bclWeek = calendar.GetWeekOfYear(bclDate, bclRule, firstDayOfWeek);
                    // Weird... the BCL doesn't have a way of finding out which week-year we're in.
                    // We're starting at "start of year - 15 days", so a "small" week-of-year
                    // value means we're in "year", whereas a "large" week-of-year value means
                    // we're in the "year-1".
                    var bclWeekYear = bclWeek < 10 ? year : year - 1;

                    Assert.AreEqual(bclWeek, nodaRule.GetWeekOfWeekYear(date), "Date: {0}", date);
                    Assert.AreEqual(bclWeekYear, nodaRule.GetWeekYear(date), "Date: {0}", date);
                    Assert.AreEqual(date, nodaRule.GetLocalDate(bclWeekYear, bclWeek, date.IsoDayOfWeek, nodaCalendar),
                                    "Week-year:{0}; Week: {1}; Day: {2}", bclWeekYear, bclWeek, date.IsoDayOfWeek);
                }
            }
        }
        public void GetLocalDate_Invalid(
            CalendarWeekRule bclRule, DayOfWeek firstDayOfWeek,
            int weekYear, int week, IsoDayOfWeek dayOfWeek)
        {
            var nodaRule = WeekYearRules.FromCalendarWeekRule(bclRule, firstDayOfWeek);

            Assert.Throws <ArgumentOutOfRangeException>(() => nodaRule.GetLocalDate(weekYear, week, dayOfWeek));
        }
        public void RoundtripLastDayBcl(
            [ValueSource(nameof(CalendarWeekRules))] CalendarWeekRule bclRule,
            [ValueSource(nameof(BclDaysOfWeek))] DayOfWeek firstDayOfWeek)
        {
            var rule = WeekYearRules.FromCalendarWeekRule(bclRule, firstDayOfWeek);
            var date = new LocalDate(9999, 12, 31);

            Assert.AreEqual(date, rule.GetLocalDate(
                                rule.GetWeekYear(date),
                                rule.GetWeekOfWeekYear(date),
                                date.IsoDayOfWeek));
        }
        // We might want to add more tests here...
        public void NonMondayFirstDayOfWeek(int minDaysInFirstWeek, IsoDayOfWeek firstDayOfWeek,
                                            int weekYear, int week, IsoDayOfWeek dayOfWeek,
                                            int expectedYear, int expectedMonth, int expectedDay)
        {
            var rule     = WeekYearRules.ForMinDaysInFirstWeek(minDaysInFirstWeek, firstDayOfWeek);
            var actual   = rule.GetLocalDate(weekYear, week, dayOfWeek);
            var expected = new LocalDate(expectedYear, expectedMonth, expectedDay);

            Assert.AreEqual(expected, actual);
            Assert.AreEqual(weekYear, rule.GetWeekYear(actual));
            Assert.AreEqual(week, rule.GetWeekOfWeekYear(actual));
        }
        public void RoundtripLastDay_Iso1()
        {
            // In the Gregorian calendar with a minimum of 1 day in the first
            // week, Friday December 31st 9999 is in week year 10000. We should be able to
            // round-trip.
            var rule = WeekYearRules.ForMinDaysInFirstWeek(1);
            var date = new LocalDate(9999, 12, 31);

            Assert.AreEqual(date, rule.GetLocalDate(
                                rule.GetWeekYear(date),
                                rule.GetWeekOfWeekYear(date),
                                date.IsoDayOfWeek));
        }
        public void RoundtripFirstDay_Iso7()
        {
            // In the Gregorian calendar with a minimum of 7 days in the first
            // week, Tuesday January 1st -9998 is in week year -9999. We should be able to
            // round-trip.
            var rule = WeekYearRules.ForMinDaysInFirstWeek(7);
            var date = new LocalDate(-9998, 1, 1);

            Assert.AreEqual(date, rule.GetLocalDate(
                                rule.GetWeekYear(date),
                                rule.GetWeekOfWeekYear(date),
                                date.IsoDayOfWeek));
        }
        public void GetWeeksInWeekYear(
            [ValueSource(typeof(BclCalendars), nameof(BclCalendars.MappedCalendars))] Calendar calendar,
            [ValueSource(nameof(CalendarWeekRules))] CalendarWeekRule bclRule,
            [ValueSource(nameof(BclDaysOfWeek))] DayOfWeek firstDayOfWeek)
        {
            var nodaCalendar = BclCalendars.CalendarSystemForCalendar(calendar);
            var nodaRule     = WeekYearRules.FromCalendarWeekRule(bclRule, firstDayOfWeek);
            var startYear    = new LocalDate(2016, 1, 1).WithCalendar(nodaCalendar).Year;

            for (int year = startYear; year < startYear + 30; year++)
            {
                var bclDate = new LocalDate(year + 1, 1, 1, nodaCalendar).PlusDays(-1).ToDateTimeUnspecified();
                Assert.AreEqual(calendar.GetWeekOfYear(bclDate, bclRule, firstDayOfWeek),
                                nodaRule.GetWeeksInWeekYear(year, nodaCalendar), "Year {0}", year);
            }
        }
        public void Gregorian(int year, IsoDayOfWeek firstDayOfYear, int maxMinDaysInFirstWeekForSameWeekYear)
        {
            var startOfCalendarYear = new LocalDate(year, 1, 1);

            Assert.AreEqual(firstDayOfYear, startOfCalendarYear.IsoDayOfWeek);

            // Rules which put the first day of the calendar year into the same week year
            for (int i = 1; i <= maxMinDaysInFirstWeekForSameWeekYear; i++)
            {
                var rule = WeekYearRules.ForMinDaysInFirstWeek(i);
                Assert.AreEqual(year, rule.GetWeekYear(startOfCalendarYear));
                Assert.AreEqual(1, rule.GetWeekOfWeekYear(startOfCalendarYear));
            }
            // Rules which put the first day of the calendar year into the previous week year
            for (int i = maxMinDaysInFirstWeekForSameWeekYear + 1; i <= 7; i++)
            {
                var rule = WeekYearRules.ForMinDaysInFirstWeek(i);
                Assert.AreEqual(year - 1, rule.GetWeekYear(startOfCalendarYear));
                Assert.AreEqual(rule.GetWeeksInWeekYear(year - 1), rule.GetWeekOfWeekYear(startOfCalendarYear));
            }
        }
Esempio n. 9
0
 public void UnsupportedCalendarWeekRule()
 {
     Assert.Throws <ArgumentException>(() => WeekYearRules.FromCalendarWeekRule(CalendarWeekRule.FirstDay + 1000, DayOfWeek.Monday));
 }