public void WillParseClassesInMedia() { var testable = new TestableCssImageTransformer(); var css = @" @media screen { .LocalNavigation { background-image: url('http://i1.social.microsoft.com/contentservice/798d3f43-7d1e-41a1-9b09-9dad00d8a996/subnav_technet.png'); background-repeat: no-repeat; width: 50; } .RemoteNavigation { background-image: url('http://i1.social.microsoft.com/contentservice/798d3f43-7d1e-41a1-9b09-9dad00d8a996/subnav_technetr.png'); background-repeat: no-repeat; width: 55; } .LocalNavigation .TabOn,.LocalNavigation .TabOn:hover { background-image: url(""http://i3.social.microsoft.com/contentservice/1f22465a-498c-46f1-83d3-9dad00d8a950/subnav_on_technet.png""); } }"; var result = testable.ClassUnderTest.ExtractImageUrls(css); Assert.Equal(2, result.Count()); }
public void WillAddPropertiesToIncompleteWithoutImageClassComplete() { var testable = new TestableCssImageTransformer(); var css = @" h1 {{ background: url(""image"") no-repeat -10px -30px; width: 20px; height: 20px; padding: 40 50 60 70; }} h1.LocalNavigation {{ background-position: -10px -30px; }}"; testable.Mock <ICssSelectorAnalyzer>().Setup(x => x.IsInScopeOfTarget("h1.LocalNavigation", "h1")).Returns(true); var result = testable.ClassUnderTest.ExtractImageUrls(css); Assert.Equal(2, result.Count()); var image = result.FirstOrDefault(x => x.Selector == "h1.LocalNavigation"); Assert.NotNull(image); Assert.Equal(image.ExplicitWidth, 20); Assert.Equal(image.ExplicitHeight, 20); Assert.Equal(image.Repeat, RepeatStyle.NoRepeat); Assert.Equal(image.XOffset.Offset, -10); Assert.Equal(image.YOffset.Offset, -30); Assert.Equal(image.PaddingTop, 40); Assert.Equal(image.PaddingRight, 50); Assert.Equal(image.PaddingBottom, 60); Assert.Equal(image.PaddingLeft, 70); Assert.Equal(image.ImageUrl, "image"); }
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 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 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 WillNotAnalyzeSelectorsThatHaveNothingOfInterest() { var testable = new TestableCssImageTransformer(); var css = @" .h1 {{color: blue;}} .back {{background-position: 10px 10px;}}"; testable.ClassUnderTest.ExtractImageUrls(css); testable.Mock <ICssSelectorAnalyzer>().Verify(x => x.IsInScopeOfTarget(It.IsAny <string>(), ".h1"), Times.Never()); }
public void WillNotReturnBackgroundImagesWithoutWidth() { var testable = new TestableCssImageTransformer(); var css = @" .LocalNavigation .TabOn,.LocalNavigation .TabOn:hover { background: url(""http://i3.social.microsoft.com/contentservice/1f22465a-498c-46f1-83d3-9dad00d8a950/subnav_on_technet.png"") no-repeat; }"; var result = testable.ClassUnderTest.ExtractImageUrls(css); Assert.Equal(0, result.Count()); }
public void WillAnalyzeSelectorsThatAreInCompleteAnHaveAYOffsetWithAnotherSelectorThatHasAnImageOrOffset(string propertyOfInterest) { var testable = new TestableCssImageTransformer(); var css = @" .h1 {{{0}}} .LocalNavigation {{ background-position: top; }}"; testable.ClassUnderTest.ExtractImageUrls(string.Format(css, propertyOfInterest)); testable.Mock <ICssSelectorAnalyzer>().Verify(x => x.IsInScopeOfTarget(".LocalNavigation", It.IsAny <string>()), Times.Once()); }
public void WillReturnPositivelyUnitYPositionedBackgroundImages(int y) { var testable = new TestableCssImageTransformer(); var css = string.Format(@" .DropDownArrow {{ background: transparent url('http://i1.social.s-msft.com/contentservice/dcbd1ced-14f2-4c11-9ece-9d6e00f78d1c/arrow_dn_white.gif') no-repeat scroll 0 {0}px; width: 5px; }}", y); var result = testable.ClassUnderTest.ExtractImageUrls(css); Assert.Equal(1, result.Count()); }
public void WillReturnNegativelyXPositionedBackgroundImages() { var testable = new TestableCssImageTransformer(); var css = @" .LocalNavigation .TabOn,.LocalNavigation .TabOn:hover { background: url(""http://i3.social.microsoft.com/contentservice/1f22465a-498c-46f1-83d3-9dad00d8a950/subnav_on_technet.png"") no-repeat -150px 0px; width: 20; }"; var result = testable.ClassUnderTest.ExtractImageUrls(ref css, "http://i1.social.microsoft.com/contentservice/798d3f43-7d1e-41a1-9b09-9dad00d8a996/style.css"); Assert.Equal(1, result.Count()); }
public void WillConvertRelativeUrlsToAbsoluteForUnReturnedImagesWhenBracesInComments() { var testable = new TestableCssImageTransformer(); var css = @" .LocalNavigation .TabOn,.LocalNavigation .TabOn:hover { border: 1px solid #aaaaaa/*{borderColorContent}*/; background: #ffffff/*{bgColorContent}*/ url(images/ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/; color: #222222/*{fcContent}*/; }"; var expectedcss = @" .LocalNavigation .TabOn,.LocalNavigation .TabOn:hover { border: 1px solid #aaaaaa; background: #ffffff url(http://i1.social.microsoft.com/contentservice/798d3f43-7d1e-41a1-9b09-9dad00d8a996/images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; }"; testable.ClassUnderTest.ExtractImageUrls(ref css, "http://i1.social.microsoft.com/contentservice/798d3f43-7d1e-41a1-9b09-9dad00d8a996/style.css"); Assert.Equal(expectedcss, css); }
public void WillNotReturnYPositionedBackgroundImagesNotTopPositionedAndOfPercentOrDirection(string y) { var testable = new TestableCssImageTransformer(); var css = string.Format(@" .LocalNavigation .TabOn,.LocalNavigation .TabOn:hover {{ background: url(""http://i3.social.microsoft.com/contentservice/1f22465a-498c-46f1-83d3-9dad00d8a950/subnav_on_technet.png"") no-repeat -150px {0}; width: 20; }}", y); var result = testable.ClassUnderTest.ExtractImageUrls(ref css, "http://i1.social.microsoft.com/contentservice/798d3f43-7d1e-41a1-9b09-9dad00d8a996/style.css"); Assert.Equal(0, result.Count()); }
public void WillAnalyzeSelectorsThatAreInCompleteAnHaveAndImageWithAnotherSelectorThatHasAnImageOrOffet(string propertyOfInterest) { var testable = new TestableCssImageTransformer(); var css = @" .h1 {{{0}}} .LocalNavigation {{ background: url(""http://i3.social.microsoft.com/contentservice/1f22465a-498c-46f1-83d3-9dad00d8a950/subnav_on_technet.png""); }}"; testable.ClassUnderTest.ExtractImageUrls(string.Format(css, propertyOfInterest)); testable.Mock <ICssSelectorAnalyzer>().Verify(x => x.IsInScopeOfTarget(".LocalNavigation", It.IsAny <string>()), Times.Once()); }
public void WillReturnNegativelyUnitYPositionedBackgroundImagesWithHeight() { var testable = new TestableCssImageTransformer(); var css = @" .DropDownArrow {{ background: transparent url('http://i1.social.s-msft.com/contentservice/dcbd1ced-14f2-4c11-9ece-9d6e00f78d1c/arrow_dn_white.gif') no-repeat scroll 0 -20px; width: 5px; height:24px; }}"; var result = testable.ClassUnderTest.ExtractImageUrls(ref css, "http://i1.social.microsoft.com/contentservice/798d3f43-7d1e-41a1-9b09-9dad00d8a996/style.css"); Assert.Equal(1, result.Count()); }
public void WillReturnRightPositionedBackgroundImages() { var testable = new TestableCssImageTransformer(); var css = @" .LocalNavigation .TabOn,.LocalNavigation .TabOn:hover { background: url(""http://i3.social.microsoft.com/contentservice/1f22465a-498c-46f1-83d3-9dad00d8a950/subnav_on_technet.png"") no-repeat right 0px; width: 20px; }"; var result = testable.ClassUnderTest.ExtractImageUrls(css); Assert.Equal(1, result.Count()); Assert.Equal(Direction.Right, result.First().XOffset.Direction); }
public void WillNotReturnPreviouslyVerticallySpritedImagesWithoutHeight() { var testable = new TestableCssImageTransformer(); var css = @" .LocalNavigation .TabOn,.LocalNavigation .TabOn:hover { background: url(""http://i3.social.microsoft.com/contentservice/1f22465a-498c-46f1-83d3-9dad00d8a950/subnav_on_technet.png"") 0 -30px; background-repeat: no-repeat; width: 50px; }}"; var result = testable.ClassUnderTest.ExtractImageUrls(ref css, "http://i1.social.microsoft.com/contentservice/798d3f43-7d1e-41a1-9b09-9dad00d8a996/style.css"); Assert.Equal(0, result.Count()); }
public void WillNotReturnReapeatingBackgroundImages(string repeat) { var testable = new TestableCssImageTransformer(); var css = @" .LocalNavigation .TabOn,.LocalNavigation .TabOn:hover {{ background: url(""http://i3.social.microsoft.com/contentservice/1f22465a-498c-46f1-83d3-9dad00d8a950/subnav_on_technet.png"") {0}; width: 20px; }}"; var formatedCss = string.Format(css, repeat); var result = testable.ClassUnderTest.ExtractImageUrls(formatedCss); Assert.Equal(0, result.Count()); }
public void WillReturnPercentagewidthedBackgroundImages() { var testable = new TestableCssImageTransformer(); var css = @" .LocalNavigation .TabOn,.LocalNavigation .TabOn:hover { background-image: url(""http://i3.social.microsoft.com/contentservice/1f22465a-498c-46f1-83d3-9dad00d8a950/subnav_on_technet.png""); background-position: 10% 0px; width:20; background-repeat: no-repeat; }"; var result = testable.ClassUnderTest.ExtractImageUrls(css); Assert.Equal(1, result.Count()); }
public void WillNotAnalyzeSelectorsThatAreComplete() { var testable = new TestableCssImageTransformer(); var css = @" .h1 {{width: 10px;}} .LocalNavigation { background: url(""http://i3.social.microsoft.com/contentservice/1f22465a-498c-46f1-83d3-9dad00d8a950/subnav_on_technet.png"") no-repeat 0px center; width: 20px; height: 20px; padding: 0 0 0 0; }"; testable.ClassUnderTest.ExtractImageUrls(css); testable.Mock <ICssSelectorAnalyzer>().Verify(x => x.IsInScopeOfTarget(".LocalNavigation", It.IsAny <string>()), Times.Never()); }
public void WillConvertRelativeUrlsToAbsoluteForUnReturnedImages() { var testable = new TestableCssImageTransformer(); var css = @" .LocalNavigation .TabOn,.LocalNavigation .TabOn:hover { background: url(""subnav_on_technet.png"") no-repeat; }"; var expectedcss = @" .LocalNavigation .TabOn,.LocalNavigation .TabOn:hover { background: url(""http://i1.social.microsoft.com/contentservice/798d3f43-7d1e-41a1-9b09-9dad00d8a996/subnav_on_technet.png"") no-repeat; }"; testable.ClassUnderTest.ExtractImageUrls(ref css, "http://i1.social.microsoft.com/contentservice/798d3f43-7d1e-41a1-9b09-9dad00d8a996/style.css"); Assert.Equal(expectedcss, css); }
public void WillNotTryToConvertUrlsOfClassesWithNoImages() { var testable = new TestableCssImageTransformer(); var css = @" .LocalNavigation .TabOn,.LocalNavigation .TabOn:hover { style: val; }"; var expectedcss = @" .LocalNavigation .TabOn,.LocalNavigation .TabOn:hover { style: val; }"; testable.ClassUnderTest.ExtractImageUrls(ref css, "http://i1.social.microsoft.com/contentservice/798d3f43-7d1e-41a1-9b09-9dad00d8a996/style.css"); Assert.Equal(expectedcss, css); }
public void WillNotTryToConvertUrlsOfClassesWithNoImages() { var testable = new TestableCssImageTransformer(); var css = @" .LocalNavigation .TabOn,.LocalNavigation .TabOn:hover { style: val; }"; var expectedcss = @" .LocalNavigation .TabOn,.LocalNavigation .TabOn:hover { style: val; }"; testable.ClassUnderTest.ExtractImageUrls(css); Assert.Equal(expectedcss, css); }
public void WillReturnBackgroundImagesWithWidth() { var testable = new TestableCssImageTransformer(); var css = @" .LocalNavigation { background-image: url('http://i1.social.microsoft.com/contentservice/798d3f43-7d1e-41a1-9b09-9dad00d8a996/subnav_technet.png'); background-repeat: no-repeat; width: 50px; } .TabOn { background-image: url(""http://i3.social.microsoft.com/contentservice/1f22465a-498c-46f1-83d3-9dad00d8a950/subnav_on_technet.png""); }"; var result = testable.ClassUnderTest.ExtractImageUrls(css); Assert.Equal(1, result.Count()); Assert.True(result.Any(x => x.ImageUrl == "http://i1.social.microsoft.com/contentservice/798d3f43-7d1e-41a1-9b09-9dad00d8a996/subnav_technet.png")); }
public void WillParseClassesWithEmptyComments() { var testable = new TestableCssImageTransformer(); var css = @" * html .RadInput a.riDown { margin-top /**/:0; } /*label*/ .RadInput .riLabel { margin:0 4px 0 0; white-space:nowrap; } "; var expected = @" * html .RadInput a.riDown { margin-top :0; } .RadInput .riLabel { margin:0 4px 0 0; white-space:nowrap; } "; testable.ClassUnderTest.ExtractImageUrls(ref css, "http://i1.social.microsoft.com/contentservice/798d3f43-7d1e-41a1-9b09-9dad00d8a996/style.css"); Assert.Equal(expected, css); }
public void WillPassCorrectOrderToBackgroundImage() { var testable = new TestableCssImageTransformer(); var css = @" .LocalNavigation { background-image: url('http://i1.social.microsoft.com/contentservice/798d3f43-7d1e-41a1-9b09-9dad00d8a996/subnav_technet.png'); background-repeat: no-repeat; width: 50; } .TabOn { background-image: url(""http://i3.social.microsoft.com/contentservice/1f22465a-498c-46f1-83d3-9dad00d8a950/subnav_on_technet.png""); background-repeat: no-repeat; width: 50; }"; var result = testable.ClassUnderTest.ExtractImageUrls(css); Assert.Equal(1, result.First(x => x.Selector == ".LocalNavigation").ClassOrder); Assert.Equal(2, result.First(x => x.Selector == ".TabOn").ClassOrder); }
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); }