コード例 #1
0
        public GeckoElement GetElementByJQuery(string jQuery)
        {
            using (var autoContext = new AutoJSContext(_window))
            {
                var jsValue = autoContext.EvaluateScript(jQuery, _window.DomWindow);

                if (!jsValue.IsObject)
                {
                    return(null);
                }

                var nativeComObject = jsValue.ToComObject(autoContext.ContextPointer);
                var element         = Xpcom.QueryInterface </* nsIDOMHTMLElement */ nsIDOMElement>(nativeComObject);
                if (element != null)
                {
                    return(GeckoHtmlElement.Create((mozIDOMWindowProxy)_window.DomWindow, element));
                }

                if (!SpiderMonkey.JS_HasProperty(autoContext.ContextPointer, jsValue.AsPtr, "length"))
                {
                    return(null);
                }

                var length = SpiderMonkey.JS_GetProperty(autoContext.ContextPointer, jsValue.AsPtr, "length").ToInteger();
                if (length == 0)
                {
                    return(null);
                }

                return(CreateHtmlElementFromDom(autoContext, jsValue, 0));
            }
        }
コード例 #2
0
 public bool GetBooleanValue()
 {
     using (var context = new AutoJSContext(_proxy))
         using (var jsObject = context.ConvertCOMObjectToJSObject((nsISupports)_xpathResult.Instance))
         {
             return(SpiderMonkey.JS_GetProperty(context.ContextPointer, jsObject.JSObject, "booleanValue").ToBoolean());
         }
 }
コード例 #3
0
 public string GetStringValue()
 {
     using (var context = new AutoJSContext())
     {
         var jsObject = context.ConvertCOMObjectToJSObject((nsISupports)_xpathResult.Instance);
         return(SpiderMonkey.JS_GetProperty(context.ContextPointer, jsObject, "stringValue").ToString());
     }
 }
コード例 #4
0
 public GeckoNode GetSingleNodeValue()
 {
     using (var context = new AutoJSContext())
     {
         var jsObject = context.ConvertCOMObjectToJSObject((nsISupports)xpathResult.Instance);
         return((SpiderMonkey.JS_GetProperty(context.ContextPointer, jsObject, "singleNodeValue").ToComObject(context.ContextPointer) as nsIDOMNode).Wrap(GeckoNode.Create));
     }
 }
コード例 #5
0
 public double GetNumberValue()
 {
     using (var context = new AutoJSContext())
     {
         var jsObject = context.ConvertCOMObjectToJSObject((nsISupports)xpathResult.Instance);
         return(SpiderMonkey.JS_GetProperty(context.ContextPointer, jsObject, "numberValue").ToDouble());
     }
 }
コード例 #6
0
 public XPathResultType GetResultType()
 {
     using (var context = new AutoJSContext())
     {
         var jsObject = context.ConvertCOMObjectToJSObject((nsISupports)xpathResult.Instance);
         return((XPathResultType)SpiderMonkey.JS_GetProperty(context.ContextPointer, jsObject, "resultType").ToInteger());
     }
 }
コード例 #7
0
        private static GeckoElement CreateHtmlElementFromDom(AutoJSContext autoContext, JsVal jsValue, int elementIndex)
        {
            var elementIndexString = elementIndex.ToString(CultureInfo.InvariantCulture);
            var firstNativeDom     = SpiderMonkey.JS_GetProperty(autoContext.ContextPointer, jsValue.AsPtr, elementIndexString).ToComObject(autoContext.ContextPointer);

            var element = Xpcom.QueryInterface </* nsIDOMHTMLElement */ nsIDOMElement>(firstNativeDom);

            return(element == null ? null : GeckoHtmlElement.Create((mozIDOMWindowProxy)autoContext.Window, element));
        }
コード例 #8
0
 public T GetProperty <T>(string propertyName)
 {
     using (var context = new AutoJSContext(_globalWindow))
     {
         var jsObject = context.ConvertCOMObjectToJSObject(_thisObject);
         var result   = SpiderMonkey.JS_GetProperty(context.ContextPointer, jsObject, propertyName);
         if (result.IsUndefined)
         {
             throw new GeckoException(String.Format("Property '{0}' of type '{1}' does not exist on object",
                                                    propertyName, typeof(T).Name));
         }
         var retObject = result.ToObject();
         return(ConvertObject <T>(retObject));
     }
 }
