public void Compile_NegationOfNonBooleanVariable_ShouldCompileAndRuntimeError() { var code = "not x"; XpressRuntimeContext runtimeCtx = new XpressRuntimeContext() { { "x", "1" } }; var compilationResult = _compiler.Compile(code); Exception exception = null; try { var result = compilationResult.Code(runtimeCtx); } catch (Exception ex) { exception = ex; } Assert.True(compilationResult.Compiled); Assert.False(compilationResult.Log.HasErrors); Assert.NotNull(exception); }
public void Compile_VariableInvalidType_ShouldCompileRuntimeErrorFormatException() { var code = "x"; var compilationResult = _compiler.Compile(code); Exception exception = null; var ctx = new XpressRuntimeContext() { { "x", "4" } }; try { var result = compilationResult.Code(ctx); } catch (Exception ex) { exception = ex; } Assert.True(compilationResult.Compiled); Assert.False(compilationResult.Log.HasErrors); Assert.NotNull(exception); Assert.Equal("String was not recognized as a valid Boolean.", exception.Message); }
public void Compile_EqualityStringEqualNumber_ShouldFailCompile() { var code = "'1' eq 1"; XpressRuntimeContext runtimeCtx = new XpressRuntimeContext(); var compilationResult = _compiler.Compile(code); Assert.False(compilationResult.Compiled); Assert.True(compilationResult.Log.HasErrors); }
public void Compile_BooleanFalseExpression_ShouldCompileAndEvalFalse() { var code = "false"; XpressRuntimeContext runtimeCtx = new XpressRuntimeContext(); var compilationResult = _compiler.Compile(code); var result = compilationResult.Code(runtimeCtx); Assert.True(compilationResult.Compiled); Assert.False(compilationResult.Log.HasErrors); Assert.False(result); }
public void Compile_EqualityBinaryExprEqualBinaryExpr_ShouldCompileAndEvalTrue() { var code = "x+1 eq y+5"; var compilationResult = _compiler.Compile(code); var ctx = new XpressRuntimeContext() { { "x", "5" }, { "y", "1" } }; var result = compilationResult.Code(ctx); Assert.True(compilationResult.Compiled); Assert.False(compilationResult.Log.HasErrors); Assert.True(result); }
public void Compile_EqualityNumberEqualString_ShouldFailCompile() { var code = "1 eq '1'"; XpressRuntimeContext runtimeCtx = new XpressRuntimeContext(); var compilationResult = _compiler.Compile(code); Assert.False(compilationResult.Compiled); Assert.True(compilationResult.Log.HasErrors); // fail - operator 'eq' cannot be applied to operands of type 'Int32' and 'String'. Error at '1' position 0 }
public void Compile_EqualityVariableEqualBoolean_ShouldCompileAndEvalTrue() { var code = "x eq true"; var compilationResult = _compiler.Compile(code); var ctx = new XpressRuntimeContext() { { "x", "true" } }; var result = compilationResult.Code(ctx); Assert.True(compilationResult.Compiled); Assert.False(compilationResult.Log.HasErrors); Assert.True(result); }
public void Compile_EqualityNullEqualNull_ShouldCompileAndEvalTrue() { var code = "null eq null"; XpressRuntimeContext runtimeCtx = new XpressRuntimeContext(); var compilationResult = _compiler.Compile(code); var result = compilationResult.Code(runtimeCtx); Assert.True(compilationResult.Compiled); Assert.False(compilationResult.Log.HasErrors); Assert.True(result); }
public void Compile_EqualityEqualTwoNumbers_ShouldCompileAndEvalFalse() { var code = "1 eq 4"; XpressRuntimeContext runtimeCtx = new XpressRuntimeContext(); var compilationResult = _compiler.Compile(code); var result = compilationResult.Code(runtimeCtx); Assert.True(compilationResult.Compiled); Assert.False(compilationResult.Log.HasErrors); Assert.False(result); }
public void Compile_EqualityStringEqualStringCaseInsensitive_ShouldCompileAndEvalTrue() { var code = "'ahmed' eq 'AHMED'"; XpressRuntimeContext runtimeCtx = new XpressRuntimeContext(); var compilationResult = _compiler.Compile(code); var result = compilationResult.Code(runtimeCtx); Assert.True(compilationResult.Compiled); Assert.False(compilationResult.Log.HasErrors); Assert.True(result); }
public void Compile_RelationalLessThanOrEqual_ShouldCompileAndEvalTrue() { var code = "9 le 10"; XpressRuntimeContext runtimeCtx = new XpressRuntimeContext(); var compilationResult = _compiler.Compile(code); var result = compilationResult.Code(runtimeCtx); Assert.True(compilationResult.Compiled); Assert.False(compilationResult.Log.HasErrors); Assert.True(result); }
public void Compile_BinaryAddNullAndNumber_ShouldFailCompile() { var code = "x gt (null + 1)"; XpressRuntimeContext runtimeCtx = new XpressRuntimeContext() { { "x", "3" } }; var compilationResult = _compiler.Compile(code); Assert.False(compilationResult.Compiled); Assert.True(compilationResult.Log.HasErrors); }
public void Compile_BinaryVariableMultiplyNull_ShouldFailCompile() { var code = "x gt (x * null)"; XpressRuntimeContext runtimeCtx = new XpressRuntimeContext() { { "x", "3" } }; var compilationResult = _compiler.Compile(code); Assert.False(compilationResult.Compiled); Assert.True(compilationResult.Log.HasErrors); }
public void Compile_EqualityVariableNotExistsAndNotEqualNull_ShouldCompileAndEvalFalse() { // Check equality with null, will verify that variable exists first var code = "xy ne null"; var compilationResult = _compiler.Compile(code); var ctx = new XpressRuntimeContext() { { "x", "zzz" } }; var result = compilationResult.Code(ctx); Assert.True(compilationResult.Compiled); Assert.False(compilationResult.Log.HasErrors); Assert.False(result); }
public void Compile_BinaryNumberMultiplyString_ShouldFailCompile() { var code = "x gt (1* '2')"; XpressRuntimeContext runtimeCtx = new XpressRuntimeContext() { { "x", "3" } }; var compilationResult = _compiler.Compile(code); Assert.False(compilationResult.Compiled); Assert.True(compilationResult.Log.HasErrors); }
public void Compile_EqualityEmptyStringEqualNull_ShouldCompileAndEvalTrue() { // this is odd case null is pretty much empty only works for strings since the language doesn't support objects var code = "'' eq null"; var compilationResult = _compiler.Compile(code); var ctx = new XpressRuntimeContext(); var result = compilationResult.Code(ctx); Assert.True(compilationResult.Compiled); Assert.False(compilationResult.Log.HasErrors); Assert.True(result); // fail - operator 'eq' cannot be applied to operands of type 'Int32' and 'Object'. Error at '1' position 0 }
public void Compile_NegationOfBooleanFalseVariable_ShouldCompileAndEvalTrue() { var code = "not x"; XpressRuntimeContext runtimeCtx = new XpressRuntimeContext() { { "x", "false" } }; var compilationResult = _compiler.Compile(code); var result = compilationResult.Code(runtimeCtx); Assert.True(compilationResult.Compiled); Assert.False(compilationResult.Log.HasErrors); Assert.True(result); }
public void Compile_NegationOfConditioanlExpression_ShouldCompileAndEvalTrue() { var code = "not ('a' eq 'b' and 9 gt 10)"; XpressRuntimeContext runtimeCtx = new XpressRuntimeContext() { { "x", "false" } }; var compilationResult = _compiler.Compile(code); var result = compilationResult.Code(runtimeCtx); Assert.True(compilationResult.Compiled); Assert.False(compilationResult.Log.HasErrors); Assert.True(result); }
public void Compile_RelationalNumberLessThanVariable_ShouldCompileAndEvalTrue() { var code = "9 lt x"; XpressRuntimeContext runtimeCtx = new XpressRuntimeContext() { { "x", "10" } }; var compilationResult = _compiler.Compile(code); var result = compilationResult.Code(runtimeCtx); Assert.True(compilationResult.Compiled); Assert.False(compilationResult.Log.HasErrors); Assert.True(result); }
public void Compile_ComplexExpression_ShouldCompileAndEvalTrue() { var code = "(x ne null and x+1 gt 10) or (y ne null and (y*(5+1)-2) lt 5)"; XpressRuntimeContext runtimeCtx = new XpressRuntimeContext() { { "x", "5" }, { "y", "1" } }; var compilationResult = _compiler.Compile(code); var result = compilationResult.Code(runtimeCtx); Assert.True(compilationResult.Compiled); Assert.False(compilationResult.Log.HasErrors); Assert.True(result); }
public void Compile_ConditionalFalseOrRelationalExpressionWithVariable_ShouldCompileAndEvalFalse() { var code = "false or x lt 2"; XpressRuntimeContext runtimeCtx = new XpressRuntimeContext() { { "x", "5" } }; var compilationResult = _compiler.Compile(code); var result = compilationResult.Code(runtimeCtx); Assert.True(compilationResult.Compiled); Assert.False(compilationResult.Log.HasErrors); Assert.False(result); }
public void Compile_ConditionalOfRelationals_ShouldCompileAndEvalTrue() { var code = "x gt 2 and y lt 5"; XpressRuntimeContext runtimeCtx = new XpressRuntimeContext() { { "x", "5" }, { "y", "1" } }; var compilationResult = _compiler.Compile(code); var result = compilationResult.Code(runtimeCtx); Assert.True(compilationResult.Compiled); Assert.False(compilationResult.Log.HasErrors); Assert.True(result); }
public void Compile_BinaryModuloNumbers_ShouldCompileAndEvalTrue() { var code = "x eq (11 % 2)"; XpressRuntimeContext runtimeCtx = new XpressRuntimeContext() { { "x", "1" } }; var compilationResult = _compiler.Compile(code); var result = compilationResult.Code(runtimeCtx); Assert.True(compilationResult.Compiled); Assert.False(compilationResult.Log.HasErrors); Assert.True(result); }
public void Compile_BinaryOperatorPrecedenceWithParanetcise_ShouldCompileAndEvalTrue() { var code = "r eq (((x+1)*2)-4)/5"; XpressRuntimeContext runtimeCtx = new XpressRuntimeContext() { { "x", "6" }, { "r", "2" } }; var compilationResult = _compiler.Compile(code); var result = compilationResult.Code(runtimeCtx); Assert.True(compilationResult.Compiled); Assert.False(compilationResult.Log.HasErrors); Assert.True(result); }
public void Compile_BinaryAdditionConcatTwoStrings_ShouldCompileAndEvalTrue() { var code = "x eq ('ahmed '+'elmalt')"; XpressRuntimeContext runtimeCtx = new XpressRuntimeContext() { { "x", "ahmed elmalt" } }; var compilationResult = _compiler.Compile(code); var result = compilationResult.Code(runtimeCtx); Assert.True(compilationResult.Compiled); Assert.False(compilationResult.Log.HasErrors); Assert.True(result); }
public void Compile_BinaryOperatorPrecedenceInvalid_ShouldCompileAndEvalFalse() { var code = "r eq x+2*2-4/2"; // ((x+(2*2))-(4/2)) XpressRuntimeContext runtimeCtx = new XpressRuntimeContext() { { "x", "6" }, { "r", "2" } }; var compilationResult = _compiler.Compile(code); var result = compilationResult.Code(runtimeCtx); Assert.True(compilationResult.Compiled); Assert.False(compilationResult.Log.HasErrors); Assert.False(result); }
public void Compile_BinaryAdditionVariableAndNumber_ShouldCompileAndEvalTrue() { var code = "x lt (x+2)"; XpressRuntimeContext runtimeCtx = new XpressRuntimeContext() { { "x", "3" } }; var compilationResult = _compiler.Compile(code); var result = compilationResult.Code(runtimeCtx); Assert.True(compilationResult.Compiled); Assert.False(compilationResult.Log.HasErrors); Assert.True(result); }
public void Compile_Default_RelationalVariableGreaterThanVariable_ShouldCompileAndEvalTrue() { var code = "x gt y"; XpressRuntimeContext runtimeCtx = new XpressRuntimeContext() { { "x", "10" }, { "y", "9" } }; var compilationResult = _compiler.Compile(code); var result = compilationResult.Code(runtimeCtx); Assert.True(compilationResult.Compiled); Assert.False(compilationResult.Log.HasErrors); Assert.True(result); }
public void Compile_EqualityWithVariableEmptyString_ShouldCompileRuntimeError() { var code = "10 ne x"; var compilationResult = _compiler.Compile(code); var ctx = new XpressRuntimeContext() { { "x", "" } }; Exception exception = null; try { var result = compilationResult.Code(ctx); } catch (Exception ex) { exception = ex; } Assert.True(compilationResult.Compiled); Assert.False(compilationResult.Log.HasErrors); Assert.NotNull(exception); }
public void Compile_EqualityVariableNotExistsAndEqualEmptyString_ShouldCompileAndRuntimeError() { // Equality comparison with empty string will not check for existance first var code = "xy ne ''"; var compilationResult = _compiler.Compile(code); var ctx = new XpressRuntimeContext() { { "x", "" } }; Exception exception = null; try { var result = compilationResult.Code(ctx); } catch (Exception ex) { exception = ex; } Assert.True(compilationResult.Compiled); Assert.False(compilationResult.Log.HasErrors); Assert.NotNull(exception); }