public void TestPauseResume2() { var stopwatch = new Stopwatch(); var stageProvider = new StageProvider(new Stage { Duration = 1000 }, new Stage { Marker = 1 }, new Stage { Duration = 1000 }); var program = new StageProgram(Clock.SystemTicksClock, stageProvider); program.Started += (sender, e) => stopwatch.Restart(); program.StageChanged += (sender, e) => e.Action = (e.Stage?.Marker ?? 0) == 1 ? StageAction.Pause : e.Action; var evt = new ManualResetEvent(false); program.Stopped += (sender, e) => { stopwatch.Stop(); evt.Set(); }; program.Start(); Thread.Sleep(5000); Assert.IsTrue(program.Resume()); evt.WaitOne(); const int estimatedSeconds = 6; var elapsedTime = stopwatch.Elapsed; Assert.IsTrue(Math.Abs(elapsedTime.TotalSeconds - estimatedSeconds) < 1); }
public void TestPauseResume() { var stopwatch = new Stopwatch(); var stageProvider = new StageProvider(new Stage { Duration = 2000 }, new Stage { Duration = 2000 }); var program = new StageProgram(Clock.SystemTicksClock, stageProvider); program.Started += (sender, e) => stopwatch.Restart(); var evt = new ManualResetEvent(false); program.Stopped += (sender, e) => { stopwatch.Stop(); evt.Set(); }; program.Start(); Thread.Sleep(2500); Assert.IsTrue(program.Pause()); Thread.Sleep(2500); Assert.IsTrue(program.Resume()); evt.WaitOne(); const double estimatedSeconds = 6.5; var elapsedTime = stopwatch.Elapsed; Assert.IsTrue(Math.Abs(elapsedTime.TotalSeconds - estimatedSeconds) < 1); }
public int CompareTo(IEntityWorkflowStageProvider other) { StageProvider provider = (StageProvider)other; if (_item == null || provider._item == null) { return(((IComparable)Id).CompareTo(provider.Id)); } return(_item.Index.CompareTo(provider._item.Index)); }
public EntityWorkflow CreateWorkflow() { WorkflowProvider workflowProvider = new WorkflowProvider { Guid = _guid, Name = _name, PropertyName = _propertyName, EntitySet = _entitySet, StageListGuid = _stageListGuid, StagePropertyGuid = _stagePropertyGuid, Types = _types.ToArray(), ShowInLinks = new HashSet <Guid>(_showInLinks), HistoryConfiguration = _historyCofiguration }; EntityWorkflow result = new EntityWorkflow(workflowProvider); ValueList valueList; if (_stageListGuid == Guid.Empty) { EntitySetScheme scheme = _entitySet.GetScheme(); if (_types.Count == 0) { valueList = (scheme.Properties.Find(_stagePropertyGuid)?.Format as ValueListPropertyFormat)?.ValueList?.GetList(); } else { EntityType type = _types.SelectMany(t => t.GetTypes(scheme.Types)).FirstOrDefault(); valueList = (type?.Properties.Find(_stagePropertyGuid)?.Format as ValueListPropertyFormat)?.ValueList?.GetList(); } } else { valueList = ValueList.GetValueList(_entitySet.Connection, _stageListGuid); if (valueList == null) { throw new ModelException(ErrorLevel.Warning, "Не найден список значений {0}", _stageListGuid); } } ILookup <object, ValueListItem> items = valueList?.ToLookup(i => i.WorkflowValue); List <EntityWorkflowStage> stages = new List <EntityWorkflowStage>(); foreach (KeyValuePair <object, IEntityWorkflowStage> source in _stages) { StageProvider stageProvider = new StageProvider { Id = source.Key, Item = items?[source.Key].FirstOrDefault() }; stages.Add(new EntityWorkflowStage(result, stageProvider)); } result.Stages = stages; Dictionary <object, List <EntityWorkflowTransition> > transitionsTo = stages.ToDictionary(s => s.Id, s => new List <EntityWorkflowTransition>()); Dictionary <object, List <EntityWorkflowTransition> > transitionsFrom = stages.ToDictionary(s => s.Id, s => new List <EntityWorkflowTransition>()); result.Transitions = _transitions.OfType <TransitionInfo>().Select( t => t.CreateTransition(result, workflowProvider, transitionsTo, transitionsFrom)).ToList(); foreach (EntityWorkflowStage stage in stages) { stage.SetTransitionsTo(transitionsTo[stage.Id]); stage.SetTransitionsFrom(transitionsFrom[stage.Id]); } return(result); }
public void TestEnumerable() { var stageProvider = new StageProvider(new Stage(), new Stage(), new Stage()); Assert.AreEqual(stageProvider.Count, stageProvider.AsEnumerable().Count()); }