public void IsUnaryWithJsonCriteria() { var crit = JsonConvert.DeserializeObject <IList>("[\"!\", []]"); var compiler = new FilterExpressionCompiler <object>(false); Assert.True(compiler.IsUnary(crit)); }
public void Dynamic() { var compiler = new FilterExpressionCompiler <dynamic>(true, true); var expr = compiler.Compile(new object[] { new[] { "this", "startswith", "1" }, "or", new[] { "this", "B" }, "or", new[] { "this", ">=", "C" } }); var expectedExpr = "(((IIF((obj == null), null, obj.ToString().ToLower()) ?? '').StartsWith('1')" + " OrElse (DynamicCompare(obj, 'b', True) == 0))" + " OrElse (DynamicCompare(obj, 'c', True) >= 0))"; Assert.Equal( expectedExpr.Replace("'", "\""), expr.Body.ToString() ); var method = expr.Compile(); Assert.True((bool)method.DynamicInvoke(1)); Assert.True((bool)method.DynamicInvoke("B")); Assert.True((bool)method.DynamicInvoke('C')); }
public void InvalidValueHandling() { var compiler = new FilterExpressionCompiler <Structs>(false); Assert.Equal("False", compiler.Compile(new[] { "byte", "-3" }).Body.ToString()); Assert.Equal("False", compiler.Compile(new[] { "byte", "257" }).Body.ToString()); Assert.Equal("False", compiler.Compile(new[] { "int", "not-int" }).Body.ToString()); }
/// <summary> /// Create a log event filter based on the provided expression. /// </summary> /// <param name="expression">A filter expression.</param> /// <param name="filter">A function that evaluates the expression in the context of the log event.</param> /// <param name="error">The reported error, if compilation was unsuccessful.</param> /// <returns>True if the filter could be created; otherwise, false.</returns> public static bool TryCreateFilter(string expression, out Func <LogEvent, object> filter, out string error) { if (!FilterExpressionParser.TryParse(expression, out var root, out error)) { filter = null; return(false); } filter = FilterExpressionCompiler.CompileAndExpose(root); error = null; return(true); }
public void NoToStringForNumbers() { var compiler = new FilterExpressionCompiler(typeof(object), false); void Case(IList clientFilter, string expectedExpr, object trueTestValue) { var expr = compiler.Compile(clientFilter); Assert.Equal(expectedExpr, expr.Body.ToString()); Assert.True((bool)expr.Compile().DynamicInvoke(trueTestValue)); } Case( new object[] { "this", ">", new JValue(9) }, "(DynamicCompare(obj, 9, False) > 0)", 10 ); }
void AssertEvaluation <T>(T dataItem, params object[] clientFilter) { var expr = new FilterExpressionCompiler <T>(false).Compile(clientFilter); Assert.True((bool)expr.Compile().DynamicInvoke(dataItem)); }