public async Task CustomTheSameImageSourceReturnsTheSameBitmap()
        {
            var imageSource = new CustomImageSourceStub(Colors.Red);

            var cache   = new CustomImageCacheStub();
            var service = new CustomImageSourceServiceStub(cache);

            // get an image
            var result1 = await service.GetDrawableAsync(imageSource, Platform.DefaultContext);

            Assert.Equal(1, cache.Cache.Count);
            Assert.Equal(1, cache.Cache[imageSource.Color].Count);

            // get the image again
            var result2 = await service.GetDrawableAsync(imageSource, Platform.DefaultContext);

            Assert.Equal(1, cache.Cache.Count);
            Assert.Equal(2, cache.Cache[imageSource.Color].Count);

            // make sure it was NOT collected and we got the same image
            Assert.Equal(result1.Value, result2.Value);

            result1.Dispose();
            result2.Dispose();
        }
        public async Task CustomReleasingImageSourceReturnsDifferentBitmap()
        {
            var imageSource = new CustomImageSourceStub(Colors.Red);

            var cache   = new CustomImageCacheStub();
            var service = new CustomImageSourceServiceStub(cache);

            // get an image
            var result1 = await service.GetDrawableAsync(imageSource, Platform.DefaultContext);

            Assert.Equal(1, cache.Cache.Count);
            Assert.Equal(1, cache.Cache[imageSource.Color].Count);

            // release
            result1.Dispose();

            // get the image again
            var result2 = await service.GetDrawableAsync(imageSource, Platform.DefaultContext);

            Assert.Equal(1, cache.Cache.Count);
            Assert.Equal(1, cache.Cache[imageSource.Color].Count);

            // make sure it WAS collected and we got a new image
            Assert.NotEqual(result1.Value, result2.Value);

            result2.Dispose();
        }