public async Task LoadNativeThumbnailAsync_CancelAfterAnImageHasBeenDecoded() { var cancellation = new CancellationTokenSource(); var originalImage = new BitmapMock(); var entity = new FileEntity("test"); _fileSystem .Setup(mock => mock.ReadAllBytes(entity.Path)) .Returns(new byte[] { 0x42 }); _imageLoader .Setup(mock => mock.LoadImage(entity, It.Is <Stream>(stream => stream.ReadByte() == 0x42 && stream.ReadByte() < 0))) .Returns(() => { cancellation.Cancel(); return(originalImage); }); Assert.IsFalse(originalImage.IsDisposed); var isCanceled = false; try { var image = await _loader.LoadNativeThumbnailAsync(entity, new Size(1, 1), cancellation.Token); } catch (OperationCanceledException) { isCanceled = true; } Assert.IsTrue(isCanceled); Assert.IsNull(entity.GetValue <ImageValue>(ExifAttributeReaderFactory.Thumbnail)); Assert.IsTrue(originalImage.IsDisposed); }
public async Task LoadEmbeddedThumbnailAsync_LoadedThumbnailIsDisposedIfGeneratorThrows() { var entity = new FileEntity("test1"); var embeddedThumbnail = new BitmapMock(); _imageLoader .Setup(mock => mock.LoadThumbnailAsync(entity, CancellationToken.None)) .Returns(Task.FromResult <SKBitmap>(embeddedThumbnail)); _thumbnailGenerator .Setup(mock => mock.GetThumbnail(embeddedThumbnail, new Size(1, 1))) .Throws(new Exception("test")); Assert.IsFalse(embeddedThumbnail.IsDisposed); var exception = ""; try { await _loader.LoadEmbeddedThumbnailAsync(entity, new Size(1, 1), CancellationToken.None); } catch (Exception e) { exception = e.Message; } Assert.AreEqual("test", exception); Assert.IsTrue(embeddedThumbnail.IsDisposed); }
public async Task LoadNativeThumbnailAsync_DisposeOriginalImageIfGeneratorthrows() { var originalImage = new BitmapMock(); var entity = new FileEntity("test"); _fileSystem .Setup(mock => mock.ReadAllBytes(entity.Path)) .Returns(new byte[] { 0x42 }); _imageLoader .Setup(mock => mock.LoadImage(entity, It.Is <Stream>(stream => stream.ReadByte() == 0x42 && stream.ReadByte() < 0))) .Returns(originalImage); _thumbnailGenerator .Setup(mock => mock.GetThumbnail(originalImage, new Size(1, 1))) .Throws(new Exception("test")); Assert.IsFalse(originalImage.IsDisposed); var exception = ""; try { var image = await _loader.LoadNativeThumbnailAsync(entity, new Size(1, 1), CancellationToken.None); } catch (Exception e) { exception = e.Message; } Assert.AreEqual("test", exception); Assert.IsNull(entity.GetValue <ImageValue>(ExifAttributeReaderFactory.Thumbnail)); Assert.IsTrue(originalImage.IsDisposed); }
public async Task SetPosition_DisposeImagesOutsideOfTheWindow() { // size of the thumbnail corresponds to the entity number var image6First = new BitmapMock(6, 6); var image6Second = new BitmapMock(6, 6); var image1 = new BitmapMock(1, 1); var image2 = new BitmapMock(2, 2); var image3 = new BitmapMock(3, 3); var image5 = new BitmapMock(5, 5); _imageLoader .SetupSequence(mock => mock.LoadImage(It.Is <IEntity>(entity => entity == _entities[5]))) .Returns(image6First) .Returns(image6Second); _imageLoader .Setup(mock => mock.LoadImage(It.Is <IEntity>(entity => entity == _entities[0]))) .Returns(image1); _imageLoader .Setup(mock => mock.LoadImage(It.Is <IEntity>(entity => entity == _entities[1]))) .Returns(image2); _imageLoader .Setup(mock => mock.LoadImage(It.Is <IEntity>(entity => entity == _entities[2]))) .Returns(image3); _imageLoader .Setup(mock => mock.LoadImage(It.Is <IEntity>(entity => entity == _entities[4]))) .Returns(image5); _window.Initialize(_entities, 0); var first = await _window.GetCurrentAsync(); Assert.AreEqual(1, first.Width); _window.Next(); var second = await _window.GetCurrentAsync(); Assert.AreEqual(2, second.Width); _window.Previous(); var third = await _window.GetCurrentAsync(); Assert.AreEqual(1, third.Width); _window.Previous(); var fourth = await _window.GetCurrentAsync(); Assert.AreEqual(6, fourth.Width); // The window disposes images asynchronnously. This should give the window enought time // to finish all pending operations. await Task.Delay(100); Assert.IsFalse(image1.IsDisposed); Assert.IsTrue(image2.IsDisposed); Assert.IsTrue(image3.IsDisposed); Assert.IsFalse(image5.IsDisposed); Assert.IsTrue(image6First.IsDisposed); Assert.IsFalse(image6Second.IsDisposed); }
public async Task LoadEmbeddedThumbnailAsync_InternalResultsAreDisposed() { var entity = new FileEntity("test1"); var embeddedThumbnail = new BitmapMock(); var generatedThumbnail = new BitmapMock(); _imageLoader .Setup(mock => mock.LoadThumbnailAsync(entity, CancellationToken.None)) .Returns(Task.FromResult <SKBitmap>(embeddedThumbnail)); _thumbnailGenerator .Setup(mock => mock.GetThumbnail(embeddedThumbnail, new Size(1, 1))) .Returns(generatedThumbnail); Assert.IsFalse(embeddedThumbnail.IsDisposed); Assert.IsFalse(generatedThumbnail.IsDisposed); await _loader.LoadEmbeddedThumbnailAsync(entity, new Size(1, 1), CancellationToken.None); Assert.IsTrue(embeddedThumbnail.IsDisposed); Assert.IsTrue(generatedThumbnail.IsDisposed); }
public async Task LoadNativeThumbnailAsync_DisposeIntermediateResults() { var originalImage = new BitmapMock(); var thumbnailImage = new BitmapMock(); var entity = new FileEntity("test"); _fileSystem .Setup(mock => mock.ReadAllBytes(entity.Path)) .Returns(new byte[] { 0x42 }); _imageLoader .Setup(mock => mock.LoadImage(entity, It.Is <Stream>(stream => stream.ReadByte() == 0x42 && stream.ReadByte() < 0))) .Returns(originalImage); _thumbnailGenerator .Setup(mock => mock.GetThumbnail(originalImage, new Size(1, 1))) .Returns(thumbnailImage); Assert.IsFalse(originalImage.IsDisposed); Assert.IsFalse(thumbnailImage.IsDisposed); var image = await _loader.LoadNativeThumbnailAsync(entity, new Size(1, 1), CancellationToken.None); Assert.IsNotNull(entity.GetValue <ImageValue>(ExifAttributeReaderFactory.Thumbnail)); Assert.IsTrue(originalImage.IsDisposed); Assert.IsTrue(thumbnailImage.IsDisposed); }
public async Task LoadEmbeddedThumbnailAsync_TaskIsCanceledAfterAThumbnailLoaded() { var cancellation = new CancellationTokenSource(); var entity = new FileEntity("test"); var embeddedThumbnail = new BitmapMock(); _imageLoader .Setup(mock => mock.LoadThumbnailAsync(entity, cancellation.Token)) .Callback(() => cancellation.Cancel()) .Returns(Task.FromResult <SKBitmap>(embeddedThumbnail)); Assert.IsFalse(embeddedThumbnail.IsDisposed); try { await _loader.LoadEmbeddedThumbnailAsync(entity, new Size(1, 1), cancellation.Token); } finally { Assert.IsTrue(embeddedThumbnail.IsDisposed); _thumbnailGenerator.Verify(mock => mock.GetThumbnail(It.IsAny <SKBitmap>(), It.IsAny <Size>()), Times.Never); } }
public async Task LoadEmbeddedThumbnailAsync_TaskIsCanceledAfterAThumbnailIsGenerated() { var cancellation = new CancellationTokenSource(); var entity = new FileEntity("test"); var embeddedThumbnail = new BitmapMock(); var generatedThumbnail = new BitmapMock(); _imageLoader .Setup(mock => mock.LoadThumbnailAsync(entity, cancellation.Token)) .Returns(Task.FromResult <SKBitmap>(embeddedThumbnail)); _thumbnailGenerator .Setup(mock => mock.GetThumbnail(embeddedThumbnail, new Size(1, 1))) .Callback(() => cancellation.Cancel()) .Returns(generatedThumbnail); Assert.IsFalse(embeddedThumbnail.IsDisposed); Assert.IsFalse(generatedThumbnail.IsDisposed); var result = await _loader.LoadEmbeddedThumbnailAsync(entity, new Size(1, 1), cancellation.Token); Assert.IsInstanceOfType(result.ThumbnailImage, typeof(Bitmap)); Assert.IsTrue(embeddedThumbnail.IsDisposed); Assert.IsTrue(generatedThumbnail.IsDisposed); }