Adding unit tests for registered methods.

This commit is contained in:
Paul Knopf 2019-07-29 01:34:44 -04:00
parent 9c065764d7
commit 1ff689e7a8
9 changed files with 65 additions and 28 deletions

View file

@ -73,14 +73,22 @@ namespace Qml.Net.Aot
writer.WriteLine($"class {CppName}: public QObject");
}
writer.WriteLine("{");
using (writer.BeginIndent())
{
writer.WriteLine("Q_OBJECT");
}
writer.WriteLine("public:");
using (writer.BeginIndent())
{
writer.WriteLine($"{CppName}();");
writer.WriteLine($"{CppName}(bool);");
writer.WriteLine("static int registerQml(const char* uri, int versionMajor, int versionMinor, const char* qmlName);");
writer.WriteLine("static int registerQmlSingleton(const char* uri, int versionMajor, int versionMinor, const char* typeName);");
writer.WriteLine("static QObject *build(QQmlEngine *engine, QJSEngine *scriptEngine);");
writer.WriteLine("static int _registerQml(const char* uri, int versionMajor, int versionMinor, const char* qmlName);");
writer.WriteLine("static int _registerQmlSingleton(const char* uri, int versionMajor, int versionMinor, const char* typeName);");
writer.WriteLine("static QObject* _build(QQmlEngine* engine, QJSEngine* scriptEngine);");
foreach (var method in _methods)
{
writer.WriteLine($"Q_INVOKABLE void {method.MethodName}();");
}
}
if (aotBaseClass == null)
@ -125,21 +133,21 @@ namespace Qml.Net.Aot
}
writer.WriteLine("{");
writer.WriteLine("}");
writer.WriteLine($"int {CppName}::registerQml(const char* uri, int versionMajor, int versionMinor, const char* qmlName)");
writer.WriteLine($"int {CppName}::_registerQml(const char* uri, int versionMajor, int versionMinor, const char* qmlName)");
writer.WriteLine("{");
using (writer.BeginIndent())
{
writer.WriteLine($"return qmlRegisterType<{CppName}>(uri, versionMajor, versionMinor, qmlName);");
}
writer.WriteLine("}");
writer.WriteLine($"int {CppName}::registerQmlSingleton(const char* uri, int versionMajor, int versionMinor, const char* typeName)");
writer.WriteLine($"int {CppName}::_registerQmlSingleton(const char* uri, int versionMajor, int versionMinor, const char* typeName)");
writer.WriteLine("{");
using (writer.BeginIndent())
{
writer.WriteLine($"return qmlRegisterSingletonType<{CppName}>(uri, versionMajor, versionMinor, typeName, {CppName}::build);");
writer.WriteLine($"return qmlRegisterSingletonType<{CppName}>(uri, versionMajor, versionMinor, typeName, {CppName}::_build);");
}
writer.WriteLine("}");
writer.WriteLine($"QObject* {CppName}::build(QQmlEngine *engine, QJSEngine *scriptEngine)");
writer.WriteLine($"QObject* {CppName}::_build(QQmlEngine *engine, QJSEngine *scriptEngine)");
writer.WriteLine("{");
using (writer.BeginIndent())
{
@ -148,6 +156,12 @@ namespace Qml.Net.Aot
writer.WriteLine($"return new {CppName}();");
}
writer.WriteLine("}");
foreach (var method in _methods)
{
writer.WriteLine($"void {CppName}::{method.MethodName}()");
writer.WriteLine("{");
writer.WriteLine("}");
}
}
}
}

View file

@ -9,6 +9,21 @@ namespace Qml.Net.Aot
DeclaringType = decaringType;
MethodInfo = methodInfo;
}
public string MethodName
{
get
{
var methodName = MethodInfo.Name;
if (!char.IsLower(methodName[0]))
{
methodName = char.ToLower(methodName[0]) + methodName.Substring(1);
}
return methodName;
}
}
public MethodInfo MethodInfo { get; }

View file

@ -140,7 +140,7 @@ namespace Qml.Net.Aot
writer.WriteLine("}");
foreach (var cls in _classes)
{
writer.WriteLine($"NetTypeManager::registerAotObject({cls.TypeId}, &{cls.CppName}::staticMetaObject, {cls.CppName}::registerQml, {cls.CppName}::registerQmlSingleton);");
writer.WriteLine($"NetTypeManager::registerAotObject({cls.TypeId}, &{cls.CppName}::staticMetaObject, {cls.CppName}::_registerQml, {cls.CppName}::_registerQmlSingleton);");
}
writer.WriteLine("initAotTypesDone = true;");
writer.WriteLine("initAotTypesMutex->unlock();");

View file

@ -46,11 +46,9 @@ namespace Qml.Net.Tests.Aot
{
RunQmlTest("test",
@"
console.log(test);
return;
assert.isTrue(typeof test.method1 === 'function');
assert.isTrue(typeof test.method2 !== 'function');
assert.isTrue(typeof test.method3 === 'function');
assert.isTrue(typeof test.method2 === 'function');
assert.isTrue(typeof test.method3 === 'undefined');
");
}
}

View file

