public void WillMarkImageAsSpriteIfUrlIsReferencedInAnotherImage() { var testable = new TestableSpriteManager(); var image1 = new BackgroundImageClass("", 0) { ImageUrl = "url1" }; var image2 = new BackgroundImageClass("", 0) { ImageUrl = "url2" }; var image3 = new BackgroundImageClass("", 0) { ImageUrl = "url1", XOffset = new Position() { Offset = -100 } }; testable.ClassUnderTest.Add(image1); testable.ClassUnderTest.Add(image2); testable.ClassUnderTest.Add(image3); Assert.True(image1.IsSprite); Assert.True(image3.IsSprite); Assert.False(image2.IsSprite); }
public void WillWriteEachImage() { var testable = new TestableSpriteManager(); testable.ClassUnderTest.MockSpriteContainer.Setup(x => x.Width).Returns(35); testable.ClassUnderTest.MockSpriteContainer.Setup(x => x.Height).Returns(18); var images = new List <SpritedImage> { new SpritedImage(1, null, TestableSpriteManager.Image15X17), new SpritedImage(1, null, TestableSpriteManager.Image18X18) }; testable.ClassUnderTest.MockSpriteContainer.Setup(x => x.GetEnumerator()).Returns(images.GetEnumerator()); testable.ClassUnderTest.MockSpriteContainer.Setup(x => x.Size).Returns(1); byte[] bytes = null; testable.Mock <IPngOptimizer>().Setup(x => x.OptimizePng(It.IsAny <byte[]>(), It.IsAny <int>(), false)).Callback <byte[], int, bool>((a, b, c) => bytes = a).Returns(() => bytes);; testable.ClassUnderTest.Flush(); var bitMap = new Bitmap(new MemoryStream(bytes)); Assert.Equal(TestableSpriteManager.Image15X17.GraphicsImage(), bitMap.Clone(new Rectangle(0, 0, 15, 17), TestableSpriteManager.Image15X17.PixelFormat), new BitmapPixelComparer(true)); Assert.Equal(TestableSpriteManager.Image18X18.GraphicsImage(), bitMap.Clone(new Rectangle(16, 0, 18, 18), TestableSpriteManager.Image18X18.PixelFormat), new BitmapPixelComparer(true)); }
public void WillNotCreateImageWriterIfContainerIsEmpty() { var testable = new TestableSpriteManager(); testable.ClassUnderTest.MockSpriteContainer.Setup(x => x.Size).Returns(0); testable.ClassUnderTest.Flush(); testable.Mock <IStore>().Verify(x => x.Save(It.IsAny <byte[]>(), It.IsAny <string>(), It.IsAny <string>()), Times.Never()); }
public void WillResetSpriteContainerAfterFlush() { var testable = new TestableSpriteManager(); testable.ClassUnderTest.MockSpriteContainer.Setup(x => x.Width).Returns(20); testable.ClassUnderTest.Flush(); Assert.Equal(0, testable.ClassUnderTest.SpriteContainer.Width); }
public void WillThrowInvalidOperationExceptionIfCssKeyIsEmpty() { var testable = new TestableSpriteManager(); testable.ClassUnderTest.MockSpriteContainer.Setup(x => x.Size).Returns(1); testable.ClassUnderTest.SpritedCssKey = Guid.Empty; var ex = Assert.Throws <InvalidOperationException>(() => testable.ClassUnderTest.Flush()); Assert.NotNull(ex); }
public void WillAddImageToSpriteContainer() { var testable = new TestableSpriteManager(); var image = new BackgroundImageClass("", "http://server/content/style.css") { ImageUrl = "" }; testable.ClassUnderTest.Add(image); testable.ClassUnderTest.MockSpriteContainer.Verify(x => x.AddImage(image), Times.Exactly(1)); }
public void WillSwallowInvalidOperationException() { var testable = new TestableSpriteManager(); var image = new BackgroundImageClass("", "http://server/content/style.css") { ImageUrl = "" }; testable.ClassUnderTest.MockSpriteContainer.Setup(x => x.AddImage(image)).Throws(new InvalidOperationException()); var ex = Record.Exception(() => testable.ClassUnderTest.Add(image)); Assert.Null(ex); }
public void WillNotAddImageToSpriteContainerIfTheRegistryFiltersIt() { var testable = new TestableSpriteManager(); var image = new BackgroundImageClass("", "http://server/content/style.css") { ImageUrl = "", Width = 110 }; Registry.AddFilter(new SpriteFilter(x => x.BackgroundImage.Width > 100)); testable.ClassUnderTest.Add(image); testable.ClassUnderTest.MockSpriteContainer.Verify(x => x.AddImage(image), Times.Never()); }
public void WillNotAddImageToSpriteContainerIfImageAlreadySprited() { var testable = new TestableSpriteManager(); var image = new BackgroundImageClass("", 0) { ImageUrl = "" }; testable.ClassUnderTest.Add(image); testable.ClassUnderTest.Add(image); testable.ClassUnderTest.MockSpriteContainer.Verify(x => x.AddImage(image), Times.Exactly(1)); }
public void WillFlushWhenColorCountPassesThreshold() { var testable = new TestableSpriteManager(); testable.Mock <IRRConfiguration>().Setup(x => x.SpriteColorLimit).Returns(1); testable.ClassUnderTest.MockSpriteContainer.Setup(x => x.Colors).Returns(1); testable.ClassUnderTest.Add(new BackgroundImageClass("", "http://server/content/style.css") { ImageUrl = "imageUrl" }); Assert.NotEqual(testable.ClassUnderTest.MockSpriteContainer.Object, testable.ClassUnderTest.SpriteContainer); }
public void WillFlushWhenSizePassesThreshold() { var testable = new TestableSpriteManager(); testable.Mock <IRRConfiguration>().Setup(x => x.SpriteSizeLimit).Returns(1); testable.ClassUnderTest.MockSpriteContainer.Setup(x => x.Size).Returns(1); testable.ClassUnderTest.Add(new BackgroundImageClass("", 0) { ImageUrl = "imageUrl" }); Assert.NotEqual(testable.ClassUnderTest.MockSpriteContainer.Object, testable.ClassUnderTest.SpriteContainer); }
public void WillSaveSpriteUrlWithApngExtension() { var testable = new TestableSpriteManager(); testable.ClassUnderTest.MockSpriteContainer.Setup(x => x.Size).Returns(1); var url = string.Empty; testable.Mock <IStore>().Setup(x => x.Save(It.IsAny <byte[]>(), It.IsAny <string>(), null)).Callback <byte[], string, string>((a, b, c) => url = b); testable.ClassUnderTest.Flush(); Assert.True(url.EndsWith(".png")); }
public void WillSaveSpriteUrlWithKeyInPath() { var testable = new TestableSpriteManager(); testable.Mock <IRRConfiguration>().Setup(x => x.SpriteVirtualPath).Returns("spritedir"); testable.ClassUnderTest.MockSpriteContainer.Setup(x => x.Size).Returns(1); var url = string.Empty; testable.Mock <IStore>().Setup(x => x.Save(It.IsAny <byte[]>(), It.IsAny <string>(), null)).Callback <byte[], string, string>((a, b, c) => url = b); testable.ClassUnderTest.Flush(); Assert.True(url.Contains("/" + testable.ClassUnderTest.SpritedCssKey.RemoveDashes() + "-")); }
public void WillNotFlushWhenColorCountPassesThresholdAndImageQuantizationIsDisabed() { var testable = new TestableSpriteManager(); testable.Mock <IRRConfiguration>().Setup(x => x.SpriteColorLimit).Returns(1); testable.Mock <IRRConfiguration>().Setup(x => x.ImageQuantizationDisabled).Returns(true); testable.ClassUnderTest.MockSpriteContainer.Setup(x => x.Colors).Returns(1); testable.ClassUnderTest.Add(new BackgroundImageClass("", 0) { ImageUrl = "imageUrl" }); Assert.Same(testable.ClassUnderTest.MockSpriteContainer.Object, testable.ClassUnderTest.SpriteContainer); }
public void WillSaveWriterToContainerUrlUsingPngMimeType() { var testable = new TestableSpriteManager(); byte[] bytes = null; testable.Mock <IPngOptimizer>().Setup(x => x.OptimizePng(It.IsAny <byte[]>(), It.IsAny <int>(), false)).Callback <byte[], int, bool>((a, b, c) => bytes = a).Returns(() => bytes); testable.ClassUnderTest.MockSpriteContainer.Setup(x => x.Size).Returns(1); testable.ClassUnderTest.Flush(); var bitMap = new Bitmap(new MemoryStream(bytes)); Assert.Equal(ImageFormat.Png, bitMap.RawFormat); }
public void WillNotOptimizeImageIfNotInFullTrust() { var testable = new TestableSpriteManager(); testable.Mock <IRRConfiguration>().Setup(x => x.IsFullTrust).Returns(false); testable.ClassUnderTest.MockSpriteContainer.Setup(x => x.Size).Returns(1); var optimizedBytes = new byte[0]; testable.Mock <IPngOptimizer>().Setup(x => x.OptimizePng(It.IsAny <byte[]>(), It.IsAny <int>(), false)). Callback <byte[], int, bool>((a, b, c) => optimizedBytes = a).Returns(() => optimizedBytes); testable.ClassUnderTest.Flush(); Assert.Empty(optimizedBytes); }
public void WillSaveSpriteUrlInCorrectConfigDirectory() { var testable = new TestableSpriteManager(); testable.Mock <IRRConfiguration>().Setup(x => x.SpriteVirtualPath).Returns("spritedir"); testable.ClassUnderTest.MockSpriteContainer.Setup(x => x.Size).Returns(1); var url = string.Empty; testable.Mock <IStore>().Setup(x => x.Save(It.IsAny <byte[]>(), It.IsAny <string>(), null)).Callback <byte[], string, string>((a, b, c) => url = b); testable.ClassUnderTest.Flush(); Assert.True(url.StartsWith("spritedir/")); }
public void WillPassConfiguredCompressionLevelToOptimizer(int expectedCompression) { var testable = new TestableSpriteManager(); int compression = 0; byte[] bytes = null; testable.Mock <IRRConfiguration>().Setup(x => x.ImageOptimizationDisabled).Returns(false); testable.Mock <IRRConfiguration>().Setup(x => x.ImageOptimizationCompressionLevel).Returns(expectedCompression); testable.ClassUnderTest.MockSpriteContainer.Setup(x => x.Size).Returns(1); testable.Mock <IPngOptimizer>().Setup(x => x.OptimizePng(It.IsAny <byte[]>(), It.IsAny <int>(), false)). Callback <byte[], int, bool>((a, b, c) => { compression = b; bytes = a; }).Returns(() => bytes); testable.ClassUnderTest.Flush(); Assert.Equal(expectedCompression, compression); }
public void WillPassOptimizationErrorToErrorHandler() { var testable = new TestableSpriteManager(); var exception = new OptimizationException("Appropriately friendly error message"); Exception error = null; Registry.CaptureErrorAction = (x => error = x); testable.Mock <IRRConfiguration>().Setup(x => x.ImageOptimizationDisabled).Returns(false); testable.Mock <IRRConfiguration>().Setup(x => x.ImageOptimizationCompressionLevel).Returns(2); testable.ClassUnderTest.MockSpriteContainer.Setup(x => x.Size).Returns(1); testable.Mock <IPngOptimizer>().Setup(x => x.OptimizePng(It.IsAny <byte[]>(), 2, false)).Throws(exception); testable.ClassUnderTest.Flush(); Assert.Equal(error, exception); Assert.Equal(error.Message, "Appropriately friendly error message"); }
public void WillCreateImageWriterWithCorrectDimensions() { var testable = new TestableSpriteManager(); testable.ClassUnderTest.MockSpriteContainer.Setup(x => x.Width).Returns(1); testable.ClassUnderTest.MockSpriteContainer.Setup(x => x.Height).Returns(1); testable.ClassUnderTest.MockSpriteContainer.Setup(x => x.Size).Returns(1); byte[] bytes = null; testable.Mock <IPngOptimizer>().Setup(x => x.OptimizePng(It.IsAny <byte[]>(), It.IsAny <int>(), false)).Callback <byte[], int, bool>((a, b, c) => bytes = a).Returns(() => bytes); testable.ClassUnderTest.Flush(); var bitMap = new Bitmap(new MemoryStream(bytes)); Assert.Equal(1, bitMap.Width); Assert.Equal(1, bitMap.Height); }
public void WillOptimizeImageIfOptimizationIsEnabled() { var testable = new TestableSpriteManager(); byte[] bytes = null; testable.Mock <IRRConfiguration>().Setup(x => x.ImageOptimizationDisabled).Returns(false); testable.Mock <IRRConfiguration>().Setup(x => x.ImageOptimizationCompressionLevel).Returns(2); testable.Mock <IStore>().Setup(x => x.Save(It.IsAny <byte[]>(), It.IsAny <string>(), null)).Callback <byte[], string, string>((a, b, c) => bytes = a); testable.ClassUnderTest.MockSpriteContainer.Setup(x => x.Size).Returns(1); var optimizedBytes = new byte[] { 5, 5, 5, 5, 5 }; testable.Mock <IPngOptimizer>().Setup(x => x.OptimizePng(It.IsAny <byte[]>(), 2, false)).Returns(optimizedBytes); testable.ClassUnderTest.Flush(); Assert.Equal(optimizedBytes, bytes); }
public void WillReturnAllImages() { var testable = new TestableSpriteManager(); testable.ClassUnderTest.Add(new BackgroundImageClass("class1", "") { Height = 1 }); testable.ClassUnderTest.Add(new BackgroundImageClass("class2", "") { Height = 2 }); var results = testable.ClassUnderTest.ToArray(); Assert.Equal(2, results.Length); Assert.True(results.Any(x => x.CssClass.OriginalClassString == "class1")); Assert.True(results.Any(x => x.CssClass.OriginalClassString == "class2")); }
public void WillAddUrlsToSpritesUponFlush() { var testable = new TestableSpriteManager(); testable.ClassUnderTest.MockSpriteContainer.Setup(x => x.Size).Returns(1); var sprites = new List <SpritedImage> { new SpritedImage(1, null, TestableSpriteManager.Image15X17), new SpritedImage(1, null, TestableSpriteManager.Image18X18) }; testable.ClassUnderTest.MockSpriteContainer.Setup(x => x.GetEnumerator()).Returns( () => sprites.GetEnumerator()); var url = string.Empty; testable.Mock <IStore>().Setup(x => x.Save(It.IsAny <byte[]>(), It.IsAny <string>(), null)).Callback <byte[], string, string>((a, b, c) => url = b); testable.ClassUnderTest.Flush(); Assert.Equal(url, sprites[0].Url); Assert.Equal(url, sprites[1].Url); }
public void WillCopySpritesToContainerButAddDistinctCssClass() { var testable = new TestableSpriteManager(); var image = new BackgroundImageClass("", 0) { ImageUrl = "url", Selector = ".class" }; testable.ClassUnderTest.Add(image); var image2 = new BackgroundImageClass("", 0) { ImageUrl = "url", Selector = ".class2" }; testable.ClassUnderTest.Add(image2); Assert.Equal(2, testable.ClassUnderTest.SpriteList.Count); Assert.Equal(image, testable.ClassUnderTest.SpriteList[0].Value.CssClass); Assert.Equal(image2, testable.ClassUnderTest.SpriteList[1].Value.CssClass); Assert.Equal(testable.ClassUnderTest.SpriteList[0].Key, testable.ClassUnderTest.SpriteList[1].Key); }
public void WillTreatSameUrlwithDifferentWidthHeightOrXOffsetAsDifferentImagesAndReturnDistinctSprite(int image1Width, int image1Height, int image1XOffset, int image2Width, int image2Height, int image2XOffset) { var testable = new TestableSpriteManager(); testable.ClassUnderTest.Add(new BackgroundImageClass("", "http://server/content/style.css") { ImageUrl = "image1", Width = image1Width, Height = image1Height, XOffset = new Position() { Offset = image1XOffset, PositionMode = PositionMode.Unit } }); testable.ClassUnderTest.Add(new BackgroundImageClass("", "http://server/content/style.css") { ImageUrl = "image1", Width = image2Width, Height = image2Height, XOffset = new Position() { Offset = image2XOffset, PositionMode = PositionMode.Unit } }); testable.ClassUnderTest.MockSpriteContainer.Verify(x => x.AddImage(It.IsAny <BackgroundImageClass>()), Times.Exactly(2)); }
public void WillPassConfiguredQuantiaztionEnablementToOptimizer(bool expectedToBeDisabled) { var testable = new TestableSpriteManager(); bool isQuantizationDisabled = false; byte[] bytes = null; testable.Mock <IRRConfiguration>().Setup(x => x.ImageOptimizationDisabled).Returns(false); testable.Mock <IRRConfiguration>().Setup(x => x.ImageQuantizationDisabled).Returns(expectedToBeDisabled); testable.ClassUnderTest.MockSpriteContainer.Setup(x => x.Size).Returns(1); testable.Mock <IPngOptimizer>().Setup( x => x.OptimizePng(It.IsAny <byte[]>(), It.IsAny <int>(), It.IsAny <bool>())).Callback <byte[], int, bool>((a, b, c) => { isQuantizationDisabled = c; bytes = a; }).Returns(() => bytes); testable.ClassUnderTest.Flush(); Assert.Equal(expectedToBeDisabled, isQuantizationDisabled); }
public void WillIncrementPositionByWidthOfPreviousImage() { var testable = new TestableSpriteManager(); testable.ClassUnderTest.MockSpriteContainer.Setup(x => x.Width).Returns(35); testable.ClassUnderTest.MockSpriteContainer.Setup(x => x.Height).Returns(18); var images = new List <SpritedImage>() { new SpritedImage(1, null, TestableSpriteManager.Image15X17), new SpritedImage(1, null, TestableSpriteManager.Image18X18) }; testable.ClassUnderTest.MockSpriteContainer.Setup(x => x.GetEnumerator()).Returns(images.GetEnumerator()); testable.ClassUnderTest.MockSpriteContainer.Setup(x => x.Size).Returns(1); byte[] bytes = null; testable.Mock <IPngOptimizer>().Setup(x => x.OptimizePng(It.IsAny <byte[]>(), It.IsAny <int>(), false)).Callback <byte[], int, bool>((a, b, c) => bytes = a).Returns(() => bytes); testable.ClassUnderTest.Flush(); Assert.Equal(16, images[1].Position); }
public void WillSaveSpriteWithAFileNameWithThebyteHashInTheFileName() { var testable = new TestableSpriteManager(); testable.ClassUnderTest.MockSpriteContainer.Setup(x => x.Size).Returns(1); testable.ClassUnderTest.Flush(); testable.ClassUnderTest.MockSpriteContainer.Setup(x => x.GetEnumerator()).Returns(new List <SpritedImage>().GetEnumerator()); testable.ClassUnderTest.SpriteContainer = testable.ClassUnderTest.MockSpriteContainer.Object; testable.ClassUnderTest.MockSpriteContainer.Setup(x => x.Size).Returns(1); var url = string.Empty; byte[] bytes = new byte[] { 1, 2, 3 }; testable.Mock <IPngOptimizer>().Setup(x => x.OptimizePng(It.IsAny <byte[]>(), It.IsAny <int>(), false)).Returns(bytes); testable.Mock <IStore>().Setup(x => x.Save(bytes, It.IsAny <string>(), null)).Callback <byte[], string, string>((a, b, c) => { url = b; }); testable.ClassUnderTest.Flush(); Assert.True(url.EndsWith(string.Format("{0}.png", Hasher.Hash(bytes).RemoveDashes()))); }
public void WillUseUnoptimizedBytesIfOptimizationFails() { var testable = new TestableSpriteManager(); byte[] originalBytes = null; byte[] optimizedBytes = null; var images = new List <SpritedImage>() { new SpritedImage(1, null, TestableSpriteManager.Image15X17), new SpritedImage(1, null, TestableSpriteManager.Image18X18) }; testable.ClassUnderTest.MockSpriteContainer.Setup(x => x.GetEnumerator()).Returns(images.GetEnumerator()); testable.Mock <IRRConfiguration>().Setup(x => x.ImageOptimizationDisabled).Returns(false); testable.Mock <IRRConfiguration>().Setup(x => x.ImageOptimizationCompressionLevel).Returns(2); testable.Mock <IStore>().Setup(x => x.Save(It.IsAny <byte[]>(), It.IsAny <string>(), null)).Callback <byte[], string, string>((a, b, c) => optimizedBytes = a); testable.ClassUnderTest.MockSpriteContainer.Setup(x => x.Size).Returns(1); testable.Mock <IPngOptimizer>().Setup(x => x.OptimizePng(It.IsAny <byte[]>(), 2, false)).Callback <byte[], int, bool>((a, b, c) => originalBytes = a).Throws(new OptimizationException("")); testable.ClassUnderTest.Flush(); Assert.Equal(optimizedBytes, originalBytes); }
public void WillSetPositionToSamePositionOfPreviousDuplicate() { var testable = new TestableSpriteManager(); testable.ClassUnderTest.MockSpriteContainer.Setup(x => x.Width).Returns(35); testable.ClassUnderTest.MockSpriteContainer.Setup(x => x.Height).Returns(18); var metadata = new SpriteManager.ImageMetadata(new BackgroundImageClass("css1", 1)); var metadata2 = new SpriteManager.ImageMetadata(new BackgroundImageClass("css2", 2)); testable.ClassUnderTest.SpriteList.Add(new KeyValuePair <SpriteManager.ImageMetadata, SpritedImage>(metadata, new SpritedImage(1, null, TestableSpriteManager.Image15X17) { Metadata = metadata })); testable.ClassUnderTest.SpriteList.Add(new KeyValuePair <SpriteManager.ImageMetadata, SpritedImage>(metadata2, new SpritedImage(1, null, TestableSpriteManager.Image18X18) { Metadata = metadata })); testable.ClassUnderTest.SpriteList.Add(new KeyValuePair <SpriteManager.ImageMetadata, SpritedImage>(metadata, new SpritedImage(1, null, TestableSpriteManager.Image15X17) { Metadata = metadata })); var images = new List <SpritedImage>() { testable.ClassUnderTest.SpriteList[0].Value, testable.ClassUnderTest.SpriteList[1].Value, }; testable.ClassUnderTest.MockSpriteContainer.Setup(x => x.GetEnumerator()).Returns(() => images.GetEnumerator()); testable.ClassUnderTest.MockSpriteContainer.Setup(x => x.Size).Returns(1); testable.ClassUnderTest.Flush(); Assert.Equal(0, testable.ClassUnderTest.SpriteList[0].Value.Position); Assert.Equal(16, testable.ClassUnderTest.SpriteList[1].Value.Position); Assert.Equal(0, testable.ClassUnderTest.SpriteList[2].Value.Position); }