public void IsSupportedStandardExpression_False() { var extensionExpression = new TestExtensionExpression(Expression.Constant(0)); Assert.That(ExpressionTreeVisitor.IsSupportedStandardExpression(extensionExpression), Is.False); var unknownExpression = new UnknownExpression(typeof(int)); Assert.That(ExpressionTreeVisitor.IsSupportedStandardExpression(unknownExpression), Is.False); var querySourceReferenceExpression = new QuerySourceReferenceExpression(ExpressionHelper.CreateMainFromClause_Int()); Assert.That(ExpressionTreeVisitor.IsSupportedStandardExpression(querySourceReferenceExpression), Is.False); var subQueryExpression = new SubQueryExpression(ExpressionHelper.CreateQueryModel <Cook>()); Assert.That(ExpressionTreeVisitor.IsSupportedStandardExpression(subQueryExpression), Is.False); }
public void IsSupportedStandardExpression_True() { var supportedExpressionTypeValues = new[] { ExpressionType.ArrayLength, ExpressionType.Convert, ExpressionType.ConvertChecked, ExpressionType.Negate, ExpressionType.NegateChecked, ExpressionType.Not, ExpressionType.Quote, ExpressionType.TypeAs, ExpressionType.UnaryPlus, ExpressionType.Add, ExpressionType.AddChecked, ExpressionType.Divide, ExpressionType.Modulo, ExpressionType.Multiply, ExpressionType.MultiplyChecked, ExpressionType.Power, ExpressionType.Subtract, ExpressionType.SubtractChecked, ExpressionType.And, ExpressionType.Or, ExpressionType.ExclusiveOr, ExpressionType.LeftShift, ExpressionType.RightShift, ExpressionType.AndAlso, ExpressionType.OrElse, ExpressionType.Equal, ExpressionType.NotEqual, ExpressionType.GreaterThanOrEqual, ExpressionType.GreaterThan, ExpressionType.LessThan, ExpressionType.LessThanOrEqual, ExpressionType.Coalesce, ExpressionType.ArrayIndex, ExpressionType.Conditional, ExpressionType.Constant, ExpressionType.Invoke, ExpressionType.Lambda, ExpressionType.MemberAccess, ExpressionType.Call, ExpressionType.New, ExpressionType.NewArrayBounds, ExpressionType.NewArrayInit, ExpressionType.MemberInit, ExpressionType.ListInit, ExpressionType.Parameter, ExpressionType.TypeIs, }; var visitMethodExpressionTypes = new HashSet <Type> ( from m in typeof(ExpressionTreeVisitor).GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) where m.Name.StartsWith("Visit") let parameters = m.GetParameters() where parameters.Length == 1 let expressionType = parameters.Single().ParameterType where expressionType != typeof(Expression) select expressionType); Assert.That(visitMethodExpressionTypes.Count > 0); foreach (var expressionType in supportedExpressionTypeValues) { var expressionInstance = ExpressionInstanceCreator.GetExpressionInstance(expressionType); Assert.That( visitMethodExpressionTypes.Any(t => t.IsAssignableFrom(expressionInstance.GetType())), Is.True, "Visit method for {0}", expressionInstance.GetType()); Assert.That(ExpressionTreeVisitor.IsSupportedStandardExpression(expressionInstance), Is.True); } }