コード例 #9
0
        public GeckoElement GetElementByJQuery(string jQuery)
        {
            JsVal jsValue;

            using (var autoContext = new AutoJSContext())
            {
                autoContext.PushCompartmentScope((nsISupports)m_Window.Document.DomObject);
                jsValue = autoContext.EvaluateScript(jQuery);
                if (jsValue.IsObject)
                {
                    var nativeComObject = jsValue.ToComObject(autoContext.ContextPointer);
                    var element         = Xpcom.QueryInterface <nsIDOMHTMLElement>(nativeComObject);
                    if (element != null)
                    {
                        return(GeckoHtmlElement.Create(element));
                    }

                    if (!SpiderMonkey.JS_HasProperty(autoContext.ContextPointer, jsValue.AsPtr, "length"))
                    {
                        return(null);
                    }

                    var length = SpiderMonkey.JS_GetProperty(autoContext.ContextPointer, jsValue.AsPtr, "length").ToInteger();
                    if (length == 0)
                    {
                        return(null);
                    }

                    var firstNativeDom = SpiderMonkey.JS_GetProperty(autoContext.ContextPointer, jsValue.AsPtr, "0").ToComObject(autoContext.ContextPointer);
                    element = Xpcom.QueryInterface <nsIDOMHTMLElement>(firstNativeDom);
                    if (element != null)
                    {
                        return(GeckoHtmlElement.Create(element));
                    }
                }
            }
            return(null);
        }
コード例 #10
0
        public IEnumerable <GeckoElement> GetElementsByJQuery(string jQuery)
        {
            JsVal jsValue;
            var   elements = new List <GeckoElement>();

            using (var autoContext = new AutoJSContext())
            {
                autoContext.PushCompartmentScope((nsISupports)m_Window.Document.DomObject);
                jsValue = autoContext.EvaluateScript(jQuery);
                if (!jsValue.IsObject)
                {
                    return(elements);
                }

                if (!SpiderMonkey.JS_HasProperty(autoContext.ContextPointer, jsValue.AsPtr, "length"))
                {
                    return(null);
                }

                var length = SpiderMonkey.JS_GetProperty(autoContext.ContextPointer, jsValue.AsPtr, "length").ToInteger();
                if (length == 0)
                {
                    return(null);
                }

                for (var elementIndex = 0; elementIndex < length; elementIndex++)
                {
                    var firstNativeDom = SpiderMonkey.JS_GetProperty(autoContext.ContextPointer, jsValue.AsPtr, elementIndex.ToString(CultureInfo.InvariantCulture)).ToComObject(autoContext.ContextPointer);
                    var element        = Xpcom.QueryInterface <nsIDOMHTMLElement>(firstNativeDom);
                    if (element != null)
                    {
                        elements.Add(GeckoHtmlElement.Create(element));
                    }
                }
            }
            return(elements);
        }
コード例 #11
0
        public IEnumerable <GeckoElement> GetElementsByJQuery(string jQuery)
        {
            using (var autoContext = new AutoJSContext(_window))
            {
                var jsValue = autoContext.EvaluateScript(jQuery, _window.DomWindow);
                if (!jsValue.IsObject)
                {
                    return(new List <GeckoElement>());
                }

                if (!SpiderMonkey.JS_HasProperty(autoContext.ContextPointer, jsValue.AsPtr, "length"))
                {
                    return(new List <GeckoElement>());
                }

                var length = SpiderMonkey.JS_GetProperty(autoContext.ContextPointer, jsValue.AsPtr, "length").ToInteger();
                if (length == 0)
                {
                    return(new List <GeckoElement>());
                }

                return(Enumerable.Range(0, length).Select(elementIndex => CreateHtmlElementFromDom(autoContext, jsValue, elementIndex)).Where(element => element != null).ToList());
            }
        }
