public void BugFix_NestedType_JScript()
        {
            engine.Dispose();
            engine = new JScriptEngine();

            engine.AddHostType(typeof(NestedTypeTest));
            Assert.AreEqual(NestedTypeTest.NestedType.Foo, engine.Evaluate("NestedTypeTest.NestedType.Foo"));
            Assert.AreEqual(NestedTypeTest.NestedType.Bar, engine.Evaluate("NestedTypeTest.NestedType.Bar"));
            Assert.AreEqual(NestedTypeTest.NestedType.Baz, engine.Evaluate("NestedTypeTest.NestedType.Baz"));
            Assert.AreEqual(NestedTypeTest.NestedType.Qux, engine.Evaluate("NestedTypeTest.NestedType.Qux"));
        }
        public void BugFix_JScriptStandardsMode_MemberDeletion_PropertyBag()
        {
            engine.Dispose();
            engine = new JScriptEngine(WindowsScriptEngineFlags.EnableStandardsMode);

            var x = new PropertyBag {
                ["foo"] = 123, ["bar"] = "blah"
            };

            engine.Script.x = x;

            Assert.AreEqual(123, engine.Evaluate("x.foo"));
            Assert.AreEqual("blah", engine.Evaluate("x.bar"));
            Assert.AreEqual(true, engine.Evaluate("delete x.foo"));
            Assert.IsInstanceOfType(engine.Evaluate("x.foo"), typeof(Undefined));
        }
示例#3
0
        public void DynamicHostItem_CrossEngine()
        {
            const string format = "{0} foo {1} bar {2} baz {3} qux {4} quux {5}";
            var          args   = new object[] { 1, 2, 3, 4, 5, 6 };

            engine.Script.mscorlib = new HostTypeCollection("mscorlib");

            using (var outerEngine = new JScriptEngine())
            {
                outerEngine.Script.inner  = engine;
                outerEngine.Script.format = format;
                outerEngine.Script.args   = args;
                Assert.AreEqual(string.Format(format, args), outerEngine.Evaluate("inner.Script.mscorlib.System.String.Format(format, args)"));
                Assert.AreEqual(string.Format(format, args), outerEngine.Evaluate("inner.Script.mscorlib['System'].String['Format'](format, args)"));
            }
        }
        public void BugFix_JScriptStandardsMode_MemberEnumeration_Dynamic()
        {
            engine.Dispose();
            engine = new JScriptEngine(WindowsScriptEngineFlags.EnableStandardsMode);

            dynamic x = new ExpandoObject();

            x.foo           = 123;
            x.bar           = "blah";
            engine.Script.x = x;

            var result = (string)engine.Evaluate(@"
                var result = '';
                for (var i in x) {
                    if ((i == 'foo') || (i == 'bar')) {
                        result += x[i];
                    }
                }
                result
            ");

            Assert.AreEqual(7, result.Length);
            Assert.IsTrue(result.IndexOf("123", StringComparison.Ordinal) >= 0);
            Assert.IsTrue(result.IndexOf("blah", StringComparison.Ordinal) >= 0);
        }
        public void BugFix_IDispatchExArgLeak_SetProperty_JScript()
        {
            // ReSharper disable RedundantAssignment

            engine.Dispose();
            engine = new JScriptEngine();

            WeakReference wr = null;

            new Action(() =>
            {
                object x = Guid.NewGuid();
                wr       = new WeakReference(x);

                var result      = x.ToString();
                engine.Script.x = x;

                x = null;
                GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
                GC.WaitForPendingFinalizers();

                Assert.AreEqual(result, engine.Evaluate("x.ToString()"));

                engine.Script.x = null;
                engine.CollectGarbage(true);
            })();

            GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
            GC.WaitForPendingFinalizers();
            Assert.IsFalse(wr.IsAlive);

            // ReSharper restore RedundantAssignment
        }
        public void BugFix_JScriptStandardsMode_MemberDeletion_Dynamic()
        {
            engine.Dispose();
            engine = new JScriptEngine(WindowsScriptEngineFlags.EnableStandardsMode);

            dynamic x = new ExpandoObject();

            x.foo           = 123;
            x.bar           = "blah";
            engine.Script.x = x;

            Assert.AreEqual(123, engine.Evaluate("x.foo"));
            Assert.AreEqual("blah", engine.Evaluate("x.bar"));
            Assert.AreEqual(true, engine.Evaluate("delete x.foo"));
            Assert.IsInstanceOfType(engine.Evaluate("x.foo"), typeof(Undefined));
        }
 public void BugFix_JScriptStandardsMode_PropertyAccess()
 {
     engine.Dispose();
     engine          = new JScriptEngine(WindowsScriptEngineFlags.EnableStandardsMode);
     engine.Script.x = new { foo = 123 };
     Assert.AreEqual(123, engine.Evaluate("x.foo"));
 }
        public void BugFix_NestedInterrupt_JScript()
        {
            engine.Dispose();
            try
            {
                using (var startEvent = new ManualResetEventSlim(false))
                {
                    object result           = null;
                    var    interruptedInner = false;
                    var    interruptedOuter = false;

                    var thread = new Thread(() =>
                    {
                        using (engine = new JScriptEngine(WindowsScriptEngineFlags.EnableDebugging))
                        {
                            var context = new PropertyBag();
                            engine.AddHostObject("context", context);

                            // ReSharper disable once AccessToDisposedClosure
                            context["startEvent"] = startEvent;

                            context["foo"] = new Action(() =>
                            {
                                try
                                {
                                    engine.Execute("while (true) { context.startEvent.Set(); }");
                                }
                                catch (ScriptInterruptedException)
                                {
                                    interruptedInner = true;
                                }
                            });

                            try
                            {
                                result = engine.Evaluate("context.foo(); 123");
                            }
                            catch (ScriptInterruptedException)
                            {
                                interruptedOuter = true;
                            }
                        }
                    });

                    thread.Start();
                    startEvent.Wait();
                    engine.Interrupt();
                    thread.Join();

                    Assert.IsTrue(interruptedInner);
                    Assert.IsFalse(interruptedOuter);
                    Assert.AreEqual(123, result);
                }
            }
            finally
            {
                engine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDebugging);
            }
        }
