public void ConfigTest()
        {
            string file = "config { foo { a = \"test\"; b = \"bar\"; } }";

            ScriptEngine engine = new ScriptEngine();

            ConfigBuilder.Structure s = new ConfigBuilder.Structure();

            s.AddElement(new ConfigBuilder.KeyValueTagBuilder("foo", false));

            engine.RegisterBuilder(new ConfigBuilder("config", s, NewConfigBuilt));

            engine.Build(file);

            if (_results == null)
            {
                Assert.Fail("Was not returned a configuration.");
            }

            Dictionary<string, List<Token>> foo = (Dictionary<string, List<Token>>)_results["foo"][0];

            Chunk c = new Chunk(foo["b"], new Script(engine) {UseEngineGlobals = false});

            object result = c.Evaluate();

            Assert.AreEqual("bar", (string) result);
        }
Beispiel #2
0
 public Script(ScriptEngine engine, SecurityPolicy policy)
 {
     _engine = engine;
     _tokens = new List<List<List<Token>>>();
     _functions = new List<Function>();
     _securityPolicy = policy;
     _globals = new ObjectTable();
     IsDirty = true;
     DefaultScope = new Scope();
     UseEngineGlobals = true;
 }
        public void StringReplaceTest()
        {
            ScriptEngine engine = new ScriptEngine();

            string code = "$foo = \"bar\"; $result = $foo.Replace($foo, \"what\");";

            Script script = engine.Build(code);

            script.Execute();

            Assert.AreEqual((string)script.Globals["result"], "what");
        }
        public void StaticMethodInvoke()
        {
            string code = "return StaticClass.StaticMethod();";
            ScriptEngine engine = new ScriptEngine();

            engine.SecurityPolicy.AddType("StaticClass", typeof (StaticClass));

            object result = engine.Build(code).Execute();
            Assert.IsNotNull(result);

            Assert.AreEqual(result, 9001);
        }
        public void TypeCastTest()
        {
            string code = "$foo = new Foo(); return $foo.SomeMethod(5, 5.24);";

            ScriptEngine engine = new ScriptEngine();

            engine.SecurityPolicy.AddType("Foo", typeof (Foo2));

            object result = engine.Build(code).Execute();

            Assert.IsNotNull(result);

            Assert.AreEqual(result, 10.24);
        }
Beispiel #6
0
        public Form1()
        {
            InitializeComponent();

            scripting = new Slimterpreter.ScriptEngine();
            scripting.Globals["Test"] = new Test();

            scripting.SecurityPolicy.AddType("OtherTest", typeof(OtherTest));

            scripting.PrintExecutionInformation = false;
            IOWriter io = new IOWriter();
            io.WriteChar += new AddChar(io_WriteChar);
            Console.SetOut(io);
        }
        public void TestArrayAccess()
        {
            string code = "$c = new Class(); $a = $c[\"test\"]; $b = $c.Sub[\"this\"];";
            ScriptEngine engine = new ScriptEngine();
            engine.SecurityPolicy.AddType("Class", typeof(ArrayAccessTestClass));

            Script script = engine.Build(code);
            object result = script.Execute();

            Assert.IsNull(result);

            Assert.AreEqual(script.Globals["a"], "test");
            Assert.AreEqual(script.Globals["b"], "this");
        }
