public void CreateSprite_ValidMixedFileAndByteArrayListInImagesParam_ShouldGenerateCss()
        {
            // Arrange
            const string cssFilename  = @"c:\sprite.css";
            const string spriteUrl    = "/sprite.png";
            const int    image1Height = 1;
            const int    image1Width  = 2;
            var          image1Colour = MagickColor.FromRgb(1, 1, 1);

            var imageFile1      = new FileInfo(@"C:\a.png");
            var imageByteArray2 = Convert.FromBase64String(Image100X56Base64);

            var magickImage1 = new MagickImage(image1Colour, image1Width, image1Height);
            var magickImage2 = new MagickImage(imageByteArray2);

            _magickImageHelper.Setup(x => x.Create(imageFile1)).Returns(magickImage1);
            _magickImageHelper.Setup(x => x.Create(imageByteArray2)).Returns(magickImage2);

            _fileMock.Setup(x => x.Exists(imageFile1.FullName)).Returns(true);

            var images = new List <ISpriteImage>
            {
                new FileSpriteImage(imageFile1),
                new ByteArraySpriteImage("b", imageByteArray2)
            };

            var spriteSettings = new FileSystemSpriteSettings(@"c:\sprite.png", spriteUrl, cssFilename);

            // Act
            _spriteManager.CreateSprite(images, null, spriteSettings);

            // Assert
            _cssProcessorMock.Verify(x => x.CreateCss($"#a-png{{height:{image1Height}px;width:{image1Width}px;background:url('{spriteUrl}') 0 0;}}#b{{height:56px;width:100px;background:url('{spriteUrl}') 0 -{image1Height}px;}}", spriteSettings));
        }
        public void CreateSprite_ValidByteArrayListInImagesParam_ShouldGenerateCss()
        {
            // Arrange
            const string cssFilename = @"c:\sprite.css";
            const string spriteUrl   = "/sprite.png";

            var imageByteArray1 = Convert.FromBase64String(Image272X100Base64);
            var imageByteArray2 = Convert.FromBase64String(Image100X56Base64);

            var magickImage1 = new MagickImage(imageByteArray1);
            var magickImage2 = new MagickImage(imageByteArray2);

            _magickImageHelper.Setup(x => x.Create(imageByteArray1)).Returns(magickImage1);
            _magickImageHelper.Setup(x => x.Create(imageByteArray2)).Returns(magickImage2);

            var images = new List <ISpriteImage>
            {
                new ByteArraySpriteImage("a", imageByteArray1),
                new ByteArraySpriteImage("b", imageByteArray2)
            };

            var spriteSettings = new FileSystemSpriteSettings(@"c:\sprite.png", spriteUrl, cssFilename);

            // Act
            _spriteManager.CreateSprite(images, null, spriteSettings);

            // Assert
            _cssProcessorMock.Verify(x => x.CreateCss($"#a{{height:175px;width:252px;background:url('{spriteUrl}') 0 0;}}#b{{height:56px;width:100px;background:url('{spriteUrl}') 0 -175px;}}", spriteSettings));
        }
        public void CreateSprite_ValidFileListInImagesParam_ShouldGenerateSprite()
        {
            // Arrange
            const string spriteFilename = @"C:\sprite.png";
            const int    image1Height   = 1;
            const int    image1Width    = 2;
            const int    image2Height   = 3;
            const int    image2Width    = 4;
            var          image1Colour   = MagickColor.FromRgb(5, 6, 7);
            var          image2Colour   = MagickColor.FromRgb(8, 9, 10);

            var imageFile1 = new FileInfo(@"C:\a.png");
            var imageFile2 = new FileInfo(@"C:\b.png");

            var magickImage1 = new MagickImage(image1Colour, image1Width, image1Height);
            var magickImage2 = new MagickImage(image2Colour, image2Width, image2Height);

            _magickImageHelper.Setup(x => x.Create(imageFile1)).Returns(magickImage1);
            _magickImageHelper.Setup(x => x.Create(imageFile2)).Returns(magickImage2);

            _fileMock.Setup(x => x.Exists(imageFile1.FullName)).Returns(true);
            _fileMock.Setup(x => x.Exists(imageFile2.FullName)).Returns(true);

            var spriteImages = new List <IMagickImage>();

            _imageProcessorMock.Setup(x => x.CreateSprite(It.IsAny <MagickImageCollection>(), It.IsAny <ISpriteSettings>())).Callback((MagickImageCollection a, ISpriteSettings b) => spriteImages.AddRange(a));

            var images = new List <ISpriteImage>
            {
                new FileSpriteImage(imageFile1),
                new FileSpriteImage(imageFile2)
            };

            var spriteSettings = new FileSystemSpriteSettings(spriteFilename, "/sprite.png", @"c:\sprite.css");

            // Act
            _spriteManager.CreateSprite(images, null, spriteSettings);

            // Assert
            _imageProcessorMock.Verify(x => x.CreateSprite(It.IsAny <MagickImageCollection>(), spriteSettings));
            spriteImages.Count.ShouldBe(2);
            spriteImages[0].BackgroundColor.ShouldBe(image1Colour);
            spriteImages[0].Width.ShouldBe(image1Width);
            spriteImages[0].Height.ShouldBe(image1Height);
            spriteImages[1].BackgroundColor.ShouldBe(image2Colour);
            spriteImages[1].Width.ShouldBe(image2Width);
            spriteImages[1].Height.ShouldBe(image2Height);
        }
        public void CreateSprite_ValidByteArrayListInImagesParam_ShouldGenerateSprite()
        {
            // Arrange
            const string spriteFilename = @"C:\sprite.png";

            var imageByteArray1 = Convert.FromBase64String(Image272X100Base64);
            var imageByteArray2 = Convert.FromBase64String(Image100X56Base64);

            var magickImage1 = new MagickImage(imageByteArray1);
            var magickImage2 = new MagickImage(imageByteArray2);

            _magickImageHelper.Setup(x => x.Create(imageByteArray1)).Returns(magickImage1);
            _magickImageHelper.Setup(x => x.Create(imageByteArray2)).Returns(magickImage2);

            var spriteImages = new List <IMagickImage>();

            _imageProcessorMock.Setup(x => x.CreateSprite(It.IsAny <MagickImageCollection>(), It.IsAny <ISpriteSettings>())).Callback((MagickImageCollection a, ISpriteSettings b) => spriteImages.AddRange(a));

            var images = new List <ISpriteImage>
            {
                new ByteArraySpriteImage("a", imageByteArray1),
                new ByteArraySpriteImage("b", imageByteArray2)
            };

            var spriteSettings = new FileSystemSpriteSettings(spriteFilename, "/sprite.png", @"c:\sprite.css");

            // Act
            _spriteManager.CreateSprite(images, null, spriteSettings);

            // Assert
            _imageProcessorMock.Verify(x => x.CreateSprite(It.IsAny <MagickImageCollection>(), spriteSettings));
            spriteImages.Count.ShouldBe(2);
            spriteImages[0].Width.ShouldBe(Image252X175Width);
            spriteImages[0].Height.ShouldBe(Image252X175Height);
            spriteImages[1].Width.ShouldBe(Image100X56Width);
            spriteImages[1].Height.ShouldBe(Image100X56Height);
        }