Пример #1
0
        public void RulesWithMultipleParameters_ShouldReturnProperly()
        {
            const string source  = "return abc.abc == def.abc;";
            const string source2 = "return abc.abc != def.abc;";
            var          pm      = new StubRuleProvider();
            var          group   = new RuleGroup("group", new List <RuleParameter> {
                new RuleParameter(typeof(Thing), "abc"), new RuleParameter(typeof(Thing), "def")
            });

            var rule0 = Rule.CreateRule().Named("rule10").WithGroup(group).WithSource(source).LoadNow().Build();
            var rule1 = Rule.CreateRule().Named("rule11").WithGroup(group).WithSource(source2).LoadNow().Build();

            pm.SetRules(rule0, rule1);

            RuleRunner runner = new RuleRunner(pm);

            var res = runner.RunRules("group", new Thing {
                abc = 4
            }, new Thing {
                abc = 4
            });                                                                               // try with dummy data class
            var en = res.GetEnumerator();

            en.MoveNext();
            Assert.AreEqual("rule10", en.Current.RuleName);
            Assert.AreEqual(true, en.Current.Result);

            en.MoveNext();
            Assert.AreEqual("rule11", en.Current.RuleName);
            Assert.AreEqual(false, en.Current.Result);
        }
Пример #2
0
        public void RunRuleByID_FrameworkIssueLinkIsNotNull_PropagatesToResult()
        {
            const string frameworkIssueLink = "https://docs.microsoft.com/known-framework-link";
            var          e = new MockA11yElement();

            var conditionMock = new Mock <Condition>(MockBehavior.Strict);

            conditionMock.Setup(m => m.Matches(e)).Returns(true).Verifiable();

            var infoStub = new RuleInfo
            {
                ErrorCode          = EvaluationCode.NeedsReview,
                FrameworkIssueLink = frameworkIssueLink,
            };

            var ruleMock = new Mock <IRule>(MockBehavior.Strict);

            ruleMock.Setup(m => m.Condition).Returns(conditionMock.Object).Verifiable();
            ruleMock.Setup(m => m.PassesTest(e)).Returns(true).Verifiable();
            ruleMock.Setup(m => m.Info).Returns(() => infoStub).Verifiable();

            var providerMock = new Mock <IRuleProvider>(MockBehavior.Strict);

            providerMock.Setup(m => m.GetRule(It.IsAny <RuleId>())).Returns(() => ruleMock.Object).Verifiable();

            var runner = new RuleRunner(providerMock.Object);
            var result = runner.RunRuleByID(default(RuleId), e);

            Assert.AreEqual(frameworkIssueLink, result.RuleInfo.FrameworkIssueLink);

            conditionMock.VerifyAll();
            ruleMock.VerifyAll();
            providerMock.VerifyAll();
        }
Пример #3
0
        public void BeforeScenario()
        {
            _ruleRunner = new RuleRunner();
            _objectContainer.RegisterInstanceAs(_ruleRunner);

            _ruleRunner.Setup().Wait();
        }
Пример #4
0
        public void RunRuleByID_RuleNotApplicableForNonMatchingCondition()
        {
            // This test has the side effect of ensuring IRule.Evaluate is not called
            // when the condition is not matched.

            var e = new MockA11yElement();

            var conditionMock = new Mock <Condition>(MockBehavior.Strict);

            conditionMock.Setup(m => m.Matches(e)).Returns(false).Verifiable();

            var infoStub = new RuleInfo();

            var ruleMock = new Mock <IRule>(MockBehavior.Strict);

            ruleMock.Setup(m => m.Condition).Returns(conditionMock.Object).Verifiable();
            ruleMock.Setup(m => m.Info).Returns(() => infoStub).Verifiable();

            var providerMock = new Mock <IRuleProvider>(MockBehavior.Strict);

            providerMock.Setup(m => m.GetRule(It.IsAny <RuleId>())).Returns(() => ruleMock.Object).Verifiable();

            var runner = new RuleRunner(providerMock.Object);
            var result = runner.RunRuleByID(default(RuleId), e);

            Assert.AreEqual(EvaluationCode.NotApplicable, result.EvaluationCode);
            Assert.AreEqual(e, result.element);
            Assert.AreEqual(infoStub, result.RuleInfo);

            conditionMock.VerifyAll();
            ruleMock.VerifyAll();
            providerMock.VerifyAll();
        }
