mirror of
https://github.com/status-im/dotherside.git
synced 2025-02-12 04:26:43 +00:00
Added MockQAbstractListModel
This commit is contained in:
parent
22ea93a0cf
commit
b198de0fd6
@ -29,10 +29,10 @@ typedef void DosQObject;
|
||||
typedef void (DOS_CALL *Function)(void *);
|
||||
|
||||
/// Called when a slot should be executed
|
||||
/// @param self the pointer to the QObject in the binded language
|
||||
/// @param slotName a reference to QVariant. It should not be deleted.
|
||||
/// @param argc the number of arguments
|
||||
/// @param argv an array of QVariant pointers. They should not be deleted
|
||||
/// @param self The pointer to the QObject in the binded language
|
||||
/// @param slotName The slotName as DosQVariant. It should not be deleted
|
||||
/// @param argc The number of arguments
|
||||
/// @param argv An array of DosQVariant pointers. They should not be deleted
|
||||
typedef void (DOS_CALL *DObjectCallback)(void *self, DosQVariant *slotName, int argc, DosQVariant **argv);
|
||||
|
||||
typedef void (DOS_CALL *RowCountCallback) (DosQAbstractListModel *model, const DosQModelIndex *index, int *result);
|
||||
|
@ -12,6 +12,14 @@ find_package(Qt5Test REQUIRED)
|
||||
find_package(Qt5Quick REQUIRED)
|
||||
find_package(Qt5QuickTest REQUIRED)
|
||||
|
||||
add_executable(${PROJECT_NAME} Resources.qrc test_dotherside.cpp main.qml testQObject.qml testQAbstractItemModel.qml)
|
||||
add_executable(${PROJECT_NAME} Resources.qrc
|
||||
test_dotherside.cpp
|
||||
MockQObject.cpp
|
||||
MockQAbstractListModel.cpp
|
||||
Global.h
|
||||
main.qml
|
||||
testQObject.qml
|
||||
testQAbstractItemModel.qml
|
||||
)
|
||||
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 14)
|
||||
target_link_libraries(${PROJECT_NAME} DOtherSideStatic Qt5::Quick Qt5::Widgets Qt5::Test Qt5::Core)
|
||||
|
15
test/Global.h
Normal file
15
test/Global.h
Normal file
@ -0,0 +1,15 @@
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <memory>
|
||||
|
||||
#include <DOtherSide/DOtherSide.h>
|
||||
|
||||
extern "C" {
|
||||
typedef void DOS_CALL(*VoidDeleter)(void*);
|
||||
typedef void DOS_CALL(*CharDeleter)(char*);
|
||||
}
|
||||
|
||||
using VoidPointer = std::unique_ptr<void, VoidDeleter>;
|
||||
using CharPointer = std::unique_ptr<char, CharDeleter>;
|
||||
|
96
test/MockQAbstractListModel.cpp
Normal file
96
test/MockQAbstractListModel.cpp
Normal file
@ -0,0 +1,96 @@
|
||||
#include "MockQAbstractListModel.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
namespace
|
||||
{
|
||||
std::string toStringFromQVariant(DosQVariant* variant) {
|
||||
CharPointer charArray(dos_qvariant_toString(variant), &dos_chararray_delete);
|
||||
return std::string(charArray.get());
|
||||
}
|
||||
|
||||
VoidPointer initializeMetaObject()
|
||||
{
|
||||
void* superClassMetaObject = dos_qabstractlistmodel_qmetaobject();
|
||||
|
||||
// Signals
|
||||
::SignalDefinitions signalDefinitions;
|
||||
signalDefinitions.count = 0;
|
||||
signalDefinitions.definitions = nullptr;
|
||||
|
||||
// Slots
|
||||
::SlotDefinitions slotDefinitions;
|
||||
slotDefinitions.count = 0;
|
||||
slotDefinitions.definitions = nullptr;
|
||||
|
||||
// Properties
|
||||
::PropertyDefinition propertyDefinitionArray[1];
|
||||
|
||||
::PropertyDefinitions propertyDefinitions;
|
||||
propertyDefinitions.count = 0;
|
||||
propertyDefinitions.definitions = nullptr;
|
||||
|
||||
return VoidPointer(dos_qmetaobject_create(superClassMetaObject, "MockQObject", &signalDefinitions, &slotDefinitions, &propertyDefinitions),
|
||||
&dos_qmetaobject_delete);
|
||||
}
|
||||
}
|
||||
|
||||
MockQAbstractListModel::MockQAbstractListModel()
|
||||
: m_vptr(dos_qabstractlistmodel_create(this, metaObject(), &onSlotCalled, &onRowCountCalled,
|
||||
&onColumnCountCalled, &onDataCalled, &onSetDataCalled,
|
||||
&onRoleNamesCalled, &onFlagsCalled, &onHeaderDataCalled), &dos_qobject_delete)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
DosQMetaObject *MockQAbstractListModel::metaObject()
|
||||
{
|
||||
static VoidPointer result = initializeMetaObject();
|
||||
return result.get();
|
||||
}
|
||||
|
||||
DosQObject *MockQAbstractListModel::data()
|
||||
{
|
||||
return m_vptr.get();
|
||||
}
|
||||
|
||||
void MockQAbstractListModel::onSlotCalled(void *selfVPtr, DosQVariant *dosSlotNameVariant, int dosSlotArgc, DosQVariant **dosSlotArgv)
|
||||
{
|
||||
auto self = static_cast<MockQAbstractListModel*>(selfVPtr);
|
||||
string slotName = toStringFromQVariant(dosSlotNameVariant);
|
||||
}
|
||||
|
||||
void MockQAbstractListModel::onRowCountCalled(DosQAbstractListModel *model, const DosQModelIndex *index, int *result)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void MockQAbstractListModel::onColumnCountCalled(DosQAbstractListModel *model, const DosQModelIndex *index, int *result)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void MockQAbstractListModel::onDataCalled(DosQAbstractListModel *model, const DosQModelIndex *index, int role, DosQVariant *result)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void MockQAbstractListModel::onSetDataCalled(DosQAbstractListModel *model, const DosQModelIndex *index, const DosQVariant *value, int role, bool *result)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void MockQAbstractListModel::onRoleNamesCalled(DosQAbstractListModel *model, DosQHashIntQByteArray *result)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void MockQAbstractListModel::onFlagsCalled(DosQAbstractListModel *model, const DosQModelIndex *index, int *result)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void MockQAbstractListModel::onHeaderDataCalled(DosQAbstractListModel *model, int section, int orientation, int role, DosQVariant *result)
|
||||
{
|
||||
|
||||
}
|
24
test/MockQAbstractListModel.h
Normal file
24
test/MockQAbstractListModel.h
Normal file
@ -0,0 +1,24 @@
|
||||
#pragma once
|
||||
|
||||
#include <Global.h>
|
||||
|
||||
class MockQAbstractListModel
|
||||
{
|
||||
public:
|
||||
MockQAbstractListModel();
|
||||
|
||||
DosQMetaObject *metaObject();
|
||||
DosQObject *data();
|
||||
|
||||
private:
|
||||
static void onSlotCalled(void *selfVPtr, DosQVariant *dosSlotNameVariant, int dosSlotArgc, DosQVariant **dosSlotArgv);
|
||||
static void onRowCountCalled(DosQAbstractListModel *model, const DosQModelIndex *index, int *result);
|
||||
static void onColumnCountCalled(DosQAbstractListModel *model, const DosQModelIndex *index, int *result);
|
||||
static void onDataCalled(DosQAbstractListModel *model, const DosQModelIndex *index, int role, DosQVariant *result);
|
||||
static void onSetDataCalled(DosQAbstractListModel *model, const DosQModelIndex *index, const DosQVariant *value, int role, bool *result);
|
||||
static void onRoleNamesCalled(DosQAbstractListModel *model, DosQHashIntQByteArray *result);
|
||||
static void onFlagsCalled(DosQAbstractListModel *model, const DosQModelIndex *index, int *result);
|
||||
static void onHeaderDataCalled(DosQAbstractListModel *model, int section, int orientation, int role, DosQVariant *result);
|
||||
|
||||
VoidPointer m_vptr;
|
||||
};
|
126
test/MockQObject.cpp
Normal file
126
test/MockQObject.cpp
Normal file
@ -0,0 +1,126 @@
|
||||
#include <MockQObject.h>
|
||||
#include <Global.h>
|
||||
#include <QMetaType>
|
||||
|
||||
using namespace std;
|
||||
|
||||
namespace {
|
||||
std::string toStringFromQVariant(DosQVariant* variant) {
|
||||
CharPointer charArray(dos_qvariant_toString(variant), &dos_chararray_delete);
|
||||
return std::string(charArray.get());
|
||||
}
|
||||
|
||||
VoidPointer initializeMetaObject()
|
||||
{
|
||||
void* superClassMetaObject = dos_qobject_qmetaobject();
|
||||
// Signals
|
||||
::SignalDefinition signalDefinitionArray[1];
|
||||
signalDefinitionArray[0].name = "nameChanged";
|
||||
signalDefinitionArray[0].parametersCount = 1;
|
||||
int nameChanged[1];
|
||||
nameChanged[0] = QMetaType::QString;
|
||||
signalDefinitionArray[0].parametersMetaTypes = nameChanged;
|
||||
|
||||
::SignalDefinitions signalDefinitions;
|
||||
signalDefinitions.count = 1;
|
||||
signalDefinitions.definitions = signalDefinitionArray;
|
||||
|
||||
// Slots
|
||||
::SlotDefinition slotDefinitionArray[2];
|
||||
|
||||
slotDefinitionArray[0].name = "name";
|
||||
slotDefinitionArray[0].returnMetaType = QMetaType::QString;
|
||||
slotDefinitionArray[0].parametersCount = 0;
|
||||
slotDefinitionArray[0].parametersMetaTypes = nullptr;
|
||||
|
||||
slotDefinitionArray[1].name = "setName";
|
||||
slotDefinitionArray[1].returnMetaType = QMetaType::Void;
|
||||
int setNameParameters[1];
|
||||
setNameParameters[0] = QMetaType::QString;
|
||||
slotDefinitionArray[1].parametersCount = 1;
|
||||
slotDefinitionArray[1].parametersMetaTypes = setNameParameters;
|
||||
|
||||
::SlotDefinitions slotDefinitions;
|
||||
slotDefinitions.count = 2;
|
||||
slotDefinitions.definitions = slotDefinitionArray;
|
||||
|
||||
// Properties
|
||||
::PropertyDefinition propertyDefinitionArray[1];
|
||||
propertyDefinitionArray[0].name = "name";
|
||||
propertyDefinitionArray[0].notifySignal = "nameChanged";
|
||||
propertyDefinitionArray[0].propertyMetaType = QMetaType::QString;
|
||||
propertyDefinitionArray[0].readSlot = "name";
|
||||
propertyDefinitionArray[0].writeSlot = "setName";
|
||||
|
||||
::PropertyDefinitions propertyDefinitions;
|
||||
propertyDefinitions.count = 1;
|
||||
propertyDefinitions.definitions = propertyDefinitionArray;
|
||||
|
||||
return VoidPointer(dos_qmetaobject_create(superClassMetaObject, "MockQObject", &signalDefinitions, &slotDefinitions, &propertyDefinitions),
|
||||
&dos_qmetaobject_delete);
|
||||
}
|
||||
}
|
||||
|
||||
std::string MockQObject::objectName() const
|
||||
{
|
||||
CharPointer result (dos_qobject_objectName(m_vptr.get()), &dos_chararray_delete);
|
||||
return string(result.get());
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
std::string MockQObject::name() const
|
||||
{
|
||||
return m_name;
|
||||
}
|
||||
|
||||
void MockQObject::setName(const string &name)
|
||||
{
|
||||
if (name == m_name)
|
||||
return;
|
||||
m_name = name;
|
||||
nameChanged(name);
|
||||
}
|
||||
|
||||
void MockQObject::nameChanged(const string &name)
|
||||
{
|
||||
int argc = 1;
|
||||
DosQVariant* argv[1];
|
||||
argv[0] = dos_qvariant_create_string(name.c_str());
|
||||
dos_qobject_signal_emit(m_vptr.get(), "nameChanged", argc, argv);
|
||||
dos_qvariant_delete(argv[0]);
|
||||
}
|
||||
|
||||
void MockQObject::onSlotCalled(void *selfVPtr, DosQVariant *dosSlotNameVariant, int dosSlotArgc, DosQVariant **dosSlotArgv) {
|
||||
MockQObject* self = static_cast<MockQObject*>(selfVPtr);
|
||||
|
||||
string slotName = toStringFromQVariant(dosSlotNameVariant);
|
||||
if (slotName == "name") {
|
||||
VoidPointer name(dos_qvariant_create_string(self->name().c_str()), &dos_qvariant_delete);
|
||||
dos_qvariant_assign(dosSlotArgv[0], name.get());
|
||||
return;
|
||||
}
|
||||
|
||||
if (slotName == "setName") {
|
||||
self->setName(toStringFromQVariant(dosSlotArgv[1]));
|
||||
return;
|
||||
}
|
||||
}
|
25
test/MockQObject.h
Normal file
25
test/MockQObject.h
Normal file
@ -0,0 +1,25 @@
|
||||
#pragma once
|
||||
|
||||
#include <Global.h>
|
||||
|
||||
class MockQObject
|
||||
{
|
||||
public:
|
||||
MockQObject();
|
||||
|
||||
::DosQMetaObject *metaObject();
|
||||
::DosQObject *data();
|
||||
|
||||
std::string objectName() const;
|
||||
void setObjectName(const std::string& objectName);
|
||||
|
||||
std::string name() const;
|
||||
void setName(const std::string& name);
|
||||
void nameChanged(const std::string& name);
|
||||
|
||||
private:
|
||||
static void onSlotCalled(void *selfVPtr, DosQVariant *dosSlotNameVariant, int dosSlotArgc, DosQVariant **dosSlotArgv);
|
||||
|
||||
VoidPointer m_vptr;
|
||||
std::string m_name;
|
||||
};
|
@ -15,11 +15,13 @@
|
||||
#include <QtQuickTest/QtQuickTest>
|
||||
|
||||
// DOtherSide
|
||||
#include "DOtherSide/DOtherSide.h"
|
||||
#include "DOtherSide/DosQObject.h"
|
||||
#include "DOtherSide/DosQMetaObject.h"
|
||||
#include "DOtherSide/DosQObject.h"
|
||||
#include "DOtherSide/DosQAbstractListModel.h"
|
||||
#include <DOtherSide/DOtherSide.h>
|
||||
#include <DOtherSide/DosQObject.h>
|
||||
#include <DOtherSide/DosQMetaObject.h>
|
||||
#include <DOtherSide/DosQObject.h>
|
||||
#include <DOtherSide/DosQAbstractListModel.h>
|
||||
|
||||
#include "MockQObject.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace DOS;
|
||||
@ -216,138 +218,6 @@ private:
|
||||
void *m_context;
|
||||
};
|
||||
|
||||
extern "C" {
|
||||
typedef void DOS_CALL(*VoidDeleter)(void*);
|
||||
typedef void DOS_CALL(*CharDeleter)(char*);
|
||||
}
|
||||
using VoidPointer = unique_ptr<void, VoidDeleter>;
|
||||
using CharPointer = unique_ptr<char, CharDeleter>;
|
||||
|
||||
|
||||
string toStringFromQVariant(DosQVariant* variant) {
|
||||
CharPointer charArray(dos_qvariant_toString(variant), &dos_chararray_delete);
|
||||
return string(charArray.get());
|
||||
}
|
||||
|
||||
class MockQObject
|
||||
{
|
||||
|
||||
public:
|
||||
MockQObject()
|
||||
: m_vptr(dos_qobject_create(this, metaObject(), &onSlotCalled), &dos_qobject_delete)
|
||||
{}
|
||||
|
||||
std::string objectName() const {
|
||||
CharPointer result (dos_qobject_objectName(m_vptr.get()), &dos_chararray_delete);
|
||||
return string(result.get());
|
||||
}
|
||||
|
||||
void setObjectName(const string& objectName) {
|
||||
dos_qobject_setObjectName(m_vptr.get(), objectName.c_str());
|
||||
}
|
||||
|
||||
::DosQMetaObject *metaObject() {
|
||||
static VoidPointer result = initializeMetaObject();
|
||||
return result.get();
|
||||
}
|
||||
|
||||
::DosQObject *data() {
|
||||
return m_vptr.get();
|
||||
}
|
||||
|
||||
std::string name() const
|
||||
{
|
||||
return m_name;
|
||||
}
|
||||
|
||||
void setName(const string& name)
|
||||
{
|
||||
if (name == m_name)
|
||||
return;
|
||||
m_name = name;
|
||||
|
||||
}
|
||||
|
||||
void nameChanged(const string& name)
|
||||
{
|
||||
int argc = 1;
|
||||
DosQVariant* argv[1];
|
||||
argv[0] = dos_qvariant_create_string(name.c_str());
|
||||
dos_qobject_signal_emit(m_vptr.get(), "nameChanged", argc, argv);
|
||||
dos_qvariant_delete(argv[0]);
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
static void onSlotCalled(void *selfVPtr, DosQVariant *dosSlotNameVariant, int dosSlotArgc, DosQVariant **dosSlotArgv) {
|
||||
MockQObject* self = static_cast<MockQObject*>(selfVPtr);
|
||||
|
||||
string slotName = toStringFromQVariant(dosSlotNameVariant);
|
||||
if (slotName == "name") {
|
||||
VoidPointer name(dos_qvariant_create_string(self->name().c_str()), &dos_qvariant_delete);
|
||||
dos_qvariant_assign(dosSlotArgv[0], name.get());
|
||||
return;
|
||||
}
|
||||
|
||||
if (slotName == "setName") {
|
||||
self->setName(toStringFromQVariant(dosSlotArgv[1]));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static VoidPointer initializeMetaObject() {
|
||||
void* superClassMetaObject = dos_qobject_qmetaobject();
|
||||
// Signals
|
||||
::SignalDefinition signalDefinitionArray[1];
|
||||
signalDefinitionArray[0].name = "nameChanged";
|
||||
signalDefinitionArray[0].parametersCount = 1;
|
||||
int nameChanged[1];
|
||||
nameChanged[0] = QMetaType::QString;
|
||||
signalDefinitionArray[0].parametersMetaTypes = nameChanged;
|
||||
|
||||
::SignalDefinitions signalDefinitions;
|
||||
signalDefinitions.count = 1;
|
||||
signalDefinitions.definitions = signalDefinitionArray;
|
||||
|
||||
// Slots
|
||||
::SlotDefinition slotDefinitionArray[2];
|
||||
|
||||
slotDefinitionArray[0].name = "name";
|
||||
slotDefinitionArray[0].returnMetaType = QMetaType::QString;
|
||||
slotDefinitionArray[0].parametersCount = 0;
|
||||
slotDefinitionArray[0].parametersMetaTypes = nullptr;
|
||||
|
||||
slotDefinitionArray[1].name = "setName";
|
||||
slotDefinitionArray[1].returnMetaType = QMetaType::Void;
|
||||
int setNameParameters[1];
|
||||
setNameParameters[0] = QMetaType::QString;
|
||||
slotDefinitionArray[1].parametersCount = 1;
|
||||
slotDefinitionArray[1].parametersMetaTypes = setNameParameters;
|
||||
|
||||
::SlotDefinitions slotDefinitions;
|
||||
slotDefinitions.count = 2;
|
||||
slotDefinitions.definitions = slotDefinitionArray;
|
||||
|
||||
// Properties
|
||||
::PropertyDefinition propertyDefinitionArray[1];
|
||||
propertyDefinitionArray[0].name = "name";
|
||||
propertyDefinitionArray[0].notifySignal = "nameChanged";
|
||||
propertyDefinitionArray[0].propertyMetaType = QMetaType::QString;
|
||||
propertyDefinitionArray[0].readSlot = "name";
|
||||
propertyDefinitionArray[0].writeSlot = "setName";
|
||||
|
||||
::PropertyDefinitions propertyDefinitions;
|
||||
propertyDefinitions.count = 1;
|
||||
propertyDefinitions.definitions = propertyDefinitionArray;
|
||||
|
||||
return VoidPointer(dos_qmetaobject_create(superClassMetaObject, "MockQObject", &signalDefinitions, &slotDefinitions, &propertyDefinitions),
|
||||
&dos_qmetaobject_delete);
|
||||
}
|
||||
|
||||
VoidPointer m_vptr;
|
||||
std::string m_name;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Test QQmlContext
|
||||
|
Loading…
x
Reference in New Issue
Block a user