text:
#region License

#endregion

using NUnit.Framework;

using Quartz.Impl.Calendar;
using Quartz.Impl.Triggers;
using Quartz.Job;
using Quartz.Spi;
using Quartz.Util;

using TimeZoneConverter;

namespace Quartz.Tests.Unit.Impl.Triggers
{
    /// <summary>
    /// Unit test for <see cref="DailyTimeIntervalTriggerImpl"/>.
    /// </summary>
    /// <author>Zemian Deng saltnlight5@gmail.com</author>
    /// <author>Nuno Maia (.NET)</author>
    [TestFixture]
    public class DailyTimeIntervalTriggerImplTest
    {
        [Test]
        public void TestNormalExample()
        {
            DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011);
            TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 0);
            TimeOfDay endTimeOfDay = new TimeOfDay(11, 0, 0);
            var trigger = new DailyTimeIntervalTriggerImpl
            {
                StartTimeUtc = startTime.ToUniversalTime(),
                StartTimeOfDay = startTimeOfDay,
                EndTimeOfDay = endTimeOfDay,
                RepeatIntervalUnit = IntervalUnit.Minute,
                RepeatInterval = 72 // this interval will give three firings per day (8:00, 9:12, and 10:24)
            };

            var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48);
            Assert.AreEqual(48, fireTimes.Count);
            Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]);
            Assert.AreEqual(DateBuilder.DateOf(10, 24, 0, 16, 1, 2011), fireTimes[47]);
        }

        [Test]
        public void TestQuartzCalendarExclusion()
        {
            DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011);
            var trigger = new DailyTimeIntervalTriggerImpl
            {
                StartTimeUtc = startTime.ToUniversalTime(),
                StartTimeOfDay = new TimeOfDay(8, 0),
                RepeatIntervalUnit = IntervalUnit.Minute,
                RepeatInterval = 60
            };

            CronCalendar cronCal = new CronCalendar("* * 9-12 * * ?"); // exclude 9-12
            var fireTimes = TriggerUtils.ComputeFireTimes(trigger, cronCal, 48);
            Assert.AreEqual(48, fireTimes.Count);
            Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]);
            Assert.AreEqual(DateBuilder.DateOf(13, 0, 0, 1, 1, 2011), fireTimes[1]);
            Assert.AreEqual(DateBuilder.DateOf(23, 0, 0, 4, 1, 2011), fireTimes[47]);
        }

        [Test]
        public void TestValidateTimeOfDayOrder()
        {
            Assert.Throws<ArgumentException>(() =>
                new DailyTimeIntervalTriggerImpl
                {
                    StartTimeOfDay = new TimeOfDay(12, 0, 0),
                    EndTimeOfDay = new TimeOfDay(8, 0, 0)
                }, "End time of day cannot be before start time of day");
        }

        [Test]
        public void TestValidateInterval()
        {
            var trigger = new DailyTimeIntervalTriggerImpl
            {
                Key = new TriggerKey("test", "test"),
                JobKey = JobKey.Create("test"),
                RepeatIntervalUnit = IntervalUnit.Hour,
                RepeatInterval = 25
            };

            Assert.Throws<SchedulerException>(trigger.Validate, "repeatInterval can not exceed 24 hours. Given 25 hours.");

            trigger.RepeatIntervalUnit = IntervalUnit.Minute;
            trigger.RepeatInterval = 60*25;
            Assert.Throws<SchedulerException>(trigger.Validate, "repeatInterval can not exceed 24 hours (86400 seconds). Given 90000");

            trigger.RepeatIntervalUnit = IntervalUnit.Second;
            trigger.RepeatInterval = 60*60*25;

            Assert.Throws<SchedulerException>(trigger.Validate, "repeatInterval can not exceed 24 hours (86400 seconds). Given 90000");

            Assert.Throws<ArgumentException>(delegate { trigger.RepeatIntervalUnit = IntervalUnit.Day; }, "Invalid repeat IntervalUnit (must be Second, Minute or Hour)");

            trigger.RepeatIntervalUnit = IntervalUnit.Second;
            trigger.RepeatInterval = 0;
            Assert.Throws<SchedulerException>(trigger.Validate, "Repeat Interval cannot be zero.");
        }

        [Test]
        public void TestStartTimeWithoutStartTimeOfDay()
        {
            DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011);
            var trigger = new DailyTimeIntervalTriggerImpl
            {
                StartTimeUtc = startTime.ToUniversalTime(),
                RepeatIntervalUnit = IntervalUnit.Minute,
                RepeatInterval = 60
            };

            var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48);
            Assert.AreEqual(48, fireTimes.Count);
            Assert.AreEqual(DateBuilder.DateOf(0, 0, 0, 1, 1, 2011), fireTimes[0]);
            Assert.AreEqual(DateBuilder.DateOf(23, 0, 0, 2, 1, 2011), fireTimes[47]);
        }

        [Test]
        public void TestEndTimeWithoutEndTimeOfDay()
        {
            DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011);
            DateTimeOffset endTime = DateBuilder.DateOf(22, 0, 0, 2, 1, 2011);
            var trigger = new DailyTimeIntervalTriggerImpl
            {
                StartTimeUtc = startTime.ToUniversalTime(),
                EndTimeUtc = endTime.ToUniversalTime(),
                RepeatIntervalUnit = IntervalUnit.Minute,
                RepeatInterval = 60
            };

            var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48);
            Assert.AreEqual(47, fireTimes.Count);
            Assert.AreEqual(DateBuilder.DateOf(0, 0, 0, 1, 1, 2011), fireTimes[0]);
            Assert.AreEqual(DateBuilder.DateOf(22, 0, 0, 2, 1, 2011), fireTimes[46]);
        }

        [Test]
        public void TestStartTimeBeforeStartTimeOfDay()
        {
            DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011);
            TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 0);
            var trigger = new DailyTimeIntervalTriggerImpl
            {
                StartTimeUtc = startTime.ToUniversalTime(),
                StartTimeOfDay = startTimeOfDay,
                RepeatIntervalUnit = IntervalUnit.Minute,
                RepeatInterval = 60
            };

            var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48);
            Assert.AreEqual(48, fireTimes.Count);
            Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]);
            Assert.AreEqual(DateBuilder.DateOf(23, 0, 0, 3, 1, 2011), fireTimes[47]);
        }

        [Test]
        public void TestStartTimeBeforeStartTimeOfDayOnInvalidDay()
        {
            DateTimeOffset startTime = dateOf(0, 0, 0, 1, 1, 2011); // Jan 1, 2011 was a saturday...
            TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 0);
            var trigger = new DailyTimeIntervalTriggerImpl();
            var daysOfWeek = new List<DayOfWeek>
            {
                DayOfWeek.Monday,
                DayOfWeek.Tuesday,
                DayOfWeek.Wednesday,
                DayOfWeek.Thursday,
                DayOfWeek.Friday
            };
            trigger.DaysOfWeek = daysOfWeek;
            trigger.StartTimeUtc = startTime.ToUniversalTime();
            trigger.StartTimeOfDay = startTimeOfDay;
            trigger.RepeatIntervalUnit = IntervalUnit.Minute;
            trigger.RepeatInterval = 60;

            Assert.That(trigger.GetFireTimeAfter(dateOf(6, 0, 0, 22, 5, 2010)), Is.EqualTo(dateOf(8, 0, 0, 3, 1, 2011)));

            var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48);
            Assert.That(fireTimes.Count, Is.EqualTo(48));
            Assert.That(fireTimes[0], Is.EqualTo(dateOf(8, 0, 0, 3, 1, 2011)));
            Assert.That(fireTimes[47], Is.EqualTo(dateOf(23, 0, 0, 5, 1, 2011)));
        }

        [Test]
        public void TestStartTimeAfterStartTimeOfDay()
        {
            DateTimeOffset startTime = DateBuilder.DateOf(9, 23, 0, 1, 1, 2011);
            TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 0);
            var trigger = new DailyTimeIntervalTriggerImpl
            {
                StartTimeUtc = startTime.ToUniversalTime(),
                StartTimeOfDay = startTimeOfDay,
                RepeatIntervalUnit = IntervalUnit.Minute,
                RepeatInterval = 60
            };

            var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48);
            Assert.AreEqual(48, fireTimes.Count);
            Assert.AreEqual(DateBuilder.DateOf(10, 0, 0, 1, 1, 2011), fireTimes[0]);
            Assert.AreEqual(DateBuilder.DateOf(9, 0, 0, 4, 1, 2011), fireTimes[47]);
        }

        [Test]
        public void TestEndTimeBeforeEndTimeOfDay()
        {
            DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011);
            DateTimeOffset endTime = DateBuilder.DateOf(16, 0, 0, 2, 1, 2011);
            TimeOfDay endTimeOfDay = new TimeOfDay(17, 0, 0);
            var trigger = new DailyTimeIntervalTriggerImpl
            {
                StartTimeUtc = startTime.ToUniversalTime(),
                EndTimeUtc = endTime.ToUniversalTime(),
                EndTimeOfDay = endTimeOfDay,
                RepeatIntervalUnit = IntervalUnit.Minute,
                RepeatInterval = 60
            };

            var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48);
            Assert.AreEqual(35, fireTimes.Count);
            Assert.AreEqual(DateBuilder.DateOf(0, 0, 0, 1, 1, 2011), fireTimes[0]);
            Assert.AreEqual(DateBuilder.DateOf(17, 0, 0, 1, 1, 2011), fireTimes[17]);
            Assert.AreEqual(DateBuilder.DateOf(16, 0, 0, 2, 1, 2011), fireTimes[34]);
        }

        [Test]
        public void TestEndTimeAfterEndTimeOfDay()
        {
            DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011);
            DateTimeOffset endTime = DateBuilder.DateOf(18, 0, 0, 2, 1, 2011);
            TimeOfDay endTimeOfDay = new TimeOfDay(17, 0, 0);
            var trigger = new DailyTimeIntervalTriggerImpl
            {
                StartTimeUtc = startTime.ToUniversalTime(),
                EndTimeUtc = endTime.ToUniversalTime(),
                EndTimeOfDay = endTimeOfDay,
                RepeatIntervalUnit = IntervalUnit.Minute,
                RepeatInterval = 60
            };

            var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48);
            Assert.AreEqual(36, fireTimes.Count);
            Assert.AreEqual(DateBuilder.DateOf(0, 0, 0, 1, 1, 2011), fireTimes[0]);
            Assert.AreEqual(DateBuilder.DateOf(17, 0, 0, 1, 1, 2011), fireTimes[17]);
            Assert.AreEqual(DateBuilder.DateOf(17, 0, 0, 2, 1, 2011), fireTimes[35]);
        }

        [Test]
        public void TestTimeOfDayWithStartTime()
        {
            DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011);
            TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 0);
            TimeOfDay endTimeOfDay = new TimeOfDay(17, 0, 0);
            var trigger = new DailyTimeIntervalTriggerImpl
            {
                StartTimeUtc = startTime.ToUniversalTime(),
                StartTimeOfDay = startTimeOfDay,
                EndTimeOfDay = endTimeOfDay,
                RepeatIntervalUnit = IntervalUnit.Minute,
                RepeatInterval = 60
            };

            var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48);
            Assert.AreEqual(48, fireTimes.Count);
            Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]);
            Assert.AreEqual(DateBuilder.DateOf(17, 0, 0, 1, 1, 2011), fireTimes[9]); // The 10th hours is the end of day.
            Assert.AreEqual(DateBuilder.DateOf(15, 0, 0, 5, 1, 2011), fireTimes[47]);
        }

        [Test]
        public void TestTimeOfDayWithEndTime()
        {
            DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011);
            DateTimeOffset endTime = DateBuilder.DateOf(0, 0, 0, 4, 1, 2011);
            TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 0);
            TimeOfDay endTimeOfDay = new TimeOfDay(17, 0, 0);
            var trigger = new DailyTimeIntervalTriggerImpl
            {
                StartTimeUtc = startTime.ToUniversalTime(),
                EndTimeUtc = endTime.ToUniversalTime(),
                StartTimeOfDay = startTimeOfDay,
                EndTimeOfDay = endTimeOfDay,
                RepeatIntervalUnit = IntervalUnit.Minute,
                RepeatInterval = 60
            };

            var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48);
            Assert.AreEqual(30, fireTimes.Count);
            Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]);
            Assert.AreEqual(DateBuilder.DateOf(17, 0, 0, 1, 1, 2011), fireTimes[9]); // The 10th hours is the end of day.
            Assert.AreEqual(DateBuilder.DateOf(17, 0, 0, 3, 1, 2011), fireTimes[29]);
        }

        [Test]
        public void TestTimeOfDayWithEndTime2()
        {
            DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011);
            TimeOfDay startTimeOfDay = new TimeOfDay(8, 23, 0);
            TimeOfDay endTimeOfDay = new TimeOfDay(23, 59, 59); // edge case when endTime is last second of day, which is default too.
            var trigger = new DailyTimeIntervalTriggerImpl
            {
                StartTimeUtc = startTime.ToUniversalTime(),
                StartTimeOfDay = startTimeOfDay,
                EndTimeOfDay = endTimeOfDay,
                RepeatIntervalUnit = IntervalUnit.Minute,
                RepeatInterval = 60
            };

            var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48);
            Assert.AreEqual(48, fireTimes.Count);
            Assert.AreEqual(DateBuilder.DateOf(8, 23, 0, 1, 1, 2011), fireTimes[0]);
            Assert.AreEqual(DateBuilder.DateOf(23, 23, 0, 3, 1, 2011), fireTimes[47]);
        }

        [Test]
        public void TestAllDaysOfTheWeek()
        {
            IReadOnlyCollection<DayOfWeek> daysOfWeek = DailyTimeIntervalScheduleBuilder.AllDaysOfTheWeek;
            DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011); // SAT
            TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 0);
            TimeOfDay endTimeOfDay = new TimeOfDay(17, 0, 0);
            var trigger = new DailyTimeIntervalTriggerImpl
            {
                StartTimeUtc = startTime.ToUniversalTime(),
                StartTimeOfDay = startTimeOfDay,
                EndTimeOfDay = endTimeOfDay,
                DaysOfWeek = daysOfWeek,
                RepeatIntervalUnit = IntervalUnit.Minute,
                RepeatInterval = 60
            };

            var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48);
            Assert.AreEqual(48, fireTimes.Count);
            Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]);
            Assert.AreEqual(DateBuilder.DateOf(17, 0, 0, 1, 1, 2011), fireTimes[9]); // The 10th hours is the end of day.
            Assert.AreEqual(DateBuilder.DateOf(15, 0, 0, 5, 1, 2011), fireTimes[47]);
        }

        [Test]
        public void TestMonThroughFri()
        {
            IReadOnlyCollection<DayOfWeek> daysOfWeek = DailyTimeIntervalScheduleBuilder.MondayThroughFriday;
            DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011); // SAT(7)
            TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 0);
            TimeOfDay endTimeOfDay = new TimeOfDay(17, 0, 0);
            var trigger = new DailyTimeIntervalTriggerImpl
            {
                StartTimeUtc = startTime.ToUniversalTime(),
                StartTimeOfDay = startTimeOfDay,
                EndTimeOfDay = endTimeOfDay,
                DaysOfWeek = daysOfWeek,
                RepeatIntervalUnit = IntervalUnit.Minute,
                RepeatInterval = 60
            };

            var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48);
            Assert.AreEqual(48, fireTimes.Count);
            Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 3, 1, 2011), fireTimes[0]);
            Assert.AreEqual(DayOfWeek.Monday, fireTimes[0].LocalDateTime.DayOfWeek);
            Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 4, 1, 2011), fireTimes[10]);
            Assert.AreEqual(DayOfWeek.Tuesday, fireTimes[10].LocalDateTime.DayOfWeek);
            Assert.AreEqual(DateBuilder.DateOf(15, 0, 0, 7, 1, 2011), fireTimes[47]);
            Assert.AreEqual(DayOfWeek.Friday, fireTimes[47].LocalDateTime.DayOfWeek);
        }

        [Test]
        public void TestSatAndSun()
        {
            IReadOnlyCollection<DayOfWeek> daysOfWeek = DailyTimeIntervalScheduleBuilder.SaturdayAndSunday;
            DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011); // SAT(7)
            TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 0);
            TimeOfDay endTimeOfDay = new TimeOfDay(17, 0, 0);
            var trigger = new DailyTimeIntervalTriggerImpl
            {
                StartTimeUtc = startTime.ToUniversalTime(),
                StartTimeOfDay = startTimeOfDay,
                EndTimeOfDay = endTimeOfDay,
                DaysOfWeek = daysOfWeek,
                RepeatIntervalUnit = IntervalUnit.Minute,
                RepeatInterval = 60
            };

            var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48);
            Assert.AreEqual(48, fireTimes.Count);
            Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]);
            Assert.AreEqual(DayOfWeek.Saturday, fireTimes[0].LocalDateTime.DayOfWeek);
            Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 2, 1, 2011), fireTimes[10]);
            Assert.AreEqual(DayOfWeek.Sunday, fireTimes[10].LocalDateTime.DayOfWeek);
            Assert.AreEqual(DateBuilder.DateOf(15, 0, 0, 15, 1, 2011), fireTimes[47]);
            Assert.AreEqual(DayOfWeek.Saturday, fireTimes[47].LocalDateTime.DayOfWeek);
        }

        [TestCase(-14)]
        [TestCase(0)]
        [TestCase(10)]
        public void TestMonOnly(int tzOffsetHours)
        {
            var daysOfWeek = new HashSet<DayOfWeek>
            {
                DayOfWeek.Monday
            };
            DateTimeOffset startTime = new DateTimeOffset(2011, 1, 1, 0, 0, 0, TimeSpan.FromHours(tzOffsetHours)); // SAT(7)
            TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 0);
            TimeOfDay endTimeOfDay = new TimeOfDay(17, 0, 0);
            var trigger = new DailyTimeIntervalTriggerImpl
            {
                StartTimeUtc = startTime.ToUniversalTime(),
                StartTimeOfDay = startTimeOfDay,
                EndTimeOfDay = endTimeOfDay,
                DaysOfWeek = daysOfWeek,
                RepeatIntervalUnit = IntervalUnit.Minute,
                RepeatInterval = 60
            };

            var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48);
            Assert.AreEqual(48, fireTimes.Count);
            Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 3, 1, 2011), fireTimes[0]);
            Assert.AreEqual(DayOfWeek.Monday, fireTimes[0].LocalDateTime.DayOfWeek);
            Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 10, 1, 2011), fireTimes[10]);
            Assert.AreEqual(DayOfWeek.Monday, fireTimes[10].LocalDateTime.DayOfWeek);
            Assert.AreEqual(DateBuilder.DateOf(15, 0, 0, 31, 1, 2011), fireTimes[47]);
            Assert.AreEqual(DayOfWeek.Monday, fireTimes[47].LocalDateTime.DayOfWeek);
        }

        [Test]
        public void TestTimeOfDayWithEndTimeOddInterval()
        {
            DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011);
            DateTimeOffset endTime = DateBuilder.DateOf(0, 0, 0, 4, 1, 2011);
            TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 0);
            TimeOfDay endTimeOfDay = new TimeOfDay(10, 0, 0);
            var trigger = new DailyTimeIntervalTriggerImpl
            {
                StartTimeUtc = startTime.ToUniversalTime(),
                EndTimeUtc = endTime.ToUniversalTime(),
                StartTimeOfDay = startTimeOfDay,
                EndTimeOfDay = endTimeOfDay,
                RepeatIntervalUnit = IntervalUnit.Minute,
                RepeatInterval = 23
            };

            var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48);
            Assert.AreEqual(18, fireTimes.Count);
            Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]);
            Assert.AreEqual(DateBuilder.DateOf(9, 55, 0, 1, 1, 2011), fireTimes[5]);
            Assert.AreEqual(DateBuilder.DateOf(9, 55, 0, 3, 1, 2011), fireTimes[17]);
        }

        [Test]
        public void TestHourInterval()
        {
            DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011);
            DateTimeOffset endTime = DateBuilder.DateOf(13, 0, 0, 15, 1, 2011);
            TimeOfDay startTimeOfDay = new TimeOfDay(8, 1, 15);
            TimeOfDay endTimeOfDay = new TimeOfDay(16, 1, 15);
            var trigger = new DailyTimeIntervalTriggerImpl
            {
                StartTimeUtc = startTime.ToUniversalTime(),
                StartTimeOfDay = startTimeOfDay,
                EndTimeUtc = endTime.ToUniversalTime(),
                EndTimeOfDay = endTimeOfDay,
                RepeatIntervalUnit = IntervalUnit.Hour,
                RepeatInterval = 2
            };

            var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48);
            Assert.AreEqual(48, fireTimes.Count);
            Assert.AreEqual(DateBuilder.DateOf(8, 1, 15, 1, 1, 2011), fireTimes[0]);
            Assert.AreEqual(DateBuilder.DateOf(12, 1, 15, 10, 1, 2011), fireTimes[47]);
        }

        [Test]
        public void TestSecondInterval()
        {
            DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011);
            TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 2);
            TimeOfDay endTimeOfDay = new TimeOfDay(13, 30, 0);
            var trigger = new DailyTimeIntervalTriggerImpl
            {
                StartTimeUtc = startTime.ToUniversalTime(),
                StartTimeOfDay = startTimeOfDay,
                EndTimeOfDay = endTimeOfDay,
                RepeatIntervalUnit = IntervalUnit.Second,
                RepeatInterval = 72
            };

            var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48);
            Assert.AreEqual(48, fireTimes.Count);
            Assert.AreEqual(DateBuilder.DateOf(8, 0, 2, 1, 1, 2011), fireTimes[0]);
            Assert.AreEqual(DateBuilder.DateOf(8, 56, 26, 1, 1, 2011), fireTimes[47]);
        }

        [Test]
        public void TestRepeatCountInf()
        {
            DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011);
            TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 0);
            TimeOfDay endTimeOfDay = new TimeOfDay(11, 0, 0);
            var trigger = new DailyTimeIntervalTriggerImpl
            {
                StartTimeUtc = startTime.ToUniversalTime(),
                StartTimeOfDay = startTimeOfDay,
                EndTimeOfDay = endTimeOfDay,
                RepeatIntervalUnit = IntervalUnit.Minute,
                RepeatInterval = 72,
                RepeatCount = DailyTimeIntervalTriggerImpl.RepeatIndefinitely
            };

            // Setting this (which is default) should make the trigger just as normal one.

            var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48);
            Assert.AreEqual(48, fireTimes.Count);
            Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]);
            Assert.AreEqual(DateBuilder.DateOf(10, 24, 0, 16, 1, 2011), fireTimes[47]);
        }

        [Test]
        public void TestRepeatCount()
        {
            DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011);
            TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 0);
            TimeOfDay endTimeOfDay = new TimeOfDay(11, 0, 0);
            var trigger = new DailyTimeIntervalTriggerImpl
            {
                StartTimeUtc = startTime.ToUniversalTime(),
                StartTimeOfDay = startTimeOfDay,
                EndTimeOfDay = endTimeOfDay,
                RepeatIntervalUnit = IntervalUnit.Minute,
                RepeatInterval = 72,
                RepeatCount = 7
            };

            var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48);
            Assert.AreEqual(8, fireTimes.Count);
            Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]);
            Assert.AreEqual(DateBuilder.DateOf(9, 12, 0, 3, 1, 2011), fireTimes[7]);
        }

        [Test]
        public void TestRepeatCount0()
        {
            DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011);
            TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 0);
            TimeOfDay endTimeOfDay = new TimeOfDay(11, 0, 0);
            var trigger = new DailyTimeIntervalTriggerImpl
            {
                StartTimeUtc = startTime.ToUniversalTime(),
                StartTimeOfDay = startTimeOfDay,
                EndTimeOfDay = endTimeOfDay,
                RepeatIntervalUnit = IntervalUnit.Minute,
                RepeatInterval = 72,
                RepeatCount = 0
            };

            var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48);
            Assert.AreEqual(1, fireTimes.Count);
            Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]);
        }

        [Test]
        public void TestFollowsTimeZone1()
        {
            TimeZoneInfo est = TimeZoneUtil.FindTimeZoneById("Eastern Standard Time");

            DateTimeOffset startTime = new DateTimeOffset(2012, 3, 9, 23, 0, 0, TimeSpan.FromHours(-5));

            TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 0);
            TimeOfDay endTimeOfDay = new TimeOfDay(11, 0, 0);
            var trigger = new DailyTimeIntervalTriggerImpl
            {
                StartTimeUtc = startTime.ToUniversalTime(),
                StartTimeOfDay = startTimeOfDay,
                EndTimeOfDay = endTimeOfDay,
                RepeatIntervalUnit = IntervalUnit.Hour,
                RepeatInterval = 1,
                TimeZone = est
            };

            var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 8);

            DateTimeOffset expected0 = new DateTimeOffset(2012, 3, 10, 8, 0, 0, 0, TimeSpan.FromHours(-5));
            DateTimeOffset expected1 = new DateTimeOffset(2012, 3, 10, 9, 0, 0, 0, TimeSpan.FromHours(-5));
            DateTimeOffset expected2 = new DateTimeOffset(2012, 3, 10, 10, 0, 0, 0, TimeSpan.FromHours(-5));
            DateTimeOffset expected3 = new DateTimeOffset(2012, 3, 10, 11, 0, 0, 0, TimeSpan.FromHours(-5));

            DateTimeOffset expected4 = new DateTimeOffset(2012, 3, 11, 8, 0, 0, 0, TimeSpan.FromHours(-4));
            DateTimeOffset expected5 = new DateTimeOffset(2012, 3, 11, 9, 0, 0, 0, TimeSpan.FromHours(-4));
            DateTimeOffset expected6 = new DateTimeOffset(2012, 3, 11, 10, 0, 0, 0, TimeSpan.FromHours(-4));
            DateTimeOffset expected7 = new DateTimeOffset(2012, 3, 11, 11, 0, 0, 0, TimeSpan.FromHours(-4));

            Assert.AreEqual(expected0, fireTimes[0]);
            Assert.AreEqual(expected1, fireTimes[1]);
            Assert.AreEqual(expected2, fireTimes[2]);
            Assert.AreEqual(expected3, fireTimes[3]);
            Assert.AreEqual(expected4, fireTimes[4]);
            Assert.AreEqual(expected5, fireTimes[5]);
            Assert.AreEqual(expected6, fireTimes[6]);
            Assert.AreEqual(expected7, fireTimes[7]);
        }

        [Test]
        public void TestFollowsTimeZone2()
        {
            TimeZoneInfo est = TimeZoneUtil.FindTimeZoneById("Eastern Standard Time");

            DateTimeOffset startTime = new DateTimeOffset(2012, 11, 2, 12, 0, 0, TimeSpan.FromHours(-4));

            TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 0);
            TimeOfDay endTimeOfDay = new TimeOfDay(11, 0, 0);
            var trigger = new DailyTimeIntervalTriggerImpl
            {
                StartTimeUtc = startTime.ToUniversalTime(),
                StartTimeOfDay = startTimeOfDay,
                EndTimeOfDay = endTimeOfDay,
                RepeatIntervalUnit = IntervalUnit.Hour,
                RepeatInterval = 1,
                TimeZone = est
            };

            var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 8);

            DateTimeOffset expected0 = new DateTimeOffset(2012, 11, 3, 8, 0, 0, 0, TimeSpan.FromHours(-4));
            DateTimeOffset expected1 = new DateTimeOffset(2012, 11, 3, 9, 0, 0, 0, TimeSpan.FromHours(-4));
            DateTimeOffset expected2 = new DateTimeOffset(2012, 11, 3, 10, 0, 0, 0, TimeSpan.FromHours(-4));
            DateTimeOffset expected3 = new DateTimeOffset(2012, 11, 3, 11, 0, 0, 0, TimeSpan.FromHours(-4));

            DateTimeOffset expected4 = new DateTimeOffset(2012, 11, 4, 8, 0, 0, 0, TimeSpan.FromHours(-5));
            DateTimeOffset expected5 = new DateTimeOffset(2012, 11, 4, 9, 0, 0, 0, TimeSpan.FromHours(-5));
            DateTimeOffset expected6 = new DateTimeOffset(2012, 11, 4, 10, 0, 0, 0, TimeSpan.FromHours(-5));
            DateTimeOffset expected7 = new DateTimeOffset(2012, 11, 4, 11, 0, 0, 0, TimeSpan.FromHours(-5));

            Assert.AreEqual(expected0, fireTimes[0]);
            Assert.AreEqual(expected1, fireTimes[1]);
            Assert.AreEqual(expected2, fireTimes[2]);
            Assert.AreEqual(expected3, fireTimes[3]);
            Assert.AreEqual(expected4, fireTimes[4]);
            Assert.AreEqual(expected5, fireTimes[5]);
            Assert.AreEqual(expected6, fireTimes[6]);
            Assert.AreEqual(expected7, fireTimes[7]);
        }

        [Test]
        public void DayOfWeekPropertyShouldNotAffectOtherTriggers()
        {
            //make 2 trigger exactly the same
            DailyTimeIntervalTriggerImpl trigger1 = new DailyTimeIntervalTriggerImpl
            {
                RepeatInterval = 1,
                RepeatIntervalUnit = IntervalUnit.Hour
            };

            DailyTimeIntervalTriggerImpl trigger2 = new DailyTimeIntervalTriggerImpl
            {
                RepeatInterval = 1,
                RepeatIntervalUnit = IntervalUnit.Hour
            };

            //make an adjustment to only one trigger.
            //I only want mondays now
            trigger1.DaysOfWeek = new List<DayOfWeek>
            {
                DayOfWeek.Monday
            };

            //check trigger 2 DOW
            //this fails because the reference collection only contains MONDAY b/c it was cleared.
            Assert.IsTrue(trigger2.DaysOfWeek.Contains(DayOfWeek.Monday));
            Assert.IsTrue(trigger2.DaysOfWeek.Contains(DayOfWeek.Tuesday));
            Assert.IsTrue(trigger2.DaysOfWeek.Contains(DayOfWeek.Wednesday));
            Assert.IsTrue(trigger2.DaysOfWeek.Contains(DayOfWeek.Thursday));
            Assert.IsTrue(trigger2.DaysOfWeek.Contains(DayOfWeek.Friday));
            Assert.IsTrue(trigger2.DaysOfWeek.Contains(DayOfWeek.Saturday));
            Assert.IsTrue(trigger2.DaysOfWeek.Contains(DayOfWeek.Sunday));
        }

        [Test]
        public void ValidateShouldSucceedWithValidIntervalUnitHourConfiguration()
        {
            var trigger = new DailyTimeIntervalTriggerImpl
            {
                Key = new TriggerKey("name", "group"),
                JobKey = new JobKey("jobname", "jobgroup"),
                RepeatIntervalUnit = IntervalUnit.Hour
            };
            trigger.Validate();
        }

        [Test]
        public void TestGetFireTime()
        {
            DateTime startTime = new DateTime(2011, 1, 1);
            TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 0);
            TimeOfDay endTimeOfDay = new TimeOfDay(13, 0, 0);
            var trigger = new DailyTimeIntervalTriggerImpl();
            trigger.StartTimeUtc = startTime;
            trigger.StartTimeOfDay = startTimeOfDay;
            trigger.EndTimeOfDay = endTimeOfDay;
            trigger.RepeatIntervalUnit = IntervalUnit.Hour;
            trigger.RepeatInterval = 1;

            Assert.AreEqual(dateOf(8, 0, 0, 1, 1, 2011), trigger.GetFireTimeAfter(dateOf(0, 0, 0, 1, 1, 2011)));
            Assert.AreEqual(dateOf(8, 0, 0, 1, 1, 2011), trigger.GetFireTimeAfter(dateOf(7, 0, 0, 1, 1, 2011)));
            Assert.AreEqual(dateOf(8, 0, 0, 1, 1, 2011), trigger.GetFireTimeAfter(dateOf(7, 59, 59, 1, 1, 2011)));
            Assert.AreEqual(dateOf(9, 0, 0, 1, 1, 2011), trigger.GetFireTimeAfter(dateOf(8, 0, 0, 1, 1, 2011)));
            Assert.AreEqual(dateOf(10, 0, 0, 1, 1, 2011), trigger.GetFireTimeAfter(dateOf(9, 0, 0, 1, 1, 2011)));
            Assert.AreEqual(dateOf(13, 0, 0, 1, 1, 2011), trigger.GetFireTimeAfter(dateOf(12, 59, 59, 1, 1, 2011)));
            Assert.AreEqual(dateOf(8, 0, 0, 2, 1, 2011), trigger.GetFireTimeAfter(dateOf(13, 0, 0, 1, 1, 2011)));
        }

        public DateTimeOffset dateOf(int hour, int minute, int second, int dayOfMonth, int month, int year)
        {
            return new DateTime(year, month, dayOfMonth, hour, minute, second);
        }

        [Test]
        public void TestGetFireTimeWithDateBeforeStartTime()
        {
            DateTime startTime = new DateTime(2012, 1, 1);
            TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 0);
            TimeOfDay endTimeOfDay = new TimeOfDay(13, 0, 0);
            DailyTimeIntervalTriggerImpl trigger = new DailyTimeIntervalTriggerImpl();
            trigger.StartTimeUtc = startTime;
            trigger.StartTimeOfDay = startTimeOfDay;
            trigger.EndTimeOfDay = endTimeOfDay;
            trigger.RepeatIntervalUnit = IntervalUnit.Hour;
            trigger.RepeatInterval = 1;

            // NOTE that if you pass a date past the startTime, you will get the startTime back!
            Assert.AreEqual(dateOf(8, 0, 0, 1, 1, 2012), trigger.GetFireTimeAfter(dateOf(0, 0, 0, 1, 1, 2011)));
            Assert.AreEqual(dateOf(8, 0, 0, 1, 1, 2012), trigger.GetFireTimeAfter(dateOf(7, 0, 0, 1, 1, 2011)));
            Assert.AreEqual(dateOf(8, 0, 0, 1, 1, 2012), trigger.GetFireTimeAfter(dateOf(7, 59, 59, 1, 1, 2011)));
            Assert.AreEqual(dateOf(8, 0, 0, 1, 1, 2012), trigger.GetFireTimeAfter(dateOf(8, 0, 0, 1, 1, 2011)));
            Assert.AreEqual(dateOf(8, 0, 0, 1, 1, 2012), trigger.GetFireTimeAfter(dateOf(9, 0, 0, 1, 1, 2011)));
            Assert.AreEqual(dateOf(8, 0, 0, 1, 1, 2012), trigger.GetFireTimeAfter(dateOf(12, 59, 59, 1, 1, 2011)));
            Assert.AreEqual(dateOf(8, 0, 0, 1, 1, 2012), trigger.GetFireTimeAfter(dateOf(13, 0, 0, 1, 1, 2011)));

            // Now try some test times at or after startTime
            Assert.AreEqual(dateOf(8, 0, 0, 1, 1, 2012), trigger.GetFireTimeAfter(dateOf(0, 0, 0, 1, 1, 2012)));
            Assert.AreEqual(dateOf(8, 0, 0, 2, 1, 2012), trigger.GetFireTimeAfter(dateOf(13, 0, 0, 1, 1, 2012)));
        }

        [Test]
        public void TestGetFireTimeWhenStartTimeAndTimeOfDayIsSame()
        {
            // A test case for QTZ-369
            DateTime startTime = new DateTime(2012, 1, 1);
            TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 0);
            TimeOfDay endTimeOfDay = new TimeOfDay(13, 0, 0);
            var trigger = new DailyTimeIntervalTriggerImpl();
            trigger.StartTimeUtc = startTime;
            trigger.StartTimeOfDay = startTimeOfDay;
            trigger.EndTimeOfDay = endTimeOfDay;
            trigger.RepeatIntervalUnit = IntervalUnit.Hour;
            trigger.RepeatInterval = 1;

            Assert.AreEqual(dateOf(8, 0, 0, 1, 1, 2012), trigger.GetFireTimeAfter(new DateTime(2012, 1, 1)));
        }

        [Test]
        public void TestExtraConstructors()
        {
            // A test case for QTZ-389 - some extra constructors didn't set all parameters
            DailyTimeIntervalTriggerImpl trigger = new DailyTimeIntervalTriggerImpl(
                "triggerName", "triggerGroup", "jobName", "jobGroup",
                dateOf(8, 0, 0, 1, 1, 2012), null,
                new TimeOfDay(8, 0, 0), new TimeOfDay(17, 0, 0),
                IntervalUnit.Hour, 1);

            Assert.IsNotNull(trigger.Key);
            Assert.AreEqual("triggerName", trigger.Key.Name);
            Assert.AreEqual("triggerGroup", trigger.Key.Group);
            Assert.AreSame(trigger.Key, trigger.Key);
            Assert.IsNotNull(trigger.JobKey);
            Assert.AreEqual("jobName", trigger.JobKey.Name);
            Assert.AreEqual("jobGroup", trigger.JobKey.Group);
            Assert.AreSame(trigger.JobKey, trigger.JobKey);
            Assert.AreEqual(dateOf(8, 0, 0, 1, 1, 2012), trigger.StartTimeUtc);
            Assert.AreEqual(null, trigger.EndTimeUtc);
            Assert.AreEqual(new TimeOfDay(8, 0, 0), trigger.StartTimeOfDay);
            Assert.AreEqual(new TimeOfDay(17, 0, 0), trigger.EndTimeOfDay);
            Assert.AreEqual(IntervalUnit.Hour, trigger.RepeatIntervalUnit);
            Assert.AreEqual(1, trigger.RepeatInterval);

            trigger = new DailyTimeIntervalTriggerImpl(
                "triggerName", "triggerGroup",
                dateOf(8, 0, 0, 1, 1, 2012), null,
                new TimeOfDay(8, 0, 0), new TimeOfDay(17, 0, 0),
                IntervalUnit.Hour, 1);

            Assert.IsNotNull(trigger.Key);
            Assert.AreEqual("triggerName", trigger.Key.Name);
            Assert.AreEqual("triggerGroup", trigger.Key.Group);
            Assert.IsNull(trigger.JobKey);
            Assert.AreEqual(dateOf(8, 0, 0, 1, 1, 2012), trigger.StartTimeUtc);
            Assert.AreEqual(null, trigger.EndTimeUtc);
            Assert.AreEqual(new TimeOfDay(8, 0, 0), trigger.StartTimeOfDay);
            Assert.AreEqual(new TimeOfDay(17, 0, 0), trigger.EndTimeOfDay);
            Assert.AreEqual(IntervalUnit.Hour, trigger.RepeatIntervalUnit);
            Assert.AreEqual(1, trigger.RepeatInterval);
        }

        [Test]
        [Category("windowstimezoneid")]
        public void TestDayLightSaving()
        {
            var timeZoneInfo = TZConvert.GetTimeZoneInfo("GMT Standard Time");

            var trigger = DailyTimeIntervalScheduleBuilder.Create()
                .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(22, 15))
                .OnEveryDay()
                .WithIntervalInHours(24)
                .WithRepeatCount(9999)
                .InTimeZone(timeZoneInfo)
                .Build();

            var first = trigger.GetFireTimeAfter(new DateTimeOffset(2014, 10, 25, 0, 0, 0, TimeSpan.Zero));
            Assert.That(first, Is.EqualTo(new DateTimeOffset(2014, 10, 25, 22, 15, 0, TimeSpan.FromHours(1))));

            var second = trigger.GetFireTimeAfter(first);
            Assert.That(second, Is.EqualTo(new DateTimeOffset(2014, 10, 26, 22, 15, 0, TimeSpan.FromHours(0))));

            var third = trigger.GetFireTimeAfter(second);
            Assert.That(third, Is.EqualTo(new DateTimeOffset(2014, 10, 27, 22, 15, 0, TimeSpan.FromHours(0))));
        }

        [Test]
        public void TestDayLightSaving2()
        {
            var timeZoneInfo = TZConvert.GetTimeZoneInfo("Central Standard Time");

            var trigger = DailyTimeIntervalScheduleBuilder.Create()
                .OnEveryDay()
                .InTimeZone(timeZoneInfo)
                .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(0, 0))
                .WithIntervalInHours(4)
                .Build();

            var first = trigger.GetFireTimeAfter(new DateTimeOffset(2017, 3, 12, 9, 0, 0, TimeSpan.Zero));
            Assert.That(first, !Is.EqualTo(new DateTimeOffset(2017, 3, 12, 9, 0, 0, TimeSpan.Zero)));
        }

        [Test]
        public void TestDayLightSaving3()
        {
	        var timeZoneInfo = TZConvert.GetTimeZoneInfo("Eastern Standard Time");
	        //UTC: 2020/3/7/ 00:00  EST: 2020/3/6 19:00
			var startTime = new DateTimeOffset(2020, 3, 7, 0, 0, 0, TimeSpan.Zero);
	        var trigger = DailyTimeIntervalScheduleBuilder.Create()
		        .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(17, 00))
		        .EndingDailyAt(TimeOfDay.HourAndMinuteOfDay(19, 30))
		        .OnDaysOfTheWeek(new[] { DayOfWeek.Monday, DayOfWeek.Tuesday, DayOfWeek.Wednesday, DayOfWeek.Thursday, DayOfWeek.Friday })
		        .WithIntervalInHours(2)
		        .InTimeZone(timeZoneInfo)
		        .Build();

	        var first = trigger.GetFireTimeAfter(startTime);
	        //UTC: 2020/3/9/ 21:00  EST: 2020/3/9 17:00
			Assert.That(first, Is.EqualTo(new DateTimeOffset(2020, 3, 9, 21, 0, 0, TimeSpan.Zero)));
        }

        [Test]
        public void TestDayLightSaving4()
        {
	        var timeZoneInfo = TZConvert.GetTimeZoneInfo("Eastern Standard Time");
			//UTC: 2019/11/1/ 23:00  EST: 2019/11/1 19:00
			var startTime = new DateTimeOffset(2019, 11, 1, 23, 0, 0, TimeSpan.Zero);
			var trigger = DailyTimeIntervalScheduleBuilder.Create()
		        .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(17, 00))
		        .EndingDailyAt(TimeOfDay.HourAndMinuteOfDay(19, 30))
		        .OnDaysOfTheWeek(new[] { DayOfWeek.Monday, DayOfWeek.Tuesday, DayOfWeek.Wednesday, DayOfWeek.Thursday, DayOfWeek.Friday })
		        .WithIntervalInHours(2)
		        .InTimeZone(timeZoneInfo)
		        .Build();

	        var first = trigger.GetFireTimeAfter(startTime);
	        //UTC: 2019/11/4/ 22:00  EST: 2019/11/1 17:00
			Assert.That(first, Is.EqualTo(new DateTimeOffset(2019, 11, 4, 22, 0, 0, TimeSpan.Zero)));
        }

		[Test]
        [Explicit]
        public void TestPassingMidnight()
        {
            IOperableTrigger trigger = (IOperableTrigger) DailyTimeIntervalScheduleBuilder.Create()
                .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(16, 0))
                .EndingDailyAt(TimeOfDay.HourMinuteAndSecondOfDay(23, 59, 59))
                .OnEveryDay()
                .WithIntervalInMinutes(30)
                .Build();

            trigger.StartTimeUtc = new DateTimeOffset(2015, 1, 11, 23, 57, 0, 0, TimeSpan.Zero);

            var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 100);
            foreach (var fireTime in fireTimes)
            {
                // Console.WriteLine(fireTime.LocalDateTime);
            }
        }

        [Test]
        public void ShouldGetScheduleBuilderWithSameSettingsAsTrigger()
        {
            var startTime = DateTimeOffset.UtcNow;
            var endTime = DateTimeOffset.UtcNow.AddDays(1);
            var startTimeOfDay = new TimeOfDay(1, 2, 3);
            var endTimeOfDay = new TimeOfDay(3, 2, 1);
            var trigger = new DailyTimeIntervalTriggerImpl("name", "group", startTime, endTime, startTimeOfDay, endTimeOfDay, IntervalUnit.Hour, 10);
            trigger.RepeatCount = 12;
            trigger.DaysOfWeek = new List<DayOfWeek>
            {
                DayOfWeek.Thursday
            };
            trigger.MisfireInstruction = MisfireInstruction.DailyTimeIntervalTrigger.FireOnceNow;
            trigger.TimeZone = TimeZoneInfo.Utc;

            var scheduleBuilder = trigger.GetScheduleBuilder();

            var cloned = (DailyTimeIntervalTriggerImpl) scheduleBuilder.Build();
            CollectionAssert.AreEqual(cloned.DaysOfWeek, trigger.DaysOfWeek);
            Assert.That(cloned.RepeatCount, Is.EqualTo(trigger.RepeatCount));
            Assert.That(cloned.RepeatInterval, Is.EqualTo(trigger.RepeatInterval));
            Assert.That(cloned.RepeatIntervalUnit, Is.EqualTo(trigger.RepeatIntervalUnit));
            Assert.That(cloned.StartTimeOfDay, Is.EqualTo(trigger.StartTimeOfDay));
            Assert.That(cloned.EndTimeOfDay, Is.EqualTo(trigger.EndTimeOfDay));
            Assert.That(cloned.TimeZone, Is.EqualTo(trigger.TimeZone));
        }

        [Test(Description = "https://github.com/quartznet/quartznet/issues/382")]
        public void ShouldAllowAlteringToLaterTimeInDay()
        {
            IJobDetail job = JobBuilder.Create<NoOpJob>()
                .WithIdentity("DummyJob", "DEFAULT")
                .Build();

            ITrigger myTrigger = TriggerBuilder.Create()
                .ForJob(job)
                .WithIdentity("MyIdentity", "DEFAULT")
                .WithDailyTimeIntervalSchedule(s => s
                    .StartingDailyAt(new TimeOfDay(12, 0, 0))
                    .EndingDailyAt(new TimeOfDay(15, 0, 0))
                    .OnEveryDay()
                )
                .Build();

            ((DailyTimeIntervalTriggerImpl)myTrigger).EndTimeOfDay = new TimeOfDay(16, 0, 0);
        }

        [Test]
        public void TestInfinitiveLoop()
        {
            var trigger = (IOperableTrigger) TriggerBuilder.Create()
                .WithDailyTimeIntervalSchedule(x => x
                    .InTimeZone(TZConvert.GetTimeZoneInfo("GTB Standard Time"))
                    .StartingDailyAt(new TimeOfDay(0, 0, 0))
                    .EndingDailyAt(new TimeOfDay(22, 0, 0))
                    .WithInterval(15, IntervalUnit.Minute)
                    .WithMisfireHandlingInstructionDoNothing()
                )
                .Build();

            var from = new DateTimeOffset(2018, 3, 25, 0, 0, 0, TimeSpan.Zero);
            var to = new DateTimeOffset(2018, 3, 27, 0, 0, 0, TimeSpan.Zero);
            var times = TriggerUtils.ComputeFireTimesBetween(trigger, null, from, to);
            Assert.That(times.Count, Is.LessThan(200));
        }
    }
}