@ -8,17 +8,23 @@ NetAotMethodInvocation::NetAotMethodInvocation() : NetObject(false)
NetAotMethodInvocation::NetAotMethodInvocation(bool) : NetObject(false)
{
}
int NetAotMethodInvocation::registerQml(const char* uri, int versionMajor, int versionMinor, const char* qmlName)
int NetAotMethodInvocation::_registerQml(const char* uri, int versionMajor, int versionMinor, const char* qmlName)
{
return qmlRegisterType<NetAotMethodInvocation>(uri, versionMajor, versionMinor, qmlName);
}
int NetAotMethodInvocation::registerQmlSingleton(const char* uri, int versionMajor, int versionMinor, const char* typeName)
int NetAotMethodInvocation::_registerQmlSingleton(const char* uri, int versionMajor, int versionMinor, const char* typeName)
{
return qmlRegisterSingletonType<NetAotMethodInvocation>(uri, versionMajor, versionMinor, typeName, NetAotMethodInvocation::build);
return qmlRegisterSingletonType<NetAotMethodInvocation>(uri, versionMajor, versionMinor, typeName, NetAotMethodInvocation::_build);
}
QObject* NetAotMethodInvocation::build(QQmlEngine *engine, QJSEngine *scriptEngine)
QObject* NetAotMethodInvocation::_build(QQmlEngine *engine, QJSEngine *scriptEngine)
{
Q_UNUSED(engine)
Q_UNUSED(scriptEngine)
return new NetAotMethodInvocation();
}
void NetAotMethodInvocation::method1()
{
}
void NetAotMethodInvocation::method2()
{
}

View file

@ -5,11 +5,14 @@ class QQmlEngine;
class QJSEngine;
class NetAotMethodInvocation : public NetObject
{
Q_OBJECT
public:
NetAotMethodInvocation();
NetAotMethodInvocation(bool);
static int registerQml(const char* uri, int versionMajor, int versionMinor, const char* qmlName);
static int registerQmlSingleton(const char* uri, int versionMajor, int versionMinor, const char* typeName);
static QObject *build(QQmlEngine *engine, QJSEngine *scriptEngine);
static int _registerQml(const char* uri, int versionMajor, int versionMinor, const char* qmlName);
static int _registerQmlSingleton(const char* uri, int versionMajor, int versionMinor, const char* typeName);
static QObject* _build(QQmlEngine* engine, QJSEngine* scriptEngine);
Q_INVOKABLE void method1();
Q_INVOKABLE void method2();
};
#endif // NETAOTMETHODINVOCATION_H

View file

@ -8,15 +8,15 @@ NetObject::NetObject() : QObject()
NetObject::NetObject(bool) : QObject()
{
}
int NetObject::registerQml(const char* uri, int versionMajor, int versionMinor, const char* qmlName)
int NetObject::_registerQml(const char* uri, int versionMajor, int versionMinor, const char* qmlName)
{
return qmlRegisterType<NetObject>(uri, versionMajor, versionMinor, qmlName);
}
int NetObject::registerQmlSingleton(const char* uri, int versionMajor, int versionMinor, const char* typeName)
int NetObject::_registerQmlSingleton(const char* uri, int versionMajor, int versionMinor, const char* typeName)
{
return qmlRegisterSingletonType<NetObject>(uri, versionMajor, versionMinor, typeName, NetObject::build);
return qmlRegisterSingletonType<NetObject>(uri, versionMajor, versionMinor, typeName, NetObject::_build);
}
QObject* NetObject::build(QQmlEngine *engine, QJSEngine *scriptEngine)
QObject* NetObject::_build(QQmlEngine *engine, QJSEngine *scriptEngine)
{
Q_UNUSED(engine)
Q_UNUSED(scriptEngine)

View file

@ -6,12 +6,13 @@ class QQmlEngine;
class QJSEngine;
class NetObject: public QObject
{
Q_OBJECT
public:
NetObject();
NetObject(bool);
static int registerQml(const char* uri, int versionMajor, int versionMinor, const char* qmlName);
static int registerQmlSingleton(const char* uri, int versionMajor, int versionMinor, const char* typeName);
static QObject *build(QQmlEngine *engine, QJSEngine *scriptEngine);
static int _registerQml(const char* uri, int versionMajor, int versionMinor, const char* qmlName);
static int _registerQmlSingleton(const char* uri, int versionMajor, int versionMinor, const char* typeName);
static QObject* _build(QQmlEngine* engine, QJSEngine* scriptEngine);
protected:
QSharedPointer<NetReference> _netReference;
};

View file

@ -14,8 +14,8 @@ Q_DECL_EXPORT void initAotTypes()
initAotTypesMutex->unlock();
return;
}
NetTypeManager::registerAotObject(1, &NetAotMethodInvocation::staticMetaObject, NetAotMethodInvocation::registerQml, NetAotMethodInvocation::registerQmlSingleton);
NetTypeManager::registerAotObject(2, &NetObject::staticMetaObject, NetObject::registerQml, NetObject::registerQmlSingleton);
NetTypeManager::registerAotObject(1, &NetAotMethodInvocation::staticMetaObject, NetAotMethodInvocation::_registerQml, NetAotMethodInvocation::_registerQmlSingleton);
NetTypeManager::registerAotObject(2, &NetObject::staticMetaObject, NetObject::_registerQml, NetObject::_registerQmlSingleton);
initAotTypesDone = true;
initAotTypesMutex->unlock();
}