public void PreventParallelAttemptsToStart() { var camera = new Camera(cameraLogger.Object, streamLogger.Object, CaptureSettings.Default, Camera.CreateVideoCapture); var logger = new PropertyChangedLogger(); camera.PropertyChanged += logger.OnPropertyChanged; Task.WaitAll(Enumerable.Repeat(Task.Run(() => camera.Start()), Environment.ProcessorCount).ToArray()); Assert.Equal(1, logger.Notifications[camera].Count(x => x.Value == nameof(Camera.Stream))); }
public void RemainStoppedIfAttemptCreateNewVideoCaptureFailed() { var camera = new Camera(cameraLogger.Object, streamLogger.Object, CaptureSettings.Default, _ => throw new TestException()); var logger = new PropertyChangedLogger(); camera.PropertyChanged += logger.OnPropertyChanged; Assert.Throws <TestException>(() => camera.Start()); Assert.False(camera.IsRunning); Assert.Empty(logger.Notifications); }
public void ProvideNewStreamWhenStarted() { var camera = new Camera(cameraLogger.Object, streamLogger.Object, CaptureSettings.Default, Camera.CreateVideoCapture); var logger = new PropertyChangedLogger(); camera.PropertyChanged += logger.OnPropertyChanged; camera.Start(); Assert.NotNull(camera.Stream); Assert.Equal(1, logger.Notifications[camera].Count(x => x.Value == nameof(Camera.Stream))); }
public void NotifyWhenItWasStarted() { var camera = new Camera(cameraLogger.Object, streamLogger.Object, CaptureSettings.Default, Camera.CreateVideoCapture); var logger = new PropertyChangedLogger(); camera.PropertyChanged += logger.OnPropertyChanged; camera.Start(); Assert.True(camera.IsRunning); Assert.Equal(1, logger.Notifications[camera].Count(x => x.Value == nameof(Camera.IsRunning))); }
public void CompleteStreamWhenStopped() { var camera = new Camera(cameraLogger.Object, streamLogger.Object, CaptureSettings.Default, Camera.CreateVideoCapture); var logger = new PropertyChangedLogger(); var observer = new TestImageObserver <Rgb>(); camera.PropertyChanged += logger.OnPropertyChanged; camera.Start(); using (camera.Stream.Subscribe(observer)) { camera.Stop(); } Assert.Null(camera.Stream); Assert.Equal(2, logger.Notifications[camera].Count(x => x.Value == nameof(Camera.Stream))); Assert.True(observer.StreamCompleted); }