Beispiel #1
0
        public void ReadXElement_Empty_ThrowsSyncDocumentException()
        {
            WeeklyPattern pattern = new WeeklyPattern();

            XElement element = XElement.Parse("<NotDailyWeeklyPattern />");
            pattern.ReadXElement(element);
        }
Beispiel #2
0
 bool IsSame(Recurrence otherRecurrence)
            {
                WeeklyPattern otherWeeklyPattern = (WeeklyPattern)otherRecurrence;

                return super.IsSame();otherRecurrence) &&
                       this.daysOfTheWeek.ToString(",") == otherWeeklyPattern.daysOfTheWeek.ToString(",") &&
                       this.firstDayOfWeek == otherWeeklyPattern.firstDayOfWeek;
            }
Beispiel #3
0
            /// <summary>
            /// Checks if two recurrence objects are identical.
            /// </summary>
            /// <param name="otherRecurrence">The recurrence to compare this one to.</param>
            /// <returns>true if the two recurrences are identical, false otherwise.</returns>
            public override bool IsSame(Recurrence otherRecurrence)
            {
                WeeklyPattern otherWeeklyPattern = (WeeklyPattern)otherRecurrence;

                return(base.IsSame(otherRecurrence) &&
                       this.daysOfTheWeek.ToString(",") == otherWeeklyPattern.daysOfTheWeek.ToString(",") &&
                       this.firstDayOfWeek == otherWeeklyPattern.firstDayOfWeek);
            }
Beispiel #4
0
        public IEnumerable <Occurrence> GetOccurrences(int maxPostNowOccurrences = 100)
        {
            Requires.Valid(this, this.GetType().Name);
            uint occNum             = 0;
            var  now                = DateTime.UtcNow;
            int  postNowOccurrences = 0;
            var  dt = AllDay ?
                      new DateTime(StartDate.Year, StartDate.Month, StartDate.Day, 0, 0, 0, 0, DateTimeKind.Utc) :
                      new DateTime(StartDate.Year, StartDate.Month, StartDate.Day, StartTimeUtc.Hour, StartTimeUtc.Minute, StartTimeUtc.Second, StartTimeUtc.Millisecond, DateTimeKind.Utc);

            while (
                IsPerpetual ||
                (EndAfterNOccurrences > 0 && occNum < EndAfterNOccurrences) ||
                (EndBeforeDate.HasValue && dt < EndBeforeDate))
            {
                if (dt > now && ++postNowOccurrences > maxPostNowOccurrences)
                {
                    break;
                }
                yield return(new Occurrence(dt, Duration, occNum++));

                switch (PatternType)
                {
                case PatternTypes.Daily:
                    if (DailyPattern.EveryNDays > 0)
                    {
                        dt = dt.AddDays(DailyPattern.EveryNDays);
                    }
                    else if (DailyPattern.EveryWeekday)
                    {
                        do
                        {
                            dt = dt.AddDays(1);
                        } while (!dt.IsWeekday());
                    }
                    else
                    {
                        throw new NotImplementedException();
                    }
                    break;

                case PatternTypes.Weekly:
                    for (;;)
                    {
                        dt = dt.AddDays(1);
                        if (dt.DayOfWeek == DayOfWeek.Sunday)
                        {
                            dt = dt.AddDays((WeeklyPattern.RecurEveryNWeeksOn - 1) * 7);
                        }
                        if (WeeklyPattern.OccursOn(dt.DayOfWeek))
                        {
                            break;
                        }
                    }
                    break;
                }
            }
        }
Beispiel #5
0
        public void GetXElement_SetMondayTrue_ReturnsCorrectXml()
        {
            WeeklyPattern pattern = new WeeklyPattern();
            pattern.Monday = true;

            var element = pattern.GetXElement();

            var attribute = element.Attribute(WeeklyPattern.cn_monday);

            Assert.IsNotNull(attribute);
            Assert.IsTrue(attribute.Value == "true");
        }
Beispiel #6
0
        public void GetXElement_SetSundayFalse_ReturnsCorrectXml()
        {
            WeeklyPattern pattern = new WeeklyPattern();
            pattern.Sunday = false;

            var element = pattern.GetXElement();

            var attribute = element.Attribute(WeeklyPattern.cn_sunday);

            Assert.IsNotNull(attribute);
            Assert.IsTrue(attribute.Value == "false");
        }
