Example #1
0
        public void Visit_ValueNode_ShouldReturnStringValue()
        {
            var visitor        = new ScriptVisitor(context => 1);
            var resultingValue = "string value";

            Assert.Equal(resultingValue, visitor.Visit(new ValueNode(resultingValue)));
        }
Example #2
0
 /// <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;
 }
Example #3
0
        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)));
        }
Example #4
0
        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)));
        }
Example #5
0
        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)));
        }
Example #6
0
        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)));
        }
Example #7
0
        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)));
        }
Example #8
0
        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)));
        }
Example #9
0
        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)));
        }
Example #10
0
        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)));
        }
Example #11
0
        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)));
        }
Example #12
0
        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)));
        }
Example #13
0
        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)));
        }
Example #14
0
        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)));
        }
Example #15
0
        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)));
        }
Example #16
0
        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)));
        }
Example #17
0
        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)));
        }
Example #18
0
        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)));
        }
Example #19
0
        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)));
        }
Example #20
0
        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;
 }
Example #22
0
        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)));
        }
Example #23
0
        /// <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));
        }
Example #24
0
        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>()));
        }
Example #25
0
        /// <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;
 }
Example #27
0
 public override TResult Accept <TResult>(ScriptVisitor <TResult> visitor)
 {
     throw new NotSupportedException();
 }
Example #28
0
 public override void Accept(ScriptVisitor visitor)
 {
     throw new NotSupportedException();
 }
Example #29
0
 /// <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()));
 }
Example #30
0
        public void Visit_FunctionThatReturnsInt_ShouldReturnExpectedValue()
        {
            var visitor = new ScriptVisitor(context => 1);

            Assert.Equal(1, visitor.Visit(new FunctionNode("function name", new List <IAstNode>())));
        }