public void Occurrences_before_start()
        {
            // 21/2/2009, 21/8/2010, 21/2/2012, 21/8/2013, 21/2/2015
            MonthlyDaySchedule month = new MonthlyDaySchedule { Frequency = 1 };
            IList<DateTime> occurrences = Convert(month.GetOccurrences(_start, new DateTime(2009, 1, 1), new DateTime(2009, 2, 1)));

            Assert.AreEqual(0, occurrences.Count);
        }
        public void Occurrences_stress_test()
        {
            var d = new DateTime(1000, 1, 1);
            MonthlyDaySchedule month = new MonthlyDaySchedule { Frequency = 1 };
            IList<DateTime> occurrences = Convert(month.GetOccurrences(d, d, new DateTime(2999, 12, 31)));

            Assert.AreEqual(24000, occurrences.Count);
        }
        public void Next_occurrence_before_start()
        {
            // 21/2/2009, 21/8/2010, 21/2/2012, 21/8/2013, 21/2/2015
            MonthlyDaySchedule month = new MonthlyDaySchedule { Frequency = 1 };
            DateTime? next = month.NextOccurrence(_start, new DateTime(2000, 1, 1));

            Assert.IsTrue(next.HasValue);
            Assert.AreEqual(new DateTime(2010, 4, 1), next.Value);
        }
예제 #4
0
        public void Occurrences_before_start()
        {
            // 21/2/2009, 21/8/2010, 21/2/2012, 21/8/2013, 21/2/2015
            MonthlyDaySchedule month = new MonthlyDaySchedule {
                Frequency = 1
            };
            IList <DateTime> occurrences = Convert(month.GetOccurrences(_start, new DateTime(2009, 1, 1), new DateTime(2009, 2, 1)));

            Assert.AreEqual(0, occurrences.Count);
        }
예제 #5
0
        public void Occurrences_stress_test()
        {
            var d = new DateTime(1000, 1, 1);
            MonthlyDaySchedule month = new MonthlyDaySchedule {
                Frequency = 1
            };
            IList <DateTime> occurrences = Convert(month.GetOccurrences(d, d, new DateTime(2999, 12, 31)));

            Assert.AreEqual(24000, occurrences.Count);
        }
예제 #6
0
        public void Occurrences_third_wednesday()
        {
            MonthlyDaySchedule month = new MonthlyDaySchedule {
                Frequency = 2
            };
            IList <DateTime> occurrences = Convert(month.GetOccurrences(_start.AddDays(20), new DateTime(2010, 3, 31), new DateTime(2010, 6, 30)));

            Assert.AreEqual(2, occurrences.Count);
            Assert.AreEqual(new DateTime(2010, 4, 21), occurrences[0]);
            Assert.AreEqual(new DateTime(2010, 6, 16), occurrences[1]);
        }
예제 #7
0
        public void Occurrences_last_tuesday()
        {
            MonthlyDaySchedule month = new MonthlyDaySchedule {
                Frequency = 2
            };
            IList <DateTime> occurrences = Convert(month.GetOccurrences(_start.AddDays(26), new DateTime(2010, 3, 31), new DateTime(2010, 6, 30)));

            Assert.AreEqual(2, occurrences.Count);
            Assert.AreEqual(new DateTime(2010, 4, 27), occurrences[0]); // 4th + last
            Assert.AreEqual(new DateTime(2010, 6, 29), occurrences[1]); // last
        }
예제 #8
0
        public void Next_occurrence_before_start()
        {
            // 21/2/2009, 21/8/2010, 21/2/2012, 21/8/2013, 21/2/2015
            MonthlyDaySchedule month = new MonthlyDaySchedule {
                Frequency = 1
            };
            DateTime?next = month.NextOccurrence(_start, new DateTime(2000, 1, 1));

            Assert.IsTrue(next.HasValue);
            Assert.AreEqual(new DateTime(2010, 4, 1), next.Value);
        }
        public void Occurrences_within_period()
        {
            // 21/2/2009, 21/8/2010, 21/2/2012, 21/8/2013, 21/2/2015
            MonthlyDaySchedule month = new MonthlyDaySchedule { Frequency = 1 };
            IList<DateTime> occurrences = Convert(month.GetOccurrences(_start, new DateTime(2010, 12, 1), new DateTime(2011, 3, 1)));

            Assert.AreEqual(3, occurrences.Count);
            Assert.AreEqual(new DateTime(2010, 12, 2), occurrences[0]);
            Assert.AreEqual(new DateTime(2011, 1, 6), occurrences[1]);
            Assert.AreEqual(new DateTime(2011, 2, 3), occurrences[2]);
        }
        public void Occurrences_crossing_start()
        {
            // 21/2/2009, 21/8/2010, 21/2/2012, 21/8/2013, 21/2/2015
            MonthlyDaySchedule month = new MonthlyDaySchedule { Frequency = 1 };
            IList<DateTime> occurrences = Convert(month.GetOccurrences(_start, new DateTime(2010, 1, 1), new DateTime(2010, 6, 30)));

            Assert.AreEqual(3, occurrences.Count);
            Assert.AreEqual(new DateTime(2010, 4, 1), occurrences[0]);
            Assert.AreEqual(new DateTime(2010, 5, 6), occurrences[1]);
            Assert.AreEqual(new DateTime(2010, 6, 3), occurrences[2]);
        }