Пример #5
0
        public void RunRuleByID_ReturnsExecutionErrorWhenConditionMatchesThrowsException()
        {
            var e = new MockA11yElement();

            var conditionMock = new Mock <Condition>(MockBehavior.Strict);

            conditionMock.Setup(m => m.Matches(e)).Throws <Exception>().Verifiable();

            var infoStub = new RuleInfo();

            var ruleMock = new Mock <IRule>(MockBehavior.Strict);

            ruleMock.Setup(m => m.Condition).Returns(conditionMock.Object).Verifiable();
            ruleMock.Setup(m => m.Info).Returns(() => infoStub).Verifiable();

            var providerMock = new Mock <IRuleProvider>(MockBehavior.Strict);

            providerMock.Setup(m => m.GetRule(It.IsAny <RuleId>())).Returns(() => ruleMock.Object).Verifiable();

            var runner = new RuleRunner(providerMock.Object);
            var result = runner.RunRuleByID(default(RuleId), e);

            Assert.AreEqual(EvaluationCode.RuleExecutionError, result.EvaluationCode);
            Assert.AreEqual(e, result.element);
            Assert.AreEqual(infoStub, result.RuleInfo);

            conditionMock.VerifyAll();
            ruleMock.VerifyAll();
            providerMock.VerifyAll();
        }
Пример #6
0
        private static int ExecuteOperationByInputOptions(CommandLineOptions options)
        {
            int exitCode = 0;

            switch (options.Operation)
            {
            case Operation.ShowHelp:
                CommandLineParser.PrintUsage();
                exitCode = 0;
                break;

            case Operation.ListRules:

                var ruleRunner = new RuleRunner();
                ruleRunner.RunListRules();

                exitCode = 0;
                break;

            case Operation.Format:

                var formatRunner = new FormatRunner();
                exitCode = formatRunner.RunFormat(options);

                break;

            default:
                throw new Exception("Invalid enum value: " + options.Operation);
            }
            return(exitCode);
        }
Пример #7
0
        public void RunRuleByID_ReturnsExpectedEvaluationCodeWhenSuccessful()
        {
            var e = new MockA11yElement();

            var conditionMock = new Mock <Condition>(MockBehavior.Strict);

            conditionMock.Setup(m => m.Matches(e)).Returns(true).Verifiable();

            var ruleMock = CreateRuleMock(conditionMock.Object, EvaluationCode.NeedsReview, e);

            var providerMock = new Mock <IRuleProvider>(MockBehavior.Strict);

            providerMock.Setup(m => m.GetRule(It.IsAny <RuleId>())).Returns(() => ruleMock.Object).Verifiable();

            var runner = new RuleRunner(providerMock.Object);
            var result = runner.RunRuleByID(default(RuleId), e);

            Assert.AreEqual(EvaluationCode.NeedsReview, result.EvaluationCode);
            Assert.AreEqual(e, result.element);
            Assert.AreEqual(ruleMock.Object.Info, result.RuleInfo);

            conditionMock.VerifyAll();
            ruleMock.VerifyAll();
            providerMock.VerifyAll();
        }
Пример #8
0
        private static RuleRunner SetupRunner()
        {
            var runner = new RuleRunner();

            Compose(runner);
            return(runner);
        }
