public void ConditionalInclusionsIfTests() { #region setup var definesHandler = new Defines(); definesHandler.Define("DEBUG", ""); definesHandler.Define("NDEBUG", ""); definesHandler.Define("DEBUGGER", ""); var expectedPreprocessorDefines = new HashSet<string>() { "DEBUG", "NDEBUG", "DEBUGGER", "DLEVEL" }; var filter = new ConditionalInclusionsFilter( new ExpressionEvaluation() ); const string nameSpace = "BoostTestAdapterNunit.Resources.SourceFiltering."; const string unfilteredSourceCodeResourceName = "ConditionalInclusionsIfTests_UnFilteredSourceCode.cpp"; const string filteredSourceCodeResourceName = "ConditionalInclusionsIfTests_FilteredSourceCode.cpp"; string sourceCodeOriginal = TestHelper.ReadEmbeddedResource(nameSpace + unfilteredSourceCodeResourceName); string sourceCodeExpected = TestHelper.ReadEmbeddedResource(nameSpace + filteredSourceCodeResourceName); var cppSourceFile = new CppSourceFile() { FileName = nameSpace + unfilteredSourceCodeResourceName, SourceCode = sourceCodeOriginal }; #endregion #region excercise filter.Filter(cppSourceFile, definesHandler); #endregion #region verify Assert.AreEqual(sourceCodeExpected, cppSourceFile.SourceCode); Assert.AreEqual(expectedPreprocessorDefines, definesHandler.NonSubstitutionTokens); Assert.AreEqual(0, definesHandler.SubstitutionTokens.Count); #endregion }
/// <summary> /// Given a parameter list of strings, generates a Defines structure /// where pairs of strings are treated as a definition and its value. /// </summary> /// <param name="definitions">The string pair definitions array from which to generate the Defines structue</param> /// <returns>A Defines structure built out of string pairs available in the definitions array</returns> private Defines GenerateDefines(string[] definitions) { Assert.That(definitions.Length % 2, Is.EqualTo(0)); Defines definesHandler = new Defines(); for (int i = 1; i < definitions.Length; i += 2) { definesHandler.Define(definitions[i - 1], definitions[i]); } return definesHandler; }
/// <summary> /// Acquires the pre-processor definitions used by the project /// </summary> /// <param name="projectInfo">The Visual Studio project</param> /// <returns>The pre-processor definitions specified within the project</returns> private static Defines GetDefines(ProjectInfo projectInfo) { /* * it is important that the pre-processor defines at project level are not modified * because every source file in the project has to have the same starting point. */ //call to cpy ctor Defines defines = new Defines(projectInfo.DefinesHandler); // Additional Boost definitions // NOTE These definitions are generally assumed to be available since // we are operating in a BOOST Test context if (!defines.IsDefined("BOOST_VERSION")) { defines.Define("BOOST_VERSION", "0"); } return defines; }