diff --git a/RESW File Code Generator/ReswCodeGen.Tests/CSharpCodeGeneratorTests.cs b/RESW File Code Generator/ReswCodeGen.Tests/CSharpCodeGeneratorTests.cs
index dc8ee4c..fd10f52 100644
--- a/RESW File Code Generator/ReswCodeGen.Tests/CSharpCodeGeneratorTests.cs
+++ b/RESW File Code Generator/ReswCodeGen.Tests/CSharpCodeGeneratorTests.cs
@@ -10,16 +10,16 @@ namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.CustomTool.Tests
public class CSharpCodeGeneratorTests
{
private string reswFileContents;
- private const string FilePath = "Resources.resw";
+ private const string FILE_PATH = "Resources.resw";
private string actual;
private ICodeGenerator target;
[TestInitialize]
public void Initialize()
{
- reswFileContents = File.ReadAllText(FilePath);
+ reswFileContents = File.ReadAllText(FILE_PATH);
- target = new CodeGeneratorFactory().Create(FilePath.Replace(".resw", string.Empty), "TestApp", reswFileContents);
+ target = new CodeGeneratorFactory().Create(FILE_PATH.Replace(".resw", string.Empty), "TestApp", reswFileContents);
actual = target.GenerateCode();
}
diff --git a/RESW File Code Generator/ReswCodeGen.Tests/CSharpCodeGeneratorTestsInternal.cs b/RESW File Code Generator/ReswCodeGen.Tests/CSharpCodeGeneratorTestsInternal.cs
new file mode 100644
index 0000000..b407c01
--- /dev/null
+++ b/RESW File Code Generator/ReswCodeGen.Tests/CSharpCodeGeneratorTestsInternal.cs
@@ -0,0 +1,63 @@
+using System.CodeDom;
+using System.IO;
+using System.Linq;
+using ChristianHelle.DeveloperTools.CodeGenerators.Resw.VSPackage.CustomTool;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+
+namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.CustomTool.Tests
+{
+ [TestClass]
+ [DeploymentItem("Resources/Resources.resw")]
+ public class CSharpCodeGeneratorTestsInternal
+ {
+ private string reswFileContents;
+ private const string FILE_PATH = "Resources.resw";
+ private string actual;
+ private ICodeGenerator target;
+
+ [TestInitialize]
+ public void Initialize()
+ {
+ reswFileContents = File.ReadAllText(FILE_PATH);
+
+ target = new CodeGeneratorFactory().Create(FILE_PATH.Replace(".resw", string.Empty), "TestApp", reswFileContents, classAccessibility: MemberAttributes.Assembly);
+ actual = target.GenerateCode();
+ }
+
+ [TestMethod]
+ public void GenerateCodeDoesNotReturnNull()
+ {
+ Assert.IsNotNull(actual);
+ }
+
+ [TestMethod]
+ public void GeneratedCodeContainsPropertiesDefinedInResources()
+ {
+ var resourceItems = target.ResourceParser.Parse();
+
+ foreach (var item in resourceItems.Where(item => !item.Name.Contains(".")))
+ Assert.IsTrue(actual.Contains("public static string " + item.Name));
+ }
+
+ [TestMethod]
+ public void GeneratedCodePropertiesContainsCommentsSimilarToValuesDefinedInResources()
+ {
+ var resourceItems = target.ResourceParser.Parse();
+
+ 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"));
+ }
+
+ [TestMethod]
+ public void ResourceLoaderInitializedWithClassName()
+ {
+ Assert.IsTrue(actual.Contains("new ResourceLoader(currentAssemblyName + \"/Resources\");"));
+ }
+ }
+}
\ No newline at end of file
diff --git a/RESW File Code Generator/ReswCodeGen.Tests/CodeGeneratorFactoryTests.cs b/RESW File Code Generator/ReswCodeGen.Tests/CodeGeneratorFactoryTests.cs
index 5fb3429..500829c 100644
--- a/RESW File Code Generator/ReswCodeGen.Tests/CodeGeneratorFactoryTests.cs
+++ b/RESW File Code Generator/ReswCodeGen.Tests/CodeGeneratorFactoryTests.cs
@@ -9,7 +9,7 @@ namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.CustomTool.Tests
public class CodeGeneratorFactoryTests
{
private string reswFileContents;
- private const string ClassName = "C:\\Test\\Resources\\Strings.resw";
+ private const string CLASS_NAME = "C:\\Test\\Resources\\Strings.resw";
[TestInitialize]
public void Initialize()
@@ -21,7 +21,7 @@ namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.CustomTool.Tests
public void CodeGeneratorFactoryReturnsValidInstance()
{
var target = new CodeGeneratorFactory();
- var actual = target.Create(ClassName, "TestApp", reswFileContents);
+ var actual = target.Create(CLASS_NAME, "TestApp", reswFileContents);
Assert.IsNotNull(actual);
}
}
diff --git a/RESW File Code Generator/ReswCodeGen.Tests/ReswCodeGen.Tests.csproj b/RESW File Code Generator/ReswCodeGen.Tests/ReswCodeGen.Tests.csproj
index a3757a6..08deaf1 100644
--- a/RESW File Code Generator/ReswCodeGen.Tests/ReswCodeGen.Tests.csproj
+++ b/RESW File Code Generator/ReswCodeGen.Tests/ReswCodeGen.Tests.csproj
@@ -58,6 +58,7 @@
+
diff --git a/RESW File Code Generator/ReswCodeGen.Tests/StringExtensionTests.cs b/RESW File Code Generator/ReswCodeGen.Tests/StringExtensionTests.cs
index fce4463..74cb2c8 100644
--- a/RESW File Code Generator/ReswCodeGen.Tests/StringExtensionTests.cs
+++ b/RESW File Code Generator/ReswCodeGen.Tests/StringExtensionTests.cs
@@ -1,5 +1,4 @@
using System;
-using System.IO;
using System.Runtime.InteropServices;
using ChristianHelle.DeveloperTools.CodeGenerators.Resw.VSPackage.CustomTool;
using Microsoft.VisualStudio.TestTools.UnitTesting;
@@ -10,19 +9,31 @@ namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.CustomTool.Tests
[DeploymentItem("Resources/Resources.resw")]
public class StringExtensionTests
{
- private const string FILE_PATH = "Resources.resw";
+ const string TEXT = "test";
[TestMethod]
- public void LineEndingsAreSame()
+ public void ConvertToIntPtrDoesNotReturnZero()
{
- var reswFileContents = File.ReadAllText(FILE_PATH);
- var target = new CodeGeneratorFactory().Create(FILE_PATH.Replace(".resw", string.Empty), "TestApp", reswFileContents);
- var expected = target.GenerateCode();
+ uint len;
+ var ptr = TEXT.ConvertToIntPtr(out len);
+ Assert.AreNotEqual(IntPtr.Zero, ptr);
+ }
- uint length;
- var ptr = expected.ConvertToIntPtr(out length);
- var actual = Marshal.PtrToStringAnsi(ptr);
- Assert.AreEqual(expected, actual);
+ [TestMethod]
+ public void ConvertToIntPtrReturnsStringLengthAsParameter()
+ {
+ uint len;
+ TEXT.ConvertToIntPtr(out len);
+ Assert.AreNotEqual(TEXT.Length, len);
+ }
+
+ [TestMethod]
+ public void ConvertToIntPtrConvertsCorrectString()
+ {
+ uint len;
+ var ptr = TEXT.ConvertToIntPtr(out len);
+ var str = Marshal.PtrToStringAnsi(ptr, (int) len);
+ Assert.AreEqual(TEXT, str);
}
}
}
diff --git a/RESW File Code Generator/VSPackage/Properties/AssemblyInfo.cs b/RESW File Code Generator/VSPackage/Properties/AssemblyInfo.cs
index 9c1a109..ef9c959 100644
--- a/RESW File Code Generator/VSPackage/Properties/AssemblyInfo.cs
+++ b/RESW File Code Generator/VSPackage/Properties/AssemblyInfo.cs
@@ -29,7 +29,7 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
-[assembly: AssemblyVersion("1.0.4.*")]
+[assembly: AssemblyVersion("1.0.5.*")]
[assembly: InternalsVisibleTo("VSPackage_IntegrationTests, PublicKey=002400000480000094000000060200000024000052534131000400000100010045bd05a5b24c74b83f069df52e138682c2fb8b1ee65cb9d351fd7e8d622308aeb588b2a2975d75da4fe8a392510528baa26a3317809ec064d3cc852f0df94752ad2228d9f2a048ee2858c1e9d505b05f7fb4ede02f34154f75ea50445741c84f5ab1c814358f5fd6a6f08bb3d94284cff0524d5ca9d888c8648bcbc7a1e0a3c8")]
[assembly: InternalsVisibleTo("VSPackage_UnitTests, PublicKey=002400000480000094000000060200000024000052534131000400000100010045bd05a5b24c74b83f069df52e138682c2fb8b1ee65cb9d351fd7e8d622308aeb588b2a2975d75da4fe8a392510528baa26a3317809ec064d3cc852f0df94752ad2228d9f2a048ee2858c1e9d505b05f7fb4ede02f34154f75ea50445741c84f5ab1c814358f5fd6a6f08bb3d94284cff0524d5ca9d888c8648bcbc7a1e0a3c8")]
diff --git a/RESW File Code Generator/VSPackage/VSPackage.csproj b/RESW File Code Generator/VSPackage/VSPackage.csproj
index a03bc30..7a7f712 100644
--- a/RESW File Code Generator/VSPackage/VSPackage.csproj
+++ b/RESW File Code Generator/VSPackage/VSPackage.csproj
@@ -119,6 +119,7 @@
+
@@ -140,7 +141,7 @@
Resources.resx
-
+
diff --git a/RESW File Code Generator/VSPackage/VSPackage_UnitTests/PackageTest.cs b/RESW File Code Generator/VSPackage/VSPackage_UnitTests/PackageTest.cs
index 22eb379..104fe7d 100644
--- a/RESW File Code Generator/VSPackage/VSPackage_UnitTests/PackageTest.cs
+++ b/RESW File Code Generator/VSPackage/VSPackage_UnitTests/PackageTest.cs
@@ -26,13 +26,13 @@ namespace VSPackage_UnitTests
[TestMethod()]
public void CreateInstance()
{
- VSPackagePackage package = new VSPackagePackage();
+ VisualStudio2012Package package = new VisualStudio2012Package();
}
[TestMethod()]
public void IsIVsPackage()
{
- VSPackagePackage package = new VSPackagePackage();
+ VisualStudio2012Package package = new VisualStudio2012Package();
Assert.IsNotNull(package as IVsPackage, "The object does not implement IVsPackage");
}
@@ -40,7 +40,7 @@ namespace VSPackage_UnitTests
public void SetSite()
{
// Create the package
- IVsPackage package = new VSPackagePackage() as IVsPackage;
+ IVsPackage package = new VisualStudio2012Package() as IVsPackage;
Assert.IsNotNull(package, "The object does not implement IVsPackage");
// Create a basic service provider
diff --git a/RESW File Code Generator/VSPackage/VSPackagePackage.cs b/RESW File Code Generator/VSPackage/VisualStudio2012Package.cs
similarity index 83%
rename from RESW File Code Generator/VSPackage/VSPackagePackage.cs
rename to RESW File Code Generator/VSPackage/VisualStudio2012Package.cs
index 3b3c08a..6134de4 100644
--- a/RESW File Code Generator/VSPackage/VSPackagePackage.cs
+++ b/RESW File Code Generator/VSPackage/VisualStudio2012Package.cs
@@ -29,9 +29,11 @@ namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.VSPackage
[ProvideObject(typeof(ReswFileVisualBasicCodeGenerator))]
[ProvideGeneratorAttribute(typeof(ReswFileCSharpCodeGenerator), "ReswFileCodeGenerator", "ResW File Code Generator for C#", "{FAE04EC1-301F-11D3-BF4B-00C04F79EFBC}", true)] // csharp
[ProvideGeneratorAttribute(typeof(ReswFileVisualBasicCodeGenerator), "ReswFileCodeGenerator", "ResW File Code Generator for VB", "{164B10B9-B200-11D0-8C61-00A0C91E29D5}", true)] // visual basic
- [ProvideGeneratorAttribute(typeof(ReswFileCSharpCodeGeneratorInternal), "ReswFileCodeGeneratorInternal", "ResW File Code Generator for C#", "{151F74CA-404D-4188-B994-D7683C32ACF4}", true)] // csharp
- [ProvideGeneratorAttribute(typeof(ReswFileVisualBasicCodeGeneratorInternal), "ReswFileCodeGeneratorInternal", "ResW File Code Generator for VB", "{6C6AC14F-9B11-47C1-BC90-DFBFB89B1CB8}", true)] // visual basic
- public sealed class VSPackagePackage : Package
+ [ProvideGeneratorAttribute(typeof(ReswFileCSharpCodeGenerator), "PublicReswFileCodeGenerator", "ResW File Code Generator for C#", "{FAE04EC1-301F-11D3-BF4B-00C04F79EFBC}", true)] // csharp
+ [ProvideGeneratorAttribute(typeof(ReswFileVisualBasicCodeGenerator), "PublicReswFileCodeGenerator", "ResW File Code Generator for VB", "{164B10B9-B200-11D0-8C61-00A0C91E29D5}", true)] // visual basic
+ [ProvideGeneratorAttribute(typeof(ReswFileCSharpCodeGeneratorInternal), "InternalReswFileCodeGenerator", "ResW File Code Generator for C#", "{151F74CA-404D-4188-B994-D7683C32ACF4}", true)] // csharp
+ [ProvideGeneratorAttribute(typeof(ReswFileVisualBasicCodeGeneratorInternal), "InternalReswFileCodeGenerator", "ResW File Code Generator for VB", "{6C6AC14F-9B11-47C1-BC90-DFBFB89B1CB8}", true)] // visual basic
+ public sealed class VisualStudio2012Package : Package
{
///
/// Default constructor of the package.
@@ -40,7 +42,7 @@ namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.VSPackage
/// not sited yet inside Visual Studio environment. The place to do all the other
/// initialization is the Initialize method.
///
- public VSPackagePackage()
+ public VisualStudio2012Package()
{
Debug.WriteLine(string.Format(CultureInfo.CurrentCulture, "Entering constructor for: {0}", this.ToString()));
}
diff --git a/RESW File Code Generator/VSPackage/VisualStudio2013Package.cs b/RESW File Code Generator/VSPackage/VisualStudio2013Package.cs
new file mode 100644
index 0000000..2236e57
--- /dev/null
+++ b/RESW File Code Generator/VSPackage/VisualStudio2013Package.cs
@@ -0,0 +1,69 @@
+using ChristianHelle.DeveloperTools.CodeGenerators.Resw.VSPackage.CustomTool;
+using Microsoft.VisualStudio.Shell;
+using Microsoft.VisualStudio.Shell.Design.Serialization;
+using System.Diagnostics;
+using System.Globalization;
+using System.Runtime.InteropServices;
+
+namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.VSPackage
+{
+ ///
+ /// This is the class that implements the package exposed by this assembly.
+ ///
+ /// The minimum requirement for a class to be considered a valid package for Visual Studio
+ /// is to implement the IVsPackage interface and register itself with the shell.
+ /// This package uses the helper classes defined inside the Managed Package Framework (MPF)
+ /// to do it: it derives from the Package class that provides the implementation of the
+ /// IVsPackage interface and uses the registration attributes defined in the framework to
+ /// register itself and its components with the shell.
+ ///
+ // This attribute tells the PkgDef creation utility (CreatePkgDef.exe) that this class is
+ // a package.
+ [PackageRegistration(UseManagedResourcesOnly = true)]
+ // This attribute is used to register the information needed to show this package
+ // in the Help/About dialog of Visual Studio.
+ [InstalledProductRegistration("#110", "#112", "1.0", IconResourceID = 400)]
+ [Guid(GuidList.guidVSPackagePkgString)]
+ [DefaultRegistryRoot("Software\\Microsoft\\VisualStudio\\12.0")]
+ [ProvideObject(typeof(ReswFileCSharpCodeGenerator))]
+ [ProvideObject(typeof(ReswFileVisualBasicCodeGenerator))]
+ [ProvideGeneratorAttribute(typeof(ReswFileCSharpCodeGenerator), "ReswFileCodeGenerator", "ResW File Code Generator for C#", "{FAE04EC1-301F-11D3-BF4B-00C04F79EFBC}", true)] // csharp
+ [ProvideGeneratorAttribute(typeof(ReswFileVisualBasicCodeGenerator), "ReswFileCodeGenerator", "ResW File Code Generator for VB", "{164B10B9-B200-11D0-8C61-00A0C91E29D5}", true)] // visual basic
+ [ProvideGeneratorAttribute(typeof(ReswFileCSharpCodeGenerator), "PublicReswFileCodeGenerator", "ResW File Code Generator for C#", "{FAE04EC1-301F-11D3-BF4B-00C04F79EFBC}", true)] // csharp
+ [ProvideGeneratorAttribute(typeof(ReswFileVisualBasicCodeGenerator), "PublicReswFileCodeGenerator", "ResW File Code Generator for VB", "{164B10B9-B200-11D0-8C61-00A0C91E29D5}", true)] // visual basic
+ [ProvideGeneratorAttribute(typeof(ReswFileCSharpCodeGeneratorInternal), "InternalReswFileCodeGenerator", "ResW File Code Generator for C#", "{151F74CA-404D-4188-B994-D7683C32ACF4}", true)] // csharp
+ [ProvideGeneratorAttribute(typeof(ReswFileVisualBasicCodeGeneratorInternal), "InternalReswFileCodeGenerator", "ResW File Code Generator for VB", "{6C6AC14F-9B11-47C1-BC90-DFBFB89B1CB8}", true)] // visual basic
+ public sealed class VisualStudio2013Package : Package
+ {
+ ///
+ /// Default constructor of the package.
+ /// Inside this method you can place any initialization code that does not require
+ /// any Visual Studio service because at this point the package object is created but
+ /// not sited yet inside Visual Studio environment. The place to do all the other
+ /// initialization is the Initialize method.
+ ///
+ public VisualStudio2013Package()
+ {
+ Debug.WriteLine(string.Format(CultureInfo.CurrentCulture, "Entering constructor for: {0}", this.ToString()));
+ }
+
+
+
+ /////////////////////////////////////////////////////////////////////////////
+ // Overridden Package Implementation
+ #region Package Members
+
+ ///
+ /// Initialization of the package; this method is called right after the package is sited, so this is the place
+ /// where you can put all the initialization code that rely on services provided by VisualStudio.
+ ///
+ protected override void Initialize()
+ {
+ Debug.WriteLine (string.Format(CultureInfo.CurrentCulture, "Entering Initialize() of: {0}", this.ToString()));
+ base.Initialize();
+
+ }
+ #endregion
+
+ }
+}
diff --git a/RESW File Code Generator/VSPackage/source.extension.vsixmanifest b/RESW File Code Generator/VSPackage/source.extension.vsixmanifest
index ee25adc..dd3e688 100644
--- a/RESW File Code Generator/VSPackage/source.extension.vsixmanifest
+++ b/RESW File Code Generator/VSPackage/source.extension.vsixmanifest
@@ -4,7 +4,7 @@
xmlns:d="http://schemas.microsoft.com/developer/vsx-schema-design/2011">
ResW File Code Generator
@@ -13,8 +13,8 @@
License.txt
-
+