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");
            }
예제 #3
0
            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());
            }
예제 #10
0
            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());
            }
예제 #11
0
            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);
            }
예제 #12
0
            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());
            }
예제 #14
0
            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);
            }
예제 #16
0
            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());
            }
예제 #20
0
            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);
            }
예제 #21
0
            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);
            }