public void GetImplicationRules_ReturnsImplicationRulesList()
        {
            // Arrange
            Optional <Dictionary <int, ImplicationRule> > expectedImplicationRules =
                Optional <Dictionary <int, ImplicationRule> > .For(PrepareExpectedImplicationRules());

            // Act
            Optional <Dictionary <int, ImplicationRule> > actualImplicationRules = _implicationRuleManager.GetImplicationRules(_profileName);

            // Assert
            Assert.IsTrue(actualImplicationRules.IsPresent);
            Assert.AreEqual(expectedImplicationRules.Value.Count, actualImplicationRules.Value.Count);
            for (int i = 1; i <= expectedImplicationRules.Value.Count; i++)
            {
                Assert.IsTrue(ObjectComparer.ImplicationRulesAreEqual(expectedImplicationRules.Value[i], actualImplicationRules.Value[i]));
            }
        }
예제 #2
0
        public void CreateImplicationRuleEntity_ReturnsImplicationRule()
        {
            // Arrange
            string ifStatementPart   = "(A=a|(B=b&C=c))";
            string thenStatementPart = "(D=d)";
            string implicationRule   = $"IF{ifStatementPart}THEN{thenStatementPart}";
            ImplicationRuleStrings implicationRuleStrings = new ImplicationRuleStrings(ifStatementPart, thenStatementPart);

            _implicationRuleParser.Expect(x => x.ExtractStatementParts(implicationRule)).Return(implicationRuleStrings);

            // (A=a|(B=b&C=c))
            List <StatementCombination> ifStatementCombinations = new List <StatementCombination>
            {
                new StatementCombination(new List <UnaryStatement>
                {
                    new UnaryStatement("A", ComparisonOperation.Equal, "a")
                }),
                new StatementCombination(new List <UnaryStatement>
                {
                    new UnaryStatement("B", ComparisonOperation.Equal, "b"),
                    new UnaryStatement("C", ComparisonOperation.Equal, "c")
                })
            };
            // (D=d)
            StatementCombination thenStatementCombination = new StatementCombination(new List <UnaryStatement>
            {
                new UnaryStatement("D", ComparisonOperation.Equal, "d")
            });
            ImplicationRule expectedImplicationRule = new ImplicationRule(ifStatementCombinations, thenStatementCombination);

            List <string> ifStatementParts = new List <string> {
                "A=a", "B=b&C=c"
            };

            _implicationRuleParser.Expect(irp => irp.ParseImplicationRule(ref ifStatementPart))
            .Return(ifStatementParts);
            List <string> thenStatementParts = new List <string> {
                "D=d"
            };

            _implicationRuleParser.Expect(irp => irp.ParseStatementCombination(thenStatementPart))
            .Return(thenStatementParts);

            List <string> aIfUnaryStatementStrings = new List <string> {
                "A=a"
            };
            List <string> bcIfUnaryStatementStrings = new List <string> {
                "B=b", "C=c"
            };

            _implicationRuleParser.Expect(irp => irp.ParseStatementCombination("A=a")).Return(aIfUnaryStatementStrings);
            _implicationRuleParser.Expect(irp => irp.ParseStatementCombination("B=b&C=c")).Return(bcIfUnaryStatementStrings);

            UnaryStatement aUnaryStatement = new UnaryStatement("A", ComparisonOperation.Equal, "a");
            UnaryStatement bUnaryStatement = new UnaryStatement("B", ComparisonOperation.Equal, "b");
            UnaryStatement cUnaryStatement = new UnaryStatement("C", ComparisonOperation.Equal, "c");
            UnaryStatement dUnaryStatement = new UnaryStatement("D", ComparisonOperation.Equal, "d");

            _implicationRuleParser.Expect(irp => irp.ParseUnaryStatement("A=a")).Return(aUnaryStatement);
            _implicationRuleParser.Expect(irp => irp.ParseUnaryStatement("B=b")).Return(bUnaryStatement);
            _implicationRuleParser.Expect(irp => irp.ParseUnaryStatement("C=c")).Return(cUnaryStatement);
            _implicationRuleParser.Expect(irp => irp.ParseUnaryStatement("D=d")).Return(dUnaryStatement);

            // Act
            ImplicationRule actualImplicationRule = _implicationRuleCreator.CreateImplicationRuleEntity(implicationRule);

            // Assert
            Assert.IsTrue(ObjectComparer.ImplicationRulesAreEqual(expectedImplicationRule, actualImplicationRule));
        }