private static VCConfiguration CreateVCConfigurationWithProperties(ProjectItemConfig projectItemConfig) { var vcPlatformMock = new Mock <VCPlatform>(); vcPlatformMock.SetupGet(x => x.Name).Returns(projectItemConfig.PlatformName); var vcConfigMock = new Mock <VCConfiguration>(); vcConfigMock.SetupGet(x => x.Platform).Returns(vcPlatformMock.Object); vcConfigMock.SetupGet(x => x.ConfigurationType).Returns(projectItemConfig.ConfigurationType); vcConfigMock.Setup(x => x.GetEvaluatedPropertyValue(It.IsAny <string>())) .Returns <string>(s => { string propertyValue = null; projectItemConfig.ProjectConfigProperties?.TryGetValue(s, out propertyValue); return(propertyValue ?? string.Empty); }); // Project VCCLCompilerTool needed for header files analysis var ivcCollection = new Mock <IVCCollection>(); vcConfigMock.SetupGet(x => x.Tools).Returns(ivcCollection.Object); var toolPropertiesMock = GetToolPropertiesMock(projectItemConfig); ivcCollection.Setup(x => x.Item("VCCLCompilerTool")).Returns(projectItemConfig.IsVCCLCompilerTool ? toolPropertiesMock.Object : null); return(vcConfigMock.Object); }
public void TryGet_UnsupportedCustomBuild_ReturnsNull() { // Arrange var projectItemConfig = new ProjectItemConfig { IsVCCLCompilerTool = false }; var projectItemMock = CreateMockProjectItem("c:\\foo\\xxx.vcxproj", projectItemConfig); // Act var fileConfig = CFamilyHelper.FileConfig.TryGet(testLogger, projectItemMock.Object, "c:\\dummy\\file.cpp"); // Assert fileConfig.Should().BeNull(); testLogger.AssertOutputStringExists("Custom build tools aren't supported. Custom-built file: 'c:\\dummy\\file.cpp'"); }
public void TryGet_UnsupportedConfigurationType_ReturnsNull() { // Arrange var projectItemConfig = new ProjectItemConfig { ConfigurationType = ConfigurationTypes.typeUnknown }; var projectItemMock = CreateMockProjectItem("c:\\foo\\xxx.vcxproj", projectItemConfig); // Act var fileConfig = CFamilyHelper.FileConfig.TryGet(testLogger, projectItemMock.Object, "c:\\dummy\\file.cpp"); // Assert fileConfig.Should().BeNull(); testLogger.AssertOutputStringExists("Project's \"Configuration type\" is not supported."); }
public void TryGet_UnsupportedItemType_ReturnsNull() { // Arrange var projectItemConfig = new ProjectItemConfig { ItemType = "None" }; var projectItemMock = CreateMockProjectItem("c:\\foo\\xxx.vcxproj", projectItemConfig); // Act var fileConfig = CFamilyHelper.FileConfig.TryGet(testLogger, projectItemMock.Object, "c:\\dummy\\file.cpp"); // Assert fileConfig.Should().BeNull(); testLogger.AssertOutputStringExists("File's \"Item type\" is not supported. File: 'c:\\dummy\\file.cpp'"); }
public void CreateRequest_PCHRequestDoesntLog() { // Arrange var loggerMock = new Mock <ILogger>(); var projectItemConfig = new ProjectItemConfig { IsVCCLCompilerTool = false }; var projectItemMock = CreateMockProjectItem("c:\\foo\\xxx.vcxproj", projectItemConfig); var analyzerOption = new CFamilyAnalyzerOptions { CreatePreCompiledHeaders = true }; // Act var request = CFamilyHelper.CreateRequest(loggerMock.Object, projectItemMock.Object, "c:\\dummy\\file.cpp", null, analyzerOption); // Assert loggerMock.Verify(x => x.WriteLine(It.IsAny <string>()), Times.Never); request.Should().BeNull(); }
private static Mock <IVCRulePropertyStorage> GetToolPropertiesMock(ProjectItemConfig projectItemConfig) { var toolPropertiesMock = new Mock <IVCRulePropertyStorage>(); if (projectItemConfig.IsVCCLCompilerTool) { toolPropertiesMock.As <VCCLCompilerTool>(); } toolPropertiesMock.Setup(x => x.GetEvaluatedPropertyValue(It.IsAny <string>())) .Returns <string>(s => { string propertyValue = null; projectItemConfig.FileConfigProperties?.TryGetValue(s, out propertyValue); return(propertyValue ?? string.Empty); }); return(toolPropertiesMock); }
public void TryGet_HeaderFileOptions_ReturnsValidConfig() { // Arrange var projectItemConfig = new ProjectItemConfig { ItemType = "ClInclude", FileConfigProperties = new Dictionary <string, string> { ["PrecompiledHeader"] = "NotUsing", ["CompileAs"] = "Default", ["CompileAsManaged"] = "false", ["EnableEnhancedInstructionSet"] = "", ["RuntimeLibrary"] = "", ["LanguageStandard"] = "", ["ExceptionHandling"] = "Sync", ["BasicRuntimeChecks"] = "UninitializedLocalUsageCheck", ["ForcedIncludeFiles"] = "", ["PrecompiledHeader"] = "Use", ["PrecompiledHeaderFile"] = "pch.h", } }; var projectItemMock = CreateMockProjectItem("c:\\foo\\xxx.vcxproj", projectItemConfig); // Act var request = CFamilyHelper.FileConfig.TryGet(testLogger, projectItemMock.Object, "c:\\dummy\\file.h"); // Assert request.Should().NotBeNull(); Assert.AreEqual("pch.h", request.ForcedIncludeFiles); Assert.AreEqual("CompileAsCpp", request.CompileAs); // Arrange projectItemConfig.FileConfigProperties["CompileAs"] = "CompileAsC"; projectItemConfig.FileConfigProperties["ForcedIncludeFiles"] = "FHeader.h"; // Act request = CFamilyHelper.FileConfig.TryGet(testLogger, projectItemMock.Object, "c:\\dummy\\file.h"); // Assert Assert.AreEqual("FHeader.h", request.ForcedIncludeFiles); Assert.AreEqual("CompileAsC", request.CompileAs); }
internal static Mock <ProjectItem> CreateMockProjectItem(string projectName, ProjectItemConfig projectItemConfig = null) { projectItemConfig ??= DefaultSetting; var vcProjectMock = new Mock <VCProject>(); var vcConfig = CreateVCConfigurationWithProperties(projectItemConfig); vcProjectMock.SetupGet(x => x.ActiveConfiguration).Returns(vcConfig); vcProjectMock.Setup(x => x.ProjectFile).Returns(projectName); var toolPropertiesMock = GetToolPropertiesMock(projectItemConfig); var vcFileConfigMock = new Mock <VCFileConfiguration>(); vcFileConfigMock.SetupGet(x => x.Tool).Returns(toolPropertiesMock.Object); var vcFileMock = new Mock <VCFile>(); vcFileMock.SetupGet(x => x.ItemType).Returns(projectItemConfig.ItemType); vcFileMock.Setup(x => x.GetFileConfigurationForProjectConfiguration(vcConfig)).Returns(vcFileConfigMock.Object); var projectMock = new ProjectMock(projectName) { Project = vcProjectMock.Object }; var projectItemMock = new Mock <ProjectItem>(); projectItemMock.Setup(i => i.ContainingProject).Returns(projectMock); projectItemMock.Setup(i => i.Object).Returns(vcFileMock.Object); // Set the project item to have a valid DTE configuration // - used to check whether the project item is in a solution or not var dteConfigManagerMock = new Mock <ConfigurationManager>(); var dteConfigMock = new Mock <Configuration>(); dteConfigManagerMock.Setup(x => x.ActiveConfiguration).Returns(dteConfigMock.Object); projectItemMock.Setup(i => i.ConfigurationManager).Returns(dteConfigManagerMock.Object); return(projectItemMock); }
public void CreateRequest_HeaderFile_IsSupported() { // Arrange var loggerMock = new Mock <ILogger>(); var projectItemConfig = new ProjectItemConfig { ItemType = "ClInclude" }; var rulesConfig = GetDummyRulesConfiguration(); var rulesConfigProviderMock = new Mock <ICFamilyRulesConfigProvider>(); rulesConfigProviderMock .Setup(x => x.GetRulesConfiguration(It.IsAny <string>())) .Returns(rulesConfig); var projectItemMock = CreateMockProjectItem("c:\\foo\\xxx.vcxproj", projectItemConfig); // Act var request = CFamilyHelper.CreateRequest(loggerMock.Object, projectItemMock.Object, "c:\\dummy\\file.h", rulesConfigProviderMock.Object, null); // Assert request.Should().NotBeNull(); (request.Flags & Request.MainFileIsHeader).Should().NotBe(0); }