diff options
author | Chad Austin <chad@imvu.com> | 2013-04-17 16:56:41 -0700 |
---|---|---|
committer | Jukka Jylänki <jujjyl@gmail.com> | 2013-04-18 20:08:39 +0300 |
commit | f25a4c9d196b5436bf526308cb9d771f3610dd81 (patch) | |
tree | 8095afc9d764dfa09c33533246b9981754befdfc /tests/embind | |
parent | 905bbbf350aa1dc475873db681d952b085fd940d (diff) |
Add support for read-only properties.
Diffstat (limited to 'tests/embind')
-rwxr-xr-x | tests/embind/embind.test.js | 21 | ||||
-rw-r--r-- | tests/embind/embind_test.cpp | 18 |
2 files changed, 37 insertions, 2 deletions
diff --git a/tests/embind/embind.test.js b/tests/embind/embind.test.js index 4ad854f4..8ef46ad8 100755 --- a/tests/embind/embind.test.js +++ b/tests/embind/embind.test.js @@ -916,6 +916,27 @@ module({ c.delete(); }); + test("class properties can be read-only", function() { + var a = {}; + var h = new cm.ValHolder(a); + assert.equal(a, h.val_readonly); + var e = assert.throws(cm.BindingError, function() { + h.val_readonly = 10; + }); + assert.equal('ValHolder.val_readonly is a read-only property', e.message); + h.delete(); + }); + + test("read-only member field", function() { + var a = new cm.HasReadOnlyProperty(10); + assert.equal(10, a.i); + var e = assert.throws(cm.BindingError, function() { + a.i = 20; + }); + assert.equal('HasReadOnlyProperty.i is a read-only property', e.message); + a.delete(); + }); + test("class instance $$ property is non-enumerable", function() { var c = new cm.ValHolder(undefined); assert.deepEqual([], Object.keys(c)); diff --git a/tests/embind/embind_test.cpp b/tests/embind/embind_test.cpp index 0439c832..7cde8e7f 100644 --- a/tests/embind/embind_test.cpp +++ b/tests/embind/embind_test.cpp @@ -673,8 +673,6 @@ private: std::string name_;
};
-// todo: does it need to be polymorphic?
-// todo: virtual diamond pattern
class PolyDiamondBase {
public:
PolyDiamondBase():
@@ -1551,6 +1549,7 @@ EMSCRIPTEN_BINDINGS(tests) { .function("getValConstRef", &ValHolder::getValConstRef)
.function("setVal", &ValHolder::setVal)
.property("val", &ValHolder::getVal, &ValHolder::setVal)
+ .property("val_readonly", &ValHolder::getVal)
.class_function("makeConst", &ValHolder::makeConst, allow_raw_pointer<ret_val>())
.class_function("makeValHolder", &ValHolder::makeValHolder)
.class_function("some_class_method", &ValHolder::some_class_method)
@@ -2096,3 +2095,18 @@ EMSCRIPTEN_BINDINGS(noncopyable) { function("getNoncopyable", &getNoncopyable);
}
+
+struct HasReadOnlyProperty {
+ HasReadOnlyProperty(int i)
+ : i(i)
+ {}
+
+ const int i;
+};
+
+EMSCRIPTEN_BINDINGS(read_only_properties) {
+ class_<HasReadOnlyProperty>("HasReadOnlyProperty")
+ .constructor<int>()
+ .property("i", &HasReadOnlyProperty::i)
+ ;
+}
|