redpajama_set_name: RedPajamaGithub


The Master Plan of the City of Pilsen is a document which, in accordance with the city's basic urban planning strategy and system of transport, technical infrastructure and ecological stability, responds to socio-economic conditions, ownership relations and other factors. The Master Plan divides the city into separate areas and zones and defines their possible functional uses. These possible functional uses are laid down in functional regulations for the relevant type of area and zone. It is therefore possible to define the basic possible uses of each plot of land in Pilsen.


text:
Name David BROWN [1, 2, 3, 4]
Born 22 Jul 1895 53, Howe Street (house), Everton, Liverpool, Lancashire, England
Born after his brother David drowned in canal so given his name.
Baptism 28 Aug 1895 Christ Church, Everton, Liverpool, Lancashire, England
Residence 31 Mar 1901 53 Howe Street, Everton, Liverpool, Lancashire, England
David (5) was living with his widowed mother, Ellen (49) and his siblings William (18), Ann (16), Robert (13), Ernest (9) and Ellen (3). Richard (10) had been admitted to the Blue Coat Hospital
Residence Bef 1905 46 Edinburgh Street, Everton, Liverpool, Lancashire, England
He was only 5 when his father died. His mother applied for places at Bluecoats School (then residential) for David and his older brother. She applied in June and October 1905 before David was admitted in October 1905.
Occupation 11 Dec 1909 R.P. Daglish Ltd, 74 Goodison Road, Liverpool, Lancashire, England
Apprentice pawnbroker. R.P. Daglish seems to have been the biggest pawnbroker in Liverpool. He had premises in Great Homer Street at 132, 218 and 300 as well as in Robson Street, so David could have been working near his home.
Residence 2 Apr 1911 City of Liverpool Infectious Diseases Hospital, Fazakerley, Liverpool, Lancashire, England
David (15) was a patient. BROWN DAVID (RG14PN22355 RD455 SD3 ED8 SN9999)
Married 15 Feb 1919 Wesleyan Methodist Chapel, Great Homer Street, Liverpool, Lancashire, England
Witnesses were John Brown, Sarah Brown and Doris Margery Parr. Mary's address was 22 Adelaide Street.
Occupation 15 Feb 1919
Driver Royal Field Artillery. no. 685240 / steward merchant service
Occupation 1923 Bents' Brewery, Liverpool, Lancashire, England
Brewers' drayman. Worked at Bents' Brewery. Daughter remembers he used to go on coach trips. We have photo of coach trip 1923.
Occupation 1944 Liverpool, Lancashire, England
Brewer's labourer. Health was poor after WW1 gassing so needed to work in open air.
Residence 1944 Liverpool, Lancashire, England
Buried Feb 1945 Grave 80A or GEN section 12, plot 1312, Anfield Cemetery,Liverpool,Lancashire,England
Gravestone placed in 1947
Died 23 Feb 1945 42, Adelaide Street, Everton, Liverpool, Lancashire, England [5]
Person ID I2049 Brian's Family Tree
Last Modified 17 Oct 2018
Father David BROWN, b. 1855, Liverpool, Lancashire, England , d. 19 Mar 1900, Liverpool, Lancashire, England (Age 45 years)
Mother Ellen MAGINNES, b. 22 Feb 1853, ,,,Liverpool, Lancashire, England , d. Between Jul 1941 and Sep 1941, 42, Adelaide Street, Everton, Liverpool, Lancashire, England (Age 88 years)
Married 5 Oct 1873 St George's,, Everton, Liverpool, Lancashire,England [6, 7, 8, 9]
Witnesses were T(?) Rutters and Mary Nolan.
Identical to the ones found in the cellar at Adelaide Street.
David & Ellen Brown 1891 census
53, Howe Street (house), Everton, Liverpool, Lancashire, England
David (38) and Ellen (38) were living with their children John (15), Catherine (13), David (11), William (9), Ann (7), Robert (3) and Richard (1). There was also a lodger, Mary King, a widow of 47.
42 Adelaide St 1901 census
This was a previous family living in the house.
Ellen Maginnes & David Brown M1873
St George's,, Everton, Liverpool, Lancashire,England
Family Mary SLOAN, b. 30 Sep 1893, 11th court 3rd house, Orange Street, (Dale St), Liverpool, Lancashire,England , d. 6 May 1973, Bootle Hospital,, Bootle, Liverpool, Lancashire, England (Age 79 years)
Married 15 Feb 1919 Wesleyan Methodist Chapel, Great Homer Street,, Liverpool,Lancashire,England [10, 11, 12]
Witnesses were John Brown, Sarah Brown and Doris Margery Parr.
Mary's address was 22 Adelaide Street.
1. Mary BROWN, b. 21 Sep 1920, Liverpool, Lancashire, England , d. 20 May 2011, Royal Blackburn Hospital, Blackburn, Lancashire, England (Age 90 years)
2. Leslie BROWN, b. 10 Sep 1924, Liverpool, Lancashire, England , d. Mar 1956, Liverpool, Lancashire, England (Age 31 years)
3. David BROWN, b. 10 Sep 1924, West Derby, Liverpool, Lancashire, England , d. 24 Mar 1944, David Brown disappeared one winter's night on a bombing raid over Berlin. (Age 19 years)
4. Doreen BROWN, b. 17 Aug 1933, W Derby, Liverpool, Lancashire, England , d. 20 Aug 2018, Liverpool, England (Age 85 years)
Mary and David Brown
G.David & Mary Brown on beach
Grandad & 'Mum' Brown i
Grandad & 'Mum' Brown ii
Grandfather & Mum Brown
G.David Brown & Mary Sloan M1919
Married at Wesleyan Methodist Chapel, Great Homer Street,, Liverpool, Lancashire on 15 Feb 1919. Dave's occupation was given as 'Driver R.F.A. .....Steward merchant service'.
Dave lived at 42 Adelaide St, Mary at 22 Adelaide St
David Brown - Blue Coat boy
Royal Artillery badge
The British War Medal 1914-1918 & Victory Medal 1914 - 1919
David Brown, Adelaide Street, Liverpool - c.1943
David Brown's 1914/15 Star
G.David Brown & brewery mates
G.David Brown at Bents' Brewery
G.David Brown in France, WW1
G.David Brown in trilby in centre of coach from Bents Brewery
G.David Brown WW1 i
G.David Brown WW1 ii
David Brown's 1914/15 Star reverse
Albert Basilica WW1 handkerchief
Silk handkerchief with crochet lace edging. Silk is painted with picture of the Albert Basilica.
Attached with a pin is a card:
'To my dear Mother
from your loving Son' is printed, then handwritten is:
'with love to mother from Dave
xxxxxx'
Albert was the main town behind the lines for the Allies nearest to the 1916 Somme battlefields. It lies on the main D929 road that runs east to Bapaume across the Somme battlefields, and west to Amiens in the other direction (although the D929 now diverts to the south around Albert, the original road still runs through it).
For a town at the heart of the British activities in this region, there are surprisingly few Great War sights to see in Albert. Devastated during the war and rebuilt afterwards, it has to be said that it is not as attractive a city as Ypres. As a base for battlefield touring both accommodation and restaraunts are fairly limited. However, it is an important location on the battlefield, and this page describes what there is to be seen. In terms of the history of the war, Albert came to be associated with the British when their troops took over the lines here in the summer of 1915. After the war, Albert was 'adopted' by Birmingham.
In the centre of Albert is one of the most famous icons for the British in the Great War - the Golden Virgin on top of the Basilica. The golden statue of the Madonna holding aloft her child was visible from far away, and of course was an excellent target for enemy artillery. It was damaged fairly early on, in January 1915, and the statue was knocked from its perch but stayed leaning at an angle before being secured by the French in that position.
A superstition grew up that the war would end only when the statue finally fell. It remained, somewhat improbably, in the same position all the time that Albert was in French and then British hands. The Germans advanced into Albert during their Spring Offensive in 1918, and well aware that the tower could be used as an excellent observation point by the Germans, it was British artillery that then deliberately targeted it and the statue finally fell. Albert was retaken by the British (the 8th East Surreys) four months later, but it was another three months after this until the Armistice.
G.David Brown 1914 war medals pair-back.jpg
R.P. Daglish, Liverpool
My grandfather worked as a pawnbroker's assistant from the age of 14 in 1909 at RP Daglish at 74 Goodison Road. He had been at the Bluecoat from 1905. From 11 December 1909 he was apprenticed to Daglish. We don't know how long he worked in pawnbroking but after going to war on 1 October 1915 and surviving a gassing, he went on to other jobs.
We have a photographic postcard via my mother which shows Daglish premises at the corner of Nesfield Street. This street had corners with Everton Valley/Walton Lane and Sleepers Hill/Walton Breck Road. It shows 5 people posing outside of the shop, 2 children, 2 young men and, possibly, the manager standing in the doorway.
1st birthday card
Minister's letter to Bluecoat School for Grandad Dave Brown
David Brown WW1 Medal card
David Brown Bluecoats admission 1b
David Brown Bluecoat registeri
David Brown Bluecoat registerii
David Brown Bluecoats admission 1
G.David Brown D1945
Died at 42, Adelaide Street, Everton, Liverpool, Lancashire, England of carcinoma of stomach.
Brown gravestone at Anfield
David Brown and 2 sons, David and Leslie. Mary, his wife, is also buried here but not named.
Plot: Section Gen 12, 1312
[S603] British Army WWI Medal Rolls Index Cards, 1914-1920, Ancestry.com, (Online publication - Provo, UT, USA: The Generations Network, Inc., 2008.Original data - Army Medal Office. WWI Medal Index Cards. In the care of The Western Front Association website.).
Name: David BrownResidence Date: Residence Place: England, Wales, Scotland, Ireland
http://search.ancestry.co.uk/cgi-bin/sse.dll?db=medalrolls&h=2193967&ti=5538&indiv=try
[S475] England & Wales Christening Records, 1530-1906, Ancestry.com, (Online publication - Provo, UT, USA: The Generations Network, Inc., 2008.Original data - Genealogical Society of Utah. British Isles Vital Records Index, 2nd Edition. Salt Lake City, Utah: Intellectual Reserve, copyright 2002. Used by permission.Original d).
Birth date: 22 Jul 1895Birth place: Residence date: Residence place: EnglandBaptism date: 28 Aug 1895Baptism place: Everton, Lancashire, England
http://search.ancestry.co.uk/cgi-bin/sse.dll?db=bivri_englandbirth&h=329251&ti=5538&indiv=try&gss=pt
[S517] 1901 England Census, Ancestry.com, (Online publication - Provo, UT, USA: The Generations Network, Inc., 2005.Original data - Census Returns of England and Wales, 1901. Kew, Surrey, England: The National Archives of the UK (TNA): Public Record Office (PRO), 1901. Data imaged from the National), Class: RG13; Piece: 3474; Folio: 61; Page: 44.
Birth date: abt 1896Birth place: Liverpool, Lancashire, EnglandResidence date: 1901Residence place: Everton, Lancashire, England
http://search.ancestry.co.uk/cgi-bin/sse.dll?db=uki1901&h=20791985&ti=5538&indiv=try&gss=pt
Residence date: Residence place: England, Wales, Scotland, Ireland
http://search.ancestry.co.uk/cgi-bin/sse.dll?db=medalrolls&h=2193967&ti=5538&indiv=try&gss=pt
[S241] Death certificate David Brown 1945, (Copy issued for use by Trustees Savings Bank 24 Feb 1945) (Reliability: 3), 2005.
[S653] England & Wales, FreeBMD Marriage Index: 1837-1915, FreeBMD, (Online publication - Provo, UT, USA: The Generations Network, Inc., 2006.Original data - General Register Office. England and Wales Civil Registration Indexes. London, England: General Register Office. © Crown copyright. Published by permission of the Cont).
Book 8b
[S322] Marriage certificate David Brown/Ellen Maginnis, (GRO).
Everton, Liverpool, Lancashire
[S511] Marriage certificate.
[S573] Marriage certificate Mary Sloan/David Brown 1919.