예제 #11
0
        public void Occurrences_third_saturday()
        {
            MonthlyDaySchedule month = new MonthlyDaySchedule {
                Frequency = 1
            };
            IList <DateTime> occurrences = Convert(month.GetOccurrences(_start.AddDays(16), new DateTime(2010, 3, 31), new DateTime(2010, 6, 30)));

            Assert.AreEqual(3, occurrences.Count);
            Assert.AreEqual(new DateTime(2010, 4, 17), occurrences[0]);
            Assert.AreEqual(new DateTime(2010, 5, 15), occurrences[1]);
            Assert.AreEqual(new DateTime(2010, 6, 19), occurrences[2]);
        }
예제 #12
0
        public void Occurrences_second_thursday()
        {
            MonthlyDaySchedule month = new MonthlyDaySchedule {
                Frequency = 1
            };
            IList <DateTime> occurrences = Convert(month.GetOccurrences(_start.AddDays(7), new DateTime(2010, 3, 31), new DateTime(2010, 6, 30)));

            Assert.AreEqual(3, occurrences.Count);
            Assert.AreEqual(new DateTime(2010, 4, 8), occurrences[0]);
            Assert.AreEqual(new DateTime(2010, 5, 13), occurrences[1]);
            Assert.AreEqual(new DateTime(2010, 6, 10), occurrences[2]);
        }
예제 #13
0
        public void Occurrences_first_friday()
        {
            MonthlyDaySchedule month = new MonthlyDaySchedule {
                Frequency = 1
            };
            IList <DateTime> occurrences = Convert(month.GetOccurrences(_start.AddDays(1), new DateTime(2010, 3, 31), new DateTime(2010, 6, 30)));

            Assert.AreEqual(3, occurrences.Count);
            Assert.AreEqual(new DateTime(2010, 4, 2), occurrences[0]);
            Assert.AreEqual(new DateTime(2010, 5, 7), occurrences[1]);
            Assert.AreEqual(new DateTime(2010, 6, 4), occurrences[2]);
        }
예제 #14
0
        public void Occurrences_fourth_friday()
        {
            MonthlyDaySchedule month = new MonthlyDaySchedule {
                Frequency = 1
            };
            IList <DateTime> occurrences = Convert(month.GetOccurrences(_start.AddDays(22), new DateTime(2010, 3, 31), new DateTime(2010, 6, 30)));

            Assert.AreEqual(3, occurrences.Count);
            Assert.AreEqual(new DateTime(2010, 4, 23), occurrences[0]); // 4th
            Assert.AreEqual(new DateTime(2010, 5, 28), occurrences[1]); // 4th + last
            Assert.AreEqual(new DateTime(2010, 6, 25), occurrences[2]); // 4th + last
        }
예제 #15
0
        public void Occurrences_within_period()
        {
            // 21/2/2009, 21/8/2010, 21/2/2012, 21/8/2013, 21/2/2015
            MonthlyDaySchedule month = new MonthlyDaySchedule {
                Frequency = 1
            };
            IList <DateTime> occurrences = Convert(month.GetOccurrences(_start, new DateTime(2010, 12, 1), new DateTime(2011, 3, 1)));

            Assert.AreEqual(3, occurrences.Count);
            Assert.AreEqual(new DateTime(2010, 12, 2), occurrences[0]);
            Assert.AreEqual(new DateTime(2011, 1, 6), occurrences[1]);
            Assert.AreEqual(new DateTime(2011, 2, 3), occurrences[2]);
        }
예제 #16
0
        public void Occurrences_crossing_start()
        {
            // 21/2/2009, 21/8/2010, 21/2/2012, 21/8/2013, 21/2/2015
            MonthlyDaySchedule month = new MonthlyDaySchedule {
                Frequency = 1
            };
            IList <DateTime> occurrences = Convert(month.GetOccurrences(_start, new DateTime(2010, 1, 1), new DateTime(2010, 6, 30)));

            Assert.AreEqual(3, occurrences.Count);
            Assert.AreEqual(new DateTime(2010, 4, 1), occurrences[0]);
            Assert.AreEqual(new DateTime(2010, 5, 6), occurrences[1]);
            Assert.AreEqual(new DateTime(2010, 6, 3), occurrences[2]);
        }
