Index: visual_studio/NativeClientVSAddIn/UnitTests/TestUtilities.cs |
diff --git a/visual_studio/NativeClientVSAddIn/UnitTests/TestUtilities.cs b/visual_studio/NativeClientVSAddIn/UnitTests/TestUtilities.cs |
index 570d8f3cb304ebed3041096f10422e9022920990..6bc311029378cde0d518845e806515c5e7aabc05 100644 |
--- a/visual_studio/NativeClientVSAddIn/UnitTests/TestUtilities.cs |
+++ b/visual_studio/NativeClientVSAddIn/UnitTests/TestUtilities.cs |
@@ -6,6 +6,7 @@ namespace UnitTests |
{ |
using System; |
using System.Collections.Generic; |
+ using System.IO; |
using System.Linq; |
using System.Management; |
@@ -20,7 +21,22 @@ namespace UnitTests |
public static class TestUtilities |
{ |
/// <summary> |
- /// This starts an instance of Visual Studio and get it's DTE object. |
+ /// Name of the NaCl project in BlankValidSolution. |
+ /// </summary> |
+ public const string BlankNaClProjectName = @"NaClProject"; |
+ |
+ /// <summary> |
+ /// Uniquename of the NaCl project in BlankValidSolution. |
+ /// </summary> |
+ public const string BlankNaClProjectUniqueName = @"NaClProject\NaClProject.vcxproj"; |
+ |
+ /// <summary> |
+ /// Uniquename of the non-NaCl project in BlankValidSolution. |
+ /// </summary> |
+ public const string NotNaClProjectUniqueName = @"NotNaCl\NotNaCl.csproj"; |
+ |
+ /// <summary> |
+ /// This starts an instance of Visual Studio and get its DTE object. |
/// </summary> |
/// <returns>DTE of the started instance.</returns> |
public static DTE2 StartVisualStudioInstance() |
@@ -61,6 +77,59 @@ namespace UnitTests |
} |
/// <summary> |
+ /// Creates a blank valid NaCl project with up-to-date settings. The path to the new solution |
+ /// is returned. |
+ /// </summary> |
+ /// <param name="dte">Interface to an open Visual Studio instance to use.</param> |
+ /// <param name="name">Name to give newly created solution.</param> |
+ /// <param name="pepperCopyFrom">Platform name to copy existing settings from to pepper.</param> |
+ /// <param name="naclCopyFrom">Platform name to copy existing settings from to NaCl.</param> |
+ /// <param name="testContext">Test context used for finding deployment directory.</param> |
+ /// <returns>Path to the newly created solution.</returns> |
+ public static string CreateBlankValidNaClSolution( |
+ DTE2 dte, string name, string pepperCopyFrom, string naclCopyFrom, TestContext testContext) |
+ { |
+ const string BlankSolution = "BlankValidSolution"; |
+ string newSolutionDir = Path.Combine(testContext.DeploymentDirectory, name); |
+ string newSolution = Path.Combine(newSolutionDir, BlankSolution + ".sln"); |
+ CopyDirectory(Path.Combine(testContext.DeploymentDirectory, BlankSolution), newSolutionDir); |
+ |
+ try |
+ { |
+ dte.Solution.Open(newSolution); |
+ Project proj = dte.Solution.Projects.Item(BlankNaClProjectUniqueName); |
+ |
+ // Order matters if copying from the other Native Client type. |
+ if (pepperCopyFrom.Equals(NativeClientVSAddIn.Strings.NaClPlatformName)) |
+ { |
+ proj.ConfigurationManager.AddPlatform( |
+ NativeClientVSAddIn.Strings.NaClPlatformName, naclCopyFrom, true); |
+ proj.ConfigurationManager.AddPlatform( |
+ NativeClientVSAddIn.Strings.PepperPlatformName, pepperCopyFrom, true); |
+ } |
+ else |
+ { |
+ proj.ConfigurationManager.AddPlatform( |
+ NativeClientVSAddIn.Strings.PepperPlatformName, pepperCopyFrom, true); |
+ proj.ConfigurationManager.AddPlatform( |
+ NativeClientVSAddIn.Strings.NaClPlatformName, naclCopyFrom, true); |
+ } |
+ |
+ proj.Save(); |
+ dte.Solution.SaveAs(newSolution); |
+ } |
+ finally |
+ { |
+ if (dte.Solution != null) |
+ { |
+ dte.Solution.Close(); |
+ } |
+ } |
+ |
+ return newSolution; |
+ } |
+ |
+ /// <summary> |
/// This returns the text contained in the given output window pane. |
/// </summary> |
/// <param name="pane">Pane to get text from.</param> |
@@ -279,5 +348,38 @@ namespace UnitTests |
{ |
return source.IndexOf(toCheck, comparison) != -1; |
} |
+ |
+ /// <summary> |
+ /// Copies the entire contents of a directory and sub directories. |
+ /// </summary> |
+ /// <param name="source">Directory to copy from.</param> |
+ /// <param name="dest">Directory to copy to.</param> |
+ public static void CopyDirectory(string source, string dest) |
+ { |
+ DirectoryInfo dir = new DirectoryInfo(source); |
+ |
+ if (!dir.Exists) |
+ { |
+ throw new DirectoryNotFoundException(source); |
+ } |
+ |
+ if (!Directory.Exists(dest)) |
+ { |
+ Directory.CreateDirectory(dest); |
+ } |
+ |
+ FileInfo[] files = dir.GetFiles(); |
+ foreach (FileInfo file in files) |
+ { |
+ string path = Path.Combine(dest, file.Name); |
+ file.CopyTo(path, false); |
+ } |
+ |
+ foreach (DirectoryInfo subdir in dir.GetDirectories()) |
+ { |
+ string path = Path.Combine(dest, subdir.Name); |
+ CopyDirectory(subdir.FullName, path); |
+ } |
+ } |
} |
} |