コード例 #12
0
ファイル: SpiderMonkeyTests.cs プロジェクト: git-thinh/limada
        public IEnumerable <KeyValuePair <string, Action <IntPtr> > > EntryPoints()
        {
            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_EncodeString", (c) => SpiderMonkey.JS_EncodeString(IntPtr.Zero, IntPtr.Zero)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_TypeOfValue", (c) => SpiderMonkey.JS_TypeOfValue(IntPtr.Zero, default(JsVal))));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_ValueToString", (c) => SpiderMonkey.JS_ValueToString(IntPtr.Zero, default(JsVal))));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_ValueToObject", (c) => SpiderMonkey.JS_ValueToObject(IntPtr.Zero, default(JsVal))));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_NewStringCopyN", (c) => SpiderMonkey.JS_NewStringCopyN(c, "", 0)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_GetGlobalForObject", (c) => SpiderMonkey.JS_GetGlobalForObject(c, IntPtr.Zero)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("GetGlobalForObjectCrossCompartment", (c) => SpiderMonkey.GetGlobalForObjectCrossCompartment(IntPtr.Zero)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_SaveFrameChain", (c) => SpiderMonkey.JS_SaveFrameChain(c)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_NewObject", (c) => SpiderMonkey.JS_NewObject(c, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_GetParent", (c) => SpiderMonkey.JS_GetParent(IntPtr.Zero)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_GetScriptedGlobal", (c) => SpiderMonkey.JS_GetScriptedGlobal(c)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("CurrentGlobalOrNull", (c) => SpiderMonkey.CurrentGlobalOrNull(c)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_NewContext", (c) => SpiderMonkey.JS_NewContext(IntPtr.Zero, 0)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_GetRuntime", (c) => SpiderMonkey.JS_GetRuntime(c)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_GetContextPrivate", (c) => SpiderMonkey.JS_GetContextPrivate(c)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_SetContextPrivate", (c) => SpiderMonkey.JS_SetContextPrivate(c, IntPtr.Zero)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("DefaultObjectForContextOrNull", (c) => SpiderMonkey.DefaultObjectForContextOrNull(c)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_BeginRequest", (c) => SpiderMonkey.JS_BeginRequest(c)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_EndRequest", (c) => SpiderMonkey.JS_EndRequest(c)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_EvaluateScript", (c) =>
            {
                var jsVal = new JsVal();
                SpiderMonkey.JS_EvaluateScript(c, IntPtr.Zero, "", 0, "", 0, ref jsVal);
            }));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_EvaluateScriptForPrincipals", (c) =>
            {
                var jsVal = new JsVal();
                SpiderMonkey.JS_EvaluateScriptForPrincipals(c, IntPtr.Zero, IntPtr.Zero, "", 0, "", 0, ref jsVal);
            }));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_GetClassObject", (c) => SpiderMonkey.JS_GetClassObject(c, IntPtr.Zero)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_GetClass", (c) => SpiderMonkey.JS_GetClass(IntPtr.Zero)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_ContextIterator", (c) =>
            {
                var pt = IntPtr.Zero;
                SpiderMonkey.JS_ContextIterator(IntPtr.Zero, ref pt);
            }));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_SetContextCallback", (c) => SpiderMonkey.JS_SetContextCallback(IntPtr.Zero, null)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_EnterCompartment", (c) => SpiderMonkey.JS_EnterCompartment(c, IntPtr.Zero)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_LeaveCompartment", (c) => SpiderMonkey.JS_LeaveCompartment(c, IntPtr.Zero)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_Free", (c) => SpiderMonkey.JS_Free(c, IntPtr.Zero)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_WrapObject", (c) => SpiderMonkey.JS_WrapObject(c, IntPtr.Zero)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("IsObjectInContextCompartment", (c) => SpiderMonkey.IsObjectInContextCompartment(IntPtr.Zero, c)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_DestroyRuntime", (c) => SpiderMonkey.JS_DestroyRuntime(IntPtr.Zero)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_HasProperty", (c) => SpiderMonkey.JS_HasProperty(c, IntPtr.Zero, "")));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_GetProperty", (c) => SpiderMonkey.JS_GetProperty(c, IntPtr.Zero, "")));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_SetCompartmentPrincipals", (c) => SpiderMonkey.JS_SetCompartmentPrincipals(c, IntPtr.Zero)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_GetCompartmentPrincipals", (c) => SpiderMonkey.JS_GetCompartmentPrincipals(c)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_SetTrustedPrincipals", (c) => SpiderMonkey.JS_SetTrustedPrincipals(IntPtr.Zero, IntPtr.Zero)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_GetPendingException", (c) => SpiderMonkey.JS_GetPendingException(c)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_SetErrorReporter", (c) => SpiderMonkey.JS_SetErrorReporter(c, (cx, message, report) => {})));
        }