Пример #9
0
        public void Validate(TemperatureType temperatureType, ICollection <CommandType> commands)
        {
            var ctx = new ValidationContext(new List <CommandType>(), temperatureType, commands);

            var cancelValidation = false;

            foreach (var command in commands)
            {
                if (cancelValidation)
                {
                    break;
                }

                ctx.CurrentCommand = command;

                var anyRulesFailed = false;
                var ruleRunner     = new RuleRunner <ValidationContext>(_rulePack);

                ruleRunner.RuleRan += (object sender, RuleRanEventArgs <ValidationContext> e, ref bool cancel) =>
                {
                    if (!e.Passed)
                    {
                        anyRulesFailed = true;
                    }

                    OnRuleRan(new RuleRanEventArgs(e.Rule.Method, e.Passed, command), ref cancel);
                };

                ruleRunner.Run(ctx);

                OnCommandValidated(new DressCommandValidationEventArgs(command, anyRulesFailed), ref cancelValidation);

                ctx.AlreadyExecuted.Add(command);
            }
        }
Пример #10
0
        /// <summary>
        /// Private helper function (formerly in SaveSnapshotZip) to make it easier to call with different inputs
        /// </summary>
        private static void SaveSnapshotFromElement(int?focusedElementId, A11yFileMode mode, Dictionary <SnapshotMetaPropertyName, object> otherProperties, Contexts.ElementContext ec, Package package, A11yElement root)
        {
            var json = JsonConvert.SerializeObject(root, Formatting.Indented);

            using (MemoryStream mStrm = new MemoryStream(Encoding.UTF8.GetBytes(json)))
            {
                AddStream(package, mStrm, elementFileName);
            }

            if (ec.DataContext.Screenshot != null)
            {
                using (MemoryStream mStrm = new MemoryStream())
                {
                    ec.DataContext.Screenshot.Save(mStrm, System.Drawing.Imaging.ImageFormat.Png);
                    mStrm.Seek(0, SeekOrigin.Begin);

                    AddStream(package, mStrm, screenshotFileName);
                }
            }

            var meta     = new SnapshotMetaInfo(mode, RuleRunner.GetRuleVersion(), focusedElementId, ec.DataContext.ScreenshotElementId, otherProperties);
            var jsonMeta = JsonConvert.SerializeObject(meta, Formatting.Indented);

            using (MemoryStream mStrm = new MemoryStream(Encoding.UTF8.GetBytes(jsonMeta)))
            {
                AddStream(package, mStrm, metatdataFileName);
            }
        }
Пример #11
0
        public async Task <IActionResult> Post([FromBody] RuleRequest request)
        {
            var runner = new RuleRunner(new RuleDefinitionRepository(_context));
            var result = await runner.ApplyAsync(request);

            return(Ok(result));
        }
Пример #12
0
        public void RunRuleByID_ReturnsExpectedEvaluationCodeWhenPassesTestFalse()
        {
            var e = new MockA11yElement();

            var conditionMock = new Mock <Condition>(MockBehavior.Strict);

            conditionMock.Setup(m => m.Matches(e)).Returns(true).Verifiable();

            var infoStub = new RuleInfo
            {
                ErrorCode = EvaluationCode.NeedsReview,
            };

            var ruleMock = new Mock <IRule>(MockBehavior.Strict);

            ruleMock.Setup(m => m.Condition).Returns(conditionMock.Object).Verifiable();
            ruleMock.Setup(m => m.PassesTest(e)).Returns(false).Verifiable();
            ruleMock.Setup(m => m.Info).Returns(() => infoStub).Verifiable();

            var providerMock = new Mock <IRuleProvider>(MockBehavior.Strict);

            providerMock.Setup(m => m.GetRule(It.IsAny <RuleId>())).Returns(() => ruleMock.Object).Verifiable();

            var runner = new RuleRunner(providerMock.Object);
            var result = runner.RunRuleByID(default(RuleId), e);

            Assert.AreEqual(EvaluationCode.NeedsReview, result.EvaluationCode);
            Assert.AreEqual(e, result.element);
            Assert.AreEqual(ruleMock.Object.Info, result.RuleInfo);

            conditionMock.VerifyAll();
            ruleMock.VerifyAll();
            providerMock.VerifyAll();
        }
        public void RuleWithGoodAndBadAndUnknownLink()
        {
            var linkVerifierService = new RuleRunner(new List <ILinkRule> {
                bassicRule
            });
            var result = linkVerifierService.VerifyLinks(links);

            AssertLinkIsBad(result, badLink);
            AssertLinkIsGood(result, goodLink);
            AssertLinkIsUnknown(result, unknownLink);
        }
        public void RuleIgnoresLink_LinkReturnedUnknown()
        {
            var linkVerifierService = new RuleRunner(new List <ILinkRule> {
                bassicRule
            });
            var result = linkVerifierService.VerifyLinks(new List <LinkDto> {
                unknownLink
            });

            AssertLinkIsUnknown(result, unknownLink);
        }
        public void RuleDisapprovesLink_LinkReturnedBad()
        {
            var linkVerifierService = new RuleRunner(new List <ILinkRule> {
                bassicRule
            });
            var result = linkVerifierService.VerifyLinks(new List <LinkDto> {
                badLink
            });

            AssertLinkIsBad(result, badLink);
        }
