Index: visual_studio/NativeClientVSAddIn/UnitTests/ProjectSettingsTest.cs |
diff --git a/visual_studio/NativeClientVSAddIn/UnitTests/ProjectSettingsTest.cs b/visual_studio/NativeClientVSAddIn/UnitTests/ProjectSettingsTest.cs |
index be0b611fc0c88b35f76b1e4232bd245df552739c..8035b53f41ca0527c8d174c967e5c54b076cafbd 100644 |
--- a/visual_studio/NativeClientVSAddIn/UnitTests/ProjectSettingsTest.cs |
+++ b/visual_studio/NativeClientVSAddIn/UnitTests/ProjectSettingsTest.cs |
@@ -19,21 +19,13 @@ namespace UnitTests |
public class ProjectSettingsTest |
{ |
/// <summary> |
- /// The ProjectSettingsTest solution is a valid nacl/pepper plug-in VS solution |
- /// that has not had the custom platforms added (PPAPI and NaCl). Immediately |
- /// before these unit tests are run the project is copied into the testing |
- /// deployment directory, and the custom platforms are added to this copy so that |
- /// the project settings are based on the most recent template. Because unit-tests |
- /// run in any order, the solution should not be written to in any test. |
+ /// This holds the path to the NaCl solution used in these tests. |
+ /// The NaCl solution is a valid nacl/pepper plug-in VS solution. |
+ /// It is copied into the testing deployment directory and opened in some tests. |
+ /// Because unit-tests run in any order, the solution should not be written to |
+ /// in any tests. |
/// </summary> |
- private const string ProjectSettingsTestSolution = |
- @"\ProjectSettingsTest\ProjectSettingsTest.sln"; |
- |
- /// <summary> |
- /// This is the project corresponding to ProjectSettingsTestSolution. |
- /// </summary> |
- private const string ProjectSettingsTestProject = |
- @"ProjectSettingsTest\ProjectSettingsTest.vcxproj"; |
+ private static string naclSolution; |
/// <summary> |
/// The main visual studio object. |
@@ -57,37 +49,16 @@ namespace UnitTests |
public TestContext TestContext { get; set; } |
/// <summary> |
- /// This is run one time before any test methods are called. Here we set-up the testing copy |
- /// of ProjectSettingsTest to use the most up-to-date custom project settings. |
+ /// This is run one time before any test methods are called. Here we set-up a test-copy of a |
+ /// new NaCl solution for use in the tests. |
/// </summary> |
/// <param name="testContext">Holds information about the current test run</param> |
[ClassInitialize] |
public static void ClassSetup(TestContext testContext) |
{ |
- DTE2 dte = null; |
- try |
- { |
- dte = TestUtilities.StartVisualStudioInstance(); |
- dte.Solution.Open(testContext.DeploymentDirectory + ProjectSettingsTestSolution); |
- Project proj = dte.Solution.Projects.Item(ProjectSettingsTestProject); |
- |
- proj.ConfigurationManager.AddPlatform( |
- NativeClientVSAddIn.Strings.PepperPlatformName, |
- NativeClientVSAddIn.Strings.PepperPlatformName, |
- true); |
- |
- proj.ConfigurationManager.AddPlatform( |
- NativeClientVSAddIn.Strings.NaClPlatformName, |
- NativeClientVSAddIn.Strings.NaClPlatformName, |
- true); |
- |
- proj.Save(); |
- dte.Solution.SaveAs(testContext.DeploymentDirectory + ProjectSettingsTestSolution); |
- } |
- finally |
- { |
- TestUtilities.CleanUpVisualStudioInstance(dte); |
- } |
+ naclSolution = TestUtilities.CreateBlankValidNaClSolution( |
+ "ProjectSettingsTest", |
+ testContext); |
} |
/// <summary> |
@@ -117,8 +88,8 @@ namespace UnitTests |
string page; |
// Extract the debug and release configurations for Pepper from the project. |
- dte_.Solution.Open(TestContext.DeploymentDirectory + ProjectSettingsTestSolution); |
- Project project = dte_.Solution.Projects.Item(ProjectSettingsTestProject); |
+ dte_.Solution.Open(naclSolution); |
+ Project project = dte_.Solution.Projects.Item(TestUtilities.BlankNaClProjectUniqueName); |
Assert.IsNotNull(project, "Testing project was not found"); |
string pepperPlatform = NativeClientVSAddIn.Strings.PepperPlatformName; |
debug_ = TestUtilities.GetVCConfiguration(project, "Debug", pepperPlatform); |
@@ -135,10 +106,7 @@ namespace UnitTests |
// Debugging |
page = "WindowsLocalDebugger"; |
AllConfigsAssertPropertyEquals( |
- page, |
- "LocalDebuggerCommand", |
- @"$(CHROME_PATH)\chrome.exe", |
- true); |
+ page, "LocalDebuggerCommand", @"$(CHROME_PATH)\chrome.exe", true); |
AllConfigsAssertPropertyEquals( |
page, |
"LocalDebuggerCommandArguments", |
@@ -149,7 +117,8 @@ namespace UnitTests |
page = "ConfigurationDirectories"; |
AllConfigsAssertPropertyContains(page, "IncludePath", @"$(VSNaClSDKRoot)include;", true); |
AllConfigsAssertPropertyContains(page, "IncludePath", @"$(VCInstallDir)include", true); |
- AllConfigsAssertPropertyContains(page, "LibraryPath", @"$(VSNaClSDKRoot)lib;", true); |
+ AllConfigsAssertPropertyContains( |
+ page, "LibraryPath", @"$(VSNaClSDKRoot)lib\win_x86_32_host;", true); |
AllConfigsAssertPropertyContains(page, "LibraryPath", @"$(VCInstallDir)lib", true); |
// C/C++ Code Generation |
@@ -162,10 +131,136 @@ namespace UnitTests |
false); |
TestUtilities.AssertPropertyEquals(release_, page, "RuntimeLibrary", "MultiThreaded", false); |
+ // C/C++ Preprocessor |
+ AllConfigsAssertPropertyContains(page, "PreprocessorDefinitions", "PPAPI", false); |
+ |
+ // Linker Input |
+ page = "Link"; |
+ AllConfigsAssertPropertyContains(page, "AdditionalDependencies", "ppapi_cpp.lib", true); |
+ AllConfigsAssertPropertyContains(page, "AdditionalDependencies", "ppapi.lib", true); |
+ } |
+ |
+ /// <summary> |
+ /// Test method to check that the NaCl platform template correctly sets default values. |
+ /// </summary> |
+ [TestMethod] |
+ public void VerifyDefaultNaClSettings() |
+ { |
+ string page; |
+ |
+ // Extract the debug and release configurations for NaCl from the project. |
+ dte_.Solution.Open(naclSolution); |
+ Project project = dte_.Solution.Projects.Item(TestUtilities.BlankNaClProjectUniqueName); |
+ Assert.IsNotNull(project, "Testing project was not found"); |
+ string naclPlatform = NativeClientVSAddIn.Strings.NaClPlatformName; |
+ debug_ = TestUtilities.GetVCConfiguration(project, "Debug", naclPlatform); |
+ release_ = TestUtilities.GetVCConfiguration(project, "Release", naclPlatform); |
+ |
+ // General |
+ page = "ConfigurationGeneral"; |
+ AllConfigsAssertPropertyEquals(page, "OutDir", @"$(ProjectDir)$(ToolchainName)\", true); |
+ AllConfigsAssertPropertyEquals( |
+ page, "IntDir", @"$(ProjectDir)Intermediate\$(ToolchainName)\", true); |
+ AllConfigsAssertPropertyEquals(page, "TargetExt", ".nexe", true); |
+ AllConfigsAssertPropertyEquals(page, "ToolchainName", "newlib", true); |
+ AllConfigsAssertPropertyEquals(page, "PlatformToolset", "win_x86_$(ToolchainName)", true); |
+ AllConfigsAssertPropertyEquals(page, "ConfigurationType", "Application", true); |
+ AllConfigsAssertPropertyEquals(page, "TargetArchitecture", "x86_64", true); |
+ AllConfigsAssertPropertyEquals(page, "VSNaClSDKRoot", @"$(NACL_SDK_ROOT)\", false); |
+ |
+ // Debugging |
+ page = "WindowsLocalDebugger"; |
+ AllConfigsAssertPropertyEquals( |
+ page, "LocalDebuggerCommand", @"$(CHROME_PATH)\chrome.exe", true); |
+ AllConfigsAssertPropertyEquals( |
+ page, "LocalDebuggerCommandArguments", @"--enable-nacl-debug localhost:5103", true); |
+ |
+ // VC++ Directories |
+ page = "ConfigurationDirectories"; |
+ AllConfigsAssertPropertyContains(page, "IncludePath", @"$(VSNaClSDKRoot)include;", true); |
+ AllConfigsAssertPropertyContains(page, "LibraryPath", @"$(VSNaClSDKRoot)lib;", true); |
+ |
+ // C/C++ General |
+ page = "CL"; |
+ TestUtilities.AssertPropertyEquals( |
+ debug_, |
+ page, |
+ "GenerateDebuggingInformation", |
+ "true", |
+ false); |
+ TestUtilities.AssertPropertyEquals( |
+ release_, |
+ page, |
+ "GenerateDebuggingInformation", |
+ "false", |
+ false); |
+ |
+ AllConfigsAssertPropertyEquals(page, "Warnings", "NormalWarnings", true); |
+ AllConfigsAssertPropertyEquals(page, "WarningsAsErrors", "false", true); |
+ AllConfigsAssertPropertyEquals(page, "OutputCommandLine", "false", true); |
+ AllConfigsAssertPropertyEquals(page, "ConfigurationType", "$(ConfigurationType)", true); |
+ AllConfigsAssertPropertyEquals(page, "UserHeaderDependenciesOnly", "true", true); |
+ |
+ // C/C++ Optimization |
+ TestUtilities.AssertPropertyEquals(debug_, page, "OptimizationLevel", "O0", false); |
+ TestUtilities.AssertPropertyEquals(release_, page, "OptimizationLevel", "O3", false); |
+ |
+ // C/C++ Preprocessor |
+ AllConfigsAssertPropertyContains(page, "PreprocessorDefinitions", "NaCl", false); |
+ |
+ // C/C++ Code Generation |
+ AllConfigsAssertPropertyEquals(page, "ExceptionHandling", "true", false); |
+ |
+ // C/C++ Output Files |
+ AllConfigsAssertPropertyEquals(page, "ObjectFileName", @"$(IntDir)%(FileName).o", false); |
+ |
+ // C/C++ Advanced |
+ AllConfigsAssertPropertyEquals(page, "CompileAs", "Default", true); |
+ |
// Linker Input |
page = "Link"; |
- AllConfigsAssertPropertyContains(page, "AdditionalDependencies", "ppapi_cpp.lib", false); |
- AllConfigsAssertPropertyContains(page, "AdditionalDependencies", "ppapi.lib", false); |
+ AllConfigsAssertPropertyContains(page, "AdditionalDependencies", "ppapi_cpp;ppapi", true); |
+ } |
+ |
+ /// <summary> |
+ /// Test method to check that the NaCl platform compiles a test project. |
+ /// </summary> |
+ [TestMethod] |
+ public void CheckNaClCompile() |
+ { |
+ dte_.Solution.Open(naclSolution); |
+ TestUtilities.SetSolutionConfiguration( |
+ dte_, |
+ TestUtilities.BlankNaClProjectUniqueName, |
+ "Debug", |
+ NativeClientVSAddIn.Strings.NaClPlatformName); |
+ dte_.Solution.SolutionBuild.Build(true); |
+ string compileOutput = TestUtilities.GetPaneText( |
+ dte_.ToolWindows.OutputWindow.OutputWindowPanes.Item("Build")); |
+ Assert.IsTrue( |
+ compileOutput.Contains("Build succeeded.", StringComparison.InvariantCultureIgnoreCase), |
+ "Project compile failed for NaCl platform. Build output: " + compileOutput); |
+ } |
+ |
+ /// <summary> |
+ /// Test method to check that the Pepper platform compiles a test project. |
+ /// </summary> |
+ [TestMethod] |
+ public void CheckPepperCompile() |
+ { |
+ dte_.Solution.Open(naclSolution); |
+ TestUtilities.SetSolutionConfiguration( |
+ dte_, |
+ TestUtilities.BlankNaClProjectUniqueName, |
+ "Debug", |
+ NativeClientVSAddIn.Strings.PepperPlatformName); |
+ dte_.Solution.SolutionBuild.Build(true); |
+ |
+ string compileOutput = TestUtilities.GetPaneText( |
+ dte_.ToolWindows.OutputWindow.OutputWindowPanes.Item("Build")); |
+ Assert.IsTrue( |
+ compileOutput.Contains("Build succeeded.", StringComparison.InvariantCultureIgnoreCase), |
+ "Project compile failed for Pepper platform. Build output: " + compileOutput); |
} |
/// <summary> |