Beispiel #7
0
        public void GetXElement_SetReocurEveryNWeek_ReturnsCorrectXml()
        {
            WeeklyPattern pattern = new WeeklyPattern();
            pattern.ReocurEveryNWeek = 3;

            var element = pattern.GetXElement();

            var attribute = element.Attribute(WeeklyPattern.cn_reocurEveryNWeek);

            Assert.IsNotNull(attribute);
            Assert.IsTrue(attribute.Value == "3");
        }
        private static DateTime WeeklyCalculate(WeeklyPattern pattern, DateTime previousDate)
        {
            while (true)
            {
                previousDate = previousDate.AddDays(1);

                if (pattern.DaysOfTheWeek.Contains((DayOfTheWeek)previousDate.DayOfWeek))
                {
                    return(previousDate);
                }
            }
        }
        public void ShouldContainWeeklyOccurences()
        {
            var date = DateTime.Parse("2017-01-02T00:00:00");

            var pattern = new WeeklyPattern(date, 1)
            {
                EndDate = date.AddDays(14)
            };

            pattern.DaysOfTheWeek.Add(DayOfTheWeek.Monday);
            pattern.DaysOfTheWeek.Add(DayOfTheWeek.Tuesday);
            pattern.DaysOfTheWeek.Add(DayOfTheWeek.Wednesday);

            var occurrence = new Occurrence
            {
                Start = date,
                End   = date.AddHours(1)
            };

            var result = PatternConverter.Convert(pattern, occurrence);

            Assert.Equal(7, result.Count);
            Assert.Equal(date, result.First().Start);
        }
Beispiel #10
0
        public void EqualsAsISheduleTest()
        {
            var instance = new WeeklyPattern();

            var res = instance.Equals(Mock.Create<ISchedulePattern>());

            Assert.IsFalse(res);
        }
Beispiel #11
0
        public void GetHashCodeTest()
        {
            const int ReoccurEveryNWeek = 1;
            const bool Sunday = true;
            const bool Monday = true;
            const bool Tuesday = true;
            const bool Wednesday = true;
            const bool Thursday = true;
            const bool Friday = true;
            const bool Saturday = true;

            var hash = ReoccurEveryNWeek.GetHashCode()
                       ^ ((Sunday.GetHashCode() << 1) ^ (Monday.GetHashCode() << 2) ^ (Tuesday.GetHashCode() << 3) ^ (Wednesday.GetHashCode() << 4) ^ (Thursday.GetHashCode() << 5)
                          ^ (Friday.GetHashCode() << 6) ^ (Saturday.GetHashCode() << 7));

            var instance = new WeeklyPattern
                               {
                                   ReoccurEveryNWeek = ReoccurEveryNWeek,
                                   Sunday = Sunday,
                                   Monday = Monday,
                                   Tuesday = Tuesday,
                                   Wednesday = Wednesday,
                                   Thursday = Thursday,
                                   Friday = Friday,
                                   Saturday = Saturday
                               };

            var res = instance.GetHashCode();

            Assert.AreEqual(hash, res);
        }
Beispiel #12
0
 public void PatternsWithDifferentDaysAreNotEqual()
 {
     var target = new WeeklyPattern { Sunday = true };
     var other = new WeeklyPattern { Monday = true };
     Assert.IsFalse(target.Equals(other));
 }
Beispiel #13
0
        public void PatternsWithEqualFieldsAreEqual()
        {
            var target = new WeeklyPattern { ReoccurEveryNWeek = 2, Monday = true, Wednesday = true, Friday = true };

            var other = new WeeklyPattern { ReoccurEveryNWeek = 2, Monday = true, Wednesday = true, Friday = true };

            Assert.IsTrue(target.Equals(other));
        }
Beispiel #14
0
        public void ReadXElement_SetWednesdayFalse_SetsPropertyWednesdayFalse()
        {
            WeeklyPattern pattern = new WeeklyPattern();
            pattern.ReadXElement(XElement.Parse(@"<WeeklyPattern wednesday=""false"" />"));

            Assert.IsFalse(pattern.Tuesday);
        }
Beispiel #15
0
 public void PatternsWithDifferentReoccurEveryNWeekAreNotEqual()
 {
     var target = new WeeklyPattern { ReoccurEveryNWeek = 1 };
     var other = new WeeklyPattern { ReoccurEveryNWeek = 2 };
     Assert.IsFalse(target.Equals(other));
 }
Beispiel #16
0
        public void GetNextDateAfter_ReturnsNextDayInNextWeek()
        {
            // Arrange.
            var target = new WeeklyPattern { Saturday = true, Sunday = true };

            var afterDate = new DateTime(2013, 1, 19); // Saturday

            // Act.
            var result = target.GetNextDateAfter(afterDate);

            // Assert.
            var expected = new DateTime(2013, 1, 20); // Sunday
            Assert.AreEqual(expected, result);

            // Arrange.
            target = new WeeklyPattern { ReoccurEveryNWeek = 2, Sunday = true, Saturday = true };

            afterDate = new DateTime(2013, 1, 19); // Saturday

            // Act.
            result = target.GetNextDateAfter(afterDate);

            // Assert.
            expected = new DateTime(2013, 1, 27); // Sunday
            Assert.AreEqual(expected, result);

            // Arrange.
            target = new WeeklyPattern { ReoccurEveryNWeek = 3, Sunday = true };

            afterDate = new DateTime(2013, 1, 20); // Sunday

            // Act.
            result = target.GetNextDateAfter(afterDate);

            // Assert.
            expected = new DateTime(2013, 2, 10); // Sunday
            Assert.AreEqual(expected, result);
        }