Пример #16
0
        public void AnylizeThousandsOfLinks_AllLinksInResult()
        {
            var rule1               = A.Fake <ILinkRule>();
            var rule2               = A.Fake <ILinkRule>();
            var allLinks            = CreateAllLinks(rule1, rule2);
            var linkVerifierService = new RuleRunner(new [] { rule1, rule2 });

            var results = linkVerifierService.VerifyLinks(allLinks);

            AssertLinkWereClassifiedCorrectly(results);
            Assert.AreEqual(LinkLoop * 2, results.GoodLinks.Count(), "Didn't get enough good links");
            Assert.AreEqual(LinkLoop, results.BadLinks.Count(), "Didn't get enough bad links");
            Assert.AreEqual(LinkLoop * 3, results.UnknownLinks.Count(), "Didn't get enough unknown links");
        }
        public void RuleSetsLinkToUnknownTest_NextRulesIgnoreLinks()
        {
            var firstRule  = A.Fake <ILinkRule>();
            var secondRule = A.Fake <ILinkRule>();

            firstRule.SetLinkTo(true, LinkStatus.Unknown, unknownLink);
            secondRule.SetLinkTo(true, LinkStatus.Good, unknownLink);

            var linkVerifierService = new RuleRunner(new List <ILinkRule> {
                firstRule, secondRule
            });
            var result = linkVerifierService.VerifyLinks(links);

            AssertLinkIsUnknown(result, unknownLink);
        }
Пример #18
0
        public void RunRule_ImproperParams_ShouldThrow()
        {
            const string source = "return true;";
            var          pm     = new StubRuleProvider();
            var          group  = new RuleGroup("group", null);
            var          rule   = Rule.CreateRule().Named("rule").WithGroup(group).WithSource(source).Build();

            pm.SetRules(rule);
            RuleRunner runner  = new RuleRunner(pm);
            var        results = runner.RunRules("group", 4).ToList(); // to list is required for the rules to actually run.

            Assert.IsFalse(results.Single().HasResult);
            Assert.AreEqual("rule", results.Single().RuleName);
            var x = results.Single().Result;
        }
