public void Minify() { // Given // Example taken from https://raw.githubusercontent.com/douglascrockford/JSMin/master/README string input = @" var is = { ie: navigator.appName == 'Microsoft Internet Explorer', java: navigator.javaEnabled(), ns: navigator.appName == 'Netscape', ua: navigator.userAgent.toLowerCase(), version: parseFloat(navigator.appVersion.substr(21)) || parseFloat(navigator.appVersion), win: navigator.platform == 'Win32' } is.mac = is.ua.indexOf('mac') >= 0; if (is.ua.indexOf('opera') >= 0) { is.ie = is.ns = false; is.opera = true; } if (is.ua.indexOf('gecko') >= 0) { is.ie = is.ns = false; is.gecko = true; }"; string output = @"var is={ie:navigator.appName=='Microsoft Internet Explorer',java:navigator.javaEnabled(),ns:navigator.appName=='Netscape',ua:navigator.userAgent.toLowerCase(),version:parseFloat(navigator.appVersion.substr(21))||parseFloat(navigator.appVersion),win:navigator.platform=='Win32'} is.mac=is.ua.indexOf('mac')>=0;if(is.ua.indexOf('opera')>=0){is.ie=is.ns=false;is.opera=true;} if(is.ua.indexOf('gecko')>=0){is.ie=is.ns=false;is.gecko=true;}"; // HACK: The JS minifier will use \n new-lines, but in this test Windows/VS uses \r\n for new-lines output = output.Replace(System.Environment.NewLine, "\n"); IExecutionContext context = Substitute.For <IExecutionContext>(); IDocument document = Substitute.For <IDocument>(); document.Content.Returns(input); MinifyJs minifyJs = new MinifyJs(); // When minifyJs.Execute(new[] { document }, context).ToList(); // Make sure to materialize the result list // Then context.Received(1).GetDocument(Arg.Any <IDocument>(), Arg.Any <string>()); context.Received().GetDocument(document, output); }
protected override void OnPreRender(EventArgs e) { bool isIe = HttpContext.Current.Request.Browser.Browser.Trim() .Equals("IE", StringComparison.InvariantCultureIgnoreCase); int ieVersion = isIe ? HttpContext.Current.Request.Browser.MajorVersion : 0; ICombinerService myCombiner = CombinerServiceFactory.CreateCombinerService(); var logger = new LoggingService.LoggingService(); HttpContext.Current.Response.Filter = new CombinerResponseStream( HttpContext.Current.Response.Filter, CombinerLiveSettings.CombineJs && CombineJs.GetValueOrDefault(true), CombinerLiveSettings.CombineCss && CombineCss.GetValueOrDefault(true), CombinerLiveSettings.MinifyJs && MinifyJs.GetValueOrDefault(true), CombinerLiveSettings.MinifyCss && MinifyCss.GetValueOrDefault(true), CombinerLiveSettings.VersionOnly && VersionOnly.GetValueOrDefault(true), CombinerLiveSettings.PrependCdnHostToImages && PrependCdnHostToImages.GetValueOrDefault(true), CombinerLiveSettings.JsVersion, CombinerLiveSettings.CssVersion, CombinerConstantsAndSettings.JsAndCssSharedVersion, ieVersion, HttpContext.Current.Request.Url.AbsolutePath, myCombiner, logger, CombinerConstantsAndSettings.WebSettings.ComboScriptUrl, CombinerConstantsAndSettings.WebSettings.ImagesCdnHostToPrepend ); if (ApplyOutputCaching.GetValueOrDefault(true)) { // Set cacheability HttpContext.Current.Response.Cache.SetExpires(DateTime.Now.AddMonths(1)); HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.Public); HttpContext.Current.Response.Cache.SetValidUntilExpires(true); HttpContext.Current.Response.Cache.VaryByParams["*"] = true; // Set file dependency for output cache // when the live.js is updated we need to invalidate the OutputCache for this page string path = CombinerConstantsAndSettings.WebSettings.CombinerLiveSettingsFile; string liveSettingsFilePath = HttpContext.Current.Server.MapPath(path); HttpContext.Current.Response.AddFileDependency(liveSettingsFilePath); } }
public void Minify() { // Given // Example taken from https://raw.githubusercontent.com/douglascrockford/JSMin/master/README string input = @" var is = { ie: navigator.appName == 'Microsoft Internet Explorer', java: navigator.javaEnabled(), ns: navigator.appName == 'Netscape', ua: navigator.userAgent.toLowerCase(), version: parseFloat(navigator.appVersion.substr(21)) || parseFloat(navigator.appVersion), win: navigator.platform == 'Win32' } is.mac = is.ua.indexOf('mac') >= 0; if (is.ua.indexOf('opera') >= 0) { is.ie = is.ns = false; is.opera = true; } if (is.ua.indexOf('gecko') >= 0) { is.ie = is.ns = false; is.gecko = true; }"; string output = @"var is={ie:navigator.appName=='Microsoft Internet Explorer',java:navigator.javaEnabled(),ns:navigator.appName=='Netscape',ua:navigator.userAgent.toLowerCase(),version:parseFloat(navigator.appVersion.substr(21))||parseFloat(navigator.appVersion),win:navigator.platform=='Win32'} is.mac=is.ua.indexOf('mac')>=0;if(is.ua.indexOf('opera')>=0){is.ie=is.ns=false;is.opera=true;} if(is.ua.indexOf('gecko')>=0){is.ie=is.ns=false;is.gecko=true;}"; // HACK: The JS minifier will use \n new-lines, but in this test Windows/VS uses \r\n for new-lines output = output.Replace(System.Environment.NewLine, "\n"); IExecutionContext context = Substitute.For<IExecutionContext>(); IDocument document = Substitute.For<IDocument>(); document.Content.Returns(input); MinifyJs minifyJs = new MinifyJs(); // When minifyJs.Execute(new[] { document }, context).ToList(); // Make sure to materialize the result list // Then context.Received(1).GetDocument(Arg.Any<IDocument>(), Arg.Any<string>()); context.Received().GetDocument(document, output); }
public void Minify() { // Given // Example taken from https://raw.githubusercontent.com/douglascrockford/JSMin/master/README string input = @" var is = { ie: navigator.appName == 'Microsoft Internet Explorer', java: navigator.javaEnabled(), ns: navigator.appName == 'Netscape', ua: navigator.userAgent.toLowerCase(), version: parseFloat(navigator.appVersion.substr(21)) || parseFloat(navigator.appVersion), win: navigator.platform == 'Win32' } is.mac = is.ua.indexOf('mac') >= 0; if (is.ua.indexOf('opera') >= 0) { is.ie = is.ns = false; is.opera = true; } if (is.ua.indexOf('gecko') >= 0) { is.ie = is.ns = false; is.gecko = true; }"; string output = @"var is={ie:navigator.appName=='Microsoft Internet Explorer',java:navigator.javaEnabled(),ns:navigator.appName=='Netscape',ua:navigator.userAgent.toLowerCase(),version:parseFloat(navigator.appVersion.substr(21))||parseFloat(navigator.appVersion),win:navigator.platform=='Win32'} is.mac=is.ua.indexOf('mac')>=0;if(is.ua.indexOf('opera')>=0){is.ie=is.ns=false;is.opera=true;} if(is.ua.indexOf('gecko')>=0){is.ie=is.ns=false;is.gecko=true;}"; TestExecutionContext context = new TestExecutionContext(); TestDocument document = new TestDocument(input); MinifyJs minifyJs = new MinifyJs(); // When IList <IDocument> results = minifyJs.Execute(new[] { document }, context).ToList(); // Make sure to materialize the result list // Then results.Single().Content.ShouldBe(output, StringCompareShould.IgnoreLineEndings); }
public async Task Minify() { // Given // Example taken from https://raw.githubusercontent.com/douglascrockford/JSMin/master/README const string input = @" var is = { ie: navigator.appName == 'Microsoft Internet Explorer', java: navigator.javaEnabled(), ns: navigator.appName == 'Netscape', ua: navigator.userAgent.toLowerCase(), version: parseFloat(navigator.appVersion.substr(21)) || parseFloat(navigator.appVersion), win: navigator.platform == 'Win32' } is.mac = is.ua.indexOf('mac') >= 0; if (is.ua.indexOf('opera') >= 0) { is.ie = is.ns = false; is.opera = true; } if (is.ua.indexOf('gecko') >= 0) { is.ie = is.ns = false; is.gecko = true; }"; const string output = @"var is={ie:navigator.appName=='Microsoft Internet Explorer',java:navigator.javaEnabled(),ns:navigator.appName=='Netscape',ua:navigator.userAgent.toLowerCase(),version:parseFloat(navigator.appVersion.substr(21))||parseFloat(navigator.appVersion),win:navigator.platform=='Win32'} is.mac=is.ua.indexOf('mac')>=0;if(is.ua.indexOf('opera')>=0){is.ie=is.ns=false;is.opera=true;} if(is.ua.indexOf('gecko')>=0){is.ie=is.ns=false;is.gecko=true;}"; TestDocument document = new TestDocument(input); MinifyJs minifyJs = new MinifyJs(); // When TestDocument result = await ExecuteAsync(document, minifyJs).SingleAsync(); // Then result.Content.ShouldBe(output, StringCompareShould.IgnoreLineEndings); }