public void testExecute_bitwiseOr_assertResults()
        {
            Assert.Equal((2 | 4), PolicyOperator <int, int> .BITWISE_OR.Execute(2, 4));
            Assert.NotEqual((2 | 5), PolicyOperator <int, int> .BITWISE_OR.Execute(2, 4));


            Assert.Equal((2 | 4), PolicyOperator.BitwiseOr(2, 4));
            Assert.Equal("|", PolicyOperator.BitwiseOr <int, int>().GetOperatorToken());
        }
        public void TestExecute_LogicalOr_AssertResults()
        {
            OperatorBase equalsOperator = PolicyOperator.FromToken(("=_" + "Boolean_Boolean").GetHashCode());

            equalsOperator.Should().NotBeNull();

            Assert.True(PolicyOperator <bool> .LOGICAL_OR.Execute(true, true));
            Assert.True(PolicyOperator <bool> .LOGICAL_OR.Execute(true, false));
            Assert.True(PolicyOperator <bool> .LOGICAL_OR.Execute(false, true));
            Assert.False(PolicyOperator <bool> .LOGICAL_OR.Execute(false, false));
        }
Ejemplo n.º 3
0
        public void TestEqualsFindTokenOperators()
        {
            OperatorBase equalsOperator = PolicyOperator.FromToken(("=_" + "Boolean_Boolean").GetHashCode());

            equalsOperator.Should().NotBeNull();

            equalsOperator = PolicyOperator.FromToken(("=_" + "Int32_Int32").GetHashCode());
            equalsOperator.Should().NotBeNull();

            equalsOperator = PolicyOperator.FromToken(("=_" + "String_String").GetHashCode());
            equalsOperator.Should().NotBeNull();
        }
        public void TestGetInstance_AssertExpression()
        {
            IList <IPolicyExpression> operands = new List <IPolicyExpression>();

            operands.Add(new LiteralPolicyExpression <bool>(true));
            operands.Add(new LiteralPolicyExpression <bool>(false));

            OperationPolicyExpression expression = new OperationPolicyExpression(PolicyOperator.BitwiseAnd <bool, bool>(), operands);

            expression.Should().NotBeNull();
            expression.GetPolicyOperator().Should().Be(PolicyOperator.BitwiseAnd <bool, bool>());
            expression.GetExpressionType().Should().Be(PolicyExpressionType.OPERATION);
            expression.GetOperands().ShouldBeEquivalentTo(operands);
        }
Ejemplo n.º 5
0
        public void Combine(IPolicyExpressionRoot right, PolicyOperator @operator)
        {
            if (right == null)
            {
                throw new ArgumentNullException(nameof(right));
            }

            PolicyExpressionWithOperator exp = new PolicyExpressionWithOperator(@operator, expression, right.Expression);

            if (isPolicyOnly)
            {
                isPolicyOnly = false;
                policyName   = null;
            }
            expression = exp;
            result     = exp.Result;
        }
        public void TestExecute_NotEquals_Convertparamspecial_AssertResults()
        {
            Assert.False(PolicyOperator <Int64, Int64, bool> .NOT_EQUALS.Execute("00F74F1C4FE4E1762E".HexAsLong(), "f74f1c4fe4e1762e".HexAsLong()));
            Assert.False(PolicyOperator <Int64, String, bool> .NOT_EQUALS.Execute("00F74F1C4FE4E1762E".HexAsLong(), "f74f1c4fe4e1762e"));
            Assert.True(PolicyOperator <Int64, String, bool> .NOT_EQUALS.Execute("00F74F1C4FE4E17600".HexAsLong(), "f74f1c4fe4e1762e"));

            Delegate del = PolicyOperator <Int64, String, bool> .NOT_EQUALS.ExecuteRef;

            Assert.False((bool)del.DynamicInvoke(new object[] { "00F74F1C4FE4E1762E".HexAsLong(), "f74f1c4fe4e1762e" }));
            Assert.True((bool)del.DynamicInvoke(new object[] { "00F74F1C4FE4E17600".HexAsLong(), "f74f1c4fe4e1762e" }));


            var          tokenHashCode = "!=_Int32_String".GetHashCode();
            OperatorBase operatorBase  = PolicyOperator.FromToken(tokenHashCode);

            operatorBase.Should().NotBeNull();
        }
