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)); }
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); } }
// ReSharper restore InconsistentNaming #endregion #region miscellaneous private static void VariantClearTestHelper(object x) { using (var engine = new JScriptEngine()) { engine.AddHostObject("x", x); engine.Evaluate("x"); } }
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); } }
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)); }
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); }
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); }
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 => )); }
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")); }