[banshee] [JavaScriptCore] Fix constructor support



commit f01dd3a4720c79dec1bdf7bad278ed3980ce4e57
Author: Aaron Bockover <abockover novell com>
Date:   Tue Nov 30 12:42:30 2010 -0500

    [JavaScriptCore] Fix constructor support

 .../JavaScriptCore/JSClassDefinition.cs            |    9 ++++++-
 .../JavaScriptCore/Tests/JSClassTests.cs           |   21 ++++++++++++++++---
 2 files changed, 24 insertions(+), 6 deletions(-)
---
diff --git a/src/Core/Banshee.WebBrowser/JavaScriptCore/JSClassDefinition.cs b/src/Core/Banshee.WebBrowser/JavaScriptCore/JSClassDefinition.cs
index 3308639..715db57 100644
--- a/src/Core/Banshee.WebBrowser/JavaScriptCore/JSClassDefinition.cs
+++ b/src/Core/Banshee.WebBrowser/JavaScriptCore/JSClassDefinition.cs
@@ -62,7 +62,7 @@ namespace JavaScriptCore
         private JSObject.CallAsFunctionCallback static_function_callback;
 
         public virtual string ClassName {
-            get { return GetType ().FullName.Replace (".", "_"); }
+            get { return GetType ().FullName.Replace (".", "_").Replace ("+", "_"); }
         }
 
         public JSClassDefinition ()
@@ -83,7 +83,7 @@ namespace JavaScriptCore
             Override ("OnJSSetProperty", () => raw.set_property = new JSObject.SetPropertyCallback (JSSetProperty));
             Override ("OnJSDeleteProperty", () => raw.delete_property = new JSObject.DeletePropertyCallback (JSDeleteProperty));
             Override ("OnJSGetPropertyNames", () => raw.get_property_names = new JSObject.GetPropertyNamesCallback (JSGetPropertyNames));
-            Override ("OnCallAsConstructor", () => raw.call_as_constructor = new JSObject.CallAsConstructorCallback (JSCallAsConstructor));
+            Override ("OnJSCallAsConstructor", () => raw.call_as_constructor = new JSObject.CallAsConstructorCallback (JSCallAsConstructor));
         }
 
         private void InstallStaticMethods ()
@@ -157,6 +157,11 @@ namespace JavaScriptCore
         [DllImport (JSContext.NATIVE_IMPORT)]
         private static extern IntPtr JSClassCreate (ref JSClassDefinition.JSClassDefinitionNative definition);
 
+        private JSClass class_handle;
+        public JSClass ClassHandle {
+            get { return class_handle ?? (class_handle = CreateClass ()); }
+        }
+
         public JSClass CreateClass ()
         {
             return new JSClass (JSClassCreate (ref raw));
diff --git a/src/Core/Banshee.WebBrowser/JavaScriptCore/Tests/JSClassTests.cs b/src/Core/Banshee.WebBrowser/JavaScriptCore/Tests/JSClassTests.cs
index df399ba..2d78272 100644
--- a/src/Core/Banshee.WebBrowser/JavaScriptCore/Tests/JSClassTests.cs
+++ b/src/Core/Banshee.WebBrowser/JavaScriptCore/Tests/JSClassTests.cs
@@ -35,12 +35,18 @@ namespace JavaScriptCore.Tests
     public class JSClassTests
     {
         private JSContext context;
+        private JSTestStaticClass static_class;
+        private JSTestInstanceClass instance_class;
 
         [TestFixtureSetUp]
         public void Init ()
         {
             context = new JSContext ();
-            context.GlobalObject.SetProperty ("x", new JSObject (context, new JSTestStaticClass ().CreateClass ()));
+            static_class = new JSTestStaticClass ();
+            instance_class = new JSTestInstanceClass ();
+
+            context.GlobalObject.SetProperty ("x", new JSObject (context, static_class.ClassHandle));
+            context.GlobalObject.SetProperty ("y", new JSObject (context, instance_class.ClassHandle));
         }
 
         private class JSTestStaticClass : JSClassDefinition
@@ -153,12 +159,19 @@ namespace JavaScriptCore.Tests
 
         private class JSTestInstanceClass : JSClassDefinition
         {
-            protected override JSObject OnJSCallAsConstructor (JSObject constructor, JSValue[] args)
+            protected override JSObject OnJSCallAsConstructor (JSObject constructor, JSValue [] args)
             {
-                Console.WriteLine ("HELLO!");
-                return null;
+                var o = new JSObject (constructor.Context, ClassHandle);
+                o.SetProperty ("hello", new JSValue (constructor.Context, "world"));
+                return o;
             }
         }
+
+        [Test]
+        public void TestConstructor ()
+        {
+            Assert.AreEqual ("world", context.EvaluateScript ("new y ().hello").StringValue);
+        }
     }
 }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]