redpajama_set_name: RedPajamaCommonCrawl


easy test; Im glad everyone did well on it.
Pretty much just doodled for half the exam.
Worked up to the very last second!
Just a quick question, what book did you guys use to help to get 5 for AP stats?
I would also like to know, is it feasible to get a 5 with just a prep book? If so, which prep book did you use?
i outlined Practice of Statistics by Daniel Yates which was our class' textbook. I got a 5 and the biggest thing that helped me was statistic plus/minus parameter. just studying that for hypothesis testing and the other aspects of the exam will cover you for free response.


WHEN: July 23rd and 24th.
ALL MAKES AND MODELS OF DUALSPORTS ARE WELCOME.
Join us each day for a FREE hot breakfast and ride some great back country roads and tracks.
(Saturday) Mount Hood Wilderness. We will circle the Mount Hood wilderness area with many spectacular viewpoints. We will even ride on some of the original Barlow Wagon Trail.
(Sunday) The Oregon Coast Range.* Up and over the coast range twice, how nice! We will visit coastal cities, lots of great scenery and view points as we cross over two separate off road passes.
* The coast range portion of this route will start and end at the Diamond Mill ORV. So, if you want to skip some of the roads riding then join up with us there.
· Both riding days are a FOLLOW THE LEADER type of ride. We will have a designated route leader and a sweeper. Minimum support is available, SO COME PREPARED! Bring spare tubes, fuel, etc.
· We will rest and make fuel stops as needed. Pack your own lunch, snacks and plenty of liquids. We will NOT Stop for a restaurant lunch.
· Routes are subject to change. Electronic GPS coordinates will be available the day of the ride or by request.
DIRT RIDING EXPERENCE IS RECOMMENDED.
There is still room available for Saturday and Sunday.


