public void Visit_ValueNode_ShouldReturnStringValue() { var visitor = new ScriptVisitor(context => 1); var resultingValue = "string value"; Assert.Equal(resultingValue, visitor.Visit(new ValueNode(resultingValue))); }
/// <summary> /// Initializes a new instance of the RunnerItem class /// </summary> /// <param name="visitor"></param> public RunnerItem(ScriptVisitor visitor, bool isSimpleInit) { Visitor = visitor; visitor.Context = this; available = true; this.isSimpleInit = isSimpleInit; }
public void Visit_DivideFloatValueToDoubleValue_ShouldReturnTheResultAsDecimal() { var visitor = new ScriptVisitor(context => 1); var leftValue = new ValueNode((float)5); var rightValue = new ValueNode((double)2); Assert.Equal((decimal)2.5, visitor.Visit(new DivideNode(leftValue, rightValue))); }
public void Visit_NotEqualIntToInt_ShouldReturnTrue() { var visitor = new ScriptVisitor(context => 1); var leftValue = new ValueNode(5); var rightValue = new ValueNode(5); Assert.False((bool)visitor.Visit(new NotEqualNode(leftValue, rightValue))); }
public void Visit_NotEqualFloatToDouble_ShouldReturnTrue() { var visitor = new ScriptVisitor(context => 1); var leftValue = new ValueNode((float)5); var rightValue = new ValueNode((double)2); Assert.True((bool)visitor.Visit(new NotEqualNode(leftValue, rightValue))); }
public void Visit_MultiplyIntAndInt_ShouldRunIfInstructions() { var visitor = new ScriptVisitor(context => 1); var value1 = new ValueNode(2); var value2 = new ValueNode(3); Assert.Equal(6, visitor.Visit(new MultiplyNode(value1, value2))); }
public void Visit_MultiplyFloatAndObject_ShouldThrowException() { var visitor = new ScriptVisitor(context => 0); var value1 = new ValueNode((float)5); var value2 = new ValueNode(new object()); Assert.Throws <InvalidOperationException>(() => visitor.Visit(new MultiplyNode(value1, value2))); }
public void Visit_AddIntValueToStringValue_ShouldReturnAStringWithBothValues() { var visitor = new ScriptVisitor(context => 1); var leftValue = new ValueNode(4); var rightValue = new ValueNode("1"); Assert.Equal("41", visitor.Visit(new AddNode(leftValue, rightValue))); }
public void Visit_AddStringValueToNullValue_ShouldReturnResult() { var visitor = new ScriptVisitor(context => 1); var leftValue = new ValueNode("i="); var rightValue = new ValueNode(null); Assert.Equal("i=", visitor.Visit(new AddNode(leftValue, rightValue))); }
public void Visit_AddFloatValueToDoubleValue_ShouldReturnTheResultAsDecimal() { var visitor = new ScriptVisitor(context => 1); var leftValue = new ValueNode((float)4.2); var rightValue = new ValueNode(1.2); Assert.Equal((decimal)5.4, visitor.Visit(new AddNode(leftValue, rightValue))); }
public void Visit_EqualIntToDecimal_ShouldReturnTrue() { var visitor = new ScriptVisitor(context => 1); var leftValue = new ValueNode(5); var rightValue = new ValueNode((decimal)5); Assert.True((bool)visitor.Visit(new EqualNode(leftValue, rightValue))); }
public void Visit_EqualFloatToBool_ShouldReturnFalse() { var visitor = new ScriptVisitor(context => 1); var leftValue = new ValueNode((float)5); var rightValue = new ValueNode(true); Assert.False((bool)visitor.Visit(new EqualNode(leftValue, rightValue))); }
public void Visit_DivideValueByZero_ShouldThrowException() { var visitor = new ScriptVisitor(context => 1); var leftValue = new ValueNode(4); var rightValue = new ValueNode(0); Assert.Throws <InvalidOperationException>(() => visitor.Visit(new DivideNode(leftValue, rightValue))); }
public void Visit_DivideFloatValueToStringValue_ShouldThrowExceptiopn() { var visitor = new ScriptVisitor(context => 1); var leftValue = new ValueNode((float)5); var rightValue = new ValueNode("2"); Assert.Throws <InvalidOperationException>(() => visitor.Visit(new DivideNode(leftValue, rightValue))); }
public void Visit_SubIntValueToIntValue_ShouldReturnTheResult() { var visitor = new ScriptVisitor(context => 1); var leftValue = new ValueNode(4); var rightValue = new ValueNode(2); Assert.Equal(2, visitor.Visit(new SubNode(leftValue, rightValue))); }
public void Visit_AddIntValueToStringValue_ShouldReturnTheResult() { var visitor = new ScriptVisitor(context => 1); var leftValue = new ValueNode(4); var rightValue = new ValueNode("kg"); Assert.Equal("4kg", visitor.Visit(new AddNode(leftValue, rightValue))); }
public void Visit_SubIntValueToStringValue_ShouldThrowException() { var visitor = new ScriptVisitor(context => 1); var leftValue = new ValueNode(4); var rightValue = new ValueNode("1"); Assert.Throws <InvalidOperationException>(() => visitor.Visit(new SubNode(leftValue, rightValue))); }
public void Visit_MultiplyFloatAndDecimal_ShouldRunIfInstructions() { var visitor = new ScriptVisitor(context => 1); var value1 = new ValueNode((float)5); var value2 = new ValueNode((decimal)3.2); Assert.Equal((decimal)16, visitor.Visit(new MultiplyNode(value1, value2))); }
public void Visit_AddIntValueToObject_ShouldThrowException() { var visitor = new ScriptVisitor(context => 1); var leftValue = new ValueNode(4); var rightValue = new ValueNode(new object()); Assert.Throws <InvalidOperationException>(() => visitor.Visit(new AddNode(leftValue, rightValue))); }
public void Visit_SubFloatValueToIntValue_ShouldReturnTheResultAsDecimal() { var visitor = new ScriptVisitor(context => 1); var leftValue = new ValueNode((float)4.2); var rightValue = new ValueNode(1); Assert.Equal((decimal)3.2, visitor.Visit(new SubNode(leftValue, rightValue))); }
/// <summary> /// Initializes a new instance of the FunctionLiteral class /// </summary> /// <param name="values">the local values that are surrounding the method at the moment of creation</param> /// <param name="parent">the parent scope of this method</param> /// <param name="arguments">the argument names that are passed to this method</param> /// <param name="body">the method body of this method</param> public FunctionLiteral(Dictionary <string, object> values, string[] arguments, ITVScriptingParser.FunctionBodyContext body) { initialValues = values; scope = new FunctionScope(values); visitor = new ScriptVisitor(scope); this.arguments = arguments; this.body = body; }
public void Visit_IfElseTrueIfPart_ShouldRunIfInstructions() { var resultValue = Guid.NewGuid().ToString(); var visitor = new ScriptVisitor(context => 1); var conditionInstr = new ValueNode(true); var ifInstr = new ValueNode(resultValue); var elseInstr = new ValueNode(false); Assert.Equal(resultValue, visitor.Visit(new IfElseNode(conditionInstr, ifInstr, elseInstr))); }
/// <summary> /// Gets an existing free repl session or creates a new one if required /// </summary> /// <param name="baseValues">the base values used to initialize the repl - session</param> /// <param name="scopeInitializer">a callback that is used to prepare the scope variables for the scripting</param> /// <param name="visitorInstance">the visitor instance that is capable to process expressions and scripts</param> /// <returns>a runner item that can be used to control the repl session</returns> public static IDisposable GetReplInstance(object implicitContext, InitializeScopeVariables scopeInitializer, out ScriptVisitor visitorInstance) { Scope s = new Scope(new Dictionary <string, object> { { "$data", implicitContext } }); s.ImplicitContext = "$data"; return(GetReplInstance(s, scopeInitializer, out visitorInstance)); }
public void Visit_FunctionWithSpecificName_NameShouldBePassedToInvoker() { var functionName = "NameOfFunction"; var visitor = new ScriptVisitor(context => { Assert.Equal(functionName, context.Name); return(true); }); visitor.Visit(new FunctionNode(functionName, new List <IAstNode>())); }
/// <summary> /// Gets an existing free repl session or creates a new one if required /// </summary> /// <param name="baseValues">the base values used to initialize the repl - session</param> /// <param name="scopeInitializer">a callback that is used to prepare the scope variables for the scripting</param> /// <param name="visitorInstance">the visitor instance that is capable to process expressions and scripts</param> /// <returns>a runner item that can be used to control the repl session</returns> public static IDisposable GetReplInstance(IDictionary <string, object> baseValues, InitializeScopeVariables scopeInitializer, out ScriptVisitor visitorInstance) { bool simpleInit = (baseValues is Scope); lock (runners) { RunnerItem retVal = runners.FirstOrDefault(n => !simpleInit && n.Lock()); if (retVal == null) { ScriptVisitor visitor = simpleInit ? new ScriptVisitor((Scope)baseValues) : new ScriptVisitor(); retVal = new RunnerItem(visitor, simpleInit); retVal.Lock(); if (visitor.Reactivateable) { runners.Add(retVal); } } visitorInstance = (ScriptVisitor)retVal.Visitor; if (!simpleInit) { visitorInstance.ClearScope(baseValues); } InitializeScopeVariables dff = scopeInitializer ?? (a => { DefaultCallbacks.PrepareDefaultCallbacks(a.Scope, a.ReplSession); }); visitorInstance.Prepare(dff); return(retVal); } }
/// <summary> /// Initializes a new instance of the ScopePreparationCallbackArguments class /// </summary> /// <param name="scope">the variable scope that contains all current variables</param> /// <param name="replSession">a repl-session that is provides access to the current interpreter</param> /// <param name="visitor">the visitor instance that is used to interpret some code</param> public ScopePreparationCallbackArguments(IScope scope, IDisposable replSession, ScriptVisitor visitor) { this.scope = scope; this.replSession = replSession; this.visitor = visitor; }
public override TResult Accept <TResult>(ScriptVisitor <TResult> visitor) { throw new NotSupportedException(); }
public override void Accept(ScriptVisitor visitor) { throw new NotSupportedException(); }
/// <summary> /// Prepares the PowerCalls (Call and Dict) for using in a Script /// </summary> /// <param name="variables">the variables that are being prepared</param> /// <param name="prepareVariables">an action that is used to prepare a new scope for special methodcalls</param> /// <param name="visitor">A visitor instance that is executing the current script and contains the required root variables for child-scripts</param> public void PreparePowerCalls(IDictionary <string, object> variables, InitializeScopeVariables prepareVariables, ScriptVisitor visitor) { variables["Dict"] = new Func <object[], object[], Dictionary <string, object> >((a, b) => Dict(a, b)); variables["Call"] = new Func <string, IDictionary <string, object>, object>((a, b) => CallScript(a, b, prepareVariables, visitor.CopyInitial())); }
public void Visit_FunctionThatReturnsInt_ShouldReturnExpectedValue() { var visitor = new ScriptVisitor(context => 1); Assert.Equal(1, visitor.Visit(new FunctionNode("function name", new List <IAstNode>()))); }