protected static void AssertExecutedCommandAgainstTemporalValue(ICommandResult args, TextCommandModel primaryCommand, TimeSpan? period = null, DateTime? delay = null, FuzzyDateTimePattern interval = null) { Assert.AreEqual(primaryCommand, args.Now.TextCommands.First(), String.Format("Has not used the '{0}' command", primaryCommand.PluginCommand)); TextCommandMatchModel match = args.Now.TextCommandMatches.First(); Assert.IsNotNull(match); if (period.HasValue == true) { Assert.IsNotNull(match.Period); Assert.AreEqual(Math.Ceiling(period.Value.TotalSeconds), Math.Ceiling(match.Period.Value.TotalSeconds)); } else { Assert.IsNull(match.Period); } if (delay.HasValue == true) { Assert.IsNotNull(match.Delay); // Note that the delay is generated then passed through to the test, which then needs // to create a DateTime. We allow a little give here of a second or so for execution times. // If it's longer than that then we should be optimizing anyway. // Whatever is passed into this function is generated after the command has been run. Assert.IsTrue(delay.Value - match.Delay.Value < new TimeSpan(TimeSpan.TicksPerSecond * 1)); // Assert.AreEqual(delay.Value, args.After.TextCommandMatches.First().Delay.Value); } else { Assert.IsNull(match.Delay); } if (interval != null) { Assert.IsNotNull(match.Interval); Assert.AreEqual(interval.ToString(), match.Interval.ToString()); } else { Assert.IsNull(match.Interval); } }