Пример #1
0
        public void Process_GivenNullRuleEngineContext_ThrowsArgumentException()
        {
            var mockRuleCollection = new MockRuleCollection();
            var ruleProcessor      = new RuleProcessor();

            ruleProcessor.Process(null, mockRuleCollection.MyMockRule);
        }
Пример #2
0
        public void Process_GivenNullRule_ThrowsArgumentException()
        {
            var customer          = new Customer();
            var ruleEngineContext = new RuleEngineContext <Customer> (customer);
            var ruleProcessor     = new RuleProcessor();

            ruleProcessor.Process(ruleEngineContext, null);
        }
Пример #3
0
        public void Process_GivenARule_CallsWhenClause()
        {
            var customer           = new Customer();
            var ruleEngineContext  = new RuleEngineContext <Customer> (customer);
            var mockRuleCollection = new MockRuleCollection();

            var ruleProcessor = new RuleProcessor();

            ruleProcessor.Process(ruleEngineContext, mockRuleCollection.MyMockRule);

            Assert.IsTrue(mockRuleCollection.WhenClauseCalled);
        }
Пример #4
0
        public void Process_WhenWhenClauseReturnsFalse_DoesNotCallThenClause()
        {
            var customer           = new Customer();
            var ruleEngineContext  = new RuleEngineContext <Customer> (customer);
            var mockRuleCollection = new MockRuleCollection {
                WhenClauseReturns = false
            };

            var ruleProcessor = new RuleProcessor();

            ruleProcessor.Process(ruleEngineContext, mockRuleCollection.MyMockRule);

            Assert.IsFalse(mockRuleCollection.ThenClauseCalled);
        }
Пример #5
0
        public void Process_WhenRuleIsSkipAndViolationError_RuleIsSkiped()
        {
            var customer           = new Customer();
            var ruleEngineContext  = new RuleEngineContext <Customer> (customer);
            var mockRuleCollection = new MockRuleCollection {
                WhenClauseReturns = false
            };

            ruleEngineContext.RuleViolationReporter.Report(new RuleViolation(mockRuleCollection.MyMockRule, null, null));
            (mockRuleCollection.MyMockRule as Rule).AddShouldRunClause(ctx => ctx.RuleViolationReporter.Count() == 0);

            var ruleProcessor = new RuleProcessor();

            ruleProcessor.Process(ruleEngineContext, mockRuleCollection.MyMockRule);

            Assert.IsFalse(mockRuleCollection.WhenClauseCalled);
        }
        private void Run()
        {
            ValidationResults.Clear();

            var configuration = ConfigurationHelper.Load(ConfigFilePath);
            var ruleProcessor = new RuleProcessor(ProjectFileLocation, configuration, IsReformatEnabled);

            _isRuleEngineWorking = true;

            Task.Factory.StartNew(() => ruleProcessor.Process(validationResult =>
            {
                if (System.Windows.Application.Current.Dispatcher.CheckAccess())
                {
                    ValidationResults.AddRange(validationResult.Messages.Where(vm => !vm.Processed));
                }
                else
                {
                    System.Windows.Application.Current.Dispatcher.Invoke(() => ValidationResults.AddRange(validationResult.Messages.Where(vm => !vm.Processed)));
                }
            })).ContinueWith(t => _isRuleEngineWorking = false);
        }
Пример #7
0
        private static void Run(Options options)
        {
            var repoRootPath = string.Empty;

            try
            {
                repoRootPath = Path.GetFullPath(options.RepoRootPath);
                if (!Directory.Exists(repoRootPath))
                {
                    var message = string.Format(Resources.Program_Run_Repository_root_path__does_not_exist, repoRootPath);
                    Exit(message, -2);
                }
            }
            catch (Exception ex)
            {
                var message = string.Format(Resources.Program_Run_Error_when_processing_Repository_root_path, options.RepoRootPath);
                Exit(message, -2, ex);
            }

            try
            {
                string configFilePath;
                if (options.ConfigFilePath == Options.ConfigFilePathDefaultValue)
                {
                    configFilePath = null;
                }
                else
                {
                    configFilePath = Path.GetFullPath(options.ConfigFilePath);
                    if (!File.Exists(configFilePath))
                    {
                        var message = string.Format(Resources.Program_Run_Configuration_file_does_not_exist, configFilePath);
                        Exit(message, -3);
                    }
                }

                var configuration = ConfigurationHelper.Load(configFilePath);
                var ruleProcessor = new RuleProcessor(repoRootPath, configuration, options.Reformat);

                ruleProcessor.Process(validationResult =>
                {
                    foreach (var validationMessage in validationResult.Messages.Where(vm => !vm.Processed))
                    {
                        validationMessage.Processed = true;
                        switch (validationMessage.ResultLevel)
                        {
                        case ResultLevel.NotPassed:
                            {
                                using (new ColorChanger(ConsoleColor.Red))
                                {
                                    Console.Write(Resources.Program_Run_NotPassed);
                                }
                                Console.WriteLine(validationMessage.Message);
                            }
                            break;

                        case ResultLevel.Error:
                            {
                                using (new ColorChanger(ConsoleColor.Red))
                                {
                                    Console.Write(Resources.Program_Run_Error);
                                }
                                Console.WriteLine(validationMessage.Message);
                            }
                            break;

                        case ResultLevel.Warning:
                            {
                                using (new ColorChanger(ConsoleColor.Yellow))
                                {
                                    Console.Write(Resources.Program_Run_Warning);
                                }
                                Console.WriteLine(validationMessage.Message);
                            }
                            break;

                        case ResultLevel.Passed:
                            {
                                if (options.Verbose)
                                {
                                    using (new ColorChanger(ConsoleColor.Green))
                                    {
                                        Console.Write(Resources.Program_Run_Passed);
                                    }
                                    Console.WriteLine(validationMessage.Message);
                                }
                            }
                            break;

                        case ResultLevel.Info:
                            {
                                Console.WriteLine(validationMessage.Message);
                            }
                            break;
                        }
                    }
                });

                Console.WriteLine("");

                if (!options.Reformat)
                {
                    WriteLineBold(Resources.Program_Run_Code_was_not_reformatted__To_reformat_code_use_the__F_command_line_option);
                }

                var totalMessage = string.Format(Resources.Program_Run_Total_checks_Total_errors_found, ruleProcessor.TotalCheckCount, ruleProcessor.TotalErrorCount);
                WriteLineBold(totalMessage);

                if (Debugger.IsAttached)
                {
                    Console.WriteLine(Resources.Program_Run_Press_any_key_to_continue);
                    Console.ReadKey(true);
                }

                LogManager.FlushAll();
                Environment.Exit(ruleProcessor.TotalErrorCount);
            }
            catch (Exception ex)
            {
                var message = string.Format(Resources.Program_Run_Unexpected_error, ex.Message);
                Logger.Error(ex, message);
                Exit(message, -4, ex);
            }
        }