[banshee] [JavaScriptCore] Fix constructor support
- From: Aaron Bockover <abock src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [banshee] [JavaScriptCore] Fix constructor support
- Date: Tue, 30 Nov 2010 17:45:21 +0000 (UTC)
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]