Ejemplo n.º 7
0
        public PolicyExpressionWithOperator(PolicyOperator @operator, IPolicyExpression left, IPolicyExpression right)
        {
            this.@operator = @operator;
            this.left      = left;
            this.right     = right;
            PolicyResult leftResult  = left.Result;
            PolicyResult rightResult = right.Result;

            switch (@operator)
            {
            case PolicyOperator.And:
                this.result = AndOperation[(int)leftResult, (int)rightResult];
                break;

            case PolicyOperator.Or:
            default:
                this.result = OrOperation[(int)leftResult, (int)rightResult];
                break;
            }
        }
        /**
         * Builds an aggregated {@link PolicyExpression} from a parsed list of tokens.
         * @param tokens Parsed list of tokens used to build the {@link PolicyExpression}.
         * @param level Used for keeping track of depth of operations.
         * @return A {@link PolicyExpression} built from the parsed list of tokens.
         * @throws PolicyParseException
         */
        protected IPolicyExpression BuildExpression(IEnumerator <TokenTypeAssociation> tokens, bool operandFrame)
        {
            if (!tokens.MoveNext())
            {
                return(null);
            }

            IList <IPolicyExpression> builtOperandExpressions = new List <IPolicyExpression>();

            do
            {
                TokenTypeAssociation assos = tokens.Current;
                switch (assos.GetTokenType())
                {
                case TokenType.START_LEVEL:
                {
                    IncrementLevel();
                    IPolicyExpression expression = BuildExpression(tokens);
                    if (operandFrame)
                    {
                        return(expression);
                    }

                    builtOperandExpressions.Add(expression);
                    break;
                }

                case TokenType.END_LEVEL:
                    if (GetLevel() == 0)
                    {
                        throw new PolicyGrammarException("To many \")\" tokens.  Delete this token");
                    }

                    if (builtOperandExpressions.Count == 0)
                    {
                        throw new PolicyGrammarException("Group must contain at least one expression.");
                    }

                    DecrementLevel();
                    return(builtOperandExpressions[0]);

                case TokenType.OPERATOR_BINARY_EXPRESSION:
                case TokenType.OPERATOR_UNARY_EXPRESSION:
                {
                    // regardless if this is a unary or binary expression, then next set of tokens should consist
                    // of a parameter to this operator
                    IPolicyExpression subExpression = BuildExpression(tokens, true);

                    int tokenHashCode = 0;

                    if (subExpression != null)
                    {
                        //TODO Refactor
                        if (assos.GetTokenType() == TokenType.OPERATOR_UNARY_EXPRESSION)
                        {
                            tokenHashCode = (assos.GetToken() + "_" + GetOperandType(subExpression)).GetHashCode();
                        }
                        if (assos.GetTokenType() == TokenType.OPERATOR_BINARY_EXPRESSION)
                        {
                            string leftOperandType  = GetOperandType(builtOperandExpressions.First());
                            string rightOperandType = GetOperandType(subExpression);
                            tokenHashCode = (assos.GetToken() + "_" + leftOperandType + "_" + rightOperandType).GetHashCode();
                        }
                    }
                    else     //(subExpression == null)
                    {
                        throw new PolicyGrammarException("Missing parameter.  Operator must be followed by an expression.");
                    }

                    builtOperandExpressions.Add(subExpression);



                    // get the operator for this token
                    OperatorBase operatorBase = PolicyOperator.FromToken(tokenHashCode);

                    // now add the parameters to the operator
                    if (builtOperandExpressions.Count == 1 && operatorBase is BinaryOperator)
                    {
                        throw new PolicyGrammarException("Missing parameter.  Binary operators require two parameters.");
                    }

                    IPolicyExpression operatorExpression = new OperationPolicyExpression(operatorBase, builtOperandExpressions);

                    if (operandFrame)
                    {
                        return(operatorExpression);
                    }

                    builtOperandExpressions = new List <IPolicyExpression>();
                    builtOperandExpressions.Add(operatorExpression);

                    break;
                }

                case TokenType.LITERAL_EXPRESSION:
                {
                    IPolicyExpression expression = new LiteralPolicyExpression <string>(new PolicyValue <string>(assos.GetToken()));
                    if (operandFrame)
                    {
                        return(expression);                             // exit this operand frame
                    }
                    builtOperandExpressions.Add(expression);
                    break;
                }

                case TokenType.CERTIFICATE_REFERENCE_EXPRESSION:
                {
                    IPolicyExpression expression = BuildCertificateReferenceField(assos.GetToken());

                    if (operandFrame)
                    {
                        return(expression);                             // exit this operand frame
                    }
                    builtOperandExpressions.Add(expression);
                    break;
                }
                }
            } while(tokens.MoveNext());

            if (builtOperandExpressions.Count > 1)
            {
                throw new PolicyGrammarException("Erroneous expression.");
            }

            return(builtOperandExpressions[0]);
        }