public void WillNotTransformScriptsIgnoredByFilter()
            {
                var testable    = new TestableResponseTransformer();
                var transform   = @"<head id=""Head1"">
<meta name=""description"" content="""" />
<script src=""http://server/Me.js"" type=""text/javascript"" ></script>
<script src=""http://server/Me2.js"" type=""text/javascript"" ></script>
<script src=""http://server/ignore/Me.js"" type=""text/javascript"" ></script>
<script src=""http://server/alsoignore/Me.js"" type=""text/javascript"" ></script>
<title>site</title></head>
                ";
                var transformed = @"<head id=""Head1"">
<meta name=""description"" content="""" />
<script src=""http://server/Me3.js"" type=""text/javascript"" ></script>

<script src=""http://server/ignore/Me.js"" type=""text/javascript"" ></script>
<script src=""http://server/alsoignore/Me.js"" type=""text/javascript"" ></script>
<title>site</title></head>
                ";

                testable.Mock <IReductionRepository>().Setup(x => x.FindReduction("http://server/Me.js::http://server/Me2.js::")).Returns("http://server/Me3.js");
                testable.Mock <HttpContextBase>().Setup(x => x.Request.Url).Returns(new Uri("http://server/megah"));
                Registry.AddFilter(new JavascriptFilter(x => x.FilteredUrl.Contains("ignore")));

                var result = testable.ClassUnderTest.Transform(transform);

                Assert.Equal(transformed, result);
                RRContainer.Current = null;
            }
            public void WillNotTransformScriptsContainingIgnoredUrls()
            {
                var testable    = new TestableResponseTransformer();
                var transform   = @"<head id=""Head1"">
<meta name=""description"" content="""" />
<script src=""http://server/Me.js"" type=""text/javascript"" ></script>
<script src=""http://server/Me2.js"" type=""text/javascript"" ></script>
<script src=""http://server/ignore/Me.js"" type=""text/javascript"" ></script>
<script src=""http://server/alsoignore/Me.js"" type=""text/javascript"" ></script>
<title>site</title></head>
                ";
                var transformed = @"<head id=""Head1"">
<meta name=""description"" content="""" />
<script src=""http://server/Me3.js"" type=""text/javascript"" ></script>

<script src=""http://server/ignore/Me.js"" type=""text/javascript"" ></script>
<script src=""http://server/alsoignore/Me.js"" type=""text/javascript"" ></script>
<title>site</title></head>
                ";

                testable.Mock <IReductionRepository>().Setup(x => x.FindReduction("http://server/Me.js::http://server/Me2.js::")).Returns("http://server/Me3.js");
                testable.Mock <HttpContextBase>().Setup(x => x.Request.Url).Returns(new Uri("http://server/megah"));
                var config = new Mock <IRRConfiguration>();

                config.Setup(x => x.JavaScriptUrlsToIgnore).Returns("server/Ignore, server/alsoignore");
                RRContainer.Current = new Container(x => x.For <IRRConfiguration>().Use(config.Object));

                var result = testable.ClassUnderTest.Transform(transform);

                Assert.Equal(transformed, result);
                RRContainer.Current = null;
            }
            public void WillNotTransformIEConditionalCss()
            {
                var testable    = new TestableResponseTransformer();
                var transform   = @"<head id=""Head1"">
<meta name=""description"" content="""" />
    <!--[if IE 6]>
<link href=""http://server/Me.css"" rel=""Stylesheet"" type=""text/css"" />
    <![endif]-->
<link href=""http://server/Me2.css"" rel=""Stylesheet"" type=""text/css"" />
<title>site</title></head>
                ";
                var transformed = @"<head id=""Head1""><link href=""http://server/Me3.css"" rel=""Stylesheet"" type=""text/css"" />
<meta name=""description"" content="""" />
    <!--[if IE 6]>
<link href=""http://server/Me.css"" rel=""Stylesheet"" type=""text/css"" />
    <![endif]-->

<title>site</title></head>
                ";

                testable.Mock <IReductionRepository>().Setup(x => x.FindReduction("http://server/Me2.css::")).Returns("http://server/Me3.css");
                testable.Mock <HttpContextBase>().Setup(x => x.Request.Url).Returns(new Uri("http://server/megah"));

                var result = testable.ClassUnderTest.Transform(transform);

                Assert.Equal(transformed, result);
            }
            public void WillTransformAllScriptsIfJsTagValidatorIsNull()
            {
                var testable    = new TestableResponseTransformer();
                var transform   = @"<head id=""Head1"">
<meta name=""description"" content="""" />
<link href=""http://server/Me.css"" rel=""Stylesheet"" type=""text/css"" />
<link href=""http://server/Me2.css"" rel=""Stylesheet"" type=""text/css"" />
<script src=""http://server/Me.js"" type=""text/javascript"" ></script>
<script src=""http://server/Me2.js"" type=""text/javascript"" ></script>
<title>site</title></head>
                ";
                var transformed = @"<head id=""Head1""><link href=""http://server/Me3.css"" rel=""Stylesheet"" type=""text/css"" />
<meta name=""description"" content="""" />


<script src=""http://server/Me3.js"" type=""text/javascript"" ></script>

<title>site</title></head>
                ";

                testable.Mock <IReductionRepository>().Setup(x => x.FindReduction("http://server/Me.css::http://server/Me2.css::")).Returns("http://server/Me3.css");
                testable.Mock <IReductionRepository>().Setup(x => x.FindReduction("http://server/Me.js::http://server/Me2.js::")).Returns("http://server/Me3.js");
                testable.Mock <HttpContextBase>().Setup(x => x.Request.Url).Returns(new Uri("http://server/megah"));
                var jsResource = RRContainer.Current.GetInstance <JavaScriptResource>();

                jsResource.TagValidator = null;

                var result = testable.ClassUnderTest.Transform(transform);

                Assert.Equal(transformed, result);
                RRContainer.Current = null;
            }
            public void WillNotTransformIEConditionalJs()
            {
                var testable    = new TestableResponseTransformer();
                var transform   = @"
<script src=""http://server/Me.js"" type=""text/javascript"" ></script>
    <!--[if IE 6]>
<script src=""http://server/Me2.js"" type=""text/javascript"" ></script>
    <![endif]-->
<script src=""http://server/Me3.js"" type=""text/javascript"" ></script>
";
                var transformed = @"
<script src=""http://server/Me4.js"" type=""text/javascript"" ></script>
    <!--[if IE 6]>
<script src=""http://server/Me2.js"" type=""text/javascript"" ></script>
    <![endif]-->

";

                testable.Mock <IReductionRepository>().Setup(x => x.FindReduction("http://server/Me.js::http://server/Me3.js::")).Returns("http://server/Me4.js");
                testable.Mock <HttpContextBase>().Setup(x => x.Request.Url).Returns(new Uri("http://server/megah"));

                var result = testable.ClassUnderTest.Transform(transform);

                Assert.Equal(transformed, result);
            }
            public void WillTransformHeadWithDuplicateScripts()
            {
                var testable    = new TestableResponseTransformer();
                var transform   = @"<head>
<script src=""http://server/script1.js"" type=""text/javascript"" ></script>
<script src=""http://server/script2.js"" type=""text/javascript"" ></script>
<script src=""http://server/script3.js"" type=""text/javascript"" ></script>
<script src=""http://server/script1.js"" type=""text/javascript"" ></script>
<title>site</title></head>
                ";
                var transformed = @"<head>
<script src=""http://server/script4.js"" type=""text/javascript"" ></script>

<script src=""http://server/script3.js"" type=""text/javascript"" ></script>
<script src=""http://server/script5.js"" type=""text/javascript"" ></script>
<title>site</title></head>
                ";

                testable.Mock <IReductionRepository>().Setup(x => x.FindReduction("http://server/script1.js::http://server/script2.js::")).Returns("http://server/script4.js");
                testable.Mock <IReductionRepository>().Setup(x => x.FindReduction("http://server/script1.js::")).Returns("http://server/script5.js");
                testable.Mock <HttpContextBase>().Setup(x => x.Request.Url).Returns(new Uri("http://server/megah"));
                var config = new Mock <IRRConfiguration>();

                config.Setup(x => x.JavaScriptUrlsToIgnore).Returns("server/script3.js");
                RRContainer.Current = new Container(x => x.For <IRRConfiguration>().Use(config.Object));

                var result = testable.ClassUnderTest.Transform(transform);

                Assert.Equal(transformed, result);
                RRContainer.Current = null;
            }
            public void WillNotTransformMultipleCSSInConditionalComments()
            {
                var testable    = new TestableResponseTransformer();
                var transform   = @"
<link href=""http://server/styles4.ie.css"" rel=""stylesheet"" type=""text/css"" />
<!--[if IE]>
    <link href=""http://server/styles1.ie.css"" rel=""stylesheet"" type=""text/css"" />
    <link href=""http://server/styles2.ie.css"" rel=""stylesheet"" type=""text/css"" />
    <link href=""http://server/styles3.ie.css"" rel=""stylesheet"" type=""text/css"" />
<![endif]-->
<link href=""http://server/styles5.ie.css"" rel=""stylesheet"" type=""text/css"" />";
                var transformed = @"
<link href=""http://server/styles6.ie.css"" rel=""Stylesheet"" type=""text/css"" /><!--[if IE]>
    <link href=""http://server/styles1.ie.css"" rel=""stylesheet"" type=""text/css"" />
    <link href=""http://server/styles2.ie.css"" rel=""stylesheet"" type=""text/css"" />
    <link href=""http://server/styles3.ie.css"" rel=""stylesheet"" type=""text/css"" />
<![endif]-->
";

                testable.Mock <IReductionRepository>().Setup(x => x.FindReduction("http://server/styles4.ie.css::http://server/styles5.ie.css::")).Returns("http://server/styles6.ie.css");
                testable.Mock <HttpContextBase>().Setup(x => x.Request.Url).Returns(new Uri("http://server/megah"));

                var result = testable.ClassUnderTest.Transform(transform);

                Assert.Equal(transformed, result);
            }
            public void WillNotTransformJsIfDisabled()
            {
                var testable    = new TestableResponseTransformer();
                var transform   = @"<head id=""Head1"">
<meta name=""description"" content="""" />
<link href=""http://server/Me.css"" rel=""Stylesheet"" type=""text/css"" />
<link href=""http://server/Me2.css"" rel=""Stylesheet"" type=""text/css"" />
<script src=""http://server/Me.js"" type=""text/javascript"" ></script>
<script src=""http://server/Me2.js"" type=""text/javascript"" ></script>
<title>site</title></head>
                ";
                var transformed = @"<head id=""Head1""><link href=""http://server/Me3.css"" rel=""Stylesheet"" type=""text/css"" />
<meta name=""description"" content="""" />


<script src=""http://server/Me.js"" type=""text/javascript"" ></script>
<script src=""http://server/Me2.js"" type=""text/javascript"" ></script>
<title>site</title></head>
                ";

                testable.Mock <IReductionRepository>().Setup(x => x.FindReduction("http://server/Me.css::http://server/Me2.css::")).Returns("http://server/Me3.css");
                testable.Mock <IReductionRepository>().Setup(x => x.FindReduction("http://server/Me.js::http://server/Me2.js::")).Returns("http://server/Me3.js");
                testable.Mock <HttpContextBase>().Setup(x => x.Request.Url).Returns(new Uri("http://server/megah"));
                testable.Mock <IRRConfiguration>().Setup(x => x.JavaScriptProcessingDisabled).Returns(true);

                var result = testable.ClassUnderTest.Transform(transform);

                Assert.Equal(transformed, result);
            }
            public void WillIgnoreExternalScriptsWithInlineScript()
            {
                var testable    = new TestableResponseTransformer();
                var transform   = @"<script type=""text/javascript"" src=""http://server/Me4.js"">var x=1;</script><script src=""http://server/Me.js"" type=""text/javascript"" ></script><script src=""http://server/Me2.js"" type=""text/javascript"" ></script>";
                var transformed = @"<script type=""text/javascript"" src=""http://server/Me4.js"">var x=1;</script><script src=""http://server/Me3.js"" type=""text/javascript"" ></script>";

                testable.Mock <IReductionRepository>().Setup(x => x.FindReduction("http://server/Me.js::http://server/Me2.js::")).Returns("http://server/Me3.js");
                testable.Mock <HttpContextBase>().Setup(x => x.Request.Url).Returns(new Uri("http://server/megah"));

                var result = testable.ClassUnderTest.Transform(transform);

                Assert.Equal(transformed, result);
            }
            public void WillTransformUrlsInBothSingleAndDoubleQuotes()
            {
                var testable    = new TestableResponseTransformer();
                var transform   = @"<script src=""http://server/Me.js"" type=""text/javascript"" ></script><script src='http://server/Me2.js' type=""text/javascript"" ></script>";
                var transformed = @"<script src=""http://server/Me3.js"" type=""text/javascript"" ></script>";

                testable.Mock <IReductionRepository>().Setup(x => x.FindReduction("http://server/Me.js::http://server/Me2.js::")).Returns("http://server/Me3.js");
                testable.Mock <HttpContextBase>().Setup(x => x.Request.Url).Returns(new Uri("http://server/megah"));

                var result = testable.ClassUnderTest.Transform(transform);

                Assert.Equal(transformed, result);
            }
            public void WillTransformEmptySignatureGuidToEmptyTag()
            {
                var testable    = new TestableResponseTransformer();
                var transform   = @"<script src=""http://server/Me.js"" type=""text/javascript"" ></script>";
                var transformed = string.Empty;

                testable.Mock <IReductionRepository>().Setup(x => x.FindReduction("http://server/Me.js::")).Returns(string.Format("http://host/vpath/{0}-{1}-{2}", Guid.NewGuid().RemoveDashes(), Guid.Empty.RemoveDashes(), new JavaScriptResource().FileName));
                testable.Mock <HttpContextBase>().Setup(x => x.Request.Url).Returns(new Uri("http://server/megah"));
                testable.Mock <IUriBuilder>().Setup(x => x.ParseSignature(It.IsAny <string>())).Returns(Guid.Empty.RemoveDashes());

                var result = testable.ClassUnderTest.Transform(transform);

                Assert.Equal(transformed, result);
            }
            public void WillIgnoreHrefOrSrcAtributesInsideInlineScripts(string attribute)
            {
                var testable  = new TestableResponseTransformer();
                var uri       = new Uri("http://server/megah");
                var transform = string.Format(@"<script type=""text/javascript"" ><a {0}=""abc""></a></script><script src=""http://server/Me.js"" type=""text/javascript"" ></script><script src=""http://server/Me2.js"" type=""text/javascript"" ></script>", attribute);

                testable.Mock <HttpContextBase>().Setup(x => x.Request.Url).Returns(uri);
                testable.Inject <IRelativeToAbsoluteUtility>(new Mock <IRelativeToAbsoluteUtility>().Object);
                testable.Mock <IRelativeToAbsoluteUtility>().Setup(x => x.ToAbsolute(It.IsAny <Uri>(), It.IsAny <string>()))
                .Returns("url");

                testable.ClassUnderTest.Transform(transform);

                testable.Mock <IRelativeToAbsoluteUtility>().Verify(x => x.ToAbsolute(uri, "abc"), Times.Never());
            }
            public void WillTransformScriptsWithLineBreaksBetweenCloseAndEndTags()
            {
                var testable    = new TestableResponseTransformer();
                var transform   = @"<script src=""http://server/Me.js"" type=""text/javascript"" >

</script>";
                var transformed = @"<script src=""http://server/Me3.js"" type=""text/javascript"" ></script>";

                testable.Mock <IReductionRepository>().Setup(x => x.FindReduction("http://server/Me.js::")).Returns("http://server/Me3.js");
                testable.Mock <HttpContextBase>().Setup(x => x.Request.Url).Returns(new Uri("http://server/megah"));

                var result = testable.ClassUnderTest.Transform(transform);

                Assert.Equal(transformed, result);
            }
            public void WillNotTransformInlineJsEmbeddingJs()
            {
                var testable    = new TestableResponseTransformer();
                var transform   = @"
<script src=""//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js""></script>
    <script>window.jQuery || document.write('<script src=""http://server/script.js""><\/script>')</script>";
                var transformed = @"
<script src=""//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js""></script>
    <script>window.jQuery || document.write('<script src=""http://server/script.js""><\/script>')</script>";

                testable.Mock <IReductionRepository>().Setup(x => x.FindReduction("http://server/script.js::")).Returns("http://server/script2.js");
                testable.Mock <HttpContextBase>().Setup(x => x.Request.Url).Returns(new Uri("http://server/megah"));

                var result = testable.ClassUnderTest.Transform(transform);

                Assert.Equal(transformed, result);
            }
            public void WillQueueCssUrlsAppendingMediaIfRepoReturnsNull()
            {
                var testable  = new TestableResponseTransformer();
                var transform = @"<head>
<meta name=""description"" content="""" />
<link href=""http://server/Me.css"" rel=""Stylesheet"" type=""text/css"" media=""print,screen""/>
<link href=""http://server/Me2.css"" rel=""Stylesheet"" type=""text/css"" />
<title>site</title></head>
                ";

                testable.Mock <IReductionRepository>().Setup(
                    x => x.FindReduction("http://server/Me.css|print,screen::http://server/Me2.css::"));
                testable.Mock <HttpContextBase>().Setup(x => x.Request.Url).Returns(new Uri("http://server/megah"));

                testable.ClassUnderTest.Transform(transform);

                testable.Mock <IReducingQueue>().Verify(x => x.Enqueue(It.Is <QueueItem <CssResource> >(y => y.Urls == "http://server/Me.css|print,screen::http://server/Me2.css::")), Times.Once());
            }
            public void WillTransformJsAdjacentToComment()
            {
                var testable    = new TestableResponseTransformer();
                var transform   = @"
<script src=""http://server/Me.js"" type=""text/javascript"" ></script>
    <!-- this is a nice comment -->
<script src=""http://server/Me2.js"" type=""text/javascript"" ></script>
";
                var transformed = @"
<script src=""http://server/Me3.js"" type=""text/javascript"" ></script>    <!-- this is a nice comment -->
";

                testable.Mock <IReductionRepository>().Setup(x => x.FindReduction("http://server/Me.js::http://server/Me2.js::")).Returns("http://server/Me3.js");
                testable.Mock <HttpContextBase>().Setup(x => x.Request.Url).Returns(new Uri("http://server/megah"));

                var result = testable.ClassUnderTest.Transform(transform);

                Assert.Equal(transformed, result);
            }
            public void WillQueueUrlsWithoutHostIfNoContentHost(string contentHost)
            {
                var testable  = new TestableResponseTransformer();
                var transform = @"<head>
<meta name=""description"" content="""" />
<link href=""http://server/Me.css"" rel=""Stylesheet"" type=""text/css"" />
<link href=""http://server/Me2.css"" rel=""Stylesheet"" type=""text/css"" />
<title>site</title></head>
                ";

                testable.Mock <IReductionRepository>().Setup(
                    x => x.FindReduction("http://server/Me.css::http://server/Me2.css::"));
                testable.Mock <HttpContextBase>().Setup(x => x.Request.Url).Returns(new Uri("http://server/megah"));
                testable.Mock <IRRConfiguration>().Setup(x => x.ContentHost).Returns(contentHost);

                testable.ClassUnderTest.Transform(transform);

                testable.Mock <IReducingQueue>().Verify(x => x.Enqueue(It.Is <QueueItem <CssResource> >(y => y.Urls == "http://server/Me.css::http://server/Me2.css::" && y.Host == string.Empty)), Times.Once());
            }
            public void WillTransformToSingleScriptAtBeginningOfHeadOnMatch()
            {
                var testable    = new TestableResponseTransformer();
                var transform   = @"<head id=""Head1"">
<meta name=""description"" content="""" />
<script src=""http://server/Me.js"" type=""text/javascript"" ></script>
<script src=""http://server/Me2.js"" type=""text/javascript"" ></script>
<title>site</title></head>
                ";
                var transformed = @"<head id=""Head1"">
<meta name=""description"" content="""" />
<script src=""http://server/Me3.js"" type=""text/javascript"" ></script><title>site</title></head>
                ";

                testable.Mock <IReductionRepository>().Setup(x => x.FindReduction("http://server/Me.js::http://server/Me2.js::")).Returns("http://server/Me3.js");
                testable.Mock <HttpContextBase>().Setup(x => x.Request.Url).Returns(new Uri("http://server/megah"));

                var result = testable.ClassUnderTest.Transform(transform);

                Assert.Equal(transformed, result);
            }
            public void WillNotTransformCssIgnoredByFilter()
            {
                var testable    = new TestableResponseTransformer();
                var transform   = @"<head id=""Head1"">
<link href=""http://server/Me.css"" rel=""Stylesheet"" type=""text/css"" />
<link href=""http://server/Me2.css"" rel=""Stylesheet"" type=""text/css"" />
<link href=""http://server/Me3.css"" rel=""Stylesheet"" type=""text/css"" /></head>
                ";
                var transformed = @"<head id=""Head1"">
<link href=""http://server/Me4.css"" rel=""Stylesheet"" type=""text/css"" /><link href=""http://server/Me3.css"" rel=""Stylesheet"" type=""text/css"" /></head>
                ";

                testable.Mock <IReductionRepository>().Setup(x => x.FindReduction("http://server/Me.css::http://server/Me2.css::")).Returns("http://server/Me4.css");
                testable.Mock <HttpContextBase>().Setup(x => x.Request.Url).Returns(new Uri("http://server/megah"));
                Registry.AddFilter(new CssFilter(x => x.FilteredUrl.Contains("3")));

                var result = testable.ClassUnderTest.Transform(transform);

                Assert.Equal(transformed, result);
                RRContainer.Current = null;
            }
            public void WillNotMergeScriptsIntermingledWitIgnoredScriptsInorderToMaintainScriptOrder()
            {
                var testable    = new TestableResponseTransformer();
                var transform   = @"<script src=""http://server/Me.js"" type=""text/javascript"" ></script><script src=""http://server/Me2.js"" type=""text/javascript"" ></script><script src=""http://server/ignore/Me.js"" type=""text/javascript"" ></script>
<script src=""http://server/Me3.js"" type=""text/javascript"" ></script><script src=""http://server/Me4.js"" type=""text/javascript"" ></script>";
                var transformed = @"<script src=""http://server/Me5.js"" type=""text/javascript"" ></script><script src=""http://server/ignore/Me.js"" type=""text/javascript"" ></script>
<script src=""http://server/Me6.js"" type=""text/javascript"" ></script>";

                testable.Mock <IReductionRepository>().Setup(x => x.FindReduction("http://server/Me.js::http://server/Me2.js::")).Returns("http://server/Me5.js");
                testable.Mock <IReductionRepository>().Setup(x => x.FindReduction("http://server/Me3.js::http://server/Me4.js::")).Returns("http://server/Me6.js");
                testable.Mock <HttpContextBase>().Setup(x => x.Request.Url).Returns(new Uri("http://server/megah"));
                var config = new Mock <IRRConfiguration>();

                config.Setup(x => x.JavaScriptUrlsToIgnore).Returns("server/Ignore, server/alsoignore");
                RRContainer.Current = new Container(x => x.For <IRRConfiguration>().Use(config.Object));

                var result = testable.ClassUnderTest.Transform(transform);

                Assert.Equal(transformed, result);
                RRContainer.Current = null;
            }
            public void WillNotPlaceTransformedCssInsideConditionallyCommentedScriptBlock()
            {
                var testable    = new TestableResponseTransformer();
                var transform   = @"<head id=""Head1"">
<!--[if IE 6]><script src=""http://server/Me.js""></script>
<script src=""http://server/Me4.js""></script><![endif]-->
<link href=""http://server/Me.css"" rel=""Stylesheet"" type=""text/css"" />
<link href=""http://server/Me2.css"" rel=""Stylesheet"" type=""text/css"" /></head>
                ";
                var transformed = @"<head id=""Head1"">
<!--[if IE 6]><script src=""http://server/Me.js""></script>
<script src=""http://server/Me4.js""></script><![endif]-->
<link href=""http://server/Me3.css"" rel=""Stylesheet"" type=""text/css"" /></head>
                ";

                testable.Mock <IReductionRepository>().Setup(x => x.FindReduction("http://server/Me.css::http://server/Me2.css::")).Returns("http://server/Me3.css");
                testable.Mock <HttpContextBase>().Setup(x => x.Request.Url).Returns(new Uri("http://server/megah"));

                var result = testable.ClassUnderTest.Transform(transform);

                Assert.Equal(transformed, result);
                RRContainer.Current = null;
            }
            public void WillInjectCssCorrectlyWhenCommentsAreBeforeScripts()
            {
                var testable    = new TestableResponseTransformer();
                var transform   = @"
<!-- this is a nice comment -->
<script src=""http://server/ignore/Me.js"" type=""text/javascript"" ></script>
<link href=""http://server/Me.css"" rel=""Stylesheet"" type=""text/css"" />
";
                var transformed = @"
<!-- this is a nice comment -->
<link href=""http://server/Me2.css"" rel=""Stylesheet"" type=""text/css"" /><script src=""http://server/ignore/Me.js"" type=""text/javascript"" ></script>
";
                var config      = new Mock <IRRConfiguration>();

                config.Setup(x => x.JavaScriptUrlsToIgnore).Returns("server/Ignore");
                RRContainer.Current = new Container(x => x.For <IRRConfiguration>().Use(config.Object));
                testable.Mock <IReductionRepository>().Setup(x => x.FindReduction("http://server/Me.css::")).Returns("http://server/Me2.css");
                testable.Mock <HttpContextBase>().Setup(x => x.Request.Url).Returns(new Uri("http://server/megah"));

                var result = testable.ClassUnderTest.Transform(transform);

                Assert.Equal(transformed, result);
                RRContainer.Current = null;
            }