コード例 #13
0
        /// <summary>
        /// Please keep these in alphabetical order.
        /// </summary>
        /// <returns></returns>
        public IEnumerable <KeyValuePair <string, Action <IntPtr> > > EntryPoints()
        {
            yield return(new KeyValuePair <string, Action <IntPtr> >("CurrentGlobalOrNull", (c) => SpiderMonkey.CurrentGlobalOrNull(c)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("GetGlobalForObjectCrossCompartment", (c) => SpiderMonkey.GetGlobalForObjectCrossCompartment(IntPtr.Zero)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("IsObjectInContextCompartment", (c) => SpiderMonkey.IsObjectInContextCompartment(IntPtr.Zero, c)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_BeginRequest", (c) => SpiderMonkey.JS_BeginRequest(c)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_CallFunctionName", (c) => SpiderMonkey.JS_CallFunctionName(c, IntPtr.Zero, "", new JsVal[0])));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_CallFunctionValue", (c) => SpiderMonkey.JS_CallFunctionValue(c, IntPtr.Zero, new JsVal())));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_EncodeString", (c) => SpiderMonkey.JS_EncodeString(IntPtr.Zero, IntPtr.Zero)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_EncodeStringToUTF8", (c) => SpiderMonkey.JS_EncodeStringToUTF8(c, IntPtr.Zero)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_EndRequest", (c) => SpiderMonkey.JS_EndRequest(c)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_EnterCompartment", (c) => SpiderMonkey.JS_EnterCompartment(c, IntPtr.Zero)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_ExecuteScript", (c) => { JsVal val; SpiderMonkey.JS_ExecuteScript(c, "", out val); }));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_Free", (c) => SpiderMonkey.JS_Free(c, IntPtr.Zero)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_GetClass", (c) => SpiderMonkey.JS_GetClass(IntPtr.Zero)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_GetClassObject", (c) => SpiderMonkey.JS_GetClassObject(c, IntPtr.Zero)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_GetCompartmentPrincipals", (c) => SpiderMonkey.JS_GetCompartmentPrincipals(c)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_ContextIterator", (c) => { var pt = IntPtr.Zero; SpiderMonkey.JS_ContextIterator(IntPtr.Zero, ref pt); }));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_GetContextPrivate", (c) => SpiderMonkey.JS_GetContextPrivate(c)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_GetEmptyStringValue", (c) => SpiderMonkey.JS_GetEmptyStringValue(c)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_GetGlobalForObject", (c) => SpiderMonkey.JS_GetGlobalForObject(c, IntPtr.Zero)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_GetProperty", (c) => SpiderMonkey.JS_GetProperty(c, IntPtr.Zero, "")));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_GetStringLength", (c) => SpiderMonkey.JS_GetStringLength(IntPtr.Zero)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_GetStringEncodingLength", (c) => SpiderMonkey.JS_GetStringEncodingLength(c, IntPtr.Zero)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_HasProperty", (c) => SpiderMonkey.JS_HasProperty(c, IntPtr.Zero, "")));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_GetNegativeInfinityValue", (c) => SpiderMonkey.JS_GetNegativeInfinityValue(IntPtr.Zero)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_GetPendingException", (c) => SpiderMonkey.JS_GetPendingException(c)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_LeaveCompartment", (c) => SpiderMonkey.JS_LeaveCompartment(c, IntPtr.Zero)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_NewContext", (c) => SpiderMonkey.JS_NewContext(IntPtr.Zero, 0)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_NewPlainObject", (c) => SpiderMonkey.JS_NewPlainObject(c)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_NewStringCopyN", (c) => SpiderMonkey.JS_NewStringCopyN(c, "", 0)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_SaveFrameChain", (c) => SpiderMonkey.JS_SaveFrameChain(c)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_SetCompartmentPrincipals", (c) => SpiderMonkey.JS_SetCompartmentPrincipals(c, IntPtr.Zero)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_SetContextCallback", (c) => SpiderMonkey.JS_SetContextCallback(IntPtr.Zero, null)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_SetContextPrivate", (c) => SpiderMonkey.JS_SetContextPrivate(c, IntPtr.Zero)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_SetErrorReporter", (c) => SpiderMonkey.JS_SetErrorReporter(c, (cx, message, report) => { })));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_SetProperty", (c) => SpiderMonkey.JS_SetProperty(c, IntPtr.Zero, "", new JsVal())));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_SetTrustedPrincipals", (c) => SpiderMonkey.JS_SetTrustedPrincipals(IntPtr.Zero, IntPtr.Zero)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_TypeOfValue", (c) => SpiderMonkey.JS_TypeOfValue(IntPtr.Zero, default(JsVal))));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_ValueToObject", (c) => SpiderMonkey.JS_ValueToObject(IntPtr.Zero, default(JsVal))));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_WrapObject", (c) => SpiderMonkey.JS_WrapObject(IntPtr.Zero, IntPtr.Zero)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("ToStringSlow", (c) => SpiderMonkey.ToStringSlow(IntPtr.Zero, default(JsVal))));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_GetRuntime", (c) => SpiderMonkey.JS_GetRuntime(c)));

            yield return(new KeyValuePair <string, Action <IntPtr> >("JS_WrapObject", (c) => SpiderMonkey.JS_WrapObject(c, IntPtr.Zero)));
        }
