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);
 }
        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);
        }
Пример #3
0
        protected StackMachineEntry <OperationPolicyExpression> Compile(IList <IOpCode> entries, X509Certificate2 cert, IPolicyExpression expression)
        {
            switch (expression.GetExpressionType())
            {
            //case PolicyExpressionType.LITERAL:
            //    return new StackMachineEntry(((LiteralPolicyExpression < ?  >)
            //    expression).
            //    GetPolicyValue())
            //    ;

            //case PolicyExpressionType.REFERENCE:
            //{
            //    object refExpression = GetRefExpressionType(expression);

            //    //IReferencePolicyExpression<X509Certificate2, object> refExpression = null;
            //    EvaluateReferenceExpression(cert, refExpression);

            //    return new ReferenceMachineEntry<IReferencePolicyExpression<X509Certificate2,T>>(expression);
            //}

            case PolicyExpressionType.OPERATION:
            {
                OperationPolicyExpression opExpression = (OperationPolicyExpression)expression;
                foreach (IPolicyExpression policyExpression in opExpression.GetOperands())
                {
                    if (policyExpression is IReferencePolicyExpression <X509Certificate2, String> )
                    {
                        var refExpression = policyExpression as IReferencePolicyExpression <X509Certificate2, String>;
                        EvaluateReferenceExpression(cert, refExpression);
                        entries.Add(Compile(refExpression));
                    }
                    else if (policyExpression is IReferencePolicyExpression <X509Certificate2, Int32> )
                    {
                        var refExpression = policyExpression as IReferencePolicyExpression <X509Certificate2, Int32>;
                        EvaluateReferenceExpression(cert, refExpression);
                        entries.Add(Compile(refExpression));
                    }
                    else if (policyExpression is IReferencePolicyExpression <X509Certificate2, Int64> )
                    {
                        var refExpression = policyExpression as IReferencePolicyExpression <X509Certificate2, Int64>;
                        EvaluateReferenceExpression(cert, refExpression);
                        entries.Add(Compile(refExpression));
                    }
                    else if (policyExpression is IReferencePolicyExpression <X509Certificate2, IList <String> > )
                    {
                        var refExpression = policyExpression as IReferencePolicyExpression <X509Certificate2, IList <String> >;
                        EvaluateReferenceExpression(cert, refExpression);
                        entries.Add(Compile(refExpression));
                    }
                    else if (policyExpression is IReferencePolicyExpression <X509Certificate2, Boolean> )
                    {
                        var refExpression = policyExpression as IReferencePolicyExpression <X509Certificate2, Boolean>;
                        EvaluateReferenceExpression(cert, refExpression);
                        entries.Add(Compile(refExpression));
                    }
                    else if (policyExpression is ILiteralPolicyExpression <String> )
                    {
                        entries.Add(Compile(policyExpression as ILiteralPolicyExpression <String>));
                    }
                    else
                    {
                        entries.Add(Compile(entries, cert, policyExpression));
                    }
                }
                return(new StackMachineEntry <OperationPolicyExpression>(opExpression.GetPolicyOperator()));
            }

            default:
                return(null);
            }
        }