aboutsummaryrefslogtreecommitdiff
path: root/tests/embind/embind.test.js
diff options
context:
space:
mode:
authorJukka Jylanki <jjylanki@imvu.com>2013-04-04 09:19:18 +0300
committerJukka Jylänki <jujjyl@gmail.com>2013-04-12 14:27:23 +0300
commitf80caa7c2dbfbba8b6988168715ce3421322191c (patch)
tree93f47e1b4fc4124a113f8e63bf19a24349a16312 /tests/embind/embind.test.js
parent7eb89c3e4feabd85b50cfad9f3c44a9235540a05 (diff)
Add support for overloading class member functions and class static functions based on function argument count.
Diffstat (limited to 'tests/embind/embind.test.js')
-rwxr-xr-xtests/embind/embind.test.js56
1 files changed, 56 insertions, 0 deletions
diff --git a/tests/embind/embind.test.js b/tests/embind/embind.test.js
index 11746214..020719d5 100755
--- a/tests/embind/embind.test.js
+++ b/tests/embind/embind.test.js
@@ -620,6 +620,62 @@ module({
assert.throws(cm.BindingError, function() { cm.overloaded_function(30, 30, 30); });
});
+ test("overloading of class member functions", function() {
+ var foo = new cm.MultipleOverloads();
+ assert.equal(foo.Func(10), 1);
+ assert.equal(foo.WhichFuncCalled(), 1);
+ assert.equal(foo.Func(20, 20), 2);
+ assert.equal(foo.WhichFuncCalled(), 2);
+ foo.delete();
+ });
+
+ test("wrong number of arguments to an overloaded class member function", function() {
+ var foo = new cm.MultipleOverloads();
+ assert.throws(cm.BindingError, function() { foo.Func(); });
+ assert.throws(cm.BindingError, function() { foo.Func(30, 30, 30); });
+ foo.delete();
+ });
+
+ test("wrong number of arguments to an overloaded class static function", function() {
+ assert.throws(cm.BindingError, function() { cm.MultipleOverloads.StaticFunc(); });
+ assert.throws(cm.BindingError, function() { cm.MultipleOverloads.StaticFunc(30, 30, 30); });
+ });
+
+ test("overloading of derived class member functions", function() {
+ var foo = new cm.MultipleOverloadsDerived();
+
+ // NOTE: In C++, default lookup rules will hide overloads from base class if derived class creates them.
+ // In JS, we make the base class overloads implicitly available. In C++, they would need to be explicitly
+ // invoked, like foo.MultipleOverloads::Func(10);
+ assert.equal(foo.Func(10), 1);
+ assert.equal(foo.WhichFuncCalled(), 1);
+ assert.equal(foo.Func(20, 20), 2);
+ assert.equal(foo.WhichFuncCalled(), 2);
+
+ assert.equal(foo.Func(30, 30, 30), 3);
+ assert.equal(foo.WhichFuncCalled(), 3);
+ assert.equal(foo.Func(40, 40, 40, 40), 4);
+ assert.equal(foo.WhichFuncCalled(), 4);
+ foo.delete();
+ });
+
+ test("overloading of class static functions", function() {
+ assert.equal(cm.MultipleOverloads.StaticFunc(10), 1);
+ assert.equal(cm.MultipleOverloads.WhichStaticFuncCalled(), 1);
+ assert.equal(cm.MultipleOverloads.StaticFunc(20, 20), 2);
+ assert.equal(cm.MultipleOverloads.WhichStaticFuncCalled(), 2);
+ });
+
+ test("overloading of derived class static functions", function() {
+ assert.equal(cm.MultipleOverloadsDerived.StaticFunc(30, 30, 30), 3);
+ // TODO: Cannot access static member functions of a Base class via Derived.
+// assert.equal(cm.MultipleOverloadsDerived.WhichStaticFuncCalled(), 3);
+ assert.equal(cm.MultipleOverloads.WhichStaticFuncCalled(), 3);
+ assert.equal(cm.MultipleOverloadsDerived.StaticFunc(40, 40, 40, 40), 4);
+ // TODO: Cannot access static member functions of a Base class via Derived.
+// assert.equal(cm.MultipleOverloadsDerived.WhichStaticFuncCalled(), 4);
+ assert.equal(cm.MultipleOverloads.WhichStaticFuncCalled(), 4);
+ });
/*
test("can get templated member classes then call its member functions", function() {
var p = new cm.ContainsTemplatedMemberClass();