public void CanBundleDirectoryContentsInDebug_Ignores_Duplicates() { var path = Guid.NewGuid().ToString(); var file1 = TestUtilities.PrepareRelativePath(path + "\\file1.css"); var file2 = TestUtilities.PrepareRelativePath(path + "\\file2.css"); using (new ResolverFactoryScope(typeof(SquishIt.Framework.Resolvers.FileSystemResolver).FullName, StubResolver.ForDirectory(new[] { file1, file2 }))) { var frf = new StubFileReaderFactory(); frf.SetContentsForFile(file1, css2); frf.SetContentsForFile(file2, css); var writerFactory = new StubFileWriterFactory(); var tag = cssBundleFactory.WithDebuggingEnabled(true) .WithFileReaderFactory(frf) .WithFileWriterFactory(writerFactory) .WithHasher(new StubHasher("hashy")) .Create() .Add(path) .Render("~/output.css"); var expectedTag = string.Format("<link rel=\"stylesheet\" type=\"text/css\" href=\"/{0}/file1.css\" />\n<link rel=\"stylesheet\" type=\"text/css\" href=\"/{0}/file2.css\" />\n", path); Assert.AreEqual(expectedTag, TestUtilities.NormalizeLineEndings(tag)); } }
public void SetUp() { var nonDebugStatusReader = new StubDebugStatusReader(false); jsFileWriterFactory = new StubFileWriterFactory(); jsFileReaderFactory = new StubFileReaderFactory(); cssFileWriterFactory = new StubFileWriterFactory(); cssFileReaderFactory = new StubFileReaderFactory(); jsFileReaderFactory.SetContents(javaScript); jsFileReaderFactory.SetPackagedFileNameExists(true); jsFileReaderFactory.SetPackagedFileName("/myfilename_combined_3_234448i484884844848848484484844848.js"); cssFileReaderFactory.SetContents(css); cssFileReaderFactory.SetPackagedFileNameExists(true); cssFileReaderFactory.SetPackagedFileName("/myfilename_combined_3_234448i484884844848848484484844848.css"); javaScriptBundle = new JavaScriptBundle(nonDebugStatusReader, jsFileWriterFactory, jsFileReaderFactory); javaScriptBundle2 = new JavaScriptBundle(nonDebugStatusReader, jsFileWriterFactory, jsFileReaderFactory); cssBundle = new CssBundle(nonDebugStatusReader, cssFileWriterFactory, cssFileReaderFactory); Bundle.PackageJavaScript = true; Bundle.PackageCss = true; }
public void CanBundleCssWithLessAndPathRewrites() { var mockDebugStatusReader = new StubDebugStatusReader(false); var mockFileWriterFactory = new StubFileWriterFactory(); var mockFileReaderFactory = new StubFileReaderFactory(); string css = @"@brand_color: #4D926F; #header { color: @brand_color; background-image: url(../image/mygif.gif); } "; mockFileReaderFactory.SetContents(css); ICssBundle cssBundle = new CssBundle(mockDebugStatusReader, mockFileWriterFactory, mockFileReaderFactory); string tag = cssBundle .Add("~/css/something/test.less") .Render("~/css/output_less_with_rewrites.css"); string contents = mockFileWriterFactory.Files[@"C:\css\output_less_with_rewrites.css"]; Assert.AreEqual("#header{color:#4d926f;background-image:URL(image/mygif.gif);}", contents); }
public void CanBundleDirectoryContentsInDebug_Ignores_Duplicates() { var path = Guid.NewGuid().ToString(); var file1 = TestUtilities.PreparePath(Environment.CurrentDirectory + "\\" + path + "\\file1.js"); var file2 = TestUtilities.PreparePath(Environment.CurrentDirectory + "\\" + path + "\\file2.js"); using (new ResolverFactoryScope(typeof(SquishIt.Framework.Resolvers.FileSystemResolver).FullName, StubResolver.ForDirectory(new[] { file1, file2 }))) { var frf = new StubFileReaderFactory(); frf.SetContentsForFile(file1, javaScript2.Replace("sum", "replace")); frf.SetContentsForFile(file2, javaScript); var writerFactory = new StubFileWriterFactory(); var tag = new JavaScriptBundleFactory() .WithDebuggingEnabled(true) .WithFileReaderFactory(frf) .WithFileWriterFactory(writerFactory) .WithHasher(new StubHasher("hashy")) .Create() .Add(path) .Add(file1) .Render("~/output.js"); var expectedTag = string.Format("<script type=\"text/javascript\" src=\"/{0}/file1.js\"></script>\n<script type=\"text/javascript\" src=\"/{0}/file2.js\"></script>\n", path); Assert.AreEqual(expectedTag, TestUtilities.NormalizeLineEndings(tag)); } }
public void CanBundleArbitraryContentsInRelease() { var css2Format = "{0}{1}"; var hrColor = "hr {color:sienna;}"; var p = "p {margin-left:20px;}"; var writerFactory = new StubFileWriterFactory(); var tag = new CssBundleFactory() .WithDebuggingEnabled(false) .WithFileWriterFactory(writerFactory) .WithHasher(new StubHasher("hashy")) .Create() .AddString(css) .AddString(css2Format, hrColor, p) .Render("~/output.css"); var expectedTag = "<link rel=\"stylesheet\" type=\"text/css\" href=\"output.css?r=hashy\" />"; Assert.AreEqual(expectedTag, TestUtilities.NormalizeLineEndings(tag)); var minifiedScript = "li{margin-bottom:.1em;margin-left:0;margin-top:.1em}th{font-weight:normal;vertical-align:bottom}.FloatRight{float:right}.FloatLeft{float:left}hr{color:#a0522d}p{margin-left:20px}"; Assert.AreEqual(minifiedScript, writerFactory.Files[TestUtilities.PrepareRelativePath("output.css")]); }
public void CanBundleDirectoryContentsInRelease_Ignores_Duplicates() { var path = Guid.NewGuid().ToString(); var file1 = TestUtilities.PrepareRelativePath(path + "\\file1.css"); var file2 = TestUtilities.PrepareRelativePath(path + "\\file2.css"); using (new ResolverFactoryScope(typeof(SquishIt.Framework.Resolvers.FileSystemResolver).FullName, StubResolver.ForDirectory(new[] { file1, file2 }))) { var frf = new StubFileReaderFactory(); frf.SetContentsForFile(file1, css2); frf.SetContentsForFile(file2, css); var writerFactory = new StubFileWriterFactory(); var tag = cssBundleFactory.WithDebuggingEnabled(false) .WithFileReaderFactory(frf) .WithFileWriterFactory(writerFactory) .WithHasher(new StubHasher("hashy")) .Create() .Add(path) .Add(file1) .Render("~/output.css"); var expectedTag = "<link rel=\"stylesheet\" type=\"text/css\" href=\"output.css?r=hashy\" />"; Assert.AreEqual(expectedTag, tag); var combined = "li{margin-bottom:.1em;margin-left:0;margin-top:.1em}th{font-weight:normal;vertical-align:bottom}li{margin-bottom:.1em;margin-left:0;margin-top:.1em}th{font-weight:normal;vertical-align:bottom}.FloatRight{float:right}.FloatLeft{float:left}"; Assert.AreEqual(combined, writerFactory.Files[TestUtilities.PrepareRelativePath(@"output.css")]); } }
public void CanRenderCssFileWithImportStatementUppercase() { string importCss = @" @IMPORT URL(/css/other.css); #header { color: #4D926F; }"; var mockDebugStatusReader = new StubDebugStatusReader(false); var mockFileWriterFactory = new StubFileWriterFactory(); var mockFileReaderFactory = new StubFileReaderFactory(); mockFileReaderFactory.SetContents(importCss); mockFileReaderFactory.SetContentsForFile(@"C:\css\other.css", "#footer{color:#ffffff;}"); ICssBundle cssBundle = new CssBundle(mockDebugStatusReader, mockFileWriterFactory, mockFileReaderFactory); string tag = cssBundle .Add("/css/first.css") .ProcessImports() .Render("/css/processed_import_uppercase.css"); Assert.AreEqual("#footer{color:#fff;}#header{color:#4D926F;}", mockFileWriterFactory.Files[@"C:\css\processed_import_uppercase.css"]); }
public void CanBundleDirectoryContentsInRelease_Ignores_Duplicates() { var path = Guid.NewGuid().ToString(); var file1 = TestUtilities.PrepareRelativePath(path + "\\file1.js"); var file2 = TestUtilities.PrepareRelativePath(path + "\\file2.js"); using (new ResolverFactoryScope(typeof(SquishIt.Framework.Resolvers.FileSystemResolver).FullName, StubResolver.ForDirectory(new[] { file1, file2 }))) { var frf = new StubFileReaderFactory(); frf.SetContentsForFile(file1, javaScript2.Replace("sum", "replace")); frf.SetContentsForFile(file2, javaScript); var writerFactory = new StubFileWriterFactory(); var tag = new JavaScriptBundleFactory() .WithDebuggingEnabled(false) .WithFileReaderFactory(frf) .WithFileWriterFactory(writerFactory) .WithHasher(new StubHasher("hashy")) .Create() .Add(path) .Add(file1) .Render("~/output.js"); var expectedTag = "<script type=\"text/javascript\" src=\"output.js?r=hashy\"></script>"; Assert.AreEqual(expectedTag, tag); var combined = "function replace(n,t){return n+t}function product(n,t){return n*t}function sum(n,t){return n+t}"; Assert.AreEqual(combined, writerFactory.Files[TestUtilities.PrepareRelativePath(@"output.js")]); } }
public void CanRenderCssFileWithUnprocessedImportStatement() { string importCss = @" @import url(""/css/other.css""); #header { color: #4D926F; }"; var mockDebugStatusReader = new StubDebugStatusReader(false); var mockFileWriterFactory = new StubFileWriterFactory(); var mockFileReaderFactory = new StubFileReaderFactory(); mockFileReaderFactory.SetContents(importCss); mockFileReaderFactory.SetContentsForFile(@"C:\css\other.css", "#footer{color:#ffffff;}"); ICssBundle cssBundle = new CssBundle(mockDebugStatusReader, mockFileWriterFactory, mockFileReaderFactory); cssBundle .Add("/css/first.css") .Render("/css/unprocessed_import.css"); Assert.AreEqual(@"@import url(""/css/other.css"");#header{color:#4D926F;}", mockFileWriterFactory.Files[@"C:\css\unprocessed_import.css"]); }
public void CanMaintainOrderBetweenArbitraryAndFileAssetsInDebug() { var file1 = "somefile.js"; var file2 = "anotherfile.js"; var subtract = "function sub(a,b){return a-b}"; var readerFactory = new StubFileReaderFactory(); readerFactory.SetContentsForFile(TestUtilities.PrepareRelativePath(file1), javaScript); readerFactory.SetContentsForFile(TestUtilities.PrepareRelativePath(file2), javaScript2); var writerFactory = new StubFileWriterFactory(); var tag = new JavaScriptBundleFactory() .WithFileReaderFactory(readerFactory) .WithFileWriterFactory(writerFactory) .WithDebuggingEnabled(true) .Create() .Add(file1) .AddString(subtract) .Add(file2) .Render("test.js"); var expectedTag = string.Format("<script type=\"text/javascript\" src=\"somefile.js\"></script>\n<script type=\"text/javascript\">{0}</script>\n<script type=\"text/javascript\" src=\"anotherfile.js\"></script>\n" , subtract); Assert.AreEqual(expectedTag, TestUtilities.NormalizeLineEndings(tag)); }
public void CanRenderOnlyIfFileMissing() { var mockDebugStatusReader = new StubDebugStatusReader(false); var mockFileWriterFactory = new StubFileWriterFactory(); var mockFileReaderFactory = new StubFileReaderFactory(); mockFileReaderFactory.SetContents(css); mockFileReaderFactory.SetFileExists(false); ICssBundle cssBundle = new CssBundle(mockDebugStatusReader, mockFileWriterFactory, mockFileReaderFactory); cssBundle .Add("/css/first.css") .RenderOnlyIfOutputFileMissing() .Render("~/css/can_render_only_if_file_missing.css"); Assert.AreEqual("li{margin-bottom:.1em;margin-left:0;margin-top:.1em;}th{font-weight:normal;vertical-align:bottom;}.FloatRight{float:right;}.FloatLeft{float:left;}", mockFileWriterFactory.Files[@"C:\css\can_render_only_if_file_missing.css"]); mockFileReaderFactory.SetContents(css2); mockFileReaderFactory.SetFileExists(true); cssBundle.ClearCache(); cssBundle .Add("/css/first.css") .RenderOnlyIfOutputFileMissing() .Render("~/css/can_render_only_if_file_missing.css"); Assert.AreEqual("li{margin-bottom:.1em;margin-left:0;margin-top:.1em;}th{font-weight:normal;vertical-align:bottom;}.FloatRight{float:right;}.FloatLeft{float:left;}", mockFileWriterFactory.Files[@"C:\css\can_render_only_if_file_missing.css"]); }
public void Setup() { var nonDebugStatusReader = new StubDebugStatusReader(false); var debugStatusReader = new StubDebugStatusReader(true); fileWriterFactory = new StubFileWriterFactory(); fileReaderFactory = new StubFileReaderFactory(); fileReaderFactory.SetContents(javaScript); javaScriptBundle = new JavaScriptBundle(nonDebugStatusReader, fileWriterFactory, fileReaderFactory); javaScriptBundle2 = new JavaScriptBundle(nonDebugStatusReader, fileWriterFactory, fileReaderFactory); debugJavaScriptBundle = new JavaScriptBundle(debugStatusReader, fileWriterFactory, fileReaderFactory); debugJavaScriptBundle2 = new JavaScriptBundle(debugStatusReader, fileWriterFactory, fileReaderFactory); }
public void CanRenderDebugTagsTwice() { var mockDebugStatusReader = new StubDebugStatusReader(true); var mockFileWriterFactory = new StubFileWriterFactory(); var mockFileReaderFactory = new StubFileReaderFactory(); mockFileReaderFactory.SetContents(css); ICssBundle cssBundle1 = new CssBundle(mockDebugStatusReader, mockFileWriterFactory, mockFileReaderFactory); ICssBundle cssBundle2 = new CssBundle(mockDebugStatusReader, mockFileWriterFactory, mockFileReaderFactory); string tag1 = cssBundle1 .Add("/css/first.css") .Add("/css/second.css") .Render("/css/output.css"); string tag2 = cssBundle2 .Add("/css/first.css") .Add("/css/second.css") .Render("/css/output.css"); Assert.AreEqual(tag1, "<link rel=\"stylesheet\" type=\"text/css\" href=\"/css/first.css\" /><link rel=\"stylesheet\" type=\"text/css\" href=\"/css/second.css\" />"); Assert.AreEqual(tag2, "<link rel=\"stylesheet\" type=\"text/css\" href=\"/css/first.css\" /><link rel=\"stylesheet\" type=\"text/css\" href=\"/css/second.css\" />"); }
public void CanBundleDirectoryContentsInDebug() { var path = Guid.NewGuid().ToString(); var file1 = TestUtilities.PreparePath (Environment.CurrentDirectory + "\\" + path + "\\file1.js"); var file2 = TestUtilities.PreparePath(Environment.CurrentDirectory + "\\" + path + "\\file2.js"); using (new ResolverFactoryScope(typeof(SquishIt.Framework.Resolvers.FileSystemResolver).FullName, StubResolver.ForDirectory(new[] { file1, file2 }))) { var frf = new StubFileReaderFactory(); frf.SetContentsForFile(file1, javaScript2.Replace("sum", "replace")); frf.SetContentsForFile(file2, javaScript); var writerFactory = new StubFileWriterFactory(); var tag = new JavaScriptBundleFactory() .WithDebuggingEnabled(true) .WithFileReaderFactory(frf) .WithFileWriterFactory(writerFactory) .WithHasher(new StubHasher("hashy")) .Create() .Add(path) .Render("~/output.js"); var expectedTag = string.Format("<script type=\"text/javascript\" src=\"{0}/file1.js\"></script>\n<script type=\"text/javascript\" src=\"{0}/file2.js\"></script>\n", path); Assert.AreEqual(expectedTag, TestUtilities.NormalizeLineEndings(tag)); } }
public void CanBundleJavascriptInReleaseWithArbitraryHogan(Type preprocessorType) { var preprocessor = Activator.CreateInstance(preprocessorType) as IPreprocessor; const string template = "<h1>{{message}}</h1>"; var writerFactory = new StubFileWriterFactory(); string tag; tag = javaScriptBundleFactory .WithFileWriterFactory(writerFactory) .WithDebuggingEnabled(false) .Create() .WithPreprocessor(preprocessor) .AddString(template, ".hogan.html") .Render("~/template.js"); //are minifier's optimizations here OK? var compiled = @"var JST=JST||{};JST.dummy=new Hogan.Template("; Assert.AreEqual(1, writerFactory.Files.Count); var expectedTag = "<script type=\"text/javascript\" src=\"template.js?r=hash\"></script>"; Assert.AreEqual(expectedTag, TestUtilities.NormalizeLineEndings(tag)); var actual = writerFactory.Files[TestUtilities.PrepareRelativePath("template.js")]; Assert.IsTrue(actual.StartsWith(compiled)); }
public void CanBundleArbitraryContentsInRelease() { var js2Format = "{0}{1}"; var subtract = "function sub(a,b){return a-b}"; var divide = "function div(a,b){return a/b}"; var writerFactory = new StubFileWriterFactory(); var tag = new JavaScriptBundleFactory() .WithDebuggingEnabled(false) .WithFileWriterFactory(writerFactory) .WithHasher(new StubHasher("hashy")) .Create() .AddString(javaScript) .AddString(js2Format, subtract, divide) .Render("~/output.js"); var expectedTag = "<script type=\"text/javascript\" src=\"output.js?r=hashy\"></script>"; Assert.AreEqual(expectedTag, TestUtilities.NormalizeLineEndings(tag)); var minifiedScript = "function product(n,t){return n*t}function sum(n,t){return n+t}function sub(n,t){return n-t}function div(n,t){return n/t}"; Assert.AreEqual(minifiedScript, writerFactory.Files[TestUtilities.PrepareRelativePath(@"output.js")]); }
public void Setup() { var nonDebugStatusReader = new StubDebugStatusReader(false); var debugStatusReader = new StubDebugStatusReader(true); fileWriterFactory = new StubFileWriterFactory(); fileReaderFactory = new StubFileReaderFactory(); currentDirectoryWrapper = new StubCurrentDirectoryWrapper(); stubBundleCache = new StubBundleCache(); var retryableFileOpener = new RetryableFileOpener(); hasher = new Hasher(retryableFileOpener); fileReaderFactory.SetContents(javaScript); javaScriptBundle = new JavaScriptBundle(nonDebugStatusReader, fileWriterFactory, fileReaderFactory, currentDirectoryWrapper, hasher, stubBundleCache); javaScriptBundle2 = new JavaScriptBundle(nonDebugStatusReader, fileWriterFactory, fileReaderFactory, currentDirectoryWrapper, hasher, stubBundleCache); debugJavaScriptBundle = new JavaScriptBundle(debugStatusReader, fileWriterFactory, fileReaderFactory, currentDirectoryWrapper, hasher, stubBundleCache); debugJavaScriptBundle2 = new JavaScriptBundle(debugStatusReader, fileWriterFactory, fileReaderFactory, currentDirectoryWrapper, hasher, stubBundleCache); }
public void CanBundleCssWithQueryStringParameter() { var mockDebugStatusReader = new StubDebugStatusReader(false); var mockFileWriterFactory = new StubFileWriterFactory(); var mockFileReaderFactory = new StubFileReaderFactory(); mockFileReaderFactory.SetContents(css); ICssBundle cssBundle = new CssBundle(mockDebugStatusReader, mockFileWriterFactory, mockFileReaderFactory); string tag = cssBundle .Add("/css/first.css") .Add("/css/second.css") .Render("/css/output_querystring.css?v=1"); Assert.AreEqual("<link rel=\"stylesheet\" type=\"text/css\" href=\"/css/output_querystring.css?v=1&r=AE4C10DB94E5420AD54BD0A0BE9F02C2\" />", tag); }
public void CanRenderDebugTagsWithMediaAttribute() { var mockDebugStatusReader = new StubDebugStatusReader(true); var mockFileWriterFactory = new StubFileWriterFactory(); var mockFileReaderFactory = new StubFileReaderFactory(); mockFileReaderFactory.SetContents(css); ICssBundle cssBundle = new CssBundle(mockDebugStatusReader, mockFileWriterFactory, mockFileReaderFactory); string tag = cssBundle .Add("/css/first.css") .Add("/css/second.css") .WithMedia("screen") .Render("/css/output.css"); Assert.AreEqual(tag, "<link rel=\"stylesheet\" type=\"text/css\" media=\"screen\" href=\"/css/first.css\" /><link rel=\"stylesheet\" type=\"text/css\" media=\"screen\" href=\"/css/second.css\" />"); }
public void CanBundleCss() { var mockDebugStatusReader = new StubDebugStatusReader(false); var mockFileWriterFactory = new StubFileWriterFactory(); var mockFileReaderFactory = new StubFileReaderFactory(); mockFileReaderFactory.SetContents(css); ICssBundle cssBundle = new CssBundle(mockDebugStatusReader, mockFileWriterFactory, mockFileReaderFactory); string tag = cssBundle .Add("/css/first.css") .Add("/css/second.css") .Render("/css/output.css"); Assert.AreEqual("<link rel=\"stylesheet\" type=\"text/css\" href=\"/css/output.css?r=C33D1225DED9D889876CEE87754EE305\" />", tag); Assert.AreEqual(1, mockFileWriterFactory.Files.Count); Assert.AreEqual("li{margin-bottom:.1em;margin-left:0;margin-top:.1em}th{font-weight:normal;vertical-align:bottom}.FloatRight{float:right}.FloatLeft{float:left}li{margin-bottom:.1em;margin-left:0;margin-top:.1em}th{font-weight:normal;vertical-align:bottom}.FloatRight{float:right}.FloatLeft{float:left}", mockFileWriterFactory.Files[@"C:\css\output.css"]); }
public void CanBundleJavascriptInDebug(Type preprocessorType) { var preprocessor = Activator.CreateInstance(preprocessorType) as IPreprocessor; const string template = "<h1>{{message}}</h1>"; var templateFileName = "test.hogan.html"; var resolver = StubResolver.ForFile(TestUtilities.PrepareRelativePath(templateFileName)); var readerFactory = new StubFileReaderFactory(); readerFactory.SetContentsForFile(TestUtilities.PrepareRelativePath(templateFileName), template); var writerFactory = new StubFileWriterFactory(); string tag; using (new ResolverFactoryScope(typeof(FileSystemResolver).FullName, resolver)) { tag = javaScriptBundleFactory .WithFileReaderFactory(readerFactory) .WithFileWriterFactory(writerFactory) .WithDebuggingEnabled(true) .Create() .WithPreprocessor(preprocessor) .Add("~/" + templateFileName) .Render("~/template.js"); } var sb = new StringBuilder(); sb.AppendLine(@"var JST = JST || {};"); sb.AppendLine(@"JST['test'] = new Hogan.Template(function(c,p,i){var _=this;_.b(i=i||"""");_.b(""<h1>"");_.b(_.v(_.f(""message"",c,p,0)));_.b(""</h1>"");return _.fl();;},""" + template + "\",Hogan,{});"); var compiled = sb.ToString(); Assert.AreEqual(1, writerFactory.Files.Count); var expectedTag = "<script type=\"text/javascript\" src=\"test.hogan.html.squishit.debug.js\"></script>\n"; Assert.AreEqual(expectedTag, TestUtilities.NormalizeLineEndings(tag)); Assert.AreEqual(compiled, writerFactory.Files[TestUtilities.PrepareRelativePath("test.hogan.html.squishit.debug.js")]); }
public void CanBundleJavascriptInRelease(Type preprocessorType) { var preprocessor = Activator.CreateInstance(preprocessorType) as IPreprocessor; const string template = "<h1>{{message}}</h1>"; var templateFileName = "test.hogan.html"; var resolver = StubResolver.ForFile(TestUtilities.PrepareRelativePath(templateFileName)); var readerFactory = new StubFileReaderFactory(); readerFactory.SetContentsForFile(TestUtilities.PrepareRelativePath(templateFileName), template); var writerFactory = new StubFileWriterFactory(); string tag; using (new ResolverFactoryScope(typeof(FileSystemResolver).FullName, resolver)) { tag = javaScriptBundleFactory .WithFileReaderFactory(readerFactory) .WithFileWriterFactory(writerFactory) .WithDebuggingEnabled(false) .Create() .WithPreprocessor(preprocessor) .Add("~/" + templateFileName) .Render("~/template.js"); } //are minifier's optimizations here OK? var compiled = @"var JST=JST||{};JST.test=new Hogan.Template(function(n,t,i){var r=this;return r.b(i=i||""""),r.b(""<h1>""),r.b(r.v(r.f(""message"",n,t,0))),r.b(""<\/h1>""),r.fl()},""" + template.Replace("/", @"\/") + "\",Hogan,{});"; Assert.AreEqual(1, writerFactory.Files.Count); var expectedTag = "<script type=\"text/javascript\" src=\"template.js?r=hash\"></script>"; Assert.AreEqual(expectedTag, TestUtilities.NormalizeLineEndings(tag)); var actual = writerFactory.Files[TestUtilities.PrepareRelativePath("template.js")]; Assert.AreEqual(compiled + "\n", actual); }
public void CanCreateNamedBundleWithDebug() { var mockDebugStatusReader = new StubDebugStatusReader(true); var mockFileWriterFactory = new StubFileWriterFactory(); var mockFileReaderFactory = new StubFileReaderFactory(); mockFileReaderFactory.SetContents(css); ICssBundle cssBundle = new CssBundle(mockDebugStatusReader, mockFileWriterFactory, mockFileReaderFactory); cssBundle .Add("~/css/temp1.css") .Add("~/css/temp2.css") .AsNamed("TestWithDebug", "~/css/output.css"); string tag = cssBundle.RenderNamed("TestWithDebug"); Assert.AreEqual("<link rel=\"stylesheet\" type=\"text/css\" href=\"css/temp1.css\" /><link rel=\"stylesheet\" type=\"text/css\" href=\"css/temp2.css\" />", tag); }
public void CanBundleCssWithLessWithLessDotCssFileExtension() { var mockDebugStatusReader = new StubDebugStatusReader(false); var mockFileWriterFactory = new StubFileWriterFactory(); var mockFileReaderFactory = new StubFileReaderFactory(); mockFileReaderFactory.SetContents(cssLess); ICssBundle cssBundle = new CssBundle(mockDebugStatusReader, mockFileWriterFactory, mockFileReaderFactory); string tag = cssBundle .Add("~/css/test.less.css") .Render("~/css/output_less_dot_css.css"); string contents = mockFileWriterFactory.Files[@"C:\css\output_less_dot_css.css"]; Assert.AreEqual("<link rel=\"stylesheet\" type=\"text/css\" href=\"css/output_less_dot_css.css?r=350F6DC1A87E2503EE6D4AE414C4A479\" />", tag); Assert.AreEqual("#header,h2{color:#4d926f;}", contents); }
public void CanBundleCssWithCompressorAttribute() { var mockDebugStatusReader = new StubDebugStatusReader(false); var mockFileWriterFactory = new StubFileWriterFactory(); var mockFileReaderFactory = new StubFileReaderFactory(); mockFileReaderFactory.SetContents(css); ICssBundle cssBundle = new CssBundle(mockDebugStatusReader, mockFileWriterFactory, mockFileReaderFactory); string tag = cssBundle .Add("/css/first.css") .Add("/css/second.css") .WithCompressor(CssCompressors.YuiCompressor) .Render("/css/css_with_compressor_output.css"); Assert.AreEqual("<link rel=\"stylesheet\" type=\"text/css\" href=\"/css/css_with_compressor_output.css?r=AE4C10DB94E5420AD54BD0A0BE9F02C2\" />", tag); Assert.AreEqual(1, mockFileWriterFactory.Files.Count); Assert.AreEqual("li{margin-bottom:.1em;margin-left:0;margin-top:.1em;}th{font-weight:normal;vertical-align:bottom;}.FloatRight{float:right;}.FloatLeft{float:left;}li{margin-bottom:.1em;margin-left:0;margin-top:.1em;}th{font-weight:normal;vertical-align:bottom;}.FloatRight{float:right;}.FloatLeft{float:left;}", mockFileWriterFactory.Files[@"C:\css\css_with_compressor_output.css"]); }
public void CanBundleCss() { var mockDebugStatusReader = new StubDebugStatusReader(false); var mockFileWriterFactory = new StubFileWriterFactory(); var mockFileReaderFactory = new StubFileReaderFactory(); mockFileReaderFactory.SetContents(css); ICssBundle cssBundle = new CssBundle(mockDebugStatusReader, mockFileWriterFactory, mockFileReaderFactory); string tag = cssBundle .Add("/css/first.css") .Add("/css/second.css") .Render("/css/output.css"); Assert.AreEqual("<link rel=\"stylesheet\" type=\"text/css\" href=\"/css/output.css?r=AE4C10DB94E5420AD54BD0A0BE9F02C2\" />", tag); Assert.AreEqual(1, mockFileWriterFactory.Files.Count); Assert.AreEqual("li{margin-bottom:.1em;margin-left:0;margin-top:.1em;}th{font-weight:normal;vertical-align:bottom;}.FloatRight{float:right;}.FloatLeft{float:left;}li{margin-bottom:.1em;margin-left:0;margin-top:.1em;}th{font-weight:normal;vertical-align:bottom;}.FloatRight{float:right;}.FloatLeft{float:left;}", mockFileWriterFactory.Files[@"C:\css\output.css"]); }
public void CanCreateNamedBundle() { var mockDebugStatusReader = new StubDebugStatusReader(false); var mockFileWriterFactory = new StubFileWriterFactory(); var mockFileReaderFactory = new StubFileReaderFactory(); mockFileReaderFactory.SetContents(css); ICssBundle cssBundle = new CssBundle(mockDebugStatusReader, mockFileWriterFactory, mockFileReaderFactory); cssBundle .Add("~/css/temp.css") .AsNamed("Test", "~/css/output.css"); string tag = cssBundle.RenderNamed("Test"); Assert.AreEqual("li{margin-bottom:.1em;margin-left:0;margin-top:.1em;}th{font-weight:normal;vertical-align:bottom;}.FloatRight{float:right;}.FloatLeft{float:left;}", mockFileWriterFactory.Files[@"C:\css\output.css"]); Assert.AreEqual("<link rel=\"stylesheet\" type=\"text/css\" href=\"css/output.css?r=A757BD759BA228D91481798C2C49A8DC\" />", tag); }
public void CanBundleCssWithNullCompressorAttribute() { var mockDebugStatusReader = new StubDebugStatusReader(false); var mockFileWriterFactory = new StubFileWriterFactory(); var mockFileReaderFactory = new StubFileReaderFactory(); mockFileReaderFactory.SetContents(css); ICssBundle cssBundle = new CssBundle(mockDebugStatusReader, mockFileWriterFactory, mockFileReaderFactory); string tag = cssBundle .Add("/css/first.css") .Add("/css/second.css") .WithCompressor(CssCompressors.NullCompressor) .Render("/css/css_with_null_compressor_output.css"); Assert.AreEqual("<link rel=\"stylesheet\" type=\"text/css\" href=\"/css/css_with_null_compressor_output.css?r=9650CBE3E753DF5F9146A2AF738A8272\" />", tag); Assert.AreEqual(1, mockFileWriterFactory.Files.Count); Assert.AreEqual(css + css, mockFileWriterFactory.Files[@"C:\css\css_with_null_compressor_output.css"]); }
public void SetUp() { var nonDebugStatusReader = new StubDebugStatusReader(false); var debugStatusReader = new StubDebugStatusReader(true); fileWriterFactory = new StubFileWriterFactory(); fileReaderFactory = new StubFileReaderFactory(); fileReaderFactory.SetContents(javaScript); javaScriptBundle = new JavaScriptBundle(nonDebugStatusReader, fileWriterFactory, fileReaderFactory); javaScriptBundle2 = new JavaScriptBundle(nonDebugStatusReader, fileWriterFactory, fileReaderFactory); debugJavaScriptBundle = new JavaScriptBundle(debugStatusReader, fileWriterFactory, fileReaderFactory); debugJavaScriptBundle2 = new JavaScriptBundle(debugStatusReader, fileWriterFactory, fileReaderFactory); }
public void CanBundleCssWithLessAndPathRewrites() { var mockDebugStatusReader = new StubDebugStatusReader(false); var mockFileWriterFactory = new StubFileWriterFactory(); var mockFileReaderFactory = new StubFileReaderFactory(); string css = @"@brand_color: #4D926F; #header { color: @brand_color; background-image: url(../image/mygif.gif); } "; mockFileReaderFactory.SetContents(css); ICssBundle cssBundle = new CssBundle(mockDebugStatusReader, mockFileWriterFactory, mockFileReaderFactory); string tag = cssBundle .Add("~/css/something/test.less") .Render("~/css/output_less_with_rewrites.css"); string contents = mockFileWriterFactory.Files[@"C:\css\output_less_with_rewrites.css"]; Assert.AreEqual("#header{color:#4d926f;background-image:url(image/mygif.gif)}", contents); }
public void CanBundleCssWithLessWithLessDotCssFileExtension() { var mockDebugStatusReader = new StubDebugStatusReader(false); var mockFileWriterFactory = new StubFileWriterFactory(); var mockFileReaderFactory = new StubFileReaderFactory(); mockFileReaderFactory.SetContents(cssLess); ICssBundle cssBundle = new CssBundle(mockDebugStatusReader, mockFileWriterFactory, mockFileReaderFactory); string tag = cssBundle .Add("~/css/test.less.css") .Render("~/css/output_less_dot_css.css"); string contents = mockFileWriterFactory.Files[@"C:\css\output_less_dot_css.css"]; Assert.AreEqual("<link rel=\"stylesheet\" type=\"text/css\" href=\"css/output_less_dot_css.css?r=15D3D9555DEFACE69D6AB9E7FD972638\" />", tag); Assert.AreEqual("#header{color:#4d926f}h2{color:#4d926f}", contents); }
public void CanBundleCssWithRemote() { var mockDebugStatusReader = new StubDebugStatusReader(false); var mockFileWriterFactory = new StubFileWriterFactory(); var mockFileReaderFactory = new StubFileReaderFactory(); mockFileReaderFactory.SetContents(css); ICssBundle cssBundle = new CssBundle(mockDebugStatusReader, mockFileWriterFactory, mockFileReaderFactory); string tag = cssBundle .AddRemote("/css/first.css", "http://www.someurl.com/css/first.css") .Add("/css/second.css") .Render("/css/output_remote.css"); Assert.AreEqual("<link rel=\"stylesheet\" type=\"text/css\" href=\"http://www.someurl.com/css/first.css\" /><link rel=\"stylesheet\" type=\"text/css\" href=\"/css/output_remote.css?r=67F81278D746D60E6F711B5A29747388\" />", tag); Assert.AreEqual(1, mockFileWriterFactory.Files.Count); Assert.AreEqual("li{margin-bottom:.1em;margin-left:0;margin-top:.1em}th{font-weight:normal;vertical-align:bottom}.FloatRight{float:right}.FloatLeft{float:left}", mockFileWriterFactory.Files[@"C:\css\output_remote.css"]); }
public void CanBundleCssWithQueryStringParameter() { var mockDebugStatusReader = new StubDebugStatusReader(false); var mockFileWriterFactory = new StubFileWriterFactory(); var mockFileReaderFactory = new StubFileReaderFactory(); mockFileReaderFactory.SetContents(css); ICssBundle cssBundle = new CssBundle(mockDebugStatusReader, mockFileWriterFactory, mockFileReaderFactory); string tag = cssBundle .Add("/css/first.css") .Add("/css/second.css") .Render("/css/output_querystring.css?v=1"); Assert.AreEqual("<link rel=\"stylesheet\" type=\"text/css\" href=\"/css/output_querystring.css?v=1&r=C33D1225DED9D889876CEE87754EE305\" />", tag); }
public void CanCreateNamedBundleWithMediaAttribute() { var mockDebugStatusReader = new StubDebugStatusReader(false); var mockFileWriterFactory = new StubFileWriterFactory(); var mockFileReaderFactory = new StubFileReaderFactory(); mockFileReaderFactory.SetContents(css); ICssBundle cssBundle = new CssBundle(mockDebugStatusReader, mockFileWriterFactory, mockFileReaderFactory); cssBundle .Add("~/css/temp.css") .WithMedia("screen") .AsNamed("TestWithMedia", "~/css/output.css"); string tag = cssBundle.RenderNamed("TestWithMedia"); Assert.AreEqual("li{margin-bottom:.1em;margin-left:0;margin-top:.1em}th{font-weight:normal;vertical-align:bottom}.FloatRight{float:right}.FloatLeft{float:left}", mockFileWriterFactory.Files[@"C:\css\output.css"]); Assert.AreEqual("<link rel=\"stylesheet\" type=\"text/css\" media=\"screen\" href=\"css/output.css?r=67F81278D746D60E6F711B5A29747388\" />", tag); }
public void CanRenderCssFileWithImportStatementUppercase() { string importCss = @" @IMPORT URL(/css/other.css); #header { color: #4D926F; }"; var mockDebugStatusReader = new StubDebugStatusReader(false); var mockFileWriterFactory = new StubFileWriterFactory(); var mockFileReaderFactory = new StubFileReaderFactory(); mockFileReaderFactory.SetContents(importCss); mockFileReaderFactory.SetContentsForFile(@"C:\css\other.css", "#footer{color:#ffffff}"); ICssBundle cssBundle = new CssBundle(mockDebugStatusReader, mockFileWriterFactory, mockFileReaderFactory); string tag = cssBundle .Add("/css/first.css") .ProcessImports() .Render("/css/processed_import_uppercase.css"); Assert.AreEqual("#footer{color:#fff}#header{color:#4d926f}", mockFileWriterFactory.Files[@"C:\css\processed_import_uppercase.css"]); }
public void CanRenderCssFileWithUnprocessedImportStatement() { string importCss = @" @import url(""/css/other.css""); #header { color: #4D926F; }"; var mockDebugStatusReader = new StubDebugStatusReader(false); var mockFileWriterFactory = new StubFileWriterFactory(); var mockFileReaderFactory = new StubFileReaderFactory(); mockFileReaderFactory.SetContents(importCss); mockFileReaderFactory.SetContentsForFile(@"C:\css\other.css", "#footer{color:#ffffff}"); ICssBundle cssBundle = new CssBundle(mockDebugStatusReader, mockFileWriterFactory, mockFileReaderFactory); cssBundle .Add("/css/first.css") .Render("/css/unprocessed_import.css"); Assert.AreEqual(@"@import url(""/css/other.css"");#header{color:#4d926f}", mockFileWriterFactory.Files[@"C:\css\unprocessed_import.css"]); }
public void Setup() { var nonDebugStatusReader = new StubDebugStatusReader(false); var debugStatusReader = new StubDebugStatusReader(true); fileWriterFactory = new StubFileWriterFactory(); fileReaderFactory = new StubFileReaderFactory(); currentDirectoryWrapper = new StubCurrentDirectoryWrapper(); var retryableFileOpener = new RetryableFileOpener(); hasher = new Hasher(retryableFileOpener); fileReaderFactory.SetContents(javaScript); javaScriptBundle = new JavaScriptBundle(nonDebugStatusReader, fileWriterFactory, fileReaderFactory, currentDirectoryWrapper, hasher); javaScriptBundle2 = new JavaScriptBundle(nonDebugStatusReader, fileWriterFactory, fileReaderFactory, currentDirectoryWrapper, hasher); debugJavaScriptBundle = new JavaScriptBundle(debugStatusReader, fileWriterFactory, fileReaderFactory, currentDirectoryWrapper, hasher); debugJavaScriptBundle2 = new JavaScriptBundle(debugStatusReader, fileWriterFactory, fileReaderFactory, currentDirectoryWrapper, hasher); }
public void CanRerenderFiles() { var mockDebugStatusReader = new StubDebugStatusReader(false); var mockFileWriterFactory = new StubFileWriterFactory(); var mockFileReaderFactory = new StubFileReaderFactory(); mockFileReaderFactory.SetContents(css); mockFileReaderFactory.SetFileExists(false); ICssBundle cssBundle = new CssBundle(mockDebugStatusReader, mockFileWriterFactory, mockFileReaderFactory); cssBundle.ClearCache(); cssBundle .Add("/css/first.css") .Render("~/css/can_rerender_files.css"); Assert.AreEqual("li{margin-bottom:.1em;margin-left:0;margin-top:.1em}th{font-weight:normal;vertical-align:bottom}.FloatRight{float:right}.FloatLeft{float:left}", mockFileWriterFactory.Files[@"C:\css\can_rerender_files.css"]); mockFileReaderFactory.SetContents(css2); mockFileReaderFactory.SetFileExists(true); mockFileWriterFactory.Files.Clear(); cssBundle.ClearCache(); ICssBundle cssBundle2 = new CssBundle(mockDebugStatusReader, mockFileWriterFactory, mockFileReaderFactory); cssBundle2 .Add("/css/first.css") .Render("~/css/can_rerender_files.css"); Assert.AreEqual("li{margin-bottom:.1em;margin-left:0;margin-top:.1em}th{font-weight:normal;vertical-align:bottom}", mockFileWriterFactory.Files[@"C:\css\can_rerender_files.css"]); }
public void CanBundleDirectoryContentsInDebug_Ignores_Duplicates() { var path = Guid.NewGuid().ToString(); var file1 = TestUtilities.PrepareRelativePath(path + "\\file1.css"); var file2 = TestUtilities.PrepareRelativePath(path + "\\file2.css"); using (new ResolverFactoryScope(typeof(SquishIt.Framework.Resolvers.FileSystemResolver).FullName, StubResolver.ForDirectory(new[] { file1, file2 }))) { var frf = new StubFileReaderFactory(); frf.SetContentsForFile(file1, css2); frf.SetContentsForFile(file2, css); var writerFactory = new StubFileWriterFactory(); var tag = cssBundleFactory.WithDebuggingEnabled(true) .WithFileReaderFactory(frf) .WithFileWriterFactory(writerFactory) .WithHasher(new StubHasher("hashy")) .Create() .Add(path) .Render("~/output.css"); var expectedTag = string.Format("<link rel=\"stylesheet\" type=\"text/css\" href=\"{0}/file1.css\" />\n<link rel=\"stylesheet\" type=\"text/css\" href=\"{0}/file2.css\" />\n", path); Assert.AreEqual(expectedTag, TestUtilities.NormalizeLineEndings(tag)); } }
public void CanBundleArbitraryContentsInRelease() { var css2Format = "{0}{1}"; var hrColor = "hr {color:sienna;}"; var p = "p {margin-left:20px;}"; var writerFactory = new StubFileWriterFactory (); var tag = new CssBundleFactory () .WithDebuggingEnabled (false) .WithFileWriterFactory (writerFactory) .WithHasher (new StubHasher ("hashy")) .Create () .AddString (css) .AddString (css2Format, hrColor, p) .Render ("~/output.css"); var expectedTag = "<link rel=\"stylesheet\" type=\"text/css\" href=\"output.css?r=hashy\" />"; Assert.AreEqual (expectedTag, TestUtilities.NormalizeLineEndings (tag)); var minifiedScript = "li{margin-bottom:.1em;margin-left:0;margin-top:.1em}th{font-weight:normal;vertical-align:bottom}.FloatRight{float:right}.FloatLeft{float:left}hr{color:#a0522d}p{margin-left:20px}"; Assert.AreEqual (minifiedScript, writerFactory.Files[TestUtilities.PrepareRelativePath("output.css")]); }
public void CanBundleCssWithLess() { var mockDebugStatusReader = new StubDebugStatusReader(false); var mockFileWriterFactory = new StubFileWriterFactory(); var mockFileReaderFactory = new StubFileReaderFactory(); mockFileReaderFactory.SetContents(cssLess); ICssBundle cssBundle = new CssBundle(mockDebugStatusReader, mockFileWriterFactory, mockFileReaderFactory); string tag = cssBundle .Add("~/css/test.less") .Render("~/css/output.css"); string contents = mockFileWriterFactory.Files[@"C:\css\output.css"]; Assert.AreEqual("<link rel=\"stylesheet\" type=\"text/css\" href=\"css/output.css?r=B6B2E7F6525BFBE6045FC275CD84C03F\" />", tag); Assert.AreEqual("#header,h2{color:#4d926f}", contents); }