コード例 #14
0
        /// <summary>
        /// Please keep these in alphabetical order.
        /// </summary>
        /// <returns></returns>
        public IEnumerable <KeyValuePair <string, Action <IntPtr, IntPtr> > > EntryPoints()
        {
            yield return(new KeyValuePair <string, Action <IntPtr, IntPtr> >("CurrentGlobalOrNull", (c, j) => SpiderMonkey.CurrentGlobalOrNull(c)));

            yield return(new KeyValuePair <string, Action <IntPtr, IntPtr> >("GetGlobalForObjectCrossCompartment", (c, j) => SpiderMonkey.GetGlobalForObjectCrossCompartment(j)));

            yield return(new KeyValuePair <string, Action <IntPtr, IntPtr> >("IsObjectInContextCompartment", (c, j) => SpiderMonkey.IsObjectInContextCompartment(j, c)));

            yield return(new KeyValuePair <string, Action <IntPtr, IntPtr> >("JS_BeginRequest", (c, j) => SpiderMonkey.JS_BeginRequest(c)));

            yield return(new KeyValuePair <string, Action <IntPtr, IntPtr> >("JS_CallFunctionName", (c, j) => SpiderMonkey.JS_CallFunctionName(c, j, "", new JsVal[0])));

            yield return(new KeyValuePair <string, Action <IntPtr, IntPtr> >("JS_CallFunctionValue", (c, j) => SpiderMonkey.JS_CallFunctionValue(c, j, new JsVal())));

            yield return(new KeyValuePair <string, Action <IntPtr, IntPtr> >("JS_EncodeString", (c, j) => SpiderMonkey.JS_EncodeString(c, TestString(c))));

            yield return(new KeyValuePair <string, Action <IntPtr, IntPtr> >("JS_EndRequest", (c, j) => SpiderMonkey.JS_EndRequest(c)));

            yield return(new KeyValuePair <string, Action <IntPtr, IntPtr> >("JS_EnterCompartment", (c, j) => SpiderMonkey.JS_EnterCompartment(c, j)));

            yield return(new KeyValuePair <string, Action <IntPtr, IntPtr> >("JS_ExecuteScript", (c, j) => { JsVal val; SpiderMonkey.JS_ExecuteScript(c, "", out val); }));

            yield return(new KeyValuePair <string, Action <IntPtr, IntPtr> >("JS_Free", (c, j) => SpiderMonkey.JS_Free(c, IntPtr.Zero)));

            yield return(new KeyValuePair <string, Action <IntPtr, IntPtr> >("JS_GetClass", (c, j) => SpiderMonkey.JS_GetClass(j)));

            yield return(new KeyValuePair <string, Action <IntPtr, IntPtr> >("JS_GetClassObject", (c, j) => SpiderMonkey.JS_GetClassObject(c, IntPtr.Zero)));

            yield return(new KeyValuePair <string, Action <IntPtr, IntPtr> >("JS_GetCompartmentPrincipals", (c, j) => SpiderMonkey.JS_GetCompartmentPrincipals(c)));

#if PORTFF60
            // unstable
            yield return(new KeyValuePair <string, Action <IntPtr, IntPtr> >("JS_GetEmptyStringValue", (c, j) => SpiderMonkey.JS_GetEmptyStringValue(c)));
#endif
            yield return(new KeyValuePair <string, Action <IntPtr, IntPtr> >("JS_GetGlobalForObject", (c, j) => SpiderMonkey.JS_GetGlobalForObject(c, j)));

            yield return(new KeyValuePair <string, Action <IntPtr, IntPtr> >("JS_GetProperty", (c, j) => SpiderMonkey.JS_GetProperty(c, j, "")));

            yield return(new KeyValuePair <string, Action <IntPtr, IntPtr> >("JS_GetStringLength", (c, j) => SpiderMonkey.JS_GetStringLength(TestString(c))));

            yield return(new KeyValuePair <string, Action <IntPtr, IntPtr> >("JS_GetStringEncodingLength", (c, j) => SpiderMonkey.JS_GetStringEncodingLength(c, TestString(c))));

            yield return(new KeyValuePair <string, Action <IntPtr, IntPtr> >("JS_HasProperty", (c, j) => SpiderMonkey.JS_HasProperty(c, j, "")));

#if PORTFF60
            // unstable
            yield return(new KeyValuePair <string, Action <IntPtr, IntPtr> >("JS_GetNegativeInfinityValue", (c, j) => SpiderMonkey.JS_GetNegativeInfinityValue(c)));
#endif
            yield return(new KeyValuePair <string, Action <IntPtr, IntPtr> >("JS_GetPendingException", (c, j) => SpiderMonkey.JS_GetPendingException(c)));

            yield return(new KeyValuePair <string, Action <IntPtr, IntPtr> >("JS_LeaveCompartment", (c, j) => SpiderMonkey.JS_LeaveCompartment(c, IntPtr.Zero)));

            yield return(new KeyValuePair <string, Action <IntPtr, IntPtr> >("JS_NewPlainObject", (c, j) => SpiderMonkey.JS_NewPlainObject(c)));

            yield return(new KeyValuePair <string, Action <IntPtr, IntPtr> >("JS_NewStringCopyN", (c, j) => SpiderMonkey.JS_NewStringCopyN(c, "", 0)));

            yield return(new KeyValuePair <string, Action <IntPtr, IntPtr> >("JS_SetCompartmentPrincipals", (c, j) => SpiderMonkey.JS_SetCompartmentPrincipals(c, IntPtr.Zero)));

            yield return(new KeyValuePair <string, Action <IntPtr, IntPtr> >("JS_SetProperty", (c, j) => SpiderMonkey.JS_SetProperty(c, j, "", new JsVal())));

            yield return(new KeyValuePair <string, Action <IntPtr, IntPtr> >("JS_TypeOfValue", (c, j) => SpiderMonkey.JS_TypeOfValue(c, default(JsVal))));

            yield return(new KeyValuePair <string, Action <IntPtr, IntPtr> >("JS_ValueToObject", (c, j) => SpiderMonkey.JS_ValueToObject(c, default(JsVal))));

            yield return(new KeyValuePair <string, Action <IntPtr, IntPtr> >("JS_WrapObject", (c, j) => SpiderMonkey.JS_WrapObject(c, j)));

#if PORTFF60
            yield return(new KeyValuePair <string, Action <IntPtr, IntPtr> >("ToStringSlow", (c, j) => SpiderMonkey.ToStringSlow(IntPtr.Zero, default(JsVal))));
#endif
            yield return(new KeyValuePair <string, Action <IntPtr, IntPtr> >("JS_GetRuntime", (c, j) => SpiderMonkey.JS_GetRuntime(c)));
        }