private NimatorResult RunUnsafe() { var nimatorResult = new NimatorResult(AmbientTimeProvider.GetNow()); foreach (var layer in this.layers) { var layerResult = layer.Run(); if (layerResult == null) { throw new InvalidOperationException("Layer " + layer.Name + " returned no result. Cannot continue because we now cannot determine error level of that layer."); } nimatorResult.LayerResults.Add(layerResult); if (layerResult.Level >= StopProcessingAtThreshold) { break; } } nimatorResult.Finished = AmbientTimeProvider.GetNow(); return(nimatorResult); }
public void CheckLayers_WhenAmbientTimeProvderCrashes_WillReturnCriticalResult() { AmbientTimeProvider.SetNewTimeProvider(() => { throw new Exception("Something truly terrible happened..."); }); var nimator = new NimatorEngine(new ILayer[0]); var result = nimator.RunSafe(); Assert.That(result.Level, Is.EqualTo(NotificationLevel.Critical)); Assert.That(result.RenderPlainText(NotificationLevel.Error), Does.Contain("truly terrible")); }
public void SetUp() { var now = new DateTime(2016, 8, 16, 13, 0, 0); AmbientTimeProvider.SetNewTimeProvider(() => { now = now.AddMilliseconds(15); // There's 15 ms between each call to the time provider. return(now); }); }
public void CheckLayers_WhenCalled_SetsStartAndEndFromAmbientTimeProvider() { var now = new DateTime(2016, 8, 16, 13, 0, 0); AmbientTimeProvider.SetNewTimeProvider(() => { now = now.AddSeconds(15); return(now); }); var layer1 = new Mock <ILayer>().WithResult(NotificationLevel.Okay); var layer2 = new Mock <ILayer>().WithResult(NotificationLevel.Okay); var nimator = new NimatorEngine(new[] { layer1.Object, layer2.Object }); var result = nimator.RunSafe(); Assert.That(result.Started, Is.EqualTo(new DateTime(2016, 8, 16, 13, 0, 15))); Assert.That(result.Finished, Is.GreaterThan(result.Started)); }
public void GetNow_ForDefaultInstance_ReturnsNonDefaultTimes() { var result = AmbientTimeProvider.GetNow(); Assert.That((DateTime.Now - result).Seconds, Is.LessThan(5), "Expected the ambient time provider to give a result just around Now."); }