public void VBStringComparison ()
    {
      var parameterExpression = Expression.Parameter (typeof (Cook), "c");
      var vbCompareStringExpression =
          Expression.Equal (
              Expression.Call (
                  typeof (Operators).GetMethod ("CompareString"),
                  Expression.Constant ("string1"),
                  Expression.MakeMemberAccess (parameterExpression, typeof (Cook).GetProperty ("Name")),
                  Expression.Constant (true)),
              Expression.Constant (0));
      var query = QuerySource
          .Where (Expression.Lambda<Func<Cook, bool>> (vbCompareStringExpression, parameterExpression))
          .Select (c => c.Name);

      var queryModel = QueryParser.GetParsedQuery (query.Expression);

      var whereClause = (WhereClause) queryModel.BodyClauses[0];

      var expectedExpression = new VBStringComparisonExpression (
          Expression.Equal (
              Expression.Constant ("string1"),
              Expression.MakeMemberAccess (new QuerySourceReferenceExpression (queryModel.MainFromClause), typeof (Cook).GetProperty ("Name"))),
          true);
      ExpressionTreeComparer.CheckAreEqualTrees (expectedExpression, whereClause.Predicate);
    }
    public void Initialization_TypeComesFromComparison ()
    {
      var boolExpression = new VBStringComparisonExpression (Expression.Equal (Expression.Constant ("string1"), Expression.Constant ("string2")), true);
      var intExpression = new VBStringComparisonExpression (Expression.Constant (0), true);

      Assert.That (boolExpression.Type, Is.SameAs (typeof (bool)));
      Assert.That (intExpression.Type, Is.SameAs (typeof (int)));
    }
    public void VBStringComparison_WithParameterInsideComparison ()
    {
      var predicateParameter = Expression.Parameter (typeof (Cook), "c");
      var predicate = Expression.Lambda<Func<Cook, bool>> (
          new VBStringComparisonExpression (Expression.Equal (predicateParameter, Expression.Constant (null)), true), predicateParameter);

      var expression = (from s in QuerySource select s).Where (predicate).Expression;
      var queryModel = QueryParser.GetParsedQuery (expression);

      var expectedExpression = new VBStringComparisonExpression (
          Expression.Equal (new QuerySourceReferenceExpression (queryModel.MainFromClause), 
          Expression.Constant (null)), true);
      ExpressionTreeComparer.CheckAreEqualTrees (expectedExpression, ((WhereClause) queryModel.BodyClauses[0]).Predicate);
    }
		private HqlTreeNode VisitVBStringComparisonExpression(VBStringComparisonExpression expression)
		{
			// We ignore the case sensitivity flag in the same way that == does.
			return VisitExpression(expression.Comparison);
		}
    public void VisitExtensionExpression_DescendsIntoChildren ()
    {
      var tree = new VBStringComparisonExpression (_replacedNode, true);

      var result = ReplacingExpressionVisitor.Replace (_replacedNode, _replacementNode, tree);

      var expected = new VBStringComparisonExpression (_replacementNode, true);
      ExpressionTreeComparer.CheckAreEqualTrees (expected, result);
    }
    public void Visit_VBStringComparisonExpression_NotEvaluatable ()
    {
      var expression = new VBStringComparisonExpression (Expression.Equal (Expression.Constant ("a"), Expression.Constant ("b")), true);
      var evaluationInfo = EvaluatableTreeFindingExpressionVisitor.Analyze (expression, new FakeEvaluatableExpressionFilter());

      Assert.That (evaluationInfo.IsEvaluatableExpression (expression), Is.False);
    }
    public void Evaluate_VBStringComparisonExpression_IsNotPartiallyEvaluated ()
    {
      var expression = new VBStringComparisonExpression (Expression.Equal (Expression.Constant ("a"), Expression.Constant ("b")), true);
      var result = PartialEvaluatingExpressionVisitor.EvaluateIndependentSubtrees (expression, new TestEvaluatableExpressionFilter());

      ExpressionTreeComparer.CheckAreEqualTrees (new VBStringComparisonExpression (Expression.Constant (false), true), result);
    }
 public void SetUp ()
 {
   _comparisonExpression = Expression.Equal (Expression.Constant ("string1"), Expression.Constant ("string2"));
   _expression = new VBStringComparisonExpression (_comparisonExpression, true);
 }
    public void VisitExtensionExpression_ChildrenAreEvaluated ()
    {
      var subQuery = ExpressionHelper.MakeExpression (() => (from s in ExpressionHelper.CreateQueryable<Cook> () select s).Any());
      var extensionExpression = new VBStringComparisonExpression (subQuery, true);
      // evaluate the ExpressionHelper.CreateQueryable<Cook> () method
      var inputExpression = PartialEvaluatingExpressionVisitor.EvaluateIndependentSubtrees (
          extensionExpression,
          new TestEvaluatableExpressionFilter());

      var result = SubQueryFindingExpressionVisitor.Process (inputExpression, _methodInfoBasedNodeTypeRegistry);

      Assert.That (((VBStringComparisonExpression) result).Comparison, Is.TypeOf (typeof (SubQueryExpression)));
    }