public FuzzyDateTimePattern Negate() { FuzzyDateTimePattern newDateTimePattern = new FuzzyDateTimePattern(); if (this.Year != null) newDateTimePattern.Year = this.Year * -1; if (this.Month != null) newDateTimePattern.Month = this.Month * -1; if (this.Day != null) newDateTimePattern.Day = this.Day * -1; if (this.Hour != null) newDateTimePattern.Hour = this.Hour * -1; if (this.Minute != null) newDateTimePattern.Minute = this.Minute * -1; if (this.Second != null) newDateTimePattern.Second = this.Second * -1; return newDateTimePattern; }
protected static FuzzyDateTimePattern AddRelatives(FuzzyDateTimePattern relative1, FuzzyDateTimePattern relative2) { return new FuzzyDateTimePattern { Rule = TimeType.Relative, Year = (int?) FuzzyDateTimePattern.Combine(relative1.Year, relative2.Year), Month = (int?) FuzzyDateTimePattern.Combine(relative1.Month, relative2.Month), Day = (int?) FuzzyDateTimePattern.Combine(relative1.Day, relative2.Day), Hour = (int?) FuzzyDateTimePattern.Combine(relative1.Hour, relative2.Hour), Minute = (int?) FuzzyDateTimePattern.Combine(relative1.Minute, relative2.Minute), Second = (int?) FuzzyDateTimePattern.Combine(relative1.Second, relative2.Second), DayOfWeek = (System.DayOfWeek?) FuzzyDateTimePattern.Combine(relative1.DayOfWeek, relative2.DayOfWeek), TemporalInterval = (TemporalInterval) FuzzyDateTimePattern.Combine(relative1.TemporalInterval, relative2.TemporalInterval) }; }
protected static FuzzyDateTimePattern AddDefinitiveRelative(FuzzyDateTimePattern definitive, FuzzyDateTimePattern relative) { return new FuzzyDateTimePattern { Rule = TimeType.Definitive, Year = (int?) FuzzyDateTimePattern.AnchoredCombine(definitive.Year, DateTime.Now.Year, relative.Year, 0), Month = (int?) FuzzyDateTimePattern.AnchoredCombine(definitive.Month, DateTime.Now.Month, relative.Month, 0), Day = (int?) FuzzyDateTimePattern.AnchoredCombine(definitive.Day, DateTime.Now.Day, relative.Day, 0), Hour = (int?) FuzzyDateTimePattern.AnchoredCombine(definitive.Hour, DateTime.Now.Hour, relative.Hour, 0), Minute = (int?) FuzzyDateTimePattern.AnchoredCombine(definitive.Minute, DateTime.Now.Minute, relative.Minute, 0), Second = (int?) FuzzyDateTimePattern.AnchoredCombine(definitive.Second, DateTime.Now.Second, relative.Second, 0), DayOfWeek = (System.DayOfWeek?) FuzzyDateTimePattern.AnchoredCombine(definitive.DayOfWeek, DateTime.Now.DayOfWeek, relative.DayOfWeek, 0), TemporalInterval = (TemporalInterval) FuzzyDateTimePattern.Combine(definitive.TemporalInterval, relative.TemporalInterval) }; }
protected static FuzzyDateTimePattern AddDefinitives(FuzzyDateTimePattern definitive1, FuzzyDateTimePattern definitive2) { return new FuzzyDateTimePattern { Rule = TimeType.Definitive, Year = definitive1.Year ?? definitive2.Year, Month = definitive1.Month ?? definitive2.Month, Day = definitive1.Day ?? definitive2.Day, Hour = definitive1.Hour ?? definitive2.Hour, Minute = definitive1.Minute ?? definitive2.Minute, Second = definitive1.Second ?? definitive2.Second, DayOfWeek = definitive1.DayOfWeek ?? definitive2.DayOfWeek, TemporalInterval = definitive1.TemporalInterval != TemporalInterval.Infinite ? definitive1.TemporalInterval : definitive2.TemporalInterval }; }
protected static void AssertTemporalCommand(TextCommandController textCommandController, String command, TextCommandModel primaryCommand, TimeSpan? period = null, DateTime? delay = null, FuzzyDateTimePattern interval = null) { ICommandResult args = ExecuteTextCommand(textCommandController, command); AssertExecutedCommandAgainstTemporalValue(args, primaryCommand, period, delay, interval); }
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); } }