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

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

Issue 11085093: Remove windows lines endings (Closed) Base URL: http://nativeclient-sdk.googlecode.com/svn/trunk/src
Patch Set: Created 8 years, 2 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 77a09e6c92ebcd250d613e987932b65f682de964..79c00c7b0d4566722cbd4fedadd13ee3d16780f3 100644
--- a/visual_studio/NativeClientVSAddIn/UnitTests/ProjectSettingsTest.cs
+++ b/visual_studio/NativeClientVSAddIn/UnitTests/ProjectSettingsTest.cs
@@ -1,522 +1,522 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-namespace UnitTests
-{
- using System;
-
- using EnvDTE;
- using EnvDTE80;
- using Microsoft.VisualStudio.TestTools.UnitTesting;
- using Microsoft.VisualStudio.VCProjectEngine;
-
- /// <summary>
- /// This test class contains tests related to the custom project settings
- /// and property pages for PPAPI and NaCl configurations.
- /// </summary>
- [TestClass]
- public class ProjectSettingsTest
- {
- /// <summary>
- /// 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 static string naclSolutionEmptyInitialization;
-
- /// <summary>
- /// The main visual studio object.
- /// </summary>
- private DTE2 dte_;
-
- /// <summary>
- /// The project configuration for debug settings of a test's platform.
- /// </summary>
- private VCConfiguration debug_;
-
- /// <summary>
- /// The project configuration for release settings of a test's platform
- /// </summary>
- private VCConfiguration release_;
-
- /// <summary>
- /// Gets or sets the test context which provides information about,
- /// and functionality for the current test run.
- /// </summary>
- public TestContext TestContext { get; set; }
-
- /// <summary>
- /// 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 = TestUtilities.StartVisualStudioInstance();
- try
- {
- naclSolutionEmptyInitialization = TestUtilities.CreateBlankValidNaClSolution(
- dte,
- "ProjectSettingsTestEmptyInit",
- NativeClientVSAddIn.Strings.PepperPlatformName,
- NativeClientVSAddIn.Strings.NaCl64PlatformName,
- testContext);
- }
- finally
- {
- TestUtilities.CleanUpVisualStudioInstance(dte);
- }
- }
-
- /// <summary>
- /// This is run before each test to create test resources.
- /// </summary>
- [TestInitialize]
- public void TestSetup()
- {
- dte_ = TestUtilities.StartVisualStudioInstance();
- try
- {
- TestUtilities.AssertAddinLoaded(dte_, NativeClientVSAddIn.Strings.AddInName);
- }
- catch
- {
- TestUtilities.CleanUpVisualStudioInstance(dte_);
- throw;
- }
- }
-
- /// <summary>
- /// This is run after each test to clean up things created in TestSetup().
- /// </summary>
- [TestCleanup]
- public void TestCleanup()
- {
- TestUtilities.CleanUpVisualStudioInstance(dte_);
- }
-
- /// <summary>
- /// Test method to check that the NaCl platform compiles a test project.
- /// </summary>
- [TestMethod]
- public void CheckNaClCompile()
- {
- string naclPlatform = NativeClientVSAddIn.Strings.NaCl64PlatformName;
- TryCompile(naclSolutionEmptyInitialization, "Debug", naclPlatform);
- TryCompile(naclSolutionEmptyInitialization, "Release", naclPlatform);
- }
-
- /// <summary>
- /// Test method to check that the Pepper platform compiles a test project.
- /// </summary>
- [TestMethod]
- public void CheckPepperCompile()
- {
- string pepperPlatform = NativeClientVSAddIn.Strings.PepperPlatformName;
- 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.NaCl64PlatformName);
- 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.NaCl64PlatformName);
- 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.NaCl64PlatformName,
- NativeClientVSAddIn.Strings.NaCl64PlatformName,
- 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.NaCl64PlatformName);
- 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";
- AllConfigsAssertPropertyEquals(page, "OutDir", @"$(ProjectDir)win\", true);
- AllConfigsAssertPropertyEquals(page, "IntDir", @"win\$(Configuration)\", true);
- AllConfigsAssertPropertyEquals(page, "TargetExt", ".dll", true);
- AllConfigsAssertPropertyEquals(page, "ConfigurationType", "DynamicLibrary", true);
- AllConfigsAssertPropertyEquals(page, "VSNaClSDKRoot", @"$(NACL_SDK_ROOT)\", false);
- AllConfigsAssertPropertyEquals(page, "NaClWebServerPort", "5103", false);
- AllConfigsAssertPropertyEquals(page, "CharacterSet", "Unicode", false);
- AllConfigsAssertPropertyIsNotNullOrEmpty(page, "NaClAddInVersion");
-
- // Debugging
- page = "WindowsLocalDebugger";
- string chromePath = System.Environment.GetEnvironmentVariable(
- NativeClientVSAddIn.Strings.ChromePathEnvironmentVariable);
- AllConfigsAssertPropertyEquals(
- page, "LocalDebuggerCommand", chromePath, true);
-
- string propName = "LocalDebuggerCommandArguments";
- string dataDir = "--user-data-dir=\"$(ProjectDir)/chrome_data\"";
- string address = "localhost:$(NaClWebServerPort)";
- string naclFlag = "--enable-nacl";
- string targetFlag = "--register-pepper-plugins=\"$(TargetPath)\";application/x-nacl";
- string noSandBoxFlag = "--no-sandbox";
- string debugChildrenFlag = "--wait-for-debugger-children";
- AllConfigsAssertPropertyContains(page, propName, dataDir, true);
- AllConfigsAssertPropertyContains(page, propName, address, true);
- AllConfigsAssertPropertyContains(page, propName, naclFlag, true);
- AllConfigsAssertPropertyContains(page, propName, targetFlag, true);
- TestUtilities.AssertPropertyContains(debug_, page, propName, debugChildrenFlag, true);
- TestUtilities.AssertPropertyContains(debug_, page, propName, noSandBoxFlag, true);
-
- // VC++ Directories
- page = "ConfigurationDirectories";
- AllConfigsAssertPropertyContains(page, "IncludePath", @"$(VSNaClSDKRoot)include;", true);
- AllConfigsAssertPropertyContains(page, "IncludePath", @"$(VCInstallDir)include", true);
- AllConfigsAssertPropertyContains(
- page, "LibraryPath", @"$(VSNaClSDKRoot)lib\win_x86_32_host\$(Configuration);", 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.NaCl64PlatformName);
-
- string page;
-
- // General
- page = "ConfigurationGeneral";
- AllConfigsAssertPropertyEquals(page, "OutDir", @"$(ProjectDir)$(Platform)\$(ToolchainName)\$(Configuration)\", true);
- AllConfigsAssertPropertyEquals(
- page, "IntDir", @"$(Platform)\$(ToolchainName)\$(Configuration)\", true);
- AllConfigsAssertPropertyEquals(page, "ToolchainName", "newlib", true);
- AllConfigsAssertPropertyEquals(page, "TargetArchitecture", "x86_64", true);
- AllConfigsAssertPropertyEquals(page, "VSNaClSDKRoot", @"$(NACL_SDK_ROOT)\", false);
- AllConfigsAssertPropertyEquals(page, "NaClManifestPath", string.Empty, false);
- AllConfigsAssertPropertyEquals(page, "NaClWebServerPort", "5103", false);
- AllConfigsAssertPropertyIsNotNullOrEmpty(page, "NaClAddInVersion");
-
- // Debugging
- page = "WindowsLocalDebugger";
- string chromePath = System.Environment.GetEnvironmentVariable(
- NativeClientVSAddIn.Strings.ChromePathEnvironmentVariable);
- AllConfigsAssertPropertyEquals(
- page, "LocalDebuggerCommand", chromePath, true);
-
- string propName = "LocalDebuggerCommandArguments";
- string dataDir = "--user-data-dir=\"$(ProjectDir)/chrome_data\"";
- string address = "localhost:$(NaClWebServerPort)";
- string naclFlag = "--enable-nacl";
- string naclDebugFlag = "--enable-nacl-debug";
- string noSandBoxFlag = "--no-sandbox";
- TestUtilities.AssertPropertyContains(debug_, page, propName, dataDir, true);
- TestUtilities.AssertPropertyContains(debug_, page, propName, address, true);
- TestUtilities.AssertPropertyContains(debug_, page, propName, naclFlag, true);
- TestUtilities.AssertPropertyContains(debug_, page, propName, naclDebugFlag, true);
- TestUtilities.AssertPropertyContains(debug_, page, propName, noSandBoxFlag, true);
- TestUtilities.AssertPropertyContains(release_, page, propName, dataDir, true);
- TestUtilities.AssertPropertyContains(release_, page, propName, address, true);
- TestUtilities.AssertPropertyContains(release_, page, propName, naclFlag, 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", "false", 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)", false);
-
- // C/C++ Advanced
- AllConfigsAssertPropertyEquals(page, "CompileAs", "Default", true);
-
- // Linker Input
- page = "Link";
- 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}";
- string cygwinWarningFormat = "Did not pass cygwin nodosfilewarning environment var to tools"
- + " Platform: {0}, configuration: {1}";
- StringComparison ignoreCase = StringComparison.InvariantCultureIgnoreCase;
-
- // 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.", ignoreCase),
- string.Format(failFormat, platformName, configName, compileOutput));
- Assert.IsFalse(
- compileOutput.Contains("MS-DOS style path detected", ignoreCase),
- string.Format(cygwinWarningFormat, platformName, configName));
-
- 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>
- /// Tests that a given property has a specific value for both Debug and Release
- /// configurations under the current test's platform.
- /// </summary>
- /// <param name="pageName">Property page name where property resides.</param>
- /// <param name="propertyName">Name of the property to check.</param>
- /// <param name="expectedValue">Expected value of the property.</param>
- /// <param name="ignoreCase">Ignore case when comparing the expected and actual values.</param>
- private void AllConfigsAssertPropertyEquals(
- string pageName,
- string propertyName,
- string expectedValue,
- bool ignoreCase)
- {
- TestUtilities.AssertPropertyEquals(
- debug_,
- pageName,
- propertyName,
- expectedValue,
- ignoreCase);
- TestUtilities.AssertPropertyEquals(
- release_,
- pageName,
- propertyName,
- expectedValue,
- ignoreCase);
- }
-
- /// <summary>
- /// Tests that a given property contains a specific string for both Debug and Release
- /// configurations under the current test's platform.
- /// </summary>
- /// <param name="pageName">Property page name where property resides.</param>
- /// <param name="propertyName">Name of the property to check.</param>
- /// <param name="expectedValue">Expected value of the property.</param>
- /// <param name="ignoreCase">Ignore case when comparing the expected and actual values.</param>
- private void AllConfigsAssertPropertyContains(
- string pageName,
- string propertyName,
- string expectedValue,
- bool ignoreCase)
- {
- TestUtilities.AssertPropertyContains(
- debug_,
- pageName,
- propertyName,
- expectedValue,
- ignoreCase);
- TestUtilities.AssertPropertyContains(
- release_,
- pageName,
- propertyName,
- expectedValue,
- ignoreCase);
- }
-
- /// <summary>
- /// Tests that a given property's value is not null or empty for both Debug and Release
- /// configurations under the current test's platform.
- /// </summary>
- /// <param name="pageName">Property page name where property resides.</param>
- /// <param name="propertyName">Name of the property to check.</param>
- private void AllConfigsAssertPropertyIsNotNullOrEmpty(
- string pageName,
- string propertyName)
- {
- TestUtilities.AssertPropertyIsNotNullOrEmpty(
- debug_,
- pageName,
- propertyName);
- TestUtilities.AssertPropertyIsNotNullOrEmpty(
- release_,
- pageName,
- propertyName);
- }
- }
-}
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+namespace UnitTests
+{
+ using System;
+
+ using EnvDTE;
+ using EnvDTE80;
+ using Microsoft.VisualStudio.TestTools.UnitTesting;
+ using Microsoft.VisualStudio.VCProjectEngine;
+
+ /// <summary>
+ /// This test class contains tests related to the custom project settings
+ /// and property pages for PPAPI and NaCl configurations.
+ /// </summary>
+ [TestClass]
+ public class ProjectSettingsTest
+ {
+ /// <summary>
+ /// 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 static string naclSolutionEmptyInitialization;
+
+ /// <summary>
+ /// The main visual studio object.
+ /// </summary>
+ private DTE2 dte_;
+
+ /// <summary>
+ /// The project configuration for debug settings of a test's platform.
+ /// </summary>
+ private VCConfiguration debug_;
+
+ /// <summary>
+ /// The project configuration for release settings of a test's platform
+ /// </summary>
+ private VCConfiguration release_;
+
+ /// <summary>
+ /// Gets or sets the test context which provides information about,
+ /// and functionality for the current test run.
+ /// </summary>
+ public TestContext TestContext { get; set; }
+
+ /// <summary>
+ /// 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 = TestUtilities.StartVisualStudioInstance();
+ try
+ {
+ naclSolutionEmptyInitialization = TestUtilities.CreateBlankValidNaClSolution(
+ dte,
+ "ProjectSettingsTestEmptyInit",
+ NativeClientVSAddIn.Strings.PepperPlatformName,
+ NativeClientVSAddIn.Strings.NaCl64PlatformName,
+ testContext);
+ }
+ finally
+ {
+ TestUtilities.CleanUpVisualStudioInstance(dte);
+ }
+ }
+
+ /// <summary>
+ /// This is run before each test to create test resources.
+ /// </summary>
+ [TestInitialize]
+ public void TestSetup()
+ {
+ dte_ = TestUtilities.StartVisualStudioInstance();
+ try
+ {
+ TestUtilities.AssertAddinLoaded(dte_, NativeClientVSAddIn.Strings.AddInName);
+ }
+ catch
+ {
+ TestUtilities.CleanUpVisualStudioInstance(dte_);
+ throw;
+ }
+ }
+
+ /// <summary>
+ /// This is run after each test to clean up things created in TestSetup().
+ /// </summary>
+ [TestCleanup]
+ public void TestCleanup()
+ {
+ TestUtilities.CleanUpVisualStudioInstance(dte_);
+ }
+
+ /// <summary>
+ /// Test method to check that the NaCl platform compiles a test project.
+ /// </summary>
+ [TestMethod]
+ public void CheckNaClCompile()
+ {
+ string naclPlatform = NativeClientVSAddIn.Strings.NaCl64PlatformName;
+ TryCompile(naclSolutionEmptyInitialization, "Debug", naclPlatform);
+ TryCompile(naclSolutionEmptyInitialization, "Release", naclPlatform);
+ }
+
+ /// <summary>
+ /// Test method to check that the Pepper platform compiles a test project.
+ /// </summary>
+ [TestMethod]
+ public void CheckPepperCompile()
+ {
+ string pepperPlatform = NativeClientVSAddIn.Strings.PepperPlatformName;
+ 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.NaCl64PlatformName);
+ 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.NaCl64PlatformName);
+ 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.NaCl64PlatformName,
+ NativeClientVSAddIn.Strings.NaCl64PlatformName,
+ 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.NaCl64PlatformName);
+ 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";
+ AllConfigsAssertPropertyEquals(page, "OutDir", @"$(ProjectDir)win\", true);
+ AllConfigsAssertPropertyEquals(page, "IntDir", @"win\$(Configuration)\", true);
+ AllConfigsAssertPropertyEquals(page, "TargetExt", ".dll", true);
+ AllConfigsAssertPropertyEquals(page, "ConfigurationType", "DynamicLibrary", true);
+ AllConfigsAssertPropertyEquals(page, "VSNaClSDKRoot", @"$(NACL_SDK_ROOT)\", false);
+ AllConfigsAssertPropertyEquals(page, "NaClWebServerPort", "5103", false);
+ AllConfigsAssertPropertyEquals(page, "CharacterSet", "Unicode", false);
+ AllConfigsAssertPropertyIsNotNullOrEmpty(page, "NaClAddInVersion");
+
+ // Debugging
+ page = "WindowsLocalDebugger";
+ string chromePath = System.Environment.GetEnvironmentVariable(
+ NativeClientVSAddIn.Strings.ChromePathEnvironmentVariable);
+ AllConfigsAssertPropertyEquals(
+ page, "LocalDebuggerCommand", chromePath, true);
+
+ string propName = "LocalDebuggerCommandArguments";
+ string dataDir = "--user-data-dir=\"$(ProjectDir)/chrome_data\"";
+ string address = "localhost:$(NaClWebServerPort)";
+ string naclFlag = "--enable-nacl";
+ string targetFlag = "--register-pepper-plugins=\"$(TargetPath)\";application/x-nacl";
+ string noSandBoxFlag = "--no-sandbox";
+ string debugChildrenFlag = "--wait-for-debugger-children";
+ AllConfigsAssertPropertyContains(page, propName, dataDir, true);
+ AllConfigsAssertPropertyContains(page, propName, address, true);
+ AllConfigsAssertPropertyContains(page, propName, naclFlag, true);
+ AllConfigsAssertPropertyContains(page, propName, targetFlag, true);
+ TestUtilities.AssertPropertyContains(debug_, page, propName, debugChildrenFlag, true);
+ TestUtilities.AssertPropertyContains(debug_, page, propName, noSandBoxFlag, true);
+
+ // VC++ Directories
+ page = "ConfigurationDirectories";
+ AllConfigsAssertPropertyContains(page, "IncludePath", @"$(VSNaClSDKRoot)include;", true);
+ AllConfigsAssertPropertyContains(page, "IncludePath", @"$(VCInstallDir)include", true);
+ AllConfigsAssertPropertyContains(
+ page, "LibraryPath", @"$(VSNaClSDKRoot)lib\win_x86_32_host\$(Configuration);", 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.NaCl64PlatformName);
+
+ string page;
+
+ // General
+ page = "ConfigurationGeneral";
+ AllConfigsAssertPropertyEquals(page, "OutDir", @"$(ProjectDir)$(Platform)\$(ToolchainName)\$(Configuration)\", true);
+ AllConfigsAssertPropertyEquals(
+ page, "IntDir", @"$(Platform)\$(ToolchainName)\$(Configuration)\", true);
+ AllConfigsAssertPropertyEquals(page, "ToolchainName", "newlib", true);
+ AllConfigsAssertPropertyEquals(page, "TargetArchitecture", "x86_64", true);
+ AllConfigsAssertPropertyEquals(page, "VSNaClSDKRoot", @"$(NACL_SDK_ROOT)\", false);
+ AllConfigsAssertPropertyEquals(page, "NaClManifestPath", string.Empty, false);
+ AllConfigsAssertPropertyEquals(page, "NaClWebServerPort", "5103", false);
+ AllConfigsAssertPropertyIsNotNullOrEmpty(page, "NaClAddInVersion");
+
+ // Debugging
+ page = "WindowsLocalDebugger";
+ string chromePath = System.Environment.GetEnvironmentVariable(
+ NativeClientVSAddIn.Strings.ChromePathEnvironmentVariable);
+ AllConfigsAssertPropertyEquals(
+ page, "LocalDebuggerCommand", chromePath, true);
+
+ string propName = "LocalDebuggerCommandArguments";
+ string dataDir = "--user-data-dir=\"$(ProjectDir)/chrome_data\"";
+ string address = "localhost:$(NaClWebServerPort)";
+ string naclFlag = "--enable-nacl";
+ string naclDebugFlag = "--enable-nacl-debug";
+ string noSandBoxFlag = "--no-sandbox";
+ TestUtilities.AssertPropertyContains(debug_, page, propName, dataDir, true);
+ TestUtilities.AssertPropertyContains(debug_, page, propName, address, true);
+ TestUtilities.AssertPropertyContains(debug_, page, propName, naclFlag, true);
+ TestUtilities.AssertPropertyContains(debug_, page, propName, naclDebugFlag, true);
+ TestUtilities.AssertPropertyContains(debug_, page, propName, noSandBoxFlag, true);
+ TestUtilities.AssertPropertyContains(release_, page, propName, dataDir, true);
+ TestUtilities.AssertPropertyContains(release_, page, propName, address, true);
+ TestUtilities.AssertPropertyContains(release_, page, propName, naclFlag, 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", "false", 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)", false);
+
+ // C/C++ Advanced
+ AllConfigsAssertPropertyEquals(page, "CompileAs", "Default", true);
+
+ // Linker Input
+ page = "Link";
+ 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}";
+ string cygwinWarningFormat = "Did not pass cygwin nodosfilewarning environment var to tools"
+ + " Platform: {0}, configuration: {1}";
+ StringComparison ignoreCase = StringComparison.InvariantCultureIgnoreCase;
+
+ // 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.", ignoreCase),
+ string.Format(failFormat, platformName, configName, compileOutput));
+ Assert.IsFalse(
+ compileOutput.Contains("MS-DOS style path detected", ignoreCase),
+ string.Format(cygwinWarningFormat, platformName, configName));
+
+ 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>
+ /// Tests that a given property has a specific value for both Debug and Release
+ /// configurations under the current test's platform.
+ /// </summary>
+ /// <param name="pageName">Property page name where property resides.</param>
+ /// <param name="propertyName">Name of the property to check.</param>
+ /// <param name="expectedValue">Expected value of the property.</param>
+ /// <param name="ignoreCase">Ignore case when comparing the expected and actual values.</param>
+ private void AllConfigsAssertPropertyEquals(
+ string pageName,
+ string propertyName,
+ string expectedValue,
+ bool ignoreCase)
+ {
+ TestUtilities.AssertPropertyEquals(
+ debug_,
+ pageName,
+ propertyName,
+ expectedValue,
+ ignoreCase);
+ TestUtilities.AssertPropertyEquals(
+ release_,
+ pageName,
+ propertyName,
+ expectedValue,
+ ignoreCase);
+ }
+
+ /// <summary>
+ /// Tests that a given property contains a specific string for both Debug and Release
+ /// configurations under the current test's platform.
+ /// </summary>
+ /// <param name="pageName">Property page name where property resides.</param>
+ /// <param name="propertyName">Name of the property to check.</param>
+ /// <param name="expectedValue">Expected value of the property.</param>
+ /// <param name="ignoreCase">Ignore case when comparing the expected and actual values.</param>
+ private void AllConfigsAssertPropertyContains(
+ string pageName,
+ string propertyName,
+ string expectedValue,
+ bool ignoreCase)
+ {
+ TestUtilities.AssertPropertyContains(
+ debug_,
+ pageName,
+ propertyName,
+ expectedValue,
+ ignoreCase);
+ TestUtilities.AssertPropertyContains(
+ release_,
+ pageName,
+ propertyName,
+ expectedValue,
+ ignoreCase);
+ }
+
+ /// <summary>
+ /// Tests that a given property's value is not null or empty for both Debug and Release
+ /// configurations under the current test's platform.
+ /// </summary>
+ /// <param name="pageName">Property page name where property resides.</param>
+ /// <param name="propertyName">Name of the property to check.</param>
+ private void AllConfigsAssertPropertyIsNotNullOrEmpty(
+ string pageName,
+ string propertyName)
+ {
+ TestUtilities.AssertPropertyIsNotNullOrEmpty(
+ debug_,
+ pageName,
+ propertyName);
+ TestUtilities.AssertPropertyIsNotNullOrEmpty(
+ release_,
+ pageName,
+ propertyName);
+ }
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698