public void RemovingCommentsIsCorrect() { // Arrange var minifier = new KristensenCssMinifier(); const string input1 = "font-size:62.5%/* 1em = 10px */"; const string targetOutput1 = "font-size:62.5%"; const string input2 = "font-size:120%;/* Размер шрифта */" + "font-family:Verdana,Arial,Helvetica,sans-serif;/* Семейство шрифта */" + "color:#336/* Цвет текста */" ; const string targetOutput2 = "font-size:120%;" + "font-family:Verdana,Arial,Helvetica,sans-serif;" + "color:#336" ; const string input3 = "width:300px/*;margin-left:20px*/;margin-right:20px"; const string targetOutput3 = "width:300px;margin-right:20px"; // Act string output1 = minifier.Minify(input1, true).MinifiedContent; string output2 = minifier.Minify(input2, true).MinifiedContent; string output3 = minifier.Minify(input3, true).MinifiedContent; // Assert Assert.Equal(targetOutput1, output1); Assert.Equal(targetOutput2, output2); Assert.Equal(targetOutput3, output3); }
private void MinifyCssDirectory(string path) { foreach (var file in Directory.GetFiles(path, "*.css", SearchOption.AllDirectories)) { if (file.IndexOf(".min.", StringComparison.OrdinalIgnoreCase) != -1) { continue; } if (file.IndexOf("bower_", StringComparison.OrdinalIgnoreCase) != -1) { continue; } try { var text = _fileSystem.ReadAllText(file, Encoding.UTF8); var result = new KristensenCssMinifier().Minify(text, false, Encoding.UTF8); if (result.Errors.Count > 0) { Logger.Error("Error minifying css: " + result.Errors[0].Message); } else { text = result.MinifiedContent; _fileSystem.WriteAllText(file, text, Encoding.UTF8); } } catch (Exception ex) { Logger.ErrorException("Error minifying css", ex); } } }
public void ApplyingOfAllOptimizationsIsCorrect() { // Arrange var minifier = new KristensenCssMinifier(); const string input = " width: 640px; "+ "/*max-width: 1020px; */" + "margin: 10px 0px; " + "border: 4px double black; " + "font-size: 120%; " + "font-family: Verdana, Arial, Helvetica, sans-serif ; " + "color : #336 ; " ; const string targetOutput = "width:640px;" + "margin:10px 0;" + "border:4px double black;" + "font-size:120%;" + "font-family:Verdana,Arial,Helvetica,sans-serif;" + "color:#336" ; // Act string output = minifier.Minify(input, true).MinifiedContent; // Assert Assert.Equal(targetOutput, output); }
public ICssMinifier CreateMinifier(string minifierName) { #if DNXCORE50 ICssMinifier minifier = new KristensenCssMinifier(); #else ICssMinifier minifier; switch (minifierName) { case "KristensenCssMinifier": minifier = new KristensenCssMinifier(); break; case "MsAjaxCssMinifier": minifier = new MsAjaxCssMinifier(); break; case "YuiCssMinifier": minifier = new YuiCssMinifier(); break; default: throw new NotSupportedException(); } #endif return(minifier); }
private void MinifyCssDirectory(string path) { foreach (var file in Directory.GetFiles(path, "*.css", SearchOption.AllDirectories)) { try { var text = File.ReadAllText(file, Encoding.UTF8); var result = new KristensenCssMinifier().Minify(text, false, Encoding.UTF8); if (result.Errors.Count > 0) { Logger.Error("Error minifying css: " + result.Errors[0].Message); } else { text = result.MinifiedContent; File.WriteAllText(file, text, Encoding.UTF8); } } catch (Exception ex) { Logger.ErrorException("Error minifying css", ex); } } }
/// <summary> /// Safely Attempts to minify the provided string. /// </summary> /// <param name="recording">The string to minify</param> /// <returns>Minified version of the string, or, if errors were encountered, returns the original string.</returns> private string Minify(string recording) { var settings = new HtmlMinificationSettings(); var cssMinifier = new KristensenCssMinifier(); var jsMinifier = new CrockfordJsMinifier(); var minifier = new HtmlMinifier(settings, cssMinifier, jsMinifier); MarkupMinificationResult result = minifier.Minify(recording); if (result.Errors.Count != 0) { var builder = new StringBuilder("Attempt to minify rendering failed"); foreach (var error in result.Errors) { builder.AppendLine(error.Category + " - " + error.Message); } Log.Warn(builder.ToString(), this); return(recording); } return(result.MinifiedContent); }
public ICssMinifier CreateMinifier(string minifierName) { ICssMinifier minifier; switch (minifierName) { case "KristensenCssMinifier": minifier = new KristensenCssMinifier(); break; #if !NETSTANDARD1_6 case "MsAjaxCssMinifier": minifier = new MsAjaxCssMinifier(); break; case "YuiCssMinifier": minifier = new YuiCssMinifier(); break; #endif case "NUglifyCssMinifier": minifier = new NUglifyCssMinifier(); break; default: throw new NotSupportedException(); } return(minifier); }
/// <summary> /// Safely Attempts to minify the provided string. /// </summary> /// <param name="recording">The string to minify</param> /// <returns>Minified version of the string, or, if errors were encountered, returns the original string.</returns> private string Minify(string recording) { var settings = new HtmlMinificationSettings(); var cssMinifier = new KristensenCssMinifier(); var jsMinifier = new CrockfordJsMinifier(); var minifier = new HtmlMinifier(settings, cssMinifier, jsMinifier); MarkupMinificationResult result = minifier.Minify(recording); if (result.Errors.Count != 0) { var builder = new StringBuilder("Attempt to minify rendering failed"); foreach (var error in result.Errors) { builder.AppendLine(error.Category + " - " + error.Message); } Log.Warn(builder.ToString(), this); return recording; } return result.MinifiedContent; }
/// <summary> /// Gets all CSS. /// </summary> /// <returns>Task{Stream}.</returns> private async Task <Stream> GetAllCss(bool enableMinification) { var memoryStream = new MemoryStream(); var files = new[] { "css/site.css", "css/librarymenu.css", "css/librarybrowser.css", "thirdparty/paper-button-style.css" }; var builder = new StringBuilder(); foreach (var file in files) { var path = GetDashboardResourcePath(file); using (var fs = _fileSystem.GetFileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite, true)) { using (var streamReader = new StreamReader(fs)) { var text = await streamReader.ReadToEndAsync().ConfigureAwait(false); builder.Append(text); builder.Append(Environment.NewLine); } } } var css = builder.ToString(); if (enableMinification) { try { var result = new KristensenCssMinifier().Minify(builder.ToString(), false, Encoding.UTF8); if (result.Errors.Count > 0) { _logger.Error("Error minifying css: " + result.Errors[0].Message); } else { css = result.MinifiedContent; } } catch (Exception ex) { _logger.ErrorException("Error minifying css", ex); } } var bytes = Encoding.UTF8.GetBytes(css); memoryStream.Write(bytes, 0, bytes.Length); memoryStream.Position = 0; return(memoryStream); }
public void RemovingCommentsIsCorrect() { // Arrange var minifier = new KristensenCssMinifier(); const string input1 = "body{font-size:62.5% /* 1em = 10px */}"; const string targetOutput1 = "body{font-size:62.5%}"; const string input2 = "h1 {\n" + " font-size: 120%; /* Размер шрифта */\n" + " font-family: Verdana, Arial, Helvetica, sans-serif; /* Семейство шрифта */\n" + " color: #336 /* Цвет текста */\n" + "}" ; const string targetOutput2 = "h1{" + "font-size:120%;" + "font-family:Verdana,Arial,Helvetica,sans-serif;" + "color:#336" + "}" ; const string input3 = "* {\n" + " margin: 0;\n" + " padding: 0\n" + "}\n" + "/*\n\n" + "span {\n" + " color: blue;\n" + " font-size: 1.5em\n" + "}\n" + "*/\n\n" + "p {\n" + " font-family: arial, helvetica, sans-serif\n" + "}" ; const string targetOutput3 = "*{" + "margin:0;" + "padding:0" + "}" + "p{" + "font-family:arial,helvetica,sans-serif" + "}" ; // Act string output1 = minifier.Minify(input1, false).MinifiedContent; string output2 = minifier.Minify(input2, false).MinifiedContent; string output3 = minifier.Minify(input3, false).MinifiedContent; // Assert Assert.Equal(targetOutput1, output1); Assert.Equal(targetOutput2, output2); Assert.Equal(targetOutput3, output3); }
public void ApplyingOfAllOptimizationsIsCorrect() { // Arrange var minifier = new KristensenCssMinifier(); const string input = " div#idDiv\n"+ "{\n" + " /*max-width: 1020px;*/\n"+ " margin: 10px 0px;\n"+ " border: 4px double black;\n"+ " font-size: 120%;\n"+ " font-family: Verdana, Arial, Helvetica, sans-serif ;\n"+ " color : #336;\n"+ "}\n" + "/*\n\n" + "span\n" + "{\n" + " color: blue;\n"+ " font-size: 1.5em;\n"+ "}\n" + "*/\n\n" + "a:active\n" + "{\n" + " color: blue;\n"+ "}\n\n" + "p::first-letter\n" + "{\n" + " font-size: 32px;\n"+ "} " ; const string targetOutput = "#idDiv" + "{" + "margin:10px 0;" + "border:4px double black;" + "font-size:120%;" + "font-family:Verdana,Arial,Helvetica,sans-serif;" + "color:#336" + "}" + "a:active" + "{" + "color:blue" + "}" + "p::first-letter" + "{" + "font-size:32px" + "}" ; // Act string output = minifier.Minify(input, false).MinifiedContent; // Assert Assert.Equal(targetOutput, output); }
protected string Minify(string content) { var settings = new HtmlMinificationSettings(); var cssMinifier = new KristensenCssMinifier(); var jsMinifier = new CrockfordJsMinifier(); var minifier = new HtmlMinifier(settings, cssMinifier, jsMinifier); MarkupMinificationResult result = minifier.Minify(content); if (result.Errors.Count != 0) { Log.Warn("Attempt to minify content failed", this); return content; } return result.MinifiedContent; }
public void RemovingLastSemicolonsIsCorrect() { // Arrange var minifier = new KristensenCssMinifier(); const string input1 = "color:blue;"; const string targetOutput1 = "color:blue"; const string input2 = "color:red;background-color:yellow;font-weight:bold;"; const string targetOutput2 = "color:red;background-color:yellow;font-weight:bold"; // Act string output1 = minifier.Minify(input1, true).MinifiedContent; string output2 = minifier.Minify(input2, true).MinifiedContent; // Assert Assert.Equal(targetOutput1, output1); Assert.Equal(targetOutput2, output2); }
/// <summary> /// HTML minification. /// </summary> /// <param name="html">Code to minify.</param> /// <returns>Minified html.</returns> public static string MinifyHtml(string html) { var settings = new HtmlMinificationSettings(); var cssMinifier = new KristensenCssMinifier(); var jsMinifier = new CrockfordJsMinifier(); var htmlMinifier = new HtmlMinifier(settings, cssMinifier, jsMinifier); MarkupMinificationResult result = htmlMinifier.Minify( html, generateStatistics: false); if (result.Errors.Count == 0) { return(result.MinifiedContent); } else { return(html); } }
public void RemovingRedundantSelectorsIsCorrect() { // Arrange var minifier = new KristensenCssMinifier(); const string input1 = "div#idDiv{border:2px solid blue;color:red;margin-top:15px}"; const string targetOutput1 = "#idDiv{border:2px solid blue;color:red;margin-top:15px}"; const string input2 = "#content.sectionA{background-color:yellow}"; const string input3 = "* html #someblock{width:100px;padding:10px}"; // Act string output1 = minifier.Minify(input1, false).MinifiedContent; string output2 = minifier.Minify(input2, false).MinifiedContent; string output3 = minifier.Minify(input3, false).MinifiedContent; // Assert Assert.Equal(targetOutput1, output1); Assert.Equal(input2, output2); Assert.Equal(input3, output3); }
public async Task <Stream> ModifyCss(Stream sourceStream, bool enableMinification) { using (sourceStream) { string content; using (var memoryStream = new MemoryStream()) { await sourceStream.CopyToAsync(memoryStream).ConfigureAwait(false); content = Encoding.UTF8.GetString(memoryStream.ToArray()); if (enableMinification) { try { var result = new KristensenCssMinifier().Minify(content, false, Encoding.UTF8); if (result.Errors.Count > 0) { _logger.Error("Error minifying css: " + result.Errors[0].Message); } else { content = result.MinifiedContent; } } catch (Exception ex) { _logger.ErrorException("Error minifying css", ex); } } } var bytes = Encoding.UTF8.GetBytes(content); return(new MemoryStream(bytes)); } }
public void WhitespaceMinificationIsCorrect() { // Arrange var minifier = new KristensenCssMinifier(); const string input1 = "background-image: url('/images/products/392.jpg')"; const string targetOutput1 = "background-image:url('/images/products/392.jpg')"; const string input2 = " font-size: 120%; "+ "font-family: Verdana, Arial, Helvetica, sans-serif ;"+ "color : #336 " ; const string targetOutput2 = "font-size:120%;" + "font-family:Verdana,Arial,Helvetica,sans-serif;" + "color:#336"; // Act string output1 = minifier.Minify(input1, true).MinifiedContent; string output2 = minifier.Minify(input2, true).MinifiedContent; // Assert Assert.Equal(targetOutput1, output1); Assert.Equal(targetOutput2, output2); }
/// <summary> /// Gets all CSS. /// </summary> /// <returns>Task{Stream}.</returns> private async Task <Stream> GetAllCss(bool enableMinification) { var memoryStream = new MemoryStream(); var newLineBytes = Encoding.UTF8.GetBytes(Environment.NewLine); await AppendResource(memoryStream, "thirdparty/jquerymobile-1.4.5/jquery.mobile.custom.theme.min.css", newLineBytes).ConfigureAwait(false); await AppendResource(memoryStream, "thirdparty/jquerymobile-1.4.5/jquery.mobile.custom.structure.min.css", newLineBytes).ConfigureAwait(false); var files = new[] { "css/site.css", "css/chromecast.css", "css/nowplayingbar.css", "css/mediaplayer.css", "css/mediaplayer-video.css", "css/librarymenu.css", "css/librarybrowser.css", "css/card.css", "css/notifications.css", "css/search.css", "css/pluginupdates.css", "css/remotecontrol.css", "css/userimage.css", "css/nowplaying.css", "css/materialize.css", "thirdparty/paper-button-style.css" }; var builder = new StringBuilder(); foreach (var file in files) { var path = GetDashboardResourcePath(file); using (var fs = _fileSystem.GetFileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite, true)) { using (var streamReader = new StreamReader(fs)) { var text = await streamReader.ReadToEndAsync().ConfigureAwait(false); builder.Append(text); builder.Append(Environment.NewLine); } } } var css = builder.ToString(); if (enableMinification) { try { var result = new KristensenCssMinifier().Minify(builder.ToString(), false, Encoding.UTF8); if (result.Errors.Count > 0) { _logger.Error("Error minifying css: " + result.Errors[0].Message); } else { css = result.MinifiedContent; } } catch (Exception ex) { _logger.ErrorException("Error minifying css", ex); } } var bytes = Encoding.UTF8.GetBytes(css); memoryStream.Write(bytes, 0, bytes.Length); memoryStream.Position = 0; return(memoryStream); }
public IEnumerable <IDocument> Execute(IReadOnlyList <IDocument> inputs, IExecutionContext context) { KristensenCssMinifier minifier = new KristensenCssMinifier(); return(Minify(inputs, context, (x) => minifier.Minify(x, _isInlineCode), "CSS")); }
/// <inheritdoc /> public async Task <IEnumerable <IDocument> > ExecuteAsync(IExecutionContext context) { KristensenCssMinifier minifier = new KristensenCssMinifier(); return(await MinifyAsync(context, (x) => minifier.Minify(x, _isInlineCode), "CSS")); }
/// <summary> /// Gets all CSS. /// </summary> /// <returns>Task{Stream}.</returns> private async Task <Stream> GetAllCss(bool enableMinification) { var files = new[] { "site.css", "chromecast.css", "mediaplayer.css", "mediaplayer-video.css", "librarymenu.css", "librarybrowser.css", "detailtable.css", "card.css", "tileitem.css", "metadataeditor.css", "notifications.css", "search.css", "pluginupdates.css", "remotecontrol.css", "userimage.css", "livetv.css", "nowplaying.css", "icons.css", "materialize.css" }; var builder = new StringBuilder(); foreach (var file in files) { var path = GetDashboardResourcePath("css/" + file); using (var fs = _fileSystem.GetFileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite, true)) { using (var streamReader = new StreamReader(fs)) { var text = await streamReader.ReadToEndAsync().ConfigureAwait(false); builder.Append(text); builder.Append(Environment.NewLine); } } } var css = builder.ToString(); if (enableMinification) { try { var result = new KristensenCssMinifier().Minify(builder.ToString(), false, Encoding.UTF8); if (result.Errors.Count > 0) { _logger.Error("Error minifying css: " + result.Errors[0].Message); } else { css = result.MinifiedContent; } } catch (Exception ex) { _logger.ErrorException("Error minifying css", ex); } } var memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(css)); memoryStream.Position = 0; return(memoryStream); }
public void RemovingUnitsFromZeroValuesIsCorrect() { // Arrange var minifier = new KristensenCssMinifier(); const string input1 = "div{width:0px;margin:10px 0px}"; const string targetOutput1 = "div{width:0;margin:10px 0}"; const string input2 = "div{width:0em;margin:10em 0em}"; const string targetOutput2 = "div{width:0;margin:10em 0}"; const string input3 = "div{width:0ex;margin:10ex 0ex}"; const string targetOutput3 = "div{width:0;margin:10ex 0}"; const string input4 = "div{width:0cm;margin:10cm 0cm}"; const string targetOutput4 = "div{width:0;margin:10cm 0}"; const string input5 = "div{width:0mm;margin:10mm 0mm}"; const string targetOutput5 = "div{width:0;margin:10mm 0}"; const string input6 = "div{width:0in;margin:10in 0in}"; const string targetOutput6 = "div{width:0;margin:10in 0}"; const string input7 = "div{width:0pt;margin:10pt 0pt}"; const string targetOutput7 = "div{width:0;margin:10pt 0}"; const string input8 = "div{width:0pc;margin:10pc 0pc}"; const string targetOutput8 = "div{width:0;margin:10pc 0}"; const string input9 = "div{width:0%;margin:10% 0%}"; const string targetOutput9 = "div{width:0;margin:10% 0}"; const string input10 = "div{width:0ch;margin:10ch 0ch}"; const string targetOutput10 = "div{width:0;margin:10ch 0}"; const string input11 = "div{width:0rem;margin:10rem 0rem}"; const string targetOutput11 = "div{width:0;margin:10rem 0}"; const string input12 = "div{width:0vh;margin:10vh 0vh}"; const string targetOutput12 = "div{width:0;margin:10vh 0}"; const string input13 = "div{width:0vmax;margin:10vmax 0vmax}"; const string targetOutput13 = "div{width:0;margin:10vmax 0}"; const string input14 = "div{width:0vmin;margin:10vmin 0vmin}"; const string targetOutput14 = "div{width:0;margin:10vmin 0}"; const string input15 = "div{width:0vm;margin:10vm 0vm}"; const string targetOutput15 = "div{width:0;margin:10vm 0}"; const string input16 = "div{width:0vw;margin:10vw 0vw}"; const string targetOutput16 = "div{width:0;margin:10vw 0}"; // Act string output1 = minifier.Minify(input1, false).MinifiedContent; string output2 = minifier.Minify(input2, false).MinifiedContent; string output3 = minifier.Minify(input3, false).MinifiedContent; string output4 = minifier.Minify(input4, false).MinifiedContent; string output5 = minifier.Minify(input5, false).MinifiedContent; string output6 = minifier.Minify(input6, false).MinifiedContent; string output7 = minifier.Minify(input7, false).MinifiedContent; string output8 = minifier.Minify(input8, false).MinifiedContent; string output9 = minifier.Minify(input9, false).MinifiedContent; string output10 = minifier.Minify(input10, false).MinifiedContent; string output11 = minifier.Minify(input11, false).MinifiedContent; string output12 = minifier.Minify(input12, false).MinifiedContent; string output13 = minifier.Minify(input13, false).MinifiedContent; string output14 = minifier.Minify(input14, false).MinifiedContent; string output15 = minifier.Minify(input15, false).MinifiedContent; string output16 = minifier.Minify(input16, false).MinifiedContent; // Assert Assert.Equal(targetOutput1, output1); Assert.Equal(targetOutput2, output2); Assert.Equal(targetOutput3, output3); Assert.Equal(targetOutput4, output4); Assert.Equal(targetOutput5, output5); Assert.Equal(targetOutput6, output6); Assert.Equal(targetOutput7, output7); Assert.Equal(targetOutput8, output8); Assert.Equal(targetOutput9, output9); Assert.Equal(targetOutput10, output10); Assert.Equal(targetOutput11, output11); Assert.Equal(targetOutput12, output12); Assert.Equal(targetOutput13, output13); Assert.Equal(targetOutput14, output14); Assert.Equal(targetOutput15, output15); Assert.Equal(targetOutput16, output16); }
public void WhitespaceMinificationIsCorrect() { // Arrange var minifier = new KristensenCssMinifier(); const string input1 = "body { background-color: powderblue }\r\n" + "h1 { color: blue }\r\n" + "p { color: red }" ; const string targetOutput1 = "body{background-color:powderblue}" + "h1{color:blue}" + "p{color:red}" ; const string input2 = "h1 {\n" + " font-size: 120%;\n" + " font-family: Verdana, Arial, Helvetica, sans-serif ;\n"+ " color : #336 \n" + "}\n" ; const string targetOutput2 = "h1{" + "font-size:120%;" + "font-family:Verdana,Arial,Helvetica,sans-serif;" + "color:#336" + "}" ; const string input3 = " p.note > b {\r "+ " color: red\r" + "} " ; const string targetOutput3 = "p.note > b{" + "color:red" + "}" ; const string input4 = "h1,\n" + "h2 {\n" + " color: red;\n" + " font-family: \"Times New Roman\", Georgia, Serif;\n" + " line-height: 1.3em\n" + "}\n" ; const string targetOutput4 = "h1," + "h2{" + "color:red;" + "font-family:\"Times New Roman\",Georgia,Serif;" + "line-height:1.3em" + "}" ; // Act string output1 = minifier.Minify(input1, false).MinifiedContent; string output2 = minifier.Minify(input2, false).MinifiedContent; string output3 = minifier.Minify(input3, false).MinifiedContent; string output4 = minifier.Minify(input4, false).MinifiedContent; // Assert Assert.Equal(targetOutput1, output1); Assert.Equal(targetOutput2, output2); Assert.Equal(targetOutput3, output3); Assert.Equal(targetOutput4, output4); }
public void RemovingUnitsFromZeroValuesIsCorrect() { // Arrange var minifier = new KristensenCssMinifier(); const string input1 = "width:0px;margin:10px 0px"; const string targetOutput1 = "width:0;margin:10px 0"; const string input2 = "width:0em;margin:10em 0em"; const string targetOutput2 = "width:0;margin:10em 0"; const string input3 = "width:0ex;margin:10ex 0ex"; const string targetOutput3 = "width:0;margin:10ex 0"; const string input4 = "width:0cm;margin:10cm 0cm"; const string targetOutput4 = "width:0;margin:10cm 0"; const string input5 = "width:0mm;margin:10mm 0mm"; const string targetOutput5 = "width:0;margin:10mm 0"; const string input6 = "width:0in;margin:10in 0in"; const string targetOutput6 = "width:0;margin:10in 0"; const string input7 = "width:0pt;margin:10pt 0pt"; const string targetOutput7 = "width:0;margin:10pt 0"; const string input8 = "width:0pc;margin:10pc 0pc"; const string targetOutput8 = "width:0;margin:10pc 0"; const string input9 = "width:0%;margin:10% 0%"; const string targetOutput9 = "width:0;margin:10% 0"; const string input10 = "width:0ch;margin:10ch 0ch"; const string targetOutput10 = "width:0;margin:10ch 0"; const string input11 = "width:0rem;margin:10rem 0rem"; const string targetOutput11 = "width:0;margin:10rem 0"; const string input12 = "width:0vh;margin:10vh 0vh"; const string targetOutput12 = "width:0;margin:10vh 0"; const string input13 = "width:0vmax;margin:10vmax 0vmax"; const string targetOutput13 = "width:0;margin:10vmax 0"; const string input14 = "width:0vmin;margin:10vmin 0vmin"; const string targetOutput14 = "width:0;margin:10vmin 0"; const string input15 = "width:0vm;margin:10vm 0vm"; const string targetOutput15 = "width:0;margin:10vm 0"; const string input16 = "width:0vw;margin:10vw 0vw"; const string targetOutput16 = "width:0;margin:10vw 0"; // Act string output1 = minifier.Minify(input1, true).MinifiedContent; string output2 = minifier.Minify(input2, true).MinifiedContent; string output3 = minifier.Minify(input3, true).MinifiedContent; string output4 = minifier.Minify(input4, true).MinifiedContent; string output5 = minifier.Minify(input5, true).MinifiedContent; string output6 = minifier.Minify(input6, true).MinifiedContent; string output7 = minifier.Minify(input7, true).MinifiedContent; string output8 = minifier.Minify(input8, true).MinifiedContent; string output9 = minifier.Minify(input9, true).MinifiedContent; string output10 = minifier.Minify(input10, true).MinifiedContent; string output11 = minifier.Minify(input11, true).MinifiedContent; string output12 = minifier.Minify(input12, true).MinifiedContent; string output13 = minifier.Minify(input13, true).MinifiedContent; string output14 = minifier.Minify(input14, true).MinifiedContent; string output15 = minifier.Minify(input15, true).MinifiedContent; string output16 = minifier.Minify(input16, true).MinifiedContent; // Assert Assert.Equal(targetOutput1, output1); Assert.Equal(targetOutput2, output2); Assert.Equal(targetOutput3, output3); Assert.Equal(targetOutput4, output4); Assert.Equal(targetOutput5, output5); Assert.Equal(targetOutput6, output6); Assert.Equal(targetOutput7, output7); Assert.Equal(targetOutput8, output8); Assert.Equal(targetOutput9, output9); Assert.Equal(targetOutput10, output10); Assert.Equal(targetOutput11, output11); Assert.Equal(targetOutput12, output12); Assert.Equal(targetOutput13, output13); Assert.Equal(targetOutput14, output14); Assert.Equal(targetOutput15, output15); Assert.Equal(targetOutput16, output16); }