Beispiel #8
0
        public void SimpleUsingTest()
        {
            string code = "@n = new DisposableObject(); using (foo = @n) { @foo.SomeMethod(); } return @n.Disposed;";

            ScriptEngine engine = new ScriptEngine();
            engine.SecurityPolicy.AddType("DisposableObject", typeof (DisposableObject));

            Script script = engine.Build(code);

            object result = script.Execute();

            Assert.IsNotNull(result);

            Assert.AreEqual(result, true);
        }
        public void TestCustomTypes()
        {
            string code = "return new Foo().SomeMethod();";

            ScriptEngine engine = new ScriptEngine();

            engine.SecurityPolicy.AddType("Foo", typeof(Foo));

            Script script = engine.Build(code);

            object result = script.Execute();

            Assert.IsNotNull(result);

            Assert.AreEqual(47, result);
        }
        public void ParamsTesting()
        {
            ScriptEngine e = new ScriptEngine();

            e.SecurityPolicy.AddType("Class", typeof (SomeClass));

            string script = "@foo = new Class(); return @foo.Foo(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);";

            Script s = e.Build(script);

            object result = s.Execute();

            Assert.IsNotNull(result);

            SomeClass c = new SomeClass();
            Assert.AreEqual(c.Foo(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), result);
        }
        public void ExternalTest()
        {
            string code = "$foo = 1; return $foo.Foo();";

            ScriptEngine engine = new ScriptEngine();

            engine.Globals["foo"] = new SomeClass();

            Script script = engine.Build(code);

            try
            {
                object result = script.Execute();
                Assert.Fail("Failed to prevent global variable $foo being replaced with different type.");
            }
            catch (InvalidCastException e)
            {
                // Test Passed
            }
        }
        public void PrivateMethodTesting()
        {
            string code = "@c = new SomeClass(); return @c.PrivateMethod();";

            ScriptEngine engine = new ScriptEngine();
            engine.SecurityPolicy.AddType("SomeClass", typeof (SomeClass));

            Script script = engine.Build(code);

            // The expected outcome is that we get can exception.
            try
            {
                object result = script.Execute();
                Assert.Fail();
            }
            catch (Exception e)
            {

            }
        }
        public void FunctionConfigTest()
        {
            string file = "config { script \"foo\" { return \"foo\"; } script \"bar\" { return 1 + 1; } }";

            ScriptEngine engine = new ScriptEngine();

            ConfigBuilder.Structure s = new ConfigBuilder.Structure();

            s.AddElement(new ConfigBuilder.ScriptTagBuilder());

            engine.RegisterBuilder(new ConfigBuilder("config", s, NewConfigBuilt));

            engine.Build(file);

            if (_results == null)
            {
                Assert.Fail("ScriptEngine failed to build config.");
            }

            ConfigBuilder.ScriptBlock block = (ConfigBuilder.ScriptBlock) _results["script"][0];

            object result = block.Code.Evaluate(true);

            Assert.AreEqual(result, "foo");

            block = (ConfigBuilder.ScriptBlock)_results["script"][1];

            result = block.Code.Evaluate(true);

            if (!(result is Number))
            {
                Assert.Fail("Code block did not return Slimterpreter.Number, returned " + result.GetType().Name + " instead.");
            }

            Assert.AreEqual(2, (int)(Number)result);

            System.Console.WriteLine(block);
        }
Beispiel #14
0
 public virtual string ToString(ScriptEngine engine)
 {
     //return Pad(' ') + ToString();
     return engine.Pad() + ToString() + Environment.NewLine;
 }
Beispiel #15
0
 public Script(ScriptEngine engine)
     : this(engine, engine.SecurityPolicy)
 {
 }
Beispiel #16
0
 /// <summary>
 /// This is called if condition match is true, and SimpleBuild is set to false, you can use this to build custom handlers to events, but shouldn't be added to the call structure.
 /// For example, a configuration handler would use AdvnacedBuild to get the details it needs from the code, and not have it listed in the call structure.
 /// 
 /// For an example of how this is used, look at ConfigBuilder.
 /// </summary>
 /// <seealso cref="ConfigBuilder"/>
 /// <param name="engine"></param>
 /// <param name="sourceCode"></param>
 /// <param name="script"></param>
 /// <returns></returns>
 public virtual bool AdvancedBuild(ScriptEngine engine, ref SourceCode sourceCode, ref Script script)
 {
     return true;
 }
Beispiel #17
0
 /// <summary>
 /// This is called if condition match is true, and SimpleBuild is set to true. When called, the method should return a token that will be inserted into the call structure.
 /// </summary>
 /// <param name="lastToken"></param>
 /// <param name="engine"></param>
 /// <param name="script"></param>
 /// <param name="sourceCode"></param>
 /// <returns></returns>
 public virtual Token Build(Token lastToken, ScriptEngine engine, Script script, ref SourceCode sourceCode)
 {
     return null;
 }
Beispiel #18
0
 /// <summary>
 /// Late build...
 /// </summary>
 /// <param name="engine"></param>
 /// <param name="sourceCode"></param>
 /// <param name="script"></param>
 /// <returns></returns>
 public virtual Token LateBuild(ScriptEngine engine, ref SourceCode sourceCode, ref Script script)
 {
     return null;
 }