Skip to content

Commit d0b4de8

Browse files
2 parents 9d78e39 + 2a517b3 commit d0b4de8

File tree

10 files changed

+168
-3
lines changed

10 files changed

+168
-3
lines changed

src/WebCompiler/Minify/FileMinifier.cs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,7 @@ private static MinificationResult MinifyJavaScript(Config config, string file)
3939

4040
var minifier = new Minifier();
4141

42-
string ext = Path.GetExtension(file);
43-
string minFile = file.Substring(0, file.LastIndexOf(ext)) + ".min" + ext;
42+
string minFile = GetMinFileName(file);
4443
string mapFile = minFile + ".map";
4544

4645
string result = minifier.MinifyJavaScript(content, settings);
@@ -98,7 +97,14 @@ private static MinificationResult MinifyCss(Config config, string file)
9897
private static string GetMinFileName(string file)
9998
{
10099
string ext = Path.GetExtension(file);
101-
return file.Substring(0, file.LastIndexOf(ext)) + ".min" + ext;
100+
101+
string fileName = file.Substring(0, file.LastIndexOf(ext));
102+
if (!fileName.EndsWith(".min"))
103+
{
104+
fileName += ".min";
105+
}
106+
107+
return fileName + ext;
102108
}
103109

104110
private static void GzipFile(Config config, string sourceFile, bool containsChanges)
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
using System;
2+
using System.IO;
3+
using System.Linq;
4+
using Microsoft.VisualStudio.TestTools.UnitTesting;
5+
using WebCompiler;
6+
7+
namespace WebCompilerTest.Minify
8+
{
9+
[TestClass]
10+
public class CssMinifierTests
11+
{
12+
private const string processingConfigFile = "../../Minify/artifacts/css/";
13+
14+
/// <summary>
15+
/// Tests that '.min' is automatically appended to a minified file name.
16+
/// </summary>
17+
/// <remarks>
18+
/// For example, the file 'site.css' becomes 'site.min.css' when minified.
19+
/// </remarks>
20+
[TestMethod, TestCategory("CssMinifier")]
21+
public void ShouldAppendMinToOutputFile()
22+
{
23+
var configPath = Path.Combine(processingConfigFile, "outputfilenomin.json");
24+
var configs = ConfigHandler.GetConfigs(configPath);
25+
var outputFile = "site.min.css";
26+
27+
// Capture the name of the resulting (minified) file.
28+
string resultFile = string.Empty;
29+
FileMinifier.BeforeWritingMinFile += (object sender, MinifyFileEventArgs e) => { resultFile = new FileInfo(e.ResultFile).Name; };
30+
31+
ConfigFileProcessor processor = new ConfigFileProcessor();
32+
var results = processor.Process(configPath, configs, force:true);
33+
34+
Assert.AreEqual(outputFile, resultFile);
35+
}
36+
37+
/// <summary>
38+
/// Tests that '.min' is only appended to a minified file name once.
39+
/// </summary>
40+
/// <remarks>
41+
/// For example, the file 'site.min.css' remains unchanged when minified
42+
/// as it already contains the '.min' suffix.
43+
/// </remarks>
44+
[TestMethod, TestCategory("CssMinifier")]
45+
public void ShouldAppendMinOnlyOnce()
46+
{
47+
var configPath = Path.Combine(processingConfigFile, "outputfilemin.json");
48+
var configs = ConfigHandler.GetConfigs(configPath);
49+
var outputFile = configs.First().OutputFile;
50+
51+
// Capture the name of the resulting (minified) file.
52+
string resultFile = string.Empty;
53+
FileMinifier.BeforeWritingMinFile += (object sender, MinifyFileEventArgs e) => { resultFile = new FileInfo(e.ResultFile).Name; };
54+
55+
ConfigFileProcessor processor = new ConfigFileProcessor();
56+
var results = processor.Process(configPath, configs, force: true);
57+
58+
Assert.AreEqual(outputFile, resultFile);
59+
}
60+
}
61+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
using System;
2+
using System.IO;
3+
using System.Linq;
4+
using Microsoft.VisualStudio.TestTools.UnitTesting;
5+
using WebCompiler;
6+
7+
namespace WebCompilerTest.Minify
8+
{
9+
[TestClass]
10+
public class JavaScriptMinifierTests
11+
{
12+
private const string processingConfigFile = "../../Minify/artifacts/javascript/";
13+
14+
/// <summary>
15+
/// Tests that '.min' is automatically appended to a minified file name.
16+
/// </summary>
17+
/// <remarks>
18+
/// For example, the file 'site.js' becomes 'site.min.js' when minified.
19+
/// </remarks>
20+
[TestMethod, TestCategory("JavaScriptMinifier")]
21+
public void ShouldAppendMinToOutputFile()
22+
{
23+
var configPath = Path.Combine(processingConfigFile, "outputfilenomin.json");
24+
var configs = ConfigHandler.GetConfigs(configPath);
25+
var outputFile = "site.min.js";
26+
27+
// Capture the name of the resulting (minified) file.
28+
string resultFile = string.Empty;
29+
FileMinifier.BeforeWritingMinFile += (object sender, MinifyFileEventArgs e) => { resultFile = new FileInfo(e.ResultFile).Name; };
30+
31+
ConfigFileProcessor processor = new ConfigFileProcessor();
32+
var results = processor.Process(configPath, configs, force:true);
33+
34+
Assert.AreEqual(outputFile, resultFile);
35+
}
36+
37+
/// <summary>
38+
/// Tests that '.min' is only appended to a minified file name once.
39+
/// </summary>
40+
/// <remarks>
41+
/// For example, the file 'site.min.js' remains unchanged when minified
42+
/// as it already contains the '.min' suffix.
43+
/// </remarks>
44+
[TestMethod, TestCategory("JavaScriptMinifier")]
45+
public void ShouldAppendMinOnlyOnce()
46+
{
47+
var configPath = Path.Combine(processingConfigFile, "outputfilemin.json");
48+
var configs = ConfigHandler.GetConfigs(configPath);
49+
var outputFile = configs.First().OutputFile;
50+
51+
// Capture the name of the resulting (minified) file.
52+
string resultFile = string.Empty;
53+
FileMinifier.BeforeWritingMinFile += (object sender, MinifyFileEventArgs e) => { resultFile = new FileInfo(e.ResultFile).Name; };
54+
55+
ConfigFileProcessor processor = new ConfigFileProcessor();
56+
var results = processor.Process(configPath, configs, force: true);
57+
58+
Assert.AreEqual(outputFile, resultFile);
59+
}
60+
}
61+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
body {
2+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
[
2+
{
3+
"outputFile": "site.min.css",
4+
"inputFile": "minify.less"
5+
}
6+
]
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
[
2+
{
3+
"outputFile": "site.css",
4+
"inputFile": "minify.less"
5+
}
6+
]
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
function myfunction() {
2+
3+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
[
2+
{
3+
"outputFile": "site.min.js",
4+
"inputFile": "minify.js"
5+
}
6+
]
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
[
2+
{
3+
"outputFile": "site.js",
4+
"inputFile": "minify.js"
5+
}
6+
]

src/WebCompilerTest/WebCompilerTest.csproj

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@
6767
<Compile Include="Compile\LessTest.cs" />
6868
<Compile Include="Minify\JavaScriptOptionsTests.cs" />
6969
<Compile Include="Minify\CssOptionsTests.cs" />
70+
<Compile Include="Minify\CssMinifierTests.cs" />
71+
<Compile Include="Minify\JavaScriptMinifierTests.cs" />
7072
<Compile Include="Properties\AssemblyInfo.cs" />
7173
</ItemGroup>
7274
<ItemGroup>
@@ -113,10 +115,16 @@
113115
<None Include="artifacts\stylus\error.styl" />
114116
<None Include="artifacts\stylus\vendor.styl" />
115117
<None Include="artifacts\stylus\a.styl" />
118+
<None Include="Minify\artifacts\css\minify.less" />
116119
<None Include="Minify\artifacts\javascript\evantreatmentmakeallsafeuppercase.json" />
117120
<None Include="Minify\artifacts\javascript\evantreatmentmakeimmediatesafe.json" />
118121
<None Include="Minify\artifacts\javascript\evantreatmentmakeallsafe.json" />
119122
<None Include="Minify\artifacts\javascript\evantreatmentignore.json" />
123+
<Content Include="Minify\artifacts\javascript\minify.js" />
124+
<None Include="Minify\artifacts\css\outputfilemin.json" />
125+
<None Include="Minify\artifacts\javascript\outputfilemin.json" />
126+
<None Include="Minify\artifacts\css\outputfilenomin.json" />
127+
<None Include="Minify\artifacts\javascript\outputfilenomin.json" />
120128
<None Include="Minify\artifacts\javascript\indentsize.json" />
121129
<None Include="Minify\artifacts\javascript\outputmodemultiplelines.json" />
122130
<None Include="Minify\artifacts\javascript\outputmodemultiplelineslowercase.json" />

0 commit comments

Comments
 (0)