public void SetUp() { _beginState = new MatchedEventMapImpl(new MatchedEventMapMeta(new String[0], false)); _scheduleService = new SchedulingServiceImpl(new TimeSourceServiceImpl()); PatternAgentInstanceContext agentContext = SupportPatternContextFactory.MakePatternAgentInstanceContext(_scheduleService); ScheduleSpec scheduleSpec = new ScheduleSpec(); scheduleSpec.AddValue(ScheduleUnit.SECONDS, 1); _evaluator = new SupportObserverEvaluator(agentContext); _observer = new TimerAtObserver(scheduleSpec, _beginState, _evaluator); }
public void TestWaitAndSpecTogether() { var dateTimeEx = DateTimeEx.GetInstance( TimeZoneInfo.Utc, new DateTime(2004, 12, 9, 15, 27, 10, DateTimeKind.Utc)); dateTimeEx.SetMillis(500); var startTime = dateTimeEx.UtcMillis; service.Time = startTime; // Add a specification var spec = new ScheduleSpec(); spec.AddValue(ScheduleUnit.MONTHS, 12); spec.AddValue(ScheduleUnit.DAYS_OF_MONTH, 9); spec.AddValue(ScheduleUnit.HOURS, 15); spec.AddValue(ScheduleUnit.MINUTES, 27); spec.AddValue(ScheduleUnit.SECONDS, 20); service.Add( ScheduleComputeHelper.ComputeDeltaNextOccurance(spec, service.Time, TimeZoneInfo.Utc, TimeAbacusMilliseconds.INSTANCE), callbacks[3], slots[1][1]); spec.AddValue(ScheduleUnit.SECONDS, 15); service.Add( ScheduleComputeHelper.ComputeDeltaNextOccurance(spec, service.Time, TimeZoneInfo.Utc, TimeAbacusMilliseconds.INSTANCE), callbacks[4], slots[2][0]); // Add some more callbacks service.Add(5000, callbacks[0], slots[0][0]); service.Add(10000, callbacks[1], slots[0][1]); service.Add(15000, callbacks[2], slots[1][0]); // Now send a times reflecting various seconds later and check who got a callback service.Time = startTime + 1000; SupportScheduleCallback.SetCallbackOrderNum(0); EvaluateSchedule(); CheckCallbacks(callbacks, new[] { 0, 0, 0, 0, 0 }); service.Time = startTime + 2000; EvaluateSchedule(); CheckCallbacks(callbacks, new[] { 0, 0, 0, 0, 0 }); service.Time = startTime + 4000; EvaluateSchedule(); CheckCallbacks(callbacks, new[] { 0, 0, 0, 0, 0 }); service.Time = startTime + 5000; EvaluateSchedule(); CheckCallbacks(callbacks, new[] { 1, 0, 0, 0, 2 }); service.Time = startTime + 9000; EvaluateSchedule(); CheckCallbacks(callbacks, new[] { 0, 0, 0, 0, 0 }); service.Time = startTime + 10000; EvaluateSchedule(); CheckCallbacks(callbacks, new[] { 0, 3, 0, 4, 0 }); service.Time = startTime + 11000; EvaluateSchedule(); CheckCallbacks(callbacks, new[] { 0, 0, 0, 0, 0 }); service.Time = startTime + 15000; EvaluateSchedule(); CheckCallbacks(callbacks, new[] { 0, 0, 5, 0, 0 }); service.Time = startTime + int.MaxValue; EvaluateSchedule(); CheckCallbacks(callbacks, new[] { 0, 0, 0, 0, 0 }); }