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
|
||||
testQObject.qml
|
||||
testQAbstractItemModel.qml
|
||||
testQDeclarative.qml
|
||||
)
|
||||
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 14)
|
||||
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
|
||||
{
|
||||
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());
|
||||
}
|
||||
|
||||
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()
|
||||
{
|
||||
return m_vptr.get();
|
||||
}
|
||||
|
||||
void MockQObject::swapData(VoidPointer &data)
|
||||
{
|
||||
std::swap(m_vptr, data);
|
||||
}
|
||||
|
||||
std::string MockQObject::name() const
|
||||
{
|
||||
return m_name;
|
||||
|
@ -6,9 +6,13 @@ class MockQObject
|
||||
{
|
||||
public:
|
||||
MockQObject();
|
||||
virtual ~MockQObject();
|
||||
|
||||
static ::DosQMetaObject *staticMetaObject();
|
||||
virtual ::DosQMetaObject *metaObject();
|
||||
|
||||
::DosQMetaObject *metaObject();
|
||||
::DosQObject *data();
|
||||
void swapData(VoidPointer &data);
|
||||
|
||||
std::string objectName() const;
|
||||
void setObjectName(const std::string& objectName);
|
||||
|
@ -3,5 +3,6 @@
|
||||
<file>main.qml</file>
|
||||
<file>testQAbstractItemModel.qml</file>
|
||||
<file>testQObject.qml</file>
|
||||
<file>testQDeclarative.qml</file>
|
||||
</qresource>
|
||||
</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());
|
||||
}
|
||||
|
||||
|
||||
void testRowCount() {
|
||||
QObject* testCase = engine->rootObjects().first();
|
||||
QVERIFY(testCase);
|
||||
@ -378,6 +377,55 @@ private:
|
||||
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[])
|
||||
{
|
||||
using namespace DOS;
|
||||
@ -389,6 +437,7 @@ int main(int argc, char *argv[])
|
||||
success &= ExecuteGuiTest<TestQQmlContext>(argc, argv);
|
||||
success &= ExecuteGuiTest<TestQObject>(argc, argv);
|
||||
success &= ExecuteGuiTest<TestQAbstractListModel>(argc, argv);
|
||||
success &= ExecuteGuiTest<TestQDeclarativeIntegration>(argc, argv);
|
||||
|
||||
return success ? 0 : 1;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user