示例#1
0
        private void CheckDefaultConfiguration(SolutionValidatorConfigurationSection configuration)
        {
            // Folder structure:
            Assert.AreEqual(".folderStructure", configuration.FolderStructure.DefinitionFilePath);
            Assert.IsTrue(configuration.FolderStructure.Check);

            // C# formatting:
            Assert.AreEqual("csharpformatting.xml", configuration.CSharpFormatting.OptionsFilePath);
            Assert.IsTrue(configuration.CSharpFormatting.Check);
            Assert.AreEqual(1, configuration.CSharpFormatting.SourceFileFilters.Count);
            Assert.AreEqual(@"^src\\.*", configuration.CSharpFormatting.SourceFileFilters[0].Include);
            Assert.AreEqual(@".*\\obj\\(Debug|Release)\\.*", configuration.CSharpFormatting.SourceFileFilters[0].Exclude);

            // C# memeber reordering
            //Assert.AreEqual(0, configuration.CSharpFormatting.CodeMemberOrder.Count);
            //Assert.AreEqual(GeneratedCodeMember.StaticFields, configuration.CSharpFormatting.CodeMemberOrder[0]);

            // C# private field rename
            Assert.AreEqual("^([a-zA-Z][a-zA-Z0-9_]*$)", configuration.CSharpFormatting.PrivateFieldRename.Find);
            Assert.AreEqual("_$1", configuration.CSharpFormatting.PrivateFieldRename.Replace);
            Assert.IsTrue(configuration.ProjectFile.OutputPath.Check);

            // C# Remove redundant this qualifier
            Assert.IsTrue(configuration.ProjectFile.OutputPath.Check);

            // Project file / Output path:
            Assert.AreEqual("output", configuration.ProjectFile.OutputPath.Value);
            Assert.IsTrue(configuration.ProjectFile.OutputPath.Check);

            // Project file / required configurations:
            Assert.IsTrue(configuration.ProjectFile.RequiredConfigurations.Check);
            Assert.AreEqual(2, configuration.ProjectFile.RequiredConfigurations.Count);
            Assert.AreEqual("Debug", configuration.ProjectFile.RequiredConfigurations[0].Name);
            Assert.AreEqual("Release", configuration.ProjectFile.RequiredConfigurations[1].Name);

            //// Project file / check identical:
            Assert.IsTrue(configuration.ProjectFile.CheckIdentical.Check);
            Assert.AreEqual(2, configuration.ProjectFile.CheckIdentical.Count);
            Assert.AreEqual("AssemblyName", configuration.ProjectFile.CheckIdentical[0].PropertyName);
            Assert.AreEqual("RootNamespace", configuration.ProjectFile.CheckIdentical[0].OtherPropertyName);
            Assert.AreEqual("AssemblyName", configuration.ProjectFile.CheckIdentical[1].PropertyName);
            Assert.AreEqual("ProjectName", configuration.ProjectFile.CheckIdentical[1].OtherPropertyName);

            // Project file / check for value:
            Assert.IsTrue(configuration.ProjectFile.CheckIdentical.Check);
            Assert.AreEqual(2, configuration.ProjectFile.CheckForValue.Count);
            Assert.AreEqual("AppDesignerFolder", configuration.ProjectFile.CheckForValue[0].PropertyName);
            Assert.AreEqual("Properties", configuration.ProjectFile.CheckForValue[0].Value);
            Assert.AreEqual("Platform", configuration.ProjectFile.CheckForValue[1].PropertyName);
            Assert.AreEqual("AnyCPU", configuration.ProjectFile.CheckForValue[1].Value);
        }
