MCPcopy Create free account
hub / github.com/anjo76/angelscript / TestVirtualMethod

Function TestVirtualMethod

sdk/tests/test_feature/source/testvirtualmethod.cpp:61–109  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

59};
60
61bool TestVirtualMethod()
62{
63 RET_ON_MAX_PORT
64
65 bool fail = false;
66 int r;
67
68 {
69 asIScriptEngine *engine = asCreateScriptEngine(ANGELSCRIPT_VERSION);
70
71 r = engine->RegisterObjectType("class1", 0, asOBJ_REF | asOBJ_NOHANDLE);
72 r = engine->RegisterObjectMethod("class1", "void CallMe()", asMETHOD(CBase, CallMe), asCALL_THISCALL);
73
74 // We must register the property as a pointer to the base class since
75 // all registered methods are taken from the base class. This is
76 // especially important when there is multiple or virtual inheritance
77 r = engine->RegisterGlobalProperty("class1 b", &b);
78 r = engine->RegisterGlobalProperty("class1 d", (CBase*)&d);
79
80 COutStream out;
81 engine->SetMessageCallback(asMETHOD(COutStream,Callback), &out, asCALL_THISCALL);
82 ExecuteString(engine, "b.CallMe(); d.CallMe();");
83
84 if( output1 != "CBase: CBase::CallMe()\nCDerived: CDerived::CallMe()\n" )
85 {
86 PRINTF("%s: Virtual method calls failed.\n%s", TESTNAME, output1.c_str());
87 TEST_FAILED;
88 }
89
90 engine->Release();
91 }
92
93 {
94 asIScriptEngine *engine = asCreateScriptEngine(ANGELSCRIPT_VERSION);
95
96 r = engine->RegisterObjectType("ref1", 0, asOBJ_REF); assert( r >= 0 );
97 r = engine->RegisterObjectBehaviour("ref1", asBEHAVE_FACTORY, "ref1 @f()", asFUNCTION(CRefDerived1::Factory), asCALL_CDECL); assert( r >= 0 );
98 r = engine->RegisterObjectBehaviour("ref1", asBEHAVE_ADDREF, "void f()", asMETHOD(CRefDerived1, AddRef), asCALL_THISCALL); assert( r >= 0 );
99 r = engine->RegisterObjectBehaviour("ref1", asBEHAVE_RELEASE, "void f()", asMETHOD(CRefDerived1, Release), asCALL_THISCALL); assert( r >= 0 );
100
101 r = ExecuteString(engine, "ref1 r;");
102 if( r != asEXECUTION_FINISHED )
103 TEST_FAILED;
104
105 engine->Release();
106 }
107
108 return fail;
109}

Callers 1

allTestsFunction · 0.85

Calls 6

ExecuteStringFunction · 0.85
RegisterObjectMethodMethod · 0.80
SetMessageCallbackMethod · 0.80
ReleaseMethod · 0.45

Tested by

no test coverage detected