diff --git a/RESW File Code Generator/ReswCodeGen.CustomTool/ClassNameExtractor.cs b/RESW File Code Generator/ReswCodeGen.CustomTool/ClassNameExtractor.cs
new file mode 100644
index 0000000..2ca4fe0
--- /dev/null
+++ b/RESW File Code Generator/ReswCodeGen.CustomTool/ClassNameExtractor.cs
@@ -0,0 +1,16 @@
+using System.IO;
+
+namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.CustomTool
+{
+ public static class ClassNameExtractor
+ {
+ public static string GetClassName(string wszInputFilePath)
+ {
+ if (!File.Exists(wszInputFilePath))
+ throw new FileNotFoundException();
+
+ var fileInfo = new FileInfo(wszInputFilePath);
+ return fileInfo.Name.Replace(fileInfo.Extension, string.Empty);
+ }
+ }
+}
diff --git a/RESW File Code Generator/ReswCodeGen.CustomTool/CodeDomCodeGenerator.cs b/RESW File Code Generator/ReswCodeGen.CustomTool/CodeDomCodeGenerator.cs
index d14a5bd..9e87c70 100644
--- a/RESW File Code Generator/ReswCodeGen.CustomTool/CodeDomCodeGenerator.cs
+++ b/RESW File Code Generator/ReswCodeGen.CustomTool/CodeDomCodeGenerator.cs
@@ -10,13 +10,15 @@ namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.CustomTool
{
public class CodeDomCodeGenerator : CodeGenerator
{
+ private readonly string className;
private readonly CodeNamespace codeNamespace;
private readonly CodeCompileUnit compileUnit;
private readonly CodeDomProvider provider;
- public CodeDomCodeGenerator(IResourceParser resourceParser, string defaultNamespace, CodeDomProvider codeDomProvider = null)
+ public CodeDomCodeGenerator(IResourceParser resourceParser, string className, string defaultNamespace, CodeDomProvider codeDomProvider = null)
: base(resourceParser, defaultNamespace)
{
+ this.className = className;
compileUnit = new CodeCompileUnit();
provider = codeDomProvider ?? new CSharpCodeProvider();
codeNamespace = new CodeNamespace(defaultNamespace);
@@ -39,7 +41,7 @@ namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.CustomTool
codeNamespace.Imports.Add(new CodeNamespaceImport("Windows.ApplicationModel.Resources"));
- var targetClass = new CodeTypeDeclaration("Resources")
+ var targetClass = new CodeTypeDeclaration(className)
{
IsClass = true,
IsPartial = true,
diff --git a/RESW File Code Generator/ReswCodeGen.CustomTool/CodeGeneratorFactory.cs b/RESW File Code Generator/ReswCodeGen.CustomTool/CodeGeneratorFactory.cs
index fedb0aa..5ad3ace 100644
--- a/RESW File Code Generator/ReswCodeGen.CustomTool/CodeGeneratorFactory.cs
+++ b/RESW File Code Generator/ReswCodeGen.CustomTool/CodeGeneratorFactory.cs
@@ -4,9 +4,9 @@ namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.CustomTool
{
public class CodeGeneratorFactory
{
- public ICodeGenerator Create(string defaultNamespace, string inputFileContents, CodeDomProvider codeDomProvider = null)
+ public ICodeGenerator Create(string className, string defaultNamespace, string inputFileContents, CodeDomProvider codeDomProvider = null)
{
- return new CodeDomCodeGenerator(new ResourceParser(inputFileContents), defaultNamespace, codeDomProvider);
+ return new CodeDomCodeGenerator(new ResourceParser(inputFileContents), className, defaultNamespace, codeDomProvider);
}
}
}
diff --git a/RESW File Code Generator/ReswCodeGen.CustomTool/ReswCodeGen.CustomTool.csproj b/RESW File Code Generator/ReswCodeGen.CustomTool/ReswCodeGen.CustomTool.csproj
index b943b7a..bebaa1c 100644
--- a/RESW File Code Generator/ReswCodeGen.CustomTool/ReswCodeGen.CustomTool.csproj
+++ b/RESW File Code Generator/ReswCodeGen.CustomTool/ReswCodeGen.CustomTool.csproj
@@ -40,6 +40,7 @@
False
+ False
@@ -52,6 +53,7 @@
+
diff --git a/RESW File Code Generator/ReswCodeGen.CustomTool/ReswFileCodeGenerator.cs b/RESW File Code Generator/ReswCodeGen.CustomTool/ReswFileCodeGenerator.cs
index b0d226b..26ab725 100644
--- a/RESW File Code Generator/ReswCodeGen.CustomTool/ReswFileCodeGenerator.cs
+++ b/RESW File Code Generator/ReswCodeGen.CustomTool/ReswFileCodeGenerator.cs
@@ -21,16 +21,17 @@ namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.CustomTool
public abstract int DefaultExtension(out string pbstrDefaultExtension);
public virtual int Generate(string wszInputFilePath,
- string bstrInputFileContents,
- string wszDefaultNamespace,
- IntPtr[] rgbOutputFileContents,
- out uint pcbOutput,
- IVsGeneratorProgress pGenerateProgress)
+ string bstrInputFileContents,
+ string wszDefaultNamespace,
+ IntPtr[] rgbOutputFileContents,
+ out uint pcbOutput,
+ IVsGeneratorProgress pGenerateProgress)
{
try
{
+ var className = ClassNameExtractor.GetClassName(wszInputFilePath);
var factory = new CodeGeneratorFactory();
- var codeGenerator = factory.Create(wszDefaultNamespace, bstrInputFileContents, codeDomProvider);
+ var codeGenerator = factory.Create(className, wszDefaultNamespace, bstrInputFileContents, codeDomProvider);
var code = codeGenerator.GenerateCode();
var data = Encoding.UTF8.GetBytes(code);
diff --git a/RESW File Code Generator/ReswCodeGen.Tests/ClassNameExtractorTests.cs b/RESW File Code Generator/ReswCodeGen.Tests/ClassNameExtractorTests.cs
new file mode 100644
index 0000000..04dcf31
--- /dev/null
+++ b/RESW File Code Generator/ReswCodeGen.Tests/ClassNameExtractorTests.cs
@@ -0,0 +1,33 @@
+using System.IO;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+
+namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.CustomTool.Tests
+{
+ [TestClass]
+ [DeploymentItem("Resources/Resources.resw")]
+ public class ClassNameExtractorTests
+ {
+ private const string ClassName = "Resources.resw";
+
+ [TestMethod]
+ public void DoesNotReturnNull()
+ {
+ var actual = ClassNameExtractor.GetClassName(ClassName);
+ Assert.IsNotNull(actual);
+ }
+
+ [TestMethod]
+ public void ReturnsFileNameWithoutExtension()
+ {
+ var actual = ClassNameExtractor.GetClassName(ClassName);
+ Assert.AreEqual("Resources", actual);
+ }
+
+ [TestMethod]
+ [ExpectedException(typeof(FileNotFoundException))]
+ public void ThrowsFileNotFoundException()
+ {
+ ClassNameExtractor.GetClassName("C:\\Test\\Resources\\Strings.resw");
+ }
+ }
+}
diff --git a/RESW File Code Generator/ReswCodeGen.Tests/CodeGeneratorFactoryTests.cs b/RESW File Code Generator/ReswCodeGen.Tests/CodeGeneratorFactoryTests.cs
index 31a7f7e..badfd58 100644
--- a/RESW File Code Generator/ReswCodeGen.Tests/CodeGeneratorFactoryTests.cs
+++ b/RESW File Code Generator/ReswCodeGen.Tests/CodeGeneratorFactoryTests.cs
@@ -8,6 +8,7 @@ namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.CustomTool.Tests
public class CodeGeneratorFactoryTests
{
private string reswFileContents;
+ private const string ClassName = "C:\\Test\\Resources\\Strings.resw";
[TestInitialize]
public void Initialize()
@@ -19,7 +20,7 @@ namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.CustomTool.Tests
public void CodeGeneratorFactoryReturnsValidInstance()
{
var target = new CodeGeneratorFactory();
- var actual = target.Create("TestApp", reswFileContents);
+ var actual = target.Create(ClassName, "TestApp", reswFileContents);
Assert.IsNotNull(actual);
}
}
diff --git a/RESW File Code Generator/ReswCodeGen.Tests/CodeGeneratorTests.cs b/RESW File Code Generator/ReswCodeGen.Tests/CodeGeneratorTests.cs
index 38bf893..e1fd066 100644
--- a/RESW File Code Generator/ReswCodeGen.Tests/CodeGeneratorTests.cs
+++ b/RESW File Code Generator/ReswCodeGen.Tests/CodeGeneratorTests.cs
@@ -1,4 +1,3 @@
-using System.Diagnostics;
using System.IO;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
@@ -6,32 +5,34 @@ using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.CustomTool.Tests
{
[TestClass]
- [DeploymentItem("Resources/Valid/Resources.resw")]
+ [DeploymentItem("Resources/Resources.resw")]
public class CodeGeneratorTests
{
private string reswFileContents;
+ private const string FilePath = "Resources.resw";
+ private string actual;
+ private ICodeGenerator target;
[TestInitialize]
public void Initialize()
{
- reswFileContents = File.ReadAllText("Resources.resw");
+ reswFileContents = File.ReadAllText(FilePath);
+
+ target = new CodeGeneratorFactory().Create(FilePath, "TestApp", reswFileContents);
+ actual = target.GenerateCode();
}
[TestMethod]
public void GenerateCodeDoesNotReturnNull()
{
- var target = new CodeGeneratorFactory().Create("TestApp", reswFileContents);
- var actual = target.GenerateCode();
Assert.IsNotNull(actual);
}
[TestMethod]
public void GeneratedCodeContainsPropertiesDefinedInResources()
{
- var target = new CodeGeneratorFactory().Create("TestApp", reswFileContents);
var resourceItems = target.ResourceParser.Parse();
- var actual = target.GenerateCode();
-
+
foreach (var item in resourceItems.Where(item => !item.Name.Contains(".")))
Assert.IsTrue(actual.Contains("public static string " + item.Name));
}
@@ -39,12 +40,16 @@ namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.CustomTool.Tests
[TestMethod]
public void GeneratedCodePropertiesContainsCommentsSimilarToValuesDefinedInResources()
{
- var target = new CodeGeneratorFactory().Create("TestApp", reswFileContents);
var resourceItems = target.ResourceParser.Parse();
- var actual = target.GenerateCode();
-
+
foreach (var item in resourceItems.Where(item => !item.Name.Contains(".")))
Assert.IsTrue(actual.Contains("Localized resource similar to \"" + item.Value + "\""));
}
+
+ [TestMethod]
+ public void ClassNameEqualsFileNameWithoutExtension()
+ {
+ Assert.IsTrue(actual.Contains("class Resources"));
+ }
}
}
\ No newline at end of file
diff --git a/RESW File Code Generator/ReswCodeGen.Tests/ReswCodeGen.Tests.csproj b/RESW File Code Generator/ReswCodeGen.Tests/ReswCodeGen.Tests.csproj
index dba6357..48b41e2 100644
--- a/RESW File Code Generator/ReswCodeGen.Tests/ReswCodeGen.Tests.csproj
+++ b/RESW File Code Generator/ReswCodeGen.Tests/ReswCodeGen.Tests.csproj
@@ -55,6 +55,7 @@
+