mirror of
https://github.com/status-im/dotherside.git
synced 2025-02-12 04:26:43 +00:00
Added qmlRegisterType test
This commit is contained in:
parent
4660a36e8d
commit
81cc90cf3a
@ -20,6 +20,7 @@ add_executable(${PROJECT_NAME} Resources.qrc
|
|||||||
main.qml
|
main.qml
|
||||||
testQObject.qml
|
testQObject.qml
|
||||||
testQAbstractItemModel.qml
|
testQAbstractItemModel.qml
|
||||||
|
testQDeclarative.qml
|
||||||
)
|
)
|
||||||
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 14)
|
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 14)
|
||||||
target_link_libraries(${PROJECT_NAME} DOtherSideStatic Qt5::Quick Qt5::Widgets Qt5::Test Qt5::Core)
|
target_link_libraries(${PROJECT_NAME} DOtherSideStatic Qt5::Quick Qt5::Widgets Qt5::Test Qt5::Core)
|
||||||
|
@ -61,6 +61,24 @@ namespace {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
MockQObject::MockQObject()
|
||||||
|
: m_vptr(dos_qobject_create(this, metaObject(), &onSlotCalled), &dos_qobject_delete)
|
||||||
|
{}
|
||||||
|
|
||||||
|
MockQObject::~MockQObject() = default;
|
||||||
|
|
||||||
|
DosQMetaObject *MockQObject::staticMetaObject()
|
||||||
|
{
|
||||||
|
static VoidPointer result = initializeMetaObject();
|
||||||
|
return result.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
::DosQMetaObject *MockQObject::metaObject()
|
||||||
|
{
|
||||||
|
return staticMetaObject();
|
||||||
|
}
|
||||||
|
|
||||||
std::string MockQObject::objectName() const
|
std::string MockQObject::objectName() const
|
||||||
{
|
{
|
||||||
CharPointer result (dos_qobject_objectName(m_vptr.get()), &dos_chararray_delete);
|
CharPointer result (dos_qobject_objectName(m_vptr.get()), &dos_chararray_delete);
|
||||||
@ -72,21 +90,16 @@ void MockQObject::setObjectName(const string &objectName)
|
|||||||
dos_qobject_setObjectName(m_vptr.get(), objectName.c_str());
|
dos_qobject_setObjectName(m_vptr.get(), objectName.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
MockQObject::MockQObject()
|
|
||||||
: m_vptr(dos_qobject_create(this, metaObject(), &onSlotCalled), &dos_qobject_delete)
|
|
||||||
{}
|
|
||||||
|
|
||||||
::DosQMetaObject *MockQObject::metaObject()
|
|
||||||
{
|
|
||||||
static VoidPointer result = initializeMetaObject();
|
|
||||||
return result.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
::DosQObject *MockQObject::data()
|
::DosQObject *MockQObject::data()
|
||||||
{
|
{
|
||||||
return m_vptr.get();
|
return m_vptr.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MockQObject::swapData(VoidPointer &data)
|
||||||
|
{
|
||||||
|
std::swap(m_vptr, data);
|
||||||
|
}
|
||||||
|
|
||||||
std::string MockQObject::name() const
|
std::string MockQObject::name() const
|
||||||
{
|
{
|
||||||
return m_name;
|
return m_name;
|
||||||
|
@ -6,9 +6,13 @@ class MockQObject
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
MockQObject();
|
MockQObject();
|
||||||
|
virtual ~MockQObject();
|
||||||
|
|
||||||
|
static ::DosQMetaObject *staticMetaObject();
|
||||||
|
virtual ::DosQMetaObject *metaObject();
|
||||||
|
|
||||||
::DosQMetaObject *metaObject();
|
|
||||||
::DosQObject *data();
|
::DosQObject *data();
|
||||||
|
void swapData(VoidPointer &data);
|
||||||
|
|
||||||
std::string objectName() const;
|
std::string objectName() const;
|
||||||
void setObjectName(const std::string& objectName);
|
void setObjectName(const std::string& objectName);
|
||||||
|
@ -3,5 +3,6 @@
|
|||||||
<file>main.qml</file>
|
<file>main.qml</file>
|
||||||
<file>testQAbstractItemModel.qml</file>
|
<file>testQAbstractItemModel.qml</file>
|
||||||
<file>testQObject.qml</file>
|
<file>testQObject.qml</file>
|
||||||
|
<file>testQDeclarative.qml</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
36
test/testQDeclarative.qml
Normal file
36
test/testQDeclarative.qml
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
import QtQuick 2.3
|
||||||
|
import MockModule 1.0
|
||||||
|
|
||||||
|
Item {
|
||||||
|
id: testCase
|
||||||
|
objectName: "testCase"
|
||||||
|
|
||||||
|
Component {
|
||||||
|
id: mockQObjectComponent
|
||||||
|
|
||||||
|
MockQObject {}
|
||||||
|
}
|
||||||
|
|
||||||
|
function testQmlRegisterType() {
|
||||||
|
var testObject = mockQObjectComponent.createObject(testCase, {"name":"foo"})
|
||||||
|
|
||||||
|
if (!testObject)
|
||||||
|
return false
|
||||||
|
|
||||||
|
if (testObject.name !== "foo") {
|
||||||
|
testObject.destroy()
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
var nameChangedEmitted = false
|
||||||
|
testObject.nameChanged.connect(function(name){nameChangedEmitted = name === "bar"});
|
||||||
|
testObject.name = "bar"
|
||||||
|
if (!nameChangedEmitted || !testObject.name !== "bar") {
|
||||||
|
testObject.destroy()
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
testObject.destroy()
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
@ -334,7 +334,6 @@ private slots:
|
|||||||
QVERIFY(result.toBool());
|
QVERIFY(result.toBool());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void testRowCount() {
|
void testRowCount() {
|
||||||
QObject* testCase = engine->rootObjects().first();
|
QObject* testCase = engine->rootObjects().first();
|
||||||
QVERIFY(testCase);
|
QVERIFY(testCase);
|
||||||
@ -378,6 +377,55 @@ private:
|
|||||||
unique_ptr<QQmlApplicationEngine> engine;
|
unique_ptr<QQmlApplicationEngine> engine;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Test QQmlContext
|
||||||
|
*/
|
||||||
|
class TestQDeclarativeIntegration : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void testQmlRegisterType() {
|
||||||
|
::QmlRegisterType registerType;
|
||||||
|
registerType.major = 1;
|
||||||
|
registerType.minor = 0;
|
||||||
|
registerType.uri = "MockModule";
|
||||||
|
registerType.qml = "MockQObject";
|
||||||
|
registerType.staticMetaObject = MockQObject::staticMetaObject();
|
||||||
|
registerType.createDObject = &mockQObjectCreator;
|
||||||
|
registerType.deleteDObject = &mockQObjectDeleter;
|
||||||
|
dos_qdeclarative_qmlregistertype(®isterType);
|
||||||
|
|
||||||
|
auto engine = std::make_unique<QQmlApplicationEngine>();
|
||||||
|
engine->load(QUrl("qrc:///testQDeclarative.qml"));
|
||||||
|
|
||||||
|
QObject* testCase = engine->rootObjects().first();
|
||||||
|
QVERIFY(testCase);
|
||||||
|
QVariant result;
|
||||||
|
QVERIFY(QMetaObject::invokeMethod(testCase, "testQmlRegisterType", Q_RETURN_ARG(QVariant, result)));
|
||||||
|
QVERIFY(result.type() == QVariant::Bool);
|
||||||
|
QVERIFY(result.toBool());
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
static void mockQObjectCreator(int typeId, void *wrapper, void **mockQObjectPtr, void **dosQObject)
|
||||||
|
{
|
||||||
|
VoidPointer data(wrapper, &emptyVoidDeleter);
|
||||||
|
auto mockQObject = new MockQObject();
|
||||||
|
mockQObject->swapData(data);
|
||||||
|
*dosQObject = data.release();
|
||||||
|
*mockQObjectPtr = mockQObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void mockQObjectDeleter(int typeId, void *mockQObject)
|
||||||
|
{
|
||||||
|
auto temp = static_cast<MockQObject*>(mockQObject);
|
||||||
|
delete temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void emptyVoidDeleter(void*) {}
|
||||||
|
};
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
using namespace DOS;
|
using namespace DOS;
|
||||||
@ -389,6 +437,7 @@ int main(int argc, char *argv[])
|
|||||||
success &= ExecuteGuiTest<TestQQmlContext>(argc, argv);
|
success &= ExecuteGuiTest<TestQQmlContext>(argc, argv);
|
||||||
success &= ExecuteGuiTest<TestQObject>(argc, argv);
|
success &= ExecuteGuiTest<TestQObject>(argc, argv);
|
||||||
success &= ExecuteGuiTest<TestQAbstractListModel>(argc, argv);
|
success &= ExecuteGuiTest<TestQAbstractListModel>(argc, argv);
|
||||||
|
success &= ExecuteGuiTest<TestQDeclarativeIntegration>(argc, argv);
|
||||||
|
|
||||||
return success ? 0 : 1;
|
return success ? 0 : 1;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user