So what you're trying to do is store the names of the sounds you want to trigger in a list as text? That's a cool idea, but I don't think it will work directly because the block that triggers a sound doesn't accept text as it's input like, say, the switch animation blocks.
I think its possible, however, to create a list that references the actual sound objects, and not just the text name of the sound. The only way i could figure out how to do this, however, was to make an attribute of type "Sound" for each of the sounds you want included in the list. Then set the default value of the these sound attributes to each of the sounds you've imported into stencyl. Then you can add those sounds to the list and reference them directly.
Either way, it seems kind of clunky. Its probably easier just to reference the sounds directly.
You could setup an actor in the upper right with a behavior that includes a custom event that draws the text. Then in the enemy actor condition for "dying" you can trigger the custom event to draw text before killing the enemy actor.
I'm sure theres a bunch of ways you could do it, but thats the first thing that came to mind.
Implementing the card processing "stack" is the current beastly task. The basic game flow of combat involves choosing up to 2 actions from your hand at the bottom. These two selected cards move up to the selected card slots along the left hand side of the screen. The enemy character will also choose 1 or 2 actions each turn. The first cards of both player and enemy will get processed and then the second cards of player and enemy will get processed.
"A" cards are attacks, which will be more varied and tied to equipped items and spells.
"B" cards are blocks, which will be tied to armors or shield spells.
Implementing the actual information in the cards is not as complicated. A "card" is a list with several fields holding it's information.
Type: differentiates between attacks, blocks, and other special abilities.
Value: the power of the attack or block.
Animation#: this will identify the animation to be triggered for the player.
ResponseAnimation#: this will identify the animation to be triggered for the enemy.
In order to implement decks and hands of cards, I simply create a list of card lists which can be read using nested [get items "index" from "list"] blocks.
While these actions are processed, animations are triggered based on the cards played.
After those cards are processed, they are discarded from the stack. Then new cards are drawn and the next turn can begin.
Thats the rough outline of how the card combat will be processed. Hoping to get a playable demo of the combat up on the arcade soon!
hmm... not really. As far as i can tell, the Tile API is designed more for setting up the tiles for a scene at the load. Is the maze you're trying to build dynamic? Like do the collisions change while the scene is live?
I've definitely found that sticking with a 32x32 size tile works out better for stencyl.
Have you tried using the Tile API?
You could have the level generated by loops that read from a list. In that list you could note which tile from a particular tile set to use for each tile in the scene. Then you just make a tileset that you can customize the collisions of.
Implementing a Deck and Card system into the game is going to require a series of multi-dimensional lists.
Thats a lot of lists for just the Player. In addition to that, however, I'll need Lists to maintain the Cards available to the various enemies to be encountered.
So far implementing that plus some temp artwork for visual feedback is taking up all my time. Will follow up with some notes about the list implementation.
Ask a Question / Re: How to align font to the right side?
You can use the "get width for " " as text block to figure out the length of the number you're printing. Just negate this length and use that as the "X" for the draw text behavior. I attached a stencyl project that should work.
I've had this issue come up multiple times when there are duplicate custom events or blocks. If you check under the "custom" category in the palette in design mode and see blocks that are under a heading that doesn't match up with another behavior, it might mean you've got the same issue I had.
I also found that this happened when looking under /User/<yourusername>/stencylworks/games/<gamename>/snippets I'd see .pngs for behaviors i had previously removed from my game. Thats where the duplicates were coming from. I can't say I recommend messing with those files, because I don't know what other dependencies there are for those old behaviors, but deleting them, exporting and reimporting my game made this issue go away.
I have plans to expand the game from it's current form. Right now it's a procedurally generated dungeon crawler with some action adventure controls, but I'd like to expand the combat system into a deck building, turn-based combat system.
In addition, the backstory is being rewritten and fleshed out, along with a static over world from which the player will delve into different dungeons.
SOOooo..... its a 2-d, top-down rpg with a static overworld, procedurally generated dungeons with random encounters and boss battles that uses a deck-building mechanic for inventory and turn-based combat.
More posts to come. but here's the ROUGHEST draft of a screenshot of the battle system. Down below are the slots for the player's hand of cards.
Here's a project and behaviors I used to make the lighting work in Soul Source.
Wow! It's awesome game! How You did light effects in the game?
Thanks! It was a lot of trial and error with layer and actor blend modes. I'll try to put together a demo project soon and post it.
Uploaded my game to Newgrounds for the Stencyl Jam 2014.
Soul Source is a 2-D, top-down adventure game with procedurally generated dungeons.
As a Soul Caster, you can channel the life force of the spirits around you into your magicks.
But can you find the Soul Source and reclaim your life before the light runs out?
Thanks for checking it out in advance!
Ask a Question / Re: Can Stencyl do random/procedural level generation?
I know this is an old topic, but I've been working on a project that uses procedural generation to create levels and I think it'd help to note some of the things I've encountered.
I was able to get this far using code mode and creating a scene behavior.
Using multi-dimensional arrays in AS3 is not as hard as it sounds - basically I'm creating an array thats as long as the number of grid rows in the scene. Then you store an array in each of the indexes of that rows array that is as long as the number of columns in the scene. This meant that by saying Array i was referencing the top row of the scene. By typing Array I'm referencing the grid square that is in the top row and second column from the left.
In each of those Array[row][col] spaces I stored ANOTHER array that was only two in length - one index for TilesetID and one index for TileID.
This created this 3-d array and filled it with TilesetID and TileID numbers.
Next went through the nasty process of randomly changing tiles from walls to floors (hint use one tileset for walls and one tileset for floors. Then set all of the squares in your floor tileset to have no collisions while all the squares in the walls tileset have full square collisions.
Last I went through the whole array and used the setTileAt command to generate the appropriate tile at the each row and column coordinate.
after it writes all the tiles I have it make a player and a stair case.
Thats the basic Idea I used - any feedback or further ideas would be awesome!


I so love weddings! If you haven't noticed yet, we have been attending weddings left and right and I try my best to share with you our experience of such momentous events. The thing I like about weddings these days is the attention to every single detail about it that has ballooned into a huge business. At the same time, such attention to details I believe, brings out the best and the worst in people and I think it's a great way to get a partnership started!
When I look back at how my wedding was put together and amazingly organised, I realise that the reason why I had an amazing time was because I basically just let the people who are experts in their respective fields handle what was necessary for the big day-that's Anthony and his team! I basically just came to the wedding beautiful and blushing-the way every bride should be.
It would have to be one that has sort of defined our marriage-I try not to sweat the small stuff and leave the stuff to experts . Besides, when I am happy, everybody is happy.
Because Joey and Sitti's wedding has been highly publicised, I decided to give you a glimpse to Sitti's thoughts about her big day. Her answers will blow your mind and remind you why we all love weddings. Cheers!
1. What were your exact feelings the day of your wedding? Did you have any second thoughts about it?
The day of my wedding I was just happy and excited. No second thoughts at all, haha. God gave us a beautiful Catholic ceremony the day before and I knew that rain or shine, the Christian ceremony would be beautiful as well.
3. It rained just before the ceremony-did that scare you?
4. If that day would be encapsulated in a song-what would it be?
Amazing Grace – we planned and prayed so hard for the two-day wedding.. but it was God who just put everything together amazingly! Sobrang we were all astounded at how beautifully and fun everything turned out. God's love and amazing grace, His hand was just evident throughout the two ceremonies and the reception after – we all just basked in it. We all felt His love swimming through us and our guests. Until now I am still hungover at how wonderful and joyful it was.
– I am in good, Godly hands.
– for our hearts to always be united. To truly understand, and live out, what being one heart, one mind, one body means.
All of you, with your prayers and your genuine friendship and care for Joey and me, touched our hearts and made our wedding just so beautiful. We will forever cherish your kindness.. We will look back at our wedding as a time when God so showered us with His grace, and that grace flowed through all of you, as well. We thank you, ever so much. We love you all.
9. How would you complete this sentence for now… My name is Sitti Navarro-Ramirez….
I love You, Lord. Grabe Kayo, that was some wedding! Thank You for being with us since the day we met, thank You for blessing us with so much love and support from our families. I know that You are faithful, that You will be with Joey and me till the end. We love You and we continually ask for Your grace, that in our marriage, Joey and I will bring honour to you. Thank You Lord, gid gid gid! You are the absolute best.


You don't have to add yourself to the super long Unicorn Lashes makeup brush waitlist or drop $39 on Tarte's golden unicorn brushes for golden variety to add some unicorn magic to your daily beauty grind. The new Primark Unicorn Makeup Brushes are the next best thing. Not only is the entire set of five just $10, but you can also shop them today.
The adorable, affordable set is the UK-based fast-fashion retailer's take on the trend that's blowing up Instagram. The handles are a fun aqua hue, and the bristles feature a gradient of pastel purple, peach, and white. We're already anticipating the slew of turquoise-hued flat lays were about to see flood our feeds. For comparison, $10 is a really good price for this kind of unicorn magic. Unicorn Lashes's popular rose gold and pearlescent unicorn brush sets are about $62 each; The Tarte Magic Wands Brush Set is, as mentioned, $39.
With the inexpensive price tag, you'll get five different Primark Unicorn Makeup Brushes and a shimmery silver carrying case. For blending and shading your eye makeup, there's a fluffy and a dense brush. You can use the flat foundation brush for perfecting your complexion and the densely packed brush for carving your contour. There's also a large fluffy brush for sweeping on blush or translucent powder. We're most excited about the fan brush, though. It's the perfect tool for applying rainbow highlighter, if you ask us.
Of course, there's a catch. We thought this deal seemed to good to be true, too. Unfortunately, you can't shop the brushes online just yet. Instead, you have to visit one of Primark's seven stores in the US. To find one closest to you, visit primark.com.


Families of military veterans receive American Flag from the United States Armed Forces upon death or retirement of the veteran. If the veteran is a martyr, the flag presented carries a special significance and needs to be kept and displayed in a specially crafted burial flag display case. Every year, around 600,000 flags are presented to families of veterans belonging to Army, Navy, Air Force, Coast Guard and Marine Corps. Flag display cases are also used to correctly display and preserve flags presented to deceased firefighters, police officers and other dignitaries for their service towards the country. Flag is also presented to retiring veterans and usually are kept in retirement flag cases. Very few people however are aware of the significance of the military flag cases. Keeping the burial or retirement flag properly folded, preserved and displayed is the least that can be done to honor the sacrifice or services of these people.
For decorated veterans, their medals and flags can be housed together in a military flag and medal display case. If you wish to house some sort of document (letter or certificate) and a photograph as a memory along with the burial flag, you can opt either for flag and document case or flag shadow box for this purpose. For retiring veterans and paramilitary forces personnel's, a retirement flag and certificate shadow box would be more appropriate.
Flag display cases usually are made of oak, walnut, mahogany or cherry wood and come in different shapes and sizes. For instance, a funeral flag display case is triangular in shape which can accommodate a standard government issued flag which is properly folded according to the traditions. This flag case either can be placed on a pedestal or mounted on wall with special kits. Metal, brass or glass plates on the flag cases can be engraved with names, service details and remembrance messages using lasers. Depending on your requirement, you can select and order an appropriate flag case from wide array of range available with us. If you are looking for something special and would like to further customize the flag, get in touch with us and we would be glad to help you out. Honor the departed, let their sacrifices be remembered.


The Centre provides assistance to the homeless daily via our ER program. We have a range of products and services specifically designed to meet the needs of our homeless including; ring pull food, snacks, bottled water, blankets, towels, hygiene packs, plastic plates/knives/forks. Additionally the Centre can advocate on your behalf to other agencies. The Redland Community Centre is well connected within the NFP sector and uses collaboration as an important tool to bring about positive and sustainable change.


Smoky Mountains Lodging Guide: ALCATRAZ EAST, PIGEON FORGE'S NEWEST ATTRACTION OPENING SOON!
ALCATRAZ EAST, PIGEON FORGE'S NEWEST ATTRACTION OPENING SOON!
Welcome to the Big House!
Alcatraz East, the Intriguing and Engaging crime museum is slated to be open soon in Pigeon Forge, Tennessee, and will be located on the Parkway at the entrance to The Island. Guests to Alcatraz East will encounter a unique journey into the history of American crime, crime solving and the U.S. justice system. This will be an entertaining and educational experience for all ages and said to be so much fun that it's a crime!
Alcatraz East will be the most arresting crime museum in the United States. Through interactive exhibits and original artifacts, Alcatraz East will be an entertaining and educational experience for all ages. "This is going to be the place for the public to learn about crime history, law enforcement, and all things related," states Janine Vaccarello, chief operating officer for Alcatraz East. The museum will feature a CSI lab, a simulated shooting range, safe cracking, digital fingerprinting and DUI interactive safety training. Artifacts in the collection - many of which came from the Crime Museum previously located in Washington, D.C. - include John Dillinger's death mask, Al Capone's rosary, the Bronco from the OJ chase, an FBI polygraph machine, Al Pacino's sub-machine gun from the movie Scarface and a Bonnie & Clyde collection.
The museum is designed on the outside as a 19th century prison but inside there will be 20 different exhibits spread over two floors and 24,000 square feet of exhibit space. The exhibits are categorized into five themes for guests to explore: The History of American Crime; Consequences of Crime; Crime Scene Investigation; Crime fighting and Pop Culture.
Susan E. Frese, Corporate Sales & Marketing Director, says, "Alcatraz East is so excited to be opening in Pigeon Forge. The city is a premier destination for tourism, and our massive collection of artifacts couldn't have found a better home. The museum was designed for both learning and entertainment. It really is fun for the whole family. You will be amazed how not only you will love the museum, but just how engaged your children will be! It is sure to be the family favorite!"
For more information on Alcatraz East go to www.alcatrazeast.com. For information on Pigeon Forge, Gatlinburg and the Smoky Mountains of east Tennessee, and coupons for attractions, theaters, shopping and dining, go to http://bestreadguidesmokymountains.com/.


text:
Brown, Frederick
The Embrace of Unreason. France, 1914-1940
New York: Alfred A. Knopf, 2014. First Edition. Hardcover. Octavo. 345 pages. Illustrated with black and white photographs in the text. White cloth hardcover with title on the spine. Dust jacket in very good condition with light shelf wear. More
Chapman, M. B.
The Lands of the Orient
Nashville, TN: Southern Methodist Publishing House, 1888. Hardcover. Octavo. 502 pages. Illustrated green cloth hardcover with title on the spine. Light shelf wear to the cloth binding. Binding is lightly shaken. Pages are toned. Page edges are slightly soiled. More
Clark, Peter (edited by); Souden, David (edited by)
Migration and Society in Early Modern England
Totowa, NJ: Barnes & Noble Books, 1988. Hardcover. Octavo. 355 pages. Illustrated with black and white maps and graphs. Orange cloth hard cover with gilt titles to spine. Previous owner's name in ink on the right front flyleaf. Dust jacket in very good condition with light shelf wear. More
Duchess, Margaret
The Life of the (1st) Duke of Newcastle, & Other Writings
Everyman's Library edited by Ernest Rhys. London: J. M. Dent & Sons, 1900. Hardcover. Octavo. xxvii, 299 pages. Illustrated end papers with pictorial title page. Gray cloth hardcover with decorative gilt title on the spine and blind stamp seal on front cover. Light edge wear to the cloth binding. Cloth..... More
Ferguson, Robert
The Vikings: A History
New York: Viking, 2009. Hardcover. Octavo. xi, 450 pages, [16] pages of photograph plates. Illustrated with black and white photograph section in the text. Black cloth hardcover with gilt title on the spine. Binding is lightly shaken. In a very good glossy photographic dust jacket with some slight edge wear..... More
Frost, John LL.D.
Great Cities of the World. In Their Glory and in Their Desolation, Embracing Cities of Europe, Asia, Africa and America
Auburn, New York: Alden, Beardsley & Co., 1852. First Edition. Hardcover. Octavo. [2], 532 pages, [10] pages of advertisements, [2]. Hand colored frontispiece. Illustrated. Brown cloth hardcover with blind stamped decorative designs on the covers. Gilt title on the spine. Cloth binding is faded and worn on the corners. Light..... More
Gentles, Ian
The New Model Army: In England, Ireland and Scotland, 1645-1653
Oxford: Blackwell Publishers, 1994. Later printing. Paperback. Octavo. xi, 590 pages. Illustrated with maps and black and white portraits. Yellow pictorial soft cover binding. Binding showing some shelf wear. Crease down front joint. Small stain to fore edge. Pages with illustrations are clean. More
Grape, Wolfgang
The Bayeux Tapestry: Monument to a Norman Triumph
Munich: Prestel Publishing, 1994. Paperback. Quarto. Paperback. 174 pages, [2]. Illustrated in color with photographs in the text. Very good condition with pictorial illustrated soft cover binding. Dedication page lightly soiled. Bottom corner of the front cover with small crease. More
Hamilton, Paul F.
African Peoples' Contributions to World Civilizations: Shattering The Myths Volume I
Denver: R. A. Renaissance Publications, 1995. Second Edition. Paperback. Tall glossy paperback. 231 pages. Illustrated in black and white. Shelf wear to the covers. Interior contents clean. More
[Harper & Brothers, Publishers]
Distinguished Men of Modern Times. In two volumes.
The Family Library No. 123, 124. New York: Harper and Brothers, 1840. Hardcover. 12mo. Two volumes. Vol. I: viii, 9-324 pages. Vol. II: [1], 324 pages. Each volume has a frontispiece engraving. Brown cloth hardcovers with gilt titles on the spines. Light to moderate toning and scattered foxing to the..... More
An Historical Account of the Circumnavigation of the Globe, and of The Progress of Discovery in the Pacific Ocean, From the Voyage of Magellan to the Death of Cook
The Family Library No. 82. New York: Harper and Brothers, 1837. Hardcover. 12mo. [1], xvi, 17-366 pages, 12 page publisher catalog, [1]. Brown cloth hardcover with gilt title on the spine. Illustrated. Index included. Light to moderate toning and scattered foxing to the text. Some light chips to the cloth..... More
Hazen, Charles Downer
Alsace-Lorraine Under German Rule
New York: Henry Holt and Company, 1917. Hardcover. Octavo. v, 246 pages, [2] pages of ads. Navy blue cloth hardcover with gilt title on the front cover and spine. Previous owner's illustrated book plate on the front paste down. Previous owner inscription on the right front fly leaf. Binding is..... More
Hoskins, W. G.
West Sussex: Phillimore & Co. Ltd., 2003. Later printing. Paperback. Octavo. Paperback. xxxv, 598 pages. Illustrated with black and white maps and plates in the text. Very good condition with pictorial illustration on the soft cover binding. More
Jacobs, Dan
The Brutality of Nations
New York: Paragon House Publishers, 1988. First Paperback Edition. Paperback. Paperback. [3], 383 pages, [3]. Small edge crease left front side of the paperback. Very light foxing to the foredge and top edge. More
Paris, Matthew;
The Illustrated Chronicles of Matthew Paris: Observations of Thirteenth-Century Life
Translated, edited and with an introduction by Richard Vaughan; Illustrations selected by Nigel Wilkins; Photography by Ian Cannell. Cambridge: Corpus Christi College, 1993. Paperback. Quarto. Paperback. xiii, 210 pages. Illustrated in color with maps, photographs in the text. Very good condition with pictorial illustration on the soft cover binding. More
Price, Simon (edited by); Kearns, Emily (edited by)
The Oxford Dictionary of Classical Myth and Religion
Oxford: Oxford University Press, 2003. First Edition. Hardcover. Octavo. xl, 599 pages. Illustrated with black and white maps in the text. Brown cloth hardcover with gilt title on the spine. Pictorial dust jacket in very good condition with light edge wear. More
Rishanger, William; Rishanger, James Orchard (edited by)
The Chronicle of William De Rishanger, of the Barons' War. The Miracles of Simon De Montfort
London: The Camden Society, 1840. Hardcover. Octavo. xlii, 162 pages. Black cloth hardcover with gilt decorative title on the spine and blind stamped front cover. Preliminary pages are mostly detached or cracked. A previous owner illustrated armorial book plate on the front paste down (Library of Isaac John Greenwood). Another..... More
Russell, Rev. Michael LL.D.
Palestine, or The Holy Land From The Earliest Period to the Present Time
The Family Library No. 27. New York: Harper and Brothers, 1837. Harpers Stereotype Edition. Hardcover. 16mo. pages 3-269 pages. Illustrated with folding map in front, engraved title page, and 8 illustrations in text. Brown cloth hardcover with gilt title on the spine. Light shelf wear. Map is lightly toned with..... More
Tattersall, Ian
The World from Beginnings to 4000 BCE
New York: Oxford University Press, 2008. Advance Reading Copy. Paperback. Paperback. ix, 143 pages including index. Illustrated. Glossy, pictorial covers. Light shelf wear to the binding. Review slip from the publisher laid in. More


Whatever the occasion we are able to provide a coach to meet your requirements. We have a dedicated coach quotation department so that we can quote for your annual day trip, for your comprehensive monthly outings programme, your day at the races, your wedding or any other plans that you have where you need to move a group of people using safe reliable transport.
Our quotations department can also assist you if you have never organised a coach or need ideas or assistance to plan your day trip or trips out and even better our service is FREE.
We have built a business that is the envy of our competitors, both for quality of service and a full range of coach sizes and styles to suit your tastes and budget. Nowhere else except for London, can you obtain the range of coaches and specifications that we are able to offer.
From group sizes from 29 passengers up to 79 passengers on our "Gentle Giants" where coach comfort and facilities are king.
Where you require large people movers our 94 seater Megaliners are the 1st choice for many organisations.
With a friendly team of staff from your initial call to the day of travel you can be assured that you will be treated as Number 1 and that your group will have a coach that surpasses your needs and expectations.
Give us a call today on 0800 6 52 52 51 and see what we are able to offer you.


It comes up, from time to time. Ethics and writing. Two concepts that are chained together in a dysfunctional marriage. How to write, ethically?... It takes some creative know-how to make figurative language fly however, and metaphors that are confused, off-base or cliche can ruin an otherwise stellar piece of writing. The analogous relationships you establish have to be earned.
BBC GCSE Bitesize Getting it right!
Don�t make that face�I know you�re a writer and not a data analyst. Or if you are a data analyst�I get that you�re on this blog to get away from your day job. Or if you are a data analyst�I get that you�re on this blog to get away from your day job.
Some production companies are able to offer you a commercial package for as low as $100 that will include still pictures shot with a high-quality video camera. However, you get what you pay for. Look at their reel and see if they have the chops to make your vision come to life. And see if they have the chops to make your vision come to life.


Framed Pewter with signed and titled mat by Cynthia Webb. A special gift for special events and people. Wedding, anniversary, graduation, mom, new home or baby, confirmation, all those special milestones in our lives.
Frames come in three sizes: Small (9" x 9"), Medium (10" x 10"), and Large (11" x 13"). Two frame finishes available: "Espresso" wood (standard), and Silver finish. Sawtooth hanger, descriptive label on back, and titled gift tag on each.


text:
Q: WPF textbox binding issue I have a wpf window which is used to add as well as edit information about an entity.
I am using mvvm architecture and ADO.Net entity model.
The screen looks something like this -
  <!-- EmployeeView -->
  <Window .....DataContext={.....}>

      <WpfToolkit:Datagrid x:Name="dgEmployees"
                           CanUserAddRows="false"
                           ItemSource="{Binding Path=Employees}"
                           ................
                           SelectedItem="{Binding SelectedEmployee}"..>
            <!-3 datagrid template column binding -->

      </WpfToolkit:Datagrid>

       <TextBox Text="{Binding ElementName=dgEmployees, Path=SelectedEmployee.FirstName}"/>

       <TextBox Text="{Binding ElementName=dgEmployees, Path=SelectedEmployee.LastName}"/>

        <Button Content="Clear" Command="{Binding ClearCommand}"/>
        <Button Content="Save" Command={Binding SaveCommand}">

  </Window>

Here the ClearCommand will simply clear the textboxes and save will add or edit a record. I am setting the DataContext property in the xaml itself. I want to keep the CodeBehind empty.
The ViewModel -
 public class EmployeeViewModel : INotifyProperyChanged
 {
      DatabaseEntities _dbEntities; // Ado.Net Entity model

      RelayCommand _saveCommand, _clearCommand;

      public ObservableCollection<Employee> Employees{get;set;}

      public Employee SelectedEmployee{get; set;}

      public EmployeeViewModel()
      {
           _dbEntities=new DatabaseEntities();
            GetAllEmployees();
      }

      private void GetAllEmployees()
      {
          Employees = new ObservableCollection<Employee>();

          var query = from _e in _dbEntities.Employee
                      select _e;

          foreach(Employee _emp in query)
          {
              Employees.Add(_emp);
          }
      }

      public ICommand SaveCommand
      {
          get
          {
             if(_saveCommand == null)
             {
                 _saveCommand = new RelayCommand(){param => SaveEmployee()};
             }
          }
      }

      public ICommand ClearCommand
      {
          get
          {
             if(_clearCommand == null)
             {
                 _clearCommand = new RelayCommand(){param => Clear()};
             }
          }
      }

      private void Save()
      {
           /*************************Edit****************************/
          // if editing Employee info (this part works fine)

          Employee emp = _dbEntities.Employee.FirstorDefault<Employee>( p => p.EmpID == SelectedEmployee.EmpID);
          if(emp != null)
          {
          .................

          _dbEntities.SaveChanges(true);
           /************************************************************/
           }
           else
           {
           /*******************Add New**************************/
         // if adding new employee info (doesn't work)

         Employee emp = Employee.CreateEmployee(0, SelectedEmployee.FirstName, SelectedEmployee.LastName); // here NullReference Exception is thrown because SelectedEmployee is null while adding a new Employee.

         _dbEntities.AddToEmployee(emp
         _dbEntities.SaveChanges(true);

          GetAllEmployees();
         /************************************************************/

         }

      }

      private void Clear()
      {
          // to clear all the textboxes before adding new employee info.
          SelectedEmployee = null;
          OnPropertyChanged("SelectedEmployee");
      }
 }

I can edit information, but not add new. If I want to add new Employee info, and enter the FirstName lastname in the respective textboxes. These entered values do not bind with SelectedEmployee property as SelectedEmployee is null( we clear the fields to add a new record). How do I access values entered in the textboxes from SelectedEmployee Property?
I know this problem can be solved by Creating a separate EmployeeModel with the IsSelected property .....But is there any other way out??

A: I would recommend you put the FirstName and LastName into strings on the ViewModel, then you always have access to them in the Save method, whether the SelectedEmployee is null or not.
(In your Save method)
Employee emp = Employee.CreateEmployee(0, FirstName, LastName);

If you want the textboxes to refresh from the user changing the selected item in the datagrid, you'll need to override the setter on SelectedEmployee, something like:
    string _firstName;
    public string FirstName
    {
        get { return _firstName; }
        set
        {
            if (_firstName != value)
            {
                _firstName = value;
                OnPropertyChanged("FirstName");
            }
        }
    }

    string _lastName;
    public string LastName
    {
        get { return _lastName; }
        set
        {
            if (_lastName != value)
            {
                _lastName = value;
                OnPropertyChanged("LastName");
            }
        }
    }

    Employee _selectedEmployee;
    public Employee SelectedEmployee
    {
        get { return _selectedEmployee; }
        set
        {
            if (_selectedEmployee != value)
            {
                _selectedEmployee = value;
                OnPropertyChanged("SelectedEmployee");
                FirstName = (_selectedEmployee == null) ? string.Empty : _selectedEmployee.FirstName;
                LastName = (_selectedEmployee == null) ? string.Empty : _selectedEmployee.LastName;
            }
        }
    }

then simply update your xaml to look like:
   <TextBox Text="{Binding Path=FirstName}"/>
   <TextBox Text="{Binding Path=LastName}"/>

Hope this helps :)

A: If I understand you well the Clear Command will prepare the VM to accept a new Employee, so why don't you initialize a new SelectedEmployee in the Clear method and add it to the Employees collection?
private void Clear()
 {
      // to clear all the textboxes before adding new employee info.
      SelectedEmployee = new Employee{FirstName="",LastName=""};
      Employees.Add(SelectedEmployee);
      OnPropertyChanged("SelectedEmployee");
  }

redpajama_set_name: RedPajamaStackExchange


text:
<?php

namespace App\Http\Controllers;

use App\Genre;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class GenreController extends Controller
{
    function __construct()
    {
        $this->middleware('auth');
    }

    //
    public function index()
    {
        return view('pages.genre-index', ['user' => Auth::user(), 'genres' => Genre::latest('created_at', 'desc')->get()]);
    }

    public function store(Request $request)
    {
        $this->validate($request, [
            'name' => 'bail|required|min:4|max:30|unique:genres'
        ]);
        Genre::store($request);
        return redirect('/genre');
    }

    public function show($id)
    {
        if ($id === 'all'){
            $_genres = collect();
            Genre::orderBy('name')->chunk(500, function ($genres) use ($_genres){
                foreach ($genres as $genre) {
                    $_genres->push($genre);
                }
            });
            return $_genres;
        }

        return Genre::find($id);

    }

    public function update(Genre $genre, Request $request)
    {

    }

    public function destroy(Genre $genre)
    {

    }
}


text:
Q: Sorting of Strings using collections.sort() method As per the documentation: This implementation dumps the specified list into an array, sorts the array, and iterates over the list resetting each element from the corresponding position in the array
Given the program below, I am not able to understand the sorting as how internally jvm judges that letter 'A' is smaller or bigger than letter 'a'? As this is a string, the letters won't be assumed in ascii value so how the sorting happens?
public class LetterASort {
    public static void main(String[] args) {
        ArrayList<String> strings = new ArrayList();
        strings.add("aAaA");
        strings.add("AaA");
        strings.add("aAa");
        strings.add("AAaa");
        Collections.sort(strings);
        for (String s : strings)
        {
        System.out.print(s + " "); //prints AAaa AaA aAa aAaA
        }
    }
}

Also I tried debugging the code which created a new doubt for me: the length of array turned out to be 4 rather than 3 as collections.sort is included in the length

A: The "natural ordering" that Collections.sort refers to is the one specified by Comparable -- which String implements, and which defines only one method, compareTo. So, the answer is in the definition of String.compareTo. Its documentation states:

Compares two strings lexicographically. The comparison is based on the Unicode value of each character in the strings.

Lexicographical ordering basically means dictionary ordering. Essentially, order each letter alphabetically as far as you go, but if you're still tied when either word runs out of letters, then the shorter word goes first.
Unicode is the numerical value that each character has. There's a great introductory post about it here (it's not short, but it does a good job of walking you through not just what unicode is, but why it exists).