Пример #19
0
        /// <summary>
        /// Refresh tree node data with all children at once.
        /// <param name="mode">indicate the mode</param>
        /// </summary>
        public void RefreshTreeData(TreeViewMode mode)
        {
            this.WalkerMode = mode;
            if (this.Elements.Count != 0)
            {
                this.Elements.Clear();
            }

            //Set parent of Root explicitly for testing.
            var ancestry = new DesktopElementAncestry(this.WalkerMode, this.SelectedElement);

            // Pre-count the ancestors in our bounded count, so that our count is accurate
            _elementCounter.TryAdd(ancestry.Items.Count);

            this.TopMostElement = ancestry.First;

            // clear children
            ListHelper.DisposeAllItemsAndClearList(this.SelectedElement.Children);
            this.SelectedElement.UniqueId = 0;

            PopulateChildrenTreeNode(this.SelectedElement, ancestry.Last, ancestry.NextId);

            // do population of ancesters all togather with children
            var list = new List <A11yElement>(this.Elements);

            foreach (var item in ancestry.Items)
            {
                this.Elements.Add(item);
            }

            // populate Elements first
            this.Elements.AsParallel().ForAll(e => e.PopulateAllPropertiesWithLiveData());

            // check whether there is any elements which couldn't be updated in parallel, if so, update it in sequence.
            var nuel = this.Elements.Where(e => e.Properties == null);

            if (nuel.Any())
            {
                nuel.ToList().ForEach(e => e.PopulateAllPropertiesWithLiveData());
            }

            // run tests
            list.AsParallel().ForAll(e =>
            {
                e.ScanResults?.Items.Clear();
                RuleRunner.Run(e);
            });
        }
        public void TwoRulesTest()
        {
            var firstRule  = A.Fake <ILinkRule>();
            var secondRule = A.Fake <ILinkRule>();

            firstRule.SetLinkTo(true, LinkStatus.Bad, badLink);
            secondRule.SetLinkTo(true, LinkStatus.Good, goodLink);

            var linkVerifierService = new RuleRunner(new List <ILinkRule> {
                firstRule, secondRule
            });
            var result = linkVerifierService.VerifyLinks(links);

            AssertLinkIsBad(result, badLink);
            AssertLinkIsGood(result, goodLink);
            AssertLinkIsUnknown(result, unknownLink);
        }
Пример #21
0
        static void Main(string[] args)
        {
            var designation = new Designation()
            {
                Id   = 1,
                Name = "ManaGer",
            };

            var employee = new Employee
            {
                Id             = 1,
                Name           = "Nejimon",
                Designation    = designation,
                LstDesignation = new List <Designation>()
                {
                    new Designation()
                    {
                        Id = 1, Name = "Fulano"
                    }
                }
            };

            //employee.Teste.Find(r => r.Id == 1)

            //new Func<TestConsoleApp.Employee, bool>((input) => { return input.Numeros.Contains(10) });

            var thirdAssemblyClass = new ClassFromAnotherAssembly
            {
                Id = 1
            };

            var runner = new RuleRunner();

            var statementResult = runner.IsStatementTrue("input.Id == 1", employee);
            var blockResult     = runner.IsBlockTrue("if(input.Designation != null && input.Designation.Name != null && input.Designation.Name.ToLower() == \"manager\") return true; else return false;", employee);
            var blockResult1    = runner.IsBlockTrue("return input.LstDesignation.Find(r => r.Name == \"Fulano\") != null;", employee);


            //demo of how types from another assembly can be used:
            var runner2 = new RuleRunner(new List <Assembly>
            {
                typeof(ClassFromAnotherAssembly).Assembly //you need to add reference to the external assembly like this.
            });

            var statementResult2 = runner2.IsStatementTrue("input.Id == 1", thirdAssemblyClass);
        }
Пример #22
0
        public void RunRuleByID_ReturnsExecutionErrorForUnknownRuleID()
        {
            var providerMock = new Mock <IRuleProvider>(MockBehavior.Strict);

            providerMock.Setup(m => m.GetRule(It.IsAny <RuleId>())).Returns(() => null).Verifiable();

            var e = new MockA11yElement();

            var runner = new RuleRunner(providerMock.Object);
            var result = runner.RunRuleByID(default(RuleId), e);

            Assert.AreEqual(EvaluationCode.RuleExecutionError, result.EvaluationCode);
            Assert.AreEqual(e, result.element);
            Assert.IsNull(result.RuleInfo);

            providerMock.VerifyAll();
        }
