コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
            }
        }
コード例 #8
0
        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);
        }