A: String class implements the Comparable interface. When sort happens, compareTo(String) method is called. For more look at the implementation of compareTo(String) method in String class.


In what year was country star "Willie Hugh Nelson" born?
1933 - Willie was born in Abbott, Texas on April 29, 1933.
With his mother and father leaving soon after he was born, who raised Willie and his sister Bobbie?
Grandparents - Willie's grandfather bought him a guitar when he was six.
What did Willie name his favorite instrument, a Martin N-20 nylon-string classical acoustic guitar?
Trigger - Nelson bought the guitar in 1969.
Reportedly owing $32 million US, Willie's assets were seized by the Internal Revenue Service in which year?
1990 - Nelson released the album 'The IRS Tapes - Who'll Buy My Memories?' to help pay back the debt.
Released in 1962, which of the following albums was Willie's debut?
And Then I Wrote - The album contains the single 'Touch Me', which peaked at number seven on Billboard's Hot Country Singles.
In what year was Willie Nelson inducted into the Country Music Hall of Fame?
1993 - Nelson received the Kennedy Center Honors in 1998.
Released in 1980, in which movie did Willie Nelson play the role of a country singer named Buck Bonham?
Honeysuckle Rose - The movie is also known as 'On the Road Again'.
Which Willie Nelson song has the lyric - "Love is like a dyin' ember. Only memories remain. Through the ages I'll remember..."?
Blue Eyes Crying In the Rain - Blue Eyes Crying in the Rain was written by songwriter Fred Rose.
As of 2016, how many number one hits has Willie Nelson had on the Billboard Hot Country Songs chart?
12 - His last song to hit number one on the chart was 'Nothing I Can Do About It Now' in 1989.
Which of the following Willie Nelson recordings did not hit number one on the Billboard Hot Country Songs chart?
Let It Be Me - Let It Be Me peaked at position 2.
Willie Nelson won a Grammy award for Best Male Country Vocal Performance for his version of this song.
Georgia on My Mind - Georgia on My Mind was originally a major hit for Ray Charles in 1960.
How many children does Willie Nelson have?
7 - Willie's son Billy, from his first marriage, hanged himself in 1991 at the age of 33.
Willie set up Farm Aid in 1985 with John Mellencamp and which other music artist?
Neil Young - Farm Aid was set up to assist and increase awareness of the importance of family farms.
Which of the following Willie Nelson albums reached number one on the Billboard chart for Top Country Albums?
Red Headed Stranger - Blue Eyes Crying in the Rain, among other hits, was released on the album.
Which of the following Willie Nelson songs was originally recorded by Arlo Guthrie in 1972?
City of New Orleans - City of New Orleans reached number one on the Billboard Hot Country Singles chart in the United States.
Which song opens with the lyric - "Maybe I didn't love you quite as often as I could have, and maybe I didn't treat you..."?
Always On My Mind - Always On My Mind was first recorded by Gwen McCrae and Brenda Lee in 1972.
Which of the following songs was not recorded by Willie Nelson?
Harvest Moon - Harvest Moon was written and recorded by Neil Young in 1992.
Which of the following albums was not released by Willie Nelson?
This Old Road - This Old Road was released by Kris Kristofferson in 2006.
Finish the title to this number one Willie Nelson hit - "Angel Flying...".
Too Close To The Ground - Angel Flying Too Close to the Ground is a single from the 1981 film Honeysuckle Rose.
As of 2016, which album is the only Willie Nelson album to reach number one in the United States during the 2010s decade?
Band of Brothers - Nine out of the fourteen tracks on 'Band of Brothers' are new original songs.
In which 1986 film does Willie Nelson play the role of the famous gunslinger and dentist "Doc Holliday"?
Stagecoach - Stagecoach also stars Kris Kristofferson as the Ringo Kid.
As of 2016, how many Grammy awards has Willie Nelson won?
11 - Willie has won seven American Music Awards.