示例#9
0
        // ReSharper restore InconsistentNaming

        #endregion

        #region miscellaneous

        private static void VariantClearTestHelper(object x)
        {
            using (var engine = new JScriptEngine())
            {
                engine.AddHostObject("x", x);
                engine.Evaluate("x");
            }
        }
示例#10
0
        internal async void RunScript(string code)
        {
            Presenters.SwdMainPresenter.DisplayLoadingIndicator(true);

            Task <string> t = new Task <string>(() =>
            {
                using (var engine = new JScriptEngine())
                {
                    engine.AddHostObject("driver", SwdBrowser.GetDriver());

                    ImportTypes(engine);

                    var uiPageObject = Presenters.PageObjectDefinitionPresenter.GetWebElementDefinitionFromTree();


                    foreach (var element in uiPageObject.Items)
                    {
                        IWebElement proxyElement = SwdBrowser.CreateWebElementProxy(element);
                        string name = element.Name;
                        engine.AddHostObject(name, proxyElement);
                    }

                    var result = engine.Evaluate(code) ?? "(none)";
                    return(result.ToString());
                }
            });


            string logLine = "done";

            try
            {
                t.Start();

                logLine = await t;
            }
            catch (Exception ex)
            {
                MyLog.Exception(ex);
                logLine = "ERROR: " + ex.Message;
                // TODO: FIX message --> Exception has been thrown by the target of invocation
                // \TODO: FIX message --> Exception has been thrown by the target of invocation
            }
            finally
            {
                view.AppendConsole(logLine + "\r\n");
                Presenters.SwdMainPresenter.DisplayLoadingIndicator(false);
            }
        }
示例#11
0
        public Tuple <bool, object> Run(string scriptText, Config cfg, Dictionary <string, object> settings)
        {
            bool ok = false;

            JSE.AddHostObject("CSCFG", cfg);
            JSE.AddHostObject("CSSettings", settings);
            object evalResponse;

            try
            {
                evalResponse = JSE.Evaluate(scriptText);
                ok           = true;
            }
            catch (ScriptEngineException sex)
            {
                evalResponse = String.Format("{0}\r\n{1}\r\n{2}\r\n", sex.ErrorDetails, sex.Message, sex.StackTrace);
                ok           = false;
            }
            return(new Tuple <bool, object> (ok, evalResponse));
        }