Beispiel #17
0
 public void PatternIsNotEqualToNull()
 {
     var target = new WeeklyPattern();
     Assert.IsFalse(target.Equals(null));
 }
Beispiel #18
0
        public void ReoccurEveryNWeekDefaultsToOne()
        {
            var target = new WeeklyPattern();

            Assert.AreEqual(1, target.ReoccurEveryNWeek);
        }
        /// <summary>
        /// Converts the specified pattern.
        /// </summary>
        /// <param name="pattern">The pattern.</param>
        /// <param name="defaultOccurrence">The default occurrence.</param>
        /// <returns></returns>
        public static OccurrenceCollection Convert(WeeklyPattern pattern, Occurrence defaultOccurrence)
        {
            Expression <Func <DateTime, DateTime> > predicate = previousDate => WeeklyCalculate(pattern, previousDate);

            return(Convert(pattern, defaultOccurrence, predicate));
        }
Beispiel #20
0
        public void ReadXElement_SetFridayTrue_SetsPropertyFridayTrue()
        {
            WeeklyPattern pattern = new WeeklyPattern();
            pattern.ReadXElement(XElement.Parse(@"<WeeklyPattern friday=""true"" />"));

            Assert.IsTrue(pattern.Friday);
        }
Beispiel #21
0
        public void ReadXElement_SetSaturdayFalse_SetsPropertySaturdayFalse()
        {
            WeeklyPattern pattern = new WeeklyPattern();
            pattern.ReadXElement(XElement.Parse(@"<WeeklyPattern saturday=""false"" />"));

            Assert.IsFalse(pattern.Saturday);
        }
Beispiel #22
0
        public void ReadXElement_Set_SetsProperty()
        {
            WeeklyPattern pattern = new WeeklyPattern();
            pattern.ReadXElement(XElement.Parse(@"<WeeklyPattern reocurEveryNWeek=""4"" />"));

            Assert.IsTrue(pattern.ReocurEveryNWeek == 4);
        }
Beispiel #23
0
        public void GetNextDateAfter_ReturnsNextDayInCurrentWeek()
        {
            // Arrange.
            var target = new WeeklyPattern { ReoccurEveryNWeek = 2, Sunday = true, Tuesday = true };
            var afterDate = new DateTime(2013, 1, 20); // Sunday

            // Act.
            var result = target.GetNextDateAfter(afterDate);

            // Assert.
            var expected = new DateTime(2013, 1, 22); // Tuesday
            Assert.AreEqual(expected, result);

            // Arrange.
            target = new WeeklyPattern { ReoccurEveryNWeek = 2, Saturday = true, };

            afterDate = new DateTime(2013, 1, 18); // Friday.

            // Act.
            result = target.GetNextDateAfter(afterDate);

            // Assert.
            expected = new DateTime(2013, 1, 19); // Saturday
            Assert.AreEqual(expected, result);

            // Arrange.
            target = new WeeklyPattern { ReoccurEveryNWeek = 2, Sunday = true, Monday = true, Tuesday = true, Wednesday = true, Thursday = true, Friday = true, Saturday = true };

            afterDate = new DateTime(2013, 1, 18); // Friday.

            // Act.
            result = target.GetNextDateAfter(afterDate);

            // Assert.
            expected = new DateTime(2013, 1, 19); // Saturday
            Assert.AreEqual(expected, result);
        }
Beispiel #24
0
 public void PatternIsNotEqualToRandomObject()
 {
     var target = new WeeklyPattern();
     Assert.IsFalse(target.Equals(new object()));
 }
Beispiel #25
0
        public void WhenNoDaysAreSelected_GetNextDateAfter_ReturnsNull()
        {
            // Arrange.
            var target = new WeeklyPattern();

            // Act.
            var result = target.GetNextDateAfter(new DateTime(2013, 1, 1));

            // Assert.
            Assert.IsNull(result);
        }
Beispiel #26
0
 public void PatternsWithDefaultValuesAreEqual()
 {
     var target = new WeeklyPattern();
     var other = new WeeklyPattern();
     Assert.IsTrue(target.Equals(other));
 }
Beispiel #27
0
 public void PatternIsEqualToSelf()
 {
     var target = new WeeklyPattern();
     Assert.IsTrue(target.Equals(target));
 }
Beispiel #28
0
 public void ReadXElement_Empty_ThrowsArgumentNullException()
 {
     WeeklyPattern pattern = new WeeklyPattern();
     XElement element = null;
     pattern.ReadXElement(element);
 }