public void WillAddImportanceDirectiveIfImportant() { var testable = new TestableCssImageTransformer(); var css = @" .localnavigation { background: url('http://i1.social.microsoft.com/contentservice/798d3f43-7d1e-41a1-9b09-9dad00d8a996/subnav_technet.png') no-repeat 0 -30px; width: 50; }"; var expected = @" .localnavigation { background: url('spriteUrl') no-repeat 0 -30px; width: 50; ;background-position: -120px 0 !important;}"; var sprite = new SpritedImage(1, new BackgroundImageClass(css, 0) { Important = true }, null) { Url = "spriteUrl", Position = 120 }; var result = testable.ClassUnderTest.InjectSprite(css, sprite); Assert.Equal(expected, result); }
public void WillAddUrlWithSpriteUrlAndIfItIsNotInCss() { var testable = new TestableCssImageTransformer(); var css = @" .Localnavigation { background-position: 0 -30px; width: 50; }"; var expected = @" .Localnavigation { background-position: 0 -30px; width: 50; ;background-image: url('spriteUrl');background-position: -120px 0;}"; var sprite = new SpritedImage(1, new BackgroundImageClass(css, 0) { ImageUrl = "nonRRsprite" }, null) { Url = "spriteUrl", Position = 120 }; var result = testable.ClassUnderTest.InjectSprite(css, sprite); Assert.Equal(expected, result); }
public void WillDefaultYOffsetToZero() { var testable = new TestableCssImageTransformer(); var css = @" .localnavigation { background: url('http://i1.social.microsoft.com/contentservice/798d3f43-7d1e-41a1-9b09-9dad00d8a996/subnav_technet.png') no-repeat; width: 50; }"; var expected = @" .localnavigation { background: url('spriteUrl') no-repeat; width: 50; ;background-position: -120px 0;}"; var sprite = new SpritedImage(1, new BackgroundImageClass(css, "http://server/content/style.css"), null) { Url = "spriteUrl", Position = 120 }; var result = testable.ClassUnderTest.InjectSprite(css, sprite); Assert.Equal(expected, result); }
public void WillReturnAllImagesOrderedByColor() { var testable = new TestableSpriteContainer(); var image1 = new SpritedImage(20, null, null); var image2 = new SpritedImage(10, null, null); testable.ClassUnderTest.AddSpritedImage(image1); testable.ClassUnderTest.AddSpritedImage(image2); var results = testable.ClassUnderTest.ToArray(); Assert.Equal(image1, results[1]); Assert.Equal(image2, results[0]); }
public void WillInjectSpritesToCssAfterFlush() { var testable = new TestableCssReducer(); var image1 = new BackgroundImageClass("", "http://server/content/style.css") { ImageUrl = "image1" }; var image2 = new BackgroundImageClass("", "http://server/content/style.css") { ImageUrl = "image2" }; var css = "css"; var mockWebResponse = new Mock <WebResponse>(); mockWebResponse.Setup(x => x.GetResponseStream()).Returns(new MemoryStream(new UTF8Encoding().GetBytes(css))); testable.Mock <IWebClientWrapper>().Setup(x => x.Download <CssResource>(It.IsAny <string>())).Returns(mockWebResponse.Object); testable.Mock <ICssImageTransformer>().Setup(x => x.ExtractImageUrls(ref css, It.IsAny <string>())).Returns(new[] { image1, image2 }); var sprite1 = new SpritedImage(1, null, null) { Position = -100 }; var sprite2 = new SpritedImage(2, null, null) { Position = -100 }; var sprites = new List <SpritedImage> { sprite1, sprite2 }; testable.Mock <ISpriteManager>().Setup(x => x.GetEnumerator()).Returns(sprites.GetEnumerator()); bool flushIsCalled = false; bool flushCalled = false; testable.Mock <ISpriteManager>().Setup(x => x.Flush()).Callback(() => flushIsCalled = true); testable.Mock <ICssImageTransformer>().Setup(x => x.InjectSprite(It.IsAny <string>(), It.IsAny <SpritedImage>())).Callback(() => flushCalled = flushIsCalled); testable.ClassUnderTest.Process("http://host/css2.css"); testable.Mock <ICssImageTransformer>().Verify(x => x.InjectSprite(It.IsAny <string>(), sprite1), Times.Once()); testable.Mock <ICssImageTransformer>().Verify(x => x.InjectSprite(It.IsAny <string>(), sprite2), Times.Once()); Assert.True(flushCalled); }
public void WillNotReplaceClassWithSameBodyAndDifferentSelector() { var testable = new TestableCssImageTransformer(); var css = @" .localnavigation { background: url('http://i1.social.microsoft.com/contentservice/798d3f43-7d1e-41a1-9b09-9dad00d8a996/subnav_technet.png') no-repeat 0 -30px; width: 50; } .localnavigation2 { background: url('http://i1.social.microsoft.com/contentservice/798d3f43-7d1e-41a1-9b09-9dad00d8a996/subnav_technet.png') no-repeat 0 -30px; width: 50; }"; var imageCss = @".localnavigation { background: url('http://i1.social.microsoft.com/contentservice/798d3f43-7d1e-41a1-9b09-9dad00d8a996/subnav_technet.png') no-repeat 0 -30px; width: 50; }"; var expected = @" .localnavigation { background: url('spriteUrl') no-repeat 0 -30px; width: 50; ;background-position: -120px 0;} .localnavigation2 { background: url('http://i1.social.microsoft.com/contentservice/798d3f43-7d1e-41a1-9b09-9dad00d8a996/subnav_technet.png') no-repeat 0 -30px; width: 50; }"; var sprite = new SpritedImage(1, new BackgroundImageClass(imageCss, 0), null) { Url = "spriteUrl", Position = 120 }; var result = testable.ClassUnderTest.InjectSprite(css, sprite); Assert.Equal(expected, result); }
public void WillSetImageAbsoluteUrlFromBackgroundImageStyleAndReplaceRelativeUrl() { var css = @" .LocalNavigation .TabOn,.LocalNavigation .TabOn:hover { background-image: url(""subnav_on_technet.png""); }"; var expectedCss = @" .LocalNavigation .TabOn,.LocalNavigation .TabOn:hover { background-image: url(""newUrl""); ;background-position: -0px 0;}"; var testable = new TestableCssImageTransformer(); var backgroundImage = new BackgroundImageClass(css, 0); var sprite = new SpritedImage(1, backgroundImage, null) { Url = "newUrl", Position = 0 }; var result = testable.ClassUnderTest.InjectSprite(css, sprite); Assert.Equal(expectedCss, result); }
public void AddSpritedImage(SpritedImage image) { images.Add(image); }