示例#12
0
        public void BugFix_JScriptStandardsMode_MemberEnumeration_PropertyBag()
        {
            engine.Dispose();
            engine = new JScriptEngine(WindowsScriptEngineFlags.EnableStandardsMode);

            var x = new PropertyBag {
                ["foo"] = 123, ["bar"] = "blah"
            };

            engine.Script.x = x;

            var result = (string)engine.Evaluate(@"
                var result = '';
                for (var i in x) {
                    result += x[i];
                }
                result
            ");

            Assert.AreEqual(7, result.Length);
            Assert.IsTrue(result.IndexOf("123", StringComparison.Ordinal) >= 0);
            Assert.IsTrue(result.IndexOf("blah", StringComparison.Ordinal) >= 0);
        }
示例#13
0
        public void BugFix_PropertyBag_NativeEnumerator_JScript()
        {
            engine.Dispose();
            engine = new JScriptEngine();

            var x = new PropertyBag {
                ["foo"] = 123, ["bar"] = "blah"
            };

            engine.Script.x = x;

            var result = (string)engine.Evaluate(@"
                var result = '';
                for (var e = new Enumerator(x); !e.atEnd(); e.moveNext()) {
                    result += e.item().Value;
                }
                result
            ");

            Assert.AreEqual(7, result.Length);
            Assert.IsTrue(result.IndexOf("123", StringComparison.Ordinal) >= 0);
            Assert.IsTrue(result.IndexOf("blah", StringComparison.Ordinal) >= 0);
        }
示例#14
0
        private static void InitJS(Form f, FlowLayoutPanel layout)
        {
            engine.AddGlobal();

            engine.Add("alert", new Func <string, DialogResult>(MessageBox.Show));
            engine.Add("prompt", new Func <string, string>(s => Interaction.InputBox(s)));
            engine.Add("createObj", new Func <string, object>(Functions.CreateObj));
            engine.Add("require", new Action <string>(s => Functions.Require(engine, s)));
            engine.Add("import", new Func <string, string, object[], object>(Functions.Import));

            engine.Add("window", new Window(f));
            engine.Add("document", new Base.JS.ScriptingTypes.Document(doc, layout));

            engine.Add("host", new ExtendedHostFunctions());
            engine.Add("clr",
                       new HostTypeCollection("System", "System.Core", "System.Drawing",
                                              "System.Windows.Forms"));

            engine.Add("XMLHttpRequest", typeof(XmlHttpRequest));
            engine.Add("Extensions", typeof(Extensions));
            engine.Add("Object", typeof(Object));
            engine.Add("JSON", new JSON());
            engine.Add("Math", new Math());
            engine.Add("screen", new Screen());
            engine.Add("console", new FirebugConsole());

            engine.Add("escape", new Func <string, string>(GlobalObject.escape));
            engine.Add("unescape", new Func <string, string>(GlobalObject.unescape));

            engine.Add("parseFloat", new Func <string, float>(float.Parse));
            engine.Add("parseInt", new Func <string, int>(int.Parse));
            engine.Add("String", new Func <string, string>(s => s.toString()));

            engine.Add("setCursor", new Action <Cursor>(c => f.Cursor = c));

            engine.Add("cursors", typeof(Cursors));

            engine.Add("$", new DollarSignFunc((arg1, arg2) =>
            {
                var name = arg1 as string;
                if (name == null)
                {
                    new Window(f).AddEventHandler("Load", arg1);
                }
                else if (arg2 != null)
                {
                    new Window(f).AddEventHandler(name, arg2);
                }
                else
                {
                    return
                    (new Base.JS.ScriptingTypes.Document(doc, layout)
                     .GetElementById(name));
                }
                return(new PlaceholderTextBox());
            }));
            engine.Add("ui", new Func <object, Control>(o => (Control)o));
            engine.Add("color", new Func <string, Color>(s => new Base.CSS.Converters.ColorConverter().Convert(s)));
            engine.Add("eval",
                       new Func <string, object>(
                           o => engine.Evaluate(o)));

            engine.Add("Transition", typeof(Transition));
            engine.Add(new[] { new KeyValuePair <string, Type>("bounce", typeof(TransitionType_Bounce)), new KeyValuePair <string, Type>("linear", typeof(TransitionType_Linear)), new KeyValuePair <string, Type>("ease_inout", typeof(TransitionType_EaseInEaseOut)) });

            //engine.Add("Iterator", new Func<object[], Iterator>(objects => ));
        }
示例#15
0
 public static object Eval(string src)
 {
     return(_engine.Evaluate(src));
 }
 public void JScriptEngine_StandardsMode()
 {
     engine.Dispose();
     engine = new JScriptEngine(WindowsScriptEngineFlags.EnableDebugging | WindowsScriptEngineFlags.EnableStandardsMode);
     Assert.AreEqual("{\"foo\":123,\"bar\":456.789}", engine.Evaluate("JSON.stringify({ foo: 123, bar: 456.789 })"));
 }
        public void JScriptEngine_AddHostObject()
        {
            var host = new HostFunctions();

            engine.AddHostObject("host", host);
            Assert.AreSame(host, engine.Evaluate("host"));
        }