Пример #23
0
        public void RunRuleByID_ReturnsExecutionErrorWhenEvaluateNotImplemented()
        {
            var e = new MockA11yElement();

            var rule = new RuleWithEvaluateNotImplemented();

            var providerMock = new Mock <IRuleProvider>(MockBehavior.Strict);

            providerMock.Setup(m => m.GetRule(It.IsAny <RuleId>())).Returns(() => rule);

            var runner = new RuleRunner(providerMock.Object);
            var result = runner.RunRuleByID(default(RuleId), e);

            Assert.AreEqual(EvaluationCode.RuleExecutionError, result.EvaluationCode);
            Assert.AreEqual(rule.Info, result.RuleInfo);

            providerMock.VerifyAll();
        }
Пример #24
0
        static void Compose(RuleRunner runner)
        {
            var catalog = new AggregateCatalog();

            foreach (var directory in AssemblyFolders)
            {
                catalog.Catalogs.Add(new DirectoryCatalog(directory));
            }

            foreach (var filename in AssemblyNames)
            {
                var assembly = Assembly.LoadFile(filename);
                catalog.Catalogs.Add(new AssemblyCatalog(assembly));
            }

            var container = new CompositionContainer(catalog);

            container.ComposeParts(runner);
        }
        public void Setup()
        {
            runner         = new RuleRunner();
            solutionResult = new RulesResultBase();
            projectResult  = new RulesResultBase();

            project  = new Project("", new Guid());
            solution = new Solution("", new[] { project });

            solutionRuleProcessor = MockRepository.GenerateMock <ISolutionRuleProcessor>();
            solutionRuleProcessor.Expect(r => r.RunRules(solution)).Return(solutionResult);

            projectRuleProcessor = MockRepository.GenerateMock <IProjectRuleProcessor>();
            projectRuleProcessor.Expect(r => r.RunRules(project)).Return(projectResult);

            runner.SolutionProcessors = new[] { solutionRuleProcessor };
            runner.ProjectProcessors  = new[] { projectRuleProcessor };

            results = runner.RunRules(solution);
        }
Пример #26
0
        public void RunRuleByID_CallsPassesTestWhenConditionIsNull()
        {
            var e = new MockA11yElement();

            var ruleMock = CreateRuleMock(null, EvaluationCode.Pass, e);

            var providerMock = new Mock <IRuleProvider>(MockBehavior.Strict);

            providerMock.Setup(m => m.GetRule(It.IsAny <RuleId>())).Returns(() => ruleMock.Object).Verifiable();

            var runner = new RuleRunner(providerMock.Object);
            var result = runner.RunRuleByID(default(RuleId), e);

            Assert.AreEqual(EvaluationCode.Pass, result.EvaluationCode);
            Assert.AreEqual(e, result.element);
            Assert.AreEqual(ruleMock.Object.Info, result.RuleInfo);

            ruleMock.VerifyAll();
            providerMock.VerifyAll();
        }
Пример #27
0
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            //get the project file
            StartUpWindow win = new StartUpWindow();

            win.ShowDialog();

            //if a file selected
            if (win.DialogResult == DialogResult.OK)
            {
                //build main objects
                CalidusProjectManager           projectManager = new CalidusProjectManager();
                CalidusProjectModel             project        = new CalidusProjectModel(projectManager.ReadFrom(win.SelectedProjectFile));
                CalidusRuleConfigurationFactory configFactory  = new CalidusRuleConfigurationFactory(project, projectManager);

                RuleRunner        runner        = new RuleRunner();
                RuleViolationList violationList = new RuleViolationList();

                //prepare main view
                MainWindow mainView = new MainWindow();

                //assign controllers
                MainController c = new MainController(mainView, project, win.IsNewProject, projectManager, runner, violationList);

                ViolationListController     violationListController     = new ViolationListController(mainView.ViolationListView, project, violationList);
                CheckableRuleTreeController checkableRuleListController = new CheckableRuleTreeController(mainView.CheckableRuleTreeView, new CalidusRuleProvider(), configFactory);
                FileTreeController          fileListController          = new FileTreeController(mainView.FileListView, project);
                SourceLocationController    sourceLocationController    = new SourceLocationController(mainView.SourceLocationView, project);
                RuleRunnerController        ruleRunnerController        = new RuleRunnerController(mainView.RuleRunnerView, runner, project, configFactory);
                StatusController            statusController            = new StatusController(mainView.StatusView, violationList);

                //run application
                Application.Run(mainView);
            }
        }