示例#2
0
        private void CheckCustomConfiguration(SolutionValidatorConfigurationSection configuration)
        {
            // Folder structure:
            Assert.AreEqual("definitionFilePath", configuration.FolderStructure.DefinitionFilePath);
            Assert.IsFalse(configuration.FolderStructure.Check);

            // C# formatting:
            Assert.AreEqual("optionsFilePath", configuration.CSharpFormatting.OptionsFilePath);
            Assert.IsFalse(configuration.CSharpFormatting.Check);
            Assert.AreEqual(1, configuration.CSharpFormatting.SourceFileFilters.Count);
            Assert.AreEqual("include", configuration.CSharpFormatting.SourceFileFilters[0].Include);
            Assert.AreEqual("exclude", configuration.CSharpFormatting.SourceFileFilters[0].Exclude);

            // C# Remove redundant this qualifier
            Assert.IsFalse(configuration.ProjectFile.OutputPath.Check);

            // C# member reorder
            //Assert.AreEqual(1, configuration.CSharpFormatting.CodeMemberOrder.Count);
            //Assert.AreEqual(GeneratedCodeMember.StaticFields, configuration.CSharpFormatting.CodeMemberOrder[0].Member);

            // C# private field rename
            Assert.AreEqual("find", configuration.CSharpFormatting.PrivateFieldRename.Find);
            Assert.AreEqual("replace", configuration.CSharpFormatting.PrivateFieldRename.Replace);
            Assert.IsFalse(configuration.ProjectFile.OutputPath.Check);

            // Project file / Output path:
            Assert.AreEqual("outputPath", configuration.ProjectFile.OutputPath.Value);
            Assert.IsFalse(configuration.ProjectFile.OutputPath.Check);

            // Project file / required configurations:
            Assert.IsFalse(configuration.ProjectFile.RequiredConfigurations.Check);
            Assert.AreEqual(1, configuration.ProjectFile.RequiredConfigurations.Count);
            Assert.AreEqual("name", configuration.ProjectFile.RequiredConfigurations[0].Name);

            // Project file / check identical:
            Assert.IsFalse(configuration.ProjectFile.CheckIdentical.Check);
            Assert.AreEqual(1, configuration.ProjectFile.CheckIdentical.Count);
            Assert.AreEqual("propertyName", configuration.ProjectFile.CheckIdentical[0].PropertyName);
            Assert.AreEqual("otherPropertyName", configuration.ProjectFile.CheckIdentical[0].OtherPropertyName);

            // Project file / check for value:
            Assert.IsFalse(configuration.ProjectFile.CheckForValue.Check);
            Assert.AreEqual(1, configuration.ProjectFile.CheckForValue.Count);
            Assert.AreEqual("propertyName", configuration.ProjectFile.CheckForValue[0].PropertyName);
            Assert.AreEqual("value", configuration.ProjectFile.CheckForValue[0].Value);
        }
        public RuleProcessor(string repoRootPath, SolutionValidatorConfigurationSection configuration, bool isReformatEnabled)
        {
            var projectFileHelper = Dependency.Resolve <IProjectFileHelper>();

            _rules = new List <Rule>();

            if (!Directory.Exists(repoRootPath))
            {
                Logger.Error(Resources.RuleProcessor_RuleProcessor_Repository_root_folder_does_not_exists, repoRootPath);
                return;
            }
            _repositoryInfo = new RepositoryInfo(repoRootPath);

            if (configuration.FolderStructure.Check)
            {
                var definitionFilePath = configuration.FolderStructure.EvaluatedDefinitionFilePath();
                if (File.Exists(definitionFilePath))
                {
                    var fileSystemHelper     = Dependency.Resolve <IFileSystemHelper>();
                    var fileSystemRuleParser = new FileSystemRuleParser(fileSystemHelper);
                    _rules.AddRange(fileSystemRuleParser.Parse(definitionFilePath));
                }
                else
                {
                    throw new ParseException(
                              string.Format(Resources.RuleProcessor_RuleProcessor_Folder_structure_definition_file_not_found,
                                            definitionFilePath), 0, 0);
                }
            }

            if (configuration.ProjectFile.OutputPath.Check)
            {
                var rule = new OutPutPathProjectFileRule(configuration.ProjectFile.OutputPath.Value, projectFileHelper);
                _rules.Add(rule);
            }

            if (configuration.ProjectFile.RequiredConfigurations.Check)
            {
                foreach (var requiredConfigurationName in
                         configuration.ProjectFile.RequiredConfigurations.Cast <ConfigurationNameElement>().Select(e => e.Name))
                {
                    var rule = new ConfigurationExistsProjectFileRule(requiredConfigurationName, projectFileHelper);
                    _rules.Add(rule);
                }
            }

            if (configuration.ProjectFile.CheckIdentical.Check)
            {
                foreach (var propertiesToMatch in
                         configuration.ProjectFile.CheckIdentical.Cast <PropertiesToMatchElement>())
                {
                    var rule = new CheckIdenticalProjectFileRule(propertiesToMatch.PropertyName, propertiesToMatch.OtherPropertyName, projectFileHelper);
                    _rules.Add(rule);
                }
            }

            if (configuration.ProjectFile.CheckForValue.Check)
            {
                foreach (var propertyToCheck in
                         configuration.ProjectFile.CheckForValue.Cast <PropertyToCheckElement>())
                {
                    var rule = new CheckForValueProjectFileRule(propertyToCheck.PropertyName, propertyToCheck.Value, projectFileHelper);
                    _rules.Add(rule);
                }
            }

            if (configuration.CSharpFormatting.Check && isReformatEnabled)
            {
                var          fileSystemHelper = Dependency.Resolve <IFileSystemHelper>();
                ReformatRule rule;
                var          optionsFilePath = configuration.CSharpFormatting.EvaluatedOptionsFilePath();
                if (File.Exists(optionsFilePath))
                {
                    rule = new ReformatRule(optionsFilePath, configuration.CSharpFormatting.SourceFileFilters, fileSystemHelper);
                }
                else
                {
                    if (configuration.CSharpFormatting.IsDefaultOptionsFilePath)
                    {
                        rule = new ReformatRule(null, configuration.CSharpFormatting.SourceFileFilters, fileSystemHelper);
                    }
                    else
                    {
                        throw new SolutionValidatorException(
                                  string.Format(Resources.RuleProcessor_RuleProcessor_CSharp_formatting_check_was_set_to_true, optionsFilePath));
                    }
                }
                _rules.Add(rule);
            }


            if (configuration.CSharpFormatting.PrivateFieldRename.Check && isReformatEnabled)
            {
                var fileSystemHelper = Dependency.Resolve <IFileSystemHelper>();
                _rules.Add(new RenamePrivateFieldsRefactorRule(
                               configuration.CSharpFormatting.PrivateFieldRename.Find,
                               configuration.CSharpFormatting.PrivateFieldRename.Replace,
                               configuration.CSharpFormatting.SourceFileFilters, fileSystemHelper));
            }

            if (configuration.CSharpFormatting.RemoveRedundantThisQualifier.Check && isReformatEnabled)
            {
                var fileSystemHelper = Dependency.Resolve <IFileSystemHelper>();
                _rules.Add(new RemoveRedundantThisQualifierRule(
                               configuration.CSharpFormatting.SourceFileFilters, fileSystemHelper));
            }
        }