Пример #1
0
        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);
        }
Пример #2
0
        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'");
        }
Пример #3
0
        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.");
        }
Пример #4
0
        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'");
        }
Пример #5
0
        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();
        }
Пример #6
0
        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);
        }
Пример #7
0
        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);
        }
Пример #8
0
        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);
        }
Пример #9
0
        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);
        }