@@ -716,7 +716,18 @@ class BaseClass {
716
716
// actually BaseClassScriptWrapper* and ScriptClass* will be different memory address
717
717
class BaseClassScriptWrapper : public BaseClass , public ScriptClass {
718
718
public:
719
- explicit BaseClassScriptWrapper (const Local<Object>& thiz) : BaseClass(), ScriptClass(thiz) {}
719
+ // used to check callback used the right pointer
720
+ void * ctorCalledInstancePtr_ = nullptr ;
721
+ void * nameCalledInstancePtr_ = nullptr ;
722
+
723
+ explicit BaseClassScriptWrapper (const Local<Object>& thiz) : BaseClass(), ScriptClass(thiz) {
724
+ ctorCalledInstancePtr_ = this ;
725
+ }
726
+
727
+ std::string name () override {
728
+ nameCalledInstancePtr_ = this ;
729
+ return " BaseWrapper" ;
730
+ }
720
731
};
721
732
722
733
const auto baseWrapperDefine =
@@ -737,6 +748,8 @@ TEST_F(NativeTest, BindBaseClass) {
737
748
engine->registerNativeClass (baseWrapperDefine);
738
749
auto base = engine->newNativeClass <BaseClassScriptWrapper>();
739
750
auto ptr = engine->getNativeInstance <BaseClassScriptWrapper>(base);
751
+ ASSERT_EQ (ptr, ptr->ctorCalledInstancePtr_ );
752
+
740
753
engine->set (" base" , base);
741
754
742
755
engine->eval (" base.age = 10" );
@@ -750,6 +763,11 @@ TEST_F(NativeTest, BindBaseClass) {
750
763
auto num = engine->eval (TS ().js (" base.num" ).lua (" return base.num" ).select ());
751
764
ASSERT_TRUE (num.isNumber ());
752
765
EXPECT_EQ (ptr->getNum (), num.asNumber ().toInt32 ());
766
+
767
+ EXPECT_EQ (ptr->nameCalledInstancePtr_ , nullptr );
768
+ engine->eval (TS ().js (" base.name()" ).lua (" return base:name()" ).select ()); // invoke getter func
769
+ EXPECT_EQ (ptr->nameCalledInstancePtr_ , ptr);
770
+
753
771
} catch (const Exception& e) {
754
772
FAIL () << e;
755
773
}
0 commit comments