Пример #28
0
        public void RunAll_ReturnsExpectedResults()
        {
            var e = new MockA11yElement();

            var ruleMocks = new List <Mock <IRule> >();
            var codes     = Enum.GetValues(typeof(EvaluationCode)) as IEnumerable <EvaluationCode>;

            foreach (var code in codes)
            {
                ruleMocks.Add(CreateRuleMock(Condition.True, code, e));
            }

            var rules = from m in ruleMocks select(m.Object);

            var providerMock = new Mock <IRuleProvider>(MockBehavior.Strict);

            providerMock.Setup(m => m.All).Returns(() => rules).Verifiable();

            var runner  = new RuleRunner(providerMock.Object);
            var results = runner.RunAll(e);

            Assert.AreEqual(codes.Count(), results.Count());

            for (var i = 0; i < results.Count(); ++i)
            {
                var result       = results.ElementAt(i);
                var expectedCode = codes.ElementAt(i);
                var ruleMock     = ruleMocks[i];

                Assert.AreEqual(expectedCode, result.EvaluationCode);
                Assert.AreEqual(e, result.element);
                Assert.AreEqual(ruleMock.Object.Info, result.RuleInfo);

                ruleMock.VerifyAll();
            }

            providerMock.VerifyAll();
        }
Пример #29
0
        /// <summary>
        /// Python rule.
        /// </summary>
        public static void Rule3(int i, decimal d, string s)
        {
            Rule3Request request = new Rule3Request();

            request.Integer = i;
            request.Decimal = d;
            request.String  = s;

            Console.WriteLine("--- Rule3Request ---");
            Console.WriteLine(request.Integer);
            Console.WriteLine(request.Decimal);
            Console.WriteLine(request.String);

            RuleRunner    rr       = new RuleRunner();
            Rule3Response response = (Rule3Response)rr.Run("Hf.Rules.Rule3", request);

            Console.WriteLine("--- Rule3Response ---");
            Console.WriteLine(response.Boolean);
            Console.WriteLine(response.DateTime);
            Console.WriteLine(response.Decimal);
            Console.WriteLine(response.Integer);
            Console.WriteLine(response.String);
        }
Пример #30
0
        public void RunRulesWithListTest()
        {
            const string source  = "return abc.abc == 4;";
            const string source2 = "return abc.abc != 4;";
            var          pm      = new StubRuleProvider();
            var          group   = new RuleGroup("group", new List <RuleParameter> {
                new RuleParameter(typeof(Thing), "abc")
            });

            var rule0 = Rule.CreateRule().Named("rule0").WithGroup(group).WithSource(source).LoadNow().Build();
            var rule1 = Rule.CreateRule().Named("rule1").WithGroup(group).WithSource(source).LoadNow().Build();
            var rule2 = Rule.CreateRule().Named("rule2").WithGroup(group).WithSource(source2).LoadNow().Build();

            pm.SetRules(rule0, rule1, rule2);
            RuleRunner runner = new RuleRunner(pm);


            var res = runner.RunRulesWithList("group", new List <Tuple <string, object> > {
                Tuple.Create("abc", (object)new Thing {
                    abc = 4
                })
            });                                                                                                                                 // try with dummy data class
            var en = res.GetEnumerator();

            en.MoveNext();
            Assert.AreEqual("rule0", en.Current.RuleName);
            Assert.AreEqual(true, en.Current.Result);

            en.MoveNext();
            Assert.AreEqual("rule1", en.Current.RuleName);
            Assert.AreEqual(true, en.Current.Result);

            en.MoveNext();
            Assert.AreEqual("rule2", en.Current.RuleName);
            Assert.AreEqual(false, en.Current.Result);
        }