예제 #17
0
        public void Occurrences_first_tuesday_with_time_component()
        {
            MonthlyDaySchedule month = new MonthlyDaySchedule {
                Frequency = 1
            };
            IList <DateTime> occurrences = Convert(month.GetOccurrences(
                                                       new DateTime(2011, 8, 2, 14, 30, 0),
                                                       new DateTime(2011, 8, 17),
                                                       new DateTime(2011, 11, 1, 11, 0, 0)));

            Assert.AreEqual(2, occurrences.Count);
            Assert.AreEqual(new DateTime(2011, 9, 6, 14, 30, 0), occurrences[0]);
            Assert.AreEqual(new DateTime(2011, 10, 4, 14, 30, 0), occurrences[1]);
        }
예제 #18
0
        public void Occurrences_first_tuesday_without_time_component_afternoon()
        {
            MonthlyDaySchedule month = new MonthlyDaySchedule {
                Frequency = 1
            };
            IList <DateTime> occurrences = Convert(month.GetOccurrences(
                                                       new DateTime(2011, 8, 2),
                                                       new DateTime(2011, 8, 17),
                                                       new DateTime(2011, 11, 1)));

            Assert.AreEqual(3, occurrences.Count);
            Assert.AreEqual(new DateTime(2011, 9, 6), occurrences[0]);
            Assert.AreEqual(new DateTime(2011, 10, 4), occurrences[1]);
            Assert.AreEqual(new DateTime(2011, 11, 1), occurrences[2]);
        }
예제 #19
0
        private ISchedule Generate(SqlDataReader reader)
        {
            ISchedule result;

            if (!IsDBNull(reader, "sd.Id"))
            {
                result = new DailySchedule();
            }
            else if (!IsDBNull(reader, "sw.Id"))
            {
                var week = new WeeklySchedule();
                week.Monday    = GetBoolean(reader, "Monday");
                week.Tuesday   = GetBoolean(reader, "Tuesday");
                week.Wednesday = GetBoolean(reader, "Wednesday");
                week.Thursday  = GetBoolean(reader, "Thursday");
                week.Friday    = GetBoolean(reader, "Friday");
                week.Saturday  = GetBoolean(reader, "Saturday");
                week.Sunday    = GetBoolean(reader, "Sunday");
                result         = week;
            }
            else if (!IsDBNull(reader, "sm.Id"))
            {
                result = new MonthlySchedule();
            }
            else if (!IsDBNull(reader, "smd.Id"))
            {
                result = new MonthlyDaySchedule();
            }
            else if (!IsDBNull(reader, "sy.Id"))
            {
                result = new YearlySchedule();
            }
            else
            {
                return(null);
            }

            result.Frequency = GetInt32(reader, "Frequency");
            return(result);
        }
예제 #20
0
        /// <summary>
        /// Gets the generated description for the schedule.  Will not update Description or fire events.
        /// </summary>
        public virtual string Format(MonthlyDaySchedule s)
        {
            // Monthly on the first Tuesday
            // Every 6 months on the last Saturday
            var sb = new StringBuilder();

            if (s.Frequency == 1)
            {
                sb.Append("Monthly");
            }
            else
            {
                sb.AppendFormat("Every {0} months", s.Frequency);
            }

            if (Start.HasValue)
            {
                sb.AppendFormat(" on the {0} {1}", GetDescriptiveWeek(MonthlyDaySchedule.GetWeek(Start.Value)), Start.Value.DayOfWeek);
            }

            return(sb.ToString());
            //(EndDate.HasValue ? String.Format(", ending {0}", EndDate.Value.ToString("d MMMM yyyy")) : ""));
        }
 /// <summary>
 /// Visitor pattern for generating description for this schedule.  Will update Description and fire events.
 /// </summary>
 public virtual void Visit(MonthlyDaySchedule s) { OnDescriptionChanged(s, Format(s)); }
        /// <summary>
        /// Gets the generated description for the schedule.  Will not update Description or fire events.
        /// </summary>
        public virtual string Format(MonthlyDaySchedule s)
        {
            // Monthly on the first Tuesday
            // Every 6 months on the last Saturday
            var sb = new StringBuilder();
            if (s.Frequency == 1)
                sb.Append("Monthly");
            else
                sb.AppendFormat("Every {0} months", s.Frequency);

            if (Start.HasValue)
                sb.AppendFormat(" on the {0} {1}", GetDescriptiveWeek(MonthlyDaySchedule.GetWeek(Start.Value)), Start.Value.DayOfWeek);

            return sb.ToString();
            //(EndDate.HasValue ? String.Format(", ending {0}", EndDate.Value.ToString("d MMMM yyyy")) : ""));
        }
        public void Occurrences_second_thursday()
        {
            MonthlyDaySchedule month = new MonthlyDaySchedule { Frequency = 1 };
            IList<DateTime> occurrences = Convert(month.GetOccurrences(_start.AddDays(7), new DateTime(2010, 3, 31), new DateTime(2010, 6, 30)));

            Assert.AreEqual(3, occurrences.Count);
            Assert.AreEqual(new DateTime(2010, 4, 8), occurrences[0]);
            Assert.AreEqual(new DateTime(2010, 5, 13), occurrences[1]);
            Assert.AreEqual(new DateTime(2010, 6, 10), occurrences[2]);
        }
        public void Occurrences_third_saturday()
        {
            MonthlyDaySchedule month = new MonthlyDaySchedule { Frequency = 1 };
            IList<DateTime> occurrences = Convert(month.GetOccurrences(_start.AddDays(16), new DateTime(2010, 3, 31), new DateTime(2010, 6, 30)));

            Assert.AreEqual(3, occurrences.Count);
            Assert.AreEqual(new DateTime(2010, 4, 17), occurrences[0]);
            Assert.AreEqual(new DateTime(2010, 5, 15), occurrences[1]);
            Assert.AreEqual(new DateTime(2010, 6, 19), occurrences[2]);
        }
        public void Occurrences_third_wednesday()
        {
            MonthlyDaySchedule month = new MonthlyDaySchedule { Frequency = 2 };
            IList<DateTime> occurrences = Convert(month.GetOccurrences(_start.AddDays(20), new DateTime(2010, 3, 31), new DateTime(2010, 6, 30)));

            Assert.AreEqual(2, occurrences.Count);
            Assert.AreEqual(new DateTime(2010, 4, 21), occurrences[0]);
            Assert.AreEqual(new DateTime(2010, 6, 16), occurrences[1]);
        }
        public void Occurrences_last_friday()
        {
            MonthlyDaySchedule month = new MonthlyDaySchedule { Frequency = 1 };
            IList<DateTime> occurrences = Convert(month.GetOccurrences(_start.AddDays(29), new DateTime(2010, 3, 31), new DateTime(2010, 6, 30)));

            Assert.AreEqual(3, occurrences.Count);
            Assert.AreEqual(new DateTime(2010, 4, 30), occurrences[0]); // last
            Assert.AreEqual(new DateTime(2010, 5, 28), occurrences[1]); // 4th + last
            Assert.AreEqual(new DateTime(2010, 6, 25), occurrences[2]); // 4th + last
        }
        public void Occurrences_first_tuesday_with_time_component()
        {
            MonthlyDaySchedule month = new MonthlyDaySchedule { Frequency = 1 };
            IList<DateTime> occurrences = Convert(month.GetOccurrences( 
                new DateTime(2011, 8, 2, 14, 30, 0),
                new DateTime(2011, 8, 17), 
                new DateTime(2011, 11, 1, 11, 0, 0)));

            Assert.AreEqual(2, occurrences.Count);
            Assert.AreEqual(new DateTime(2011, 9, 6, 14, 30, 0), occurrences[0]);
            Assert.AreEqual(new DateTime(2011, 10, 4, 14, 30, 0), occurrences[1]);
        }
        public void Occurrences_first_tuesday_without_time_component_afternoon()
        {
            MonthlyDaySchedule month = new MonthlyDaySchedule { Frequency = 1 };
            IList<DateTime> occurrences = Convert(month.GetOccurrences( 
                new DateTime(2011, 8, 2),
                new DateTime(2011, 8, 17), 
                new DateTime(2011, 11, 1)));

            Assert.AreEqual(3, occurrences.Count);
            Assert.AreEqual(new DateTime(2011, 9, 6), occurrences[0]);
            Assert.AreEqual(new DateTime(2011, 10, 4), occurrences[1]);
            Assert.AreEqual(new DateTime(2011, 11, 1), occurrences[2]);
        }
예제 #29
0
 /// <summary>
 /// Visitor pattern for generating description for this schedule.  Will update Description and fire events.
 /// </summary>
 public virtual void Visit(MonthlyDaySchedule s)
 {
     OnDescriptionChanged(s, Format(s));
 }
        public void Occurrences_first_friday()
        {
            MonthlyDaySchedule month = new MonthlyDaySchedule { Frequency = 1 };
            IList<DateTime> occurrences = Convert(month.GetOccurrences(_start.AddDays(1), new DateTime(2010, 3, 31), new DateTime(2010, 6, 30)));

            Assert.AreEqual(3, occurrences.Count);
            Assert.AreEqual(new DateTime(2010, 4, 2), occurrences[0]);
            Assert.AreEqual(new DateTime(2010, 5, 7), occurrences[1]);
            Assert.AreEqual(new DateTime(2010, 6, 4), occurrences[2]);
        }