Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(601)

Unified Diff: visual_studio/NativeClientVSAddIn/UnitTests/ProjectSettingsTest.cs

Issue 10831030: NaCl settings and completed install scripts. (Closed) Base URL: https://nativeclient-sdk.googlecode.com/svn/trunk/src
Patch Set: Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..f86f92bc30281d50af3f386f87588937a138bb9f 100644
--- a/visual_studio/NativeClientVSAddIn/UnitTests/ProjectSettingsTest.cs
+++ b/visual_studio/NativeClientVSAddIn/UnitTests/ProjectSettingsTest.cs
@@ -19,21 +19,12 @@ 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.
+ /// The below string holds the path to a NaCl solution used in some tests.
+ /// A NaCl solution is a valid nacl/pepper plug-in VS solution.
+ /// It is copied into the testing deployment directory and opened in some tests.
+ /// In this solution, NaCl and pepper settings are copied from 'Empty' initial settings.
/// </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 naclSolutionEmptyInitialization;
/// <summary>
/// The main visual studio object.
@@ -57,32 +48,22 @@ 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 test-copies of
+ /// new NaCl solutions 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;
+ DTE2 dte = TestUtilities.StartVisualStudioInstance();
try
{
- dte = TestUtilities.StartVisualStudioInstance();
- dte.Solution.Open(testContext.DeploymentDirectory + ProjectSettingsTestSolution);
- Project proj = dte.Solution.Projects.Item(ProjectSettingsTestProject);
-
- proj.ConfigurationManager.AddPlatform(
+ naclSolutionEmptyInitialization = TestUtilities.CreateBlankValidNaClSolution(
+ dte,
+ "ProjectSettingsTestEmptyInit",
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);
+ testContext);
}
finally
{
@@ -109,20 +90,140 @@ namespace UnitTests
}
/// <summary>
- /// Test method to check that the PPAPI platform template correctly sets default values.
+ /// Test method to check that the NaCl platform compiles a test project.
/// </summary>
[TestMethod]
- public void VerifyDefaultPepperSettings()
+ public void CheckNaClCompile()
{
- string page;
+ string naclPlatform = NativeClientVSAddIn.Strings.NaClPlatformName;
+ TryCompile(naclSolutionEmptyInitialization, "Debug", naclPlatform);
+ TryCompile(naclSolutionEmptyInitialization, "Release", naclPlatform);
+ }
- // Extract the debug and release configurations for Pepper from the project.
- dte_.Solution.Open(TestContext.DeploymentDirectory + ProjectSettingsTestSolution);
- Project project = dte_.Solution.Projects.Item(ProjectSettingsTestProject);
- Assert.IsNotNull(project, "Testing project was not found");
+ /// <summary>
+ /// Test method to check that the Pepper platform compiles a test project.
+ /// </summary>
+ [TestMethod]
+ public void CheckPepperCompile()
+ {
string pepperPlatform = NativeClientVSAddIn.Strings.PepperPlatformName;
- debug_ = TestUtilities.GetVCConfiguration(project, "Debug", pepperPlatform);
- release_ = TestUtilities.GetVCConfiguration(project, "Release", pepperPlatform);
+ TryCompile(naclSolutionEmptyInitialization, "Debug", pepperPlatform);
+ TryCompile(naclSolutionEmptyInitialization, "Release", pepperPlatform);
+ }
+
+ /// <summary>
+ /// Test method which verifies that NaCl and pepper platforms have correct default properties
+ /// when initialized from the Win32 platform.
+ /// </summary>
+ [TestMethod]
+ public void VerifySettingsWin32Initialization()
+ {
+ string naclSolutionWin32Initialization = TestUtilities.CreateBlankValidNaClSolution(
+ dte_, "ProjectSettingsTestWin32Init", "Win32", "Win32", TestContext);
+ VerifyDefaultPepperSettings(naclSolutionWin32Initialization);
+ VerifyDefaultNaClSettings(naclSolutionWin32Initialization);
+
+ // Win32 inherit specific checks on the Pepper platform.
+ OpenSolutionAndGetProperties(
+ naclSolutionWin32Initialization, NativeClientVSAddIn.Strings.PepperPlatformName);
+
+ // When inheriting from Win32 preprocessor the PPAPI preprocessor definition gets grouped
+ // into the inherited %(PreprocessorDefinitions) variable. It still exists but doesn't appear
+ // in the property page, thus we can't check for it here.
+
+ //// TODO(tysand): When inheriting from Win32 this won't set and the Win32 platform
+ //// incorrectly(?) sets this to true in the Release config even for regular win32 projects.
+ ////TestUtilities.AssertPropertyEquals(
+ //// release_, "Link", "GenerateDebugInformation", "false", false);
+ dte_.Solution.Close();
+
+ // NaCl inherit specific checks on the NaCl platform.
+ OpenSolutionAndGetProperties(
+ naclSolutionWin32Initialization, NativeClientVSAddIn.Strings.NaClPlatformName);
+ AllConfigsAssertPropertyEquals("ConfigurationGeneral", "TargetExt", ".so", true);
+ AllConfigsAssertPropertyEquals(
+ "ConfigurationGeneral", "ConfigurationType", "DynamicLibrary", true);
+ dte_.Solution.Close();
+ }
+
+ /// <summary>
+ /// Test method which verifies that the NaCl platform has correct default properties
+ /// when initialized from the Pepper platform. And that the pepper platform has the correct
+ /// settings when initialized from the 'empty' settings.
+ /// </summary>
+ [TestMethod]
+ public void VerifySettingsPepperInitialization()
+ {
+ string naclSolutionPepperInitialization = TestUtilities.CreateBlankValidNaClSolution(
+ dte_,
+ "ProjectSettingsTestPepperInit",
+ NativeClientVSAddIn.Strings.PepperPlatformName,
+ NativeClientVSAddIn.Strings.PepperPlatformName,
+ TestContext);
+ VerifyDefaultPepperSettings(naclSolutionPepperInitialization);
+ VerifyDefaultNaClSettings(naclSolutionPepperInitialization);
+
+ // Pepper inherit specific checks on the Pepper platform.
+ OpenSolutionAndGetProperties(
+ naclSolutionPepperInitialization, NativeClientVSAddIn.Strings.PepperPlatformName);
+ AllConfigsAssertPropertyContains("CL", "PreprocessorDefinitions", "PPAPI", false);
+ TestUtilities.AssertPropertyEquals(
+ release_, "Link", "GenerateDebugInformation", "false", false);
+ dte_.Solution.Close();
+
+ // NaCl inherit specific checks on the NaCl platform.
+ OpenSolutionAndGetProperties(
+ naclSolutionPepperInitialization, NativeClientVSAddIn.Strings.NaClPlatformName);
+ AllConfigsAssertPropertyEquals("ConfigurationGeneral", "TargetExt", ".nexe", true);
+ AllConfigsAssertPropertyEquals(
+ "ConfigurationGeneral", "ConfigurationType", "Application", true);
+ dte_.Solution.Close();
+ }
+
+ /// <summary>
+ /// Test method which verifies that the Pepper platform has correct default properties
+ /// when initialized from the NaCl platform. And that the NaCl platform has the correct
+ /// settings when initialized from the 'empty' settings.
+ /// </summary>
+ [TestMethod]
+ public void VerifySettingsNaClInitialization()
+ {
+ string naclSolutionNaClInitialization = TestUtilities.CreateBlankValidNaClSolution(
+ dte_,
+ "ProjectSettingsTestNaClInit",
+ NativeClientVSAddIn.Strings.NaClPlatformName,
+ NativeClientVSAddIn.Strings.NaClPlatformName,
+ TestContext);
+ VerifyDefaultPepperSettings(naclSolutionNaClInitialization);
+ VerifyDefaultNaClSettings(naclSolutionNaClInitialization);
+
+ // NaCl inherit specific checks on the Pepper platform.
+ OpenSolutionAndGetProperties(
+ naclSolutionNaClInitialization, NativeClientVSAddIn.Strings.PepperPlatformName);
+ AllConfigsAssertPropertyContains("CL", "PreprocessorDefinitions", "PPAPI", false);
+ TestUtilities.AssertPropertyEquals(
+ release_, "Link", "GenerateDebugInformation", "false", false);
+ dte_.Solution.Close();
+
+ // NaCl inherit specific checks on the NaCl platform.
+ OpenSolutionAndGetProperties(
+ naclSolutionNaClInitialization, NativeClientVSAddIn.Strings.NaClPlatformName);
+ AllConfigsAssertPropertyEquals("ConfigurationGeneral", "TargetExt", ".nexe", true);
+ AllConfigsAssertPropertyEquals(
+ "ConfigurationGeneral", "ConfigurationType", "Application", true);
+ dte_.Solution.Close();
+ }
+
+ /// <summary>
+ /// Method to run a battery of tests on a particular solution. Checks that all Pepper platform
+ /// settings are set correctly.
+ /// </summary>
+ /// <param name="naclSolution">Path to the solution file to verify.</param>
+ private void VerifyDefaultPepperSettings(string naclSolution)
+ {
+ OpenSolutionAndGetProperties(naclSolution, NativeClientVSAddIn.Strings.PepperPlatformName);
+
+ string page;
// General
page = "ConfigurationGeneral";
@@ -131,41 +232,186 @@ namespace UnitTests
AllConfigsAssertPropertyEquals(page, "TargetExt", ".dll", true);
AllConfigsAssertPropertyEquals(page, "ConfigurationType", "DynamicLibrary", true);
AllConfigsAssertPropertyEquals(page, "VSNaClSDKRoot", @"$(NACL_SDK_ROOT)\", false);
-
+ AllConfigsAssertPropertyEquals(page, "CharacterSet", "Unicode", false);
+
// Debugging
page = "WindowsLocalDebugger";
AllConfigsAssertPropertyEquals(
+ page, "LocalDebuggerCommand", @"$(CHROME_PATH)", true);
+
+ string targetFlag = "--register-pepper-plugins=\"$(TargetPath)\";application/x-nacl";
+ string serverFlag = "localhost:5103";
+ string debuggerFlag = "--wait-for-debugger-children";
+ TestUtilities.AssertPropertyEquals(
+ debug_,
page,
- "LocalDebuggerCommand",
- @"$(CHROME_PATH)\chrome.exe",
+ "LocalDebuggerCommandArguments",
+ string.Format("{0} {1} {2}", targetFlag, serverFlag, debuggerFlag),
true);
- AllConfigsAssertPropertyEquals(
+ TestUtilities.AssertPropertyEquals(
+ release_,
page,
"LocalDebuggerCommandArguments",
- "--register-pepper-plugins=\"$(TargetPath)\";application/x-nacl localhost:5103",
+ string.Format("{0} {1}", targetFlag, serverFlag),
true);
// VC++ Directories
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
page = "CL";
+ TestUtilities.AssertPropertyEquals(release_, page, "RuntimeLibrary", "MultiThreaded", false);
+ TestUtilities.AssertPropertyEquals(
+ debug_, page, "RuntimeLibrary", "MultiThreadedDebug", false);
+ TestUtilities.AssertPropertyEquals(release_, page, "BasicRuntimeChecks", "Default", false);
+ TestUtilities.AssertPropertyEquals(
+ debug_, page, "BasicRuntimeChecks", "EnableFastChecks", false);
+ TestUtilities.AssertPropertyEquals(release_, page, "MinimalRebuild", "false", false);
+ TestUtilities.AssertPropertyEquals(debug_, page, "MinimalRebuild", "true", false);
+ TestUtilities.AssertPropertyEquals(
+ release_, page, "DebugInformationFormat", "ProgramDatabase", false);
+ TestUtilities.AssertPropertyEquals(
+ debug_, page, "DebugInformationFormat", "EditAndContinue", false);
+
+ // C/C++ Optimization
+ TestUtilities.AssertPropertyEquals(debug_, page, "Optimization", "Disabled", false);
+ TestUtilities.AssertPropertyEquals(release_, page, "Optimization", "MaxSpeed", false);
+
+ // Linker Input
+ page = "Link";
+ AllConfigsAssertPropertyContains(page, "AdditionalDependencies", "ppapi_cpp.lib", true);
+ AllConfigsAssertPropertyContains(page, "AdditionalDependencies", "ppapi.lib", true);
+
+ // Note: Release check of this property is specific to the platform settings were inherited
+ // from. Checks on release are done in the specific methods testing each inherit type.
+ TestUtilities.AssertPropertyEquals(debug_, page, "GenerateDebugInformation", "true", false);
+
+ TestUtilities.AssertPropertyEquals(release_, page, "LinkIncremental", "false", false);
+ TestUtilities.AssertPropertyEquals(debug_, page, "LinkIncremental", "true", false);
+
+ AllConfigsAssertPropertyEquals(page, "SubSystem", "Windows", false);
+
+ dte_.Solution.Close();
+ }
+
+ /// <summary>
+ /// Method to run a battery of tests on a particular solution. Checks that all NaCl platform
+ /// settings are set correctly.
+ /// </summary>
+ /// <param name="naclSolution">Path to the solution file to verify.</param>
+ private void VerifyDefaultNaClSettings(string naclSolution)
+ {
+ OpenSolutionAndGetProperties(naclSolution, NativeClientVSAddIn.Strings.NaClPlatformName);
+
+ string page;
+
+ // General
+ page = "ConfigurationGeneral";
+ AllConfigsAssertPropertyEquals(page, "OutDir", @"$(ProjectDir)$(ToolchainName)\", true);
+ AllConfigsAssertPropertyEquals(
+ page, "IntDir", @"$(ProjectDir)Intermediate\$(ToolchainName)\", true);
+ AllConfigsAssertPropertyEquals(page, "ToolchainName", "newlib", true);
+ AllConfigsAssertPropertyEquals(page, "PlatformToolset", "win_x86_$(ToolchainName)", true);
+ AllConfigsAssertPropertyEquals(page, "TargetArchitecture", "x86_64", true);
+ AllConfigsAssertPropertyEquals(page, "VSNaClSDKRoot", @"$(NACL_SDK_ROOT)\", false);
+
+ // Debugging
+ page = "WindowsLocalDebugger";
+ AllConfigsAssertPropertyEquals(
+ page, "LocalDebuggerCommand", @"$(CHROME_PATH)", true);
TestUtilities.AssertPropertyEquals(
debug_,
page,
- "RuntimeLibrary",
- "MultiThreadedDebug",
- false);
- TestUtilities.AssertPropertyEquals(release_, page, "RuntimeLibrary", "MultiThreaded", false);
+ "LocalDebuggerCommandArguments",
+ "--enable-nacl-debug --no-sandbox localhost:5103",
+ true);
+ TestUtilities.AssertPropertyEquals(
+ release_, page, "LocalDebuggerCommandArguments", "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, "ConfigurationType", "$(ConfigurationType)", true);
+ AllConfigsAssertPropertyEquals(page, "UserHeaderDependenciesOnly", "true", true);
+ AllConfigsAssertPropertyEquals(page, "OutputCommandLine", "true", false);
+
+ // 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);
+ dte_.Solution.Close();
+ }
+
+ /// <summary>
+ /// Helper function which opens the given solution, sets the configuration and platform and
+ /// tries to compile, failing the test if the build does not succeed.
+ /// </summary>
+ /// <param name="solutionPath">Path to the solution to open.</param>
+ /// <param name="configName">Solution Configuration name (Debug or Release).</param>
+ /// <param name="platformName">Platform name.</param>
+ private void TryCompile(string solutionPath, string configName, string platformName)
+ {
+ string failFormat = "Project compile failed for {0} platform {1} config. Build output: {2}";
+
+ // Open Debug configuration and build.
+ dte_.Solution.Open(solutionPath);
+ TestUtilities.SetSolutionConfiguration(
+ dte_, TestUtilities.BlankNaClProjectUniqueName, configName, platformName);
+ dte_.Solution.SolutionBuild.Build(true);
+
+ string compileOutput = TestUtilities.GetPaneText(
+ dte_.ToolWindows.OutputWindow.OutputWindowPanes.Item("Build"));
+ Assert.IsTrue(
+ compileOutput.Contains("Build succeeded.", StringComparison.InvariantCultureIgnoreCase),
+ string.Format(failFormat, platformName, configName, compileOutput));
+ dte_.Solution.Close();
+ }
+
+ /// <summary>
+ /// Helper function to reduce repeated code. Opens the given solution and sets the debug_
+ /// and release_ member variables to point to the given platform type.
+ /// </summary>
+ /// <param name="solutionPath">Path to the solution to open.</param>
+ /// <param name="platformName">Platform type to load.</param>
+ private void OpenSolutionAndGetProperties(string solutionPath, string platformName)
+ {
+ // Extract the debug and release configurations for Pepper from the project.
+ dte_.Solution.Open(solutionPath);
+ Project project = dte_.Solution.Projects.Item(TestUtilities.BlankNaClProjectUniqueName);
+ Assert.IsNotNull(project, "Testing project was not found");
+ debug_ = TestUtilities.GetVCConfiguration(project, "Debug", platformName);
+ release_ = TestUtilities.GetVCConfiguration(project, "Release", platformName);
}
/// <summary>

Powered by Google App Engine
This is Rietveld 408576698