Work on MockQAbstractListModel

This commit is contained in:
Filippo Cucchetto 2016-06-19 18:17:48 +02:00
parent f2ef4be82d
commit 4660a36e8d
5 changed files with 81 additions and 30 deletions

View File

@ -79,15 +79,15 @@ DOS_API void DOS_CALL dos_qvariant_setFloat (DosQVariant *vptr, float value);
DOS_API void DOS_CALL dos_qvariant_setDouble (DosQVariant *vptr, double value);
DOS_API void DOS_CALL dos_qvariant_setString (DosQVariant *vptr, const char *value);
DOS_API void DOS_CALL dos_qvariant_setQObject(DosQVariant *vptr, DosQObject *value);
DOS_API bool DOS_CALL dos_qvariant_isnull (DosQVariant *vptr);
DOS_API bool DOS_CALL dos_qvariant_isnull (const DosQVariant *vptr);
DOS_API void DOS_CALL dos_qvariant_delete (DosQVariant *vptr);
DOS_API void DOS_CALL dos_qvariant_assign (DosQVariant *vptr, DosQVariant *other);
DOS_API int DOS_CALL dos_qvariant_toInt (DosQVariant *vptr);
DOS_API bool DOS_CALL dos_qvariant_toBool (DosQVariant *vptr);
DOS_API char *DOS_CALL dos_qvariant_toString (DosQVariant *vptr);
DOS_API float DOS_CALL dos_qvariant_toFloat (DosQVariant *vptr);
DOS_API double DOS_CALL dos_qvariant_toDouble (DosQVariant *vptr);
DOS_API DosQObject *DOS_CALL dos_qvariant_toQObject(DosQVariant *vptr);
DOS_API void DOS_CALL dos_qvariant_assign (DosQVariant *vptr, const DosQVariant *other);
DOS_API int DOS_CALL dos_qvariant_toInt (const DosQVariant *vptr);
DOS_API bool DOS_CALL dos_qvariant_toBool (const DosQVariant *vptr);
DOS_API char *DOS_CALL dos_qvariant_toString (const DosQVariant *vptr);
DOS_API float DOS_CALL dos_qvariant_toFloat (const DosQVariant *vptr);
DOS_API double DOS_CALL dos_qvariant_toDouble (const DosQVariant *vptr);
DOS_API DosQObject *DOS_CALL dos_qvariant_toQObject(const DosQVariant *vptr);
// QMetaObject
DOS_API DosQMetaObject *DOS_CALL dos_qmetaobject_create(DosQMetaObject *superClassMetaObject,
@ -115,7 +115,17 @@ DOS_API void DOS_CALL dos_qabstractlistmodel_beginRemoveRows(DosQAbstractListMod
DOS_API void DOS_CALL dos_qabstractlistmodel_endRemoveRows (DosQAbstractListModel *vptr);
DOS_API void DOS_CALL dos_qabstractlistmodel_beginResetModel(DosQAbstractListModel *vptr);
DOS_API void DOS_CALL dos_qabstractlistmodel_endResetModel (DosQAbstractListModel *vptr);
DOS_API void DOS_CALL dos_qabstractlistmodel_dataChanged (DosQAbstractListModel *vptr, DosQModelIndex *topLeft, DosQModelIndex *bottomRight, int *rolesPtr, int rolesLength);
/// Emit the dataChanged signal
/// @param vptr The DosQAbstractListModel pointer
/// @param topLeft The topLeft DosQModelIndex. The index is owned by the caller thus it will not be deleted
/// @param bottomRight The bottomright DosQModelIndex. The index is owned by the caller thus it will not be deleted
/// @param rolesPtr The roles array. The pointer is owned by the caller and thus it will not be deleted
/// @param rolesLength The roles array length
DOS_API void DOS_CALL dos_qabstractlistmodel_dataChanged(DosQAbstractListModel *vptr,
const DosQModelIndex *topLeft,
const DosQModelIndex *bottomRight,
int *rolesPtr, int rolesLength);
// QObject
DOS_API DosQMetaObject *DOS_CALL dos_qobject_qmetaobject();

View File

@ -239,9 +239,9 @@ void dos_qqmlcontext_setcontextproperty(::DosQQmlContext *vptr, const char *name
return new QVariant(value);
}
bool dos_qvariant_isnull(::DosQVariant *vptr)
bool dos_qvariant_isnull(const DosQVariant *vptr)
{
auto variant = static_cast<QVariant *>(vptr);
auto variant = static_cast<const QVariant *>(vptr);
return variant->isNull();
}
@ -251,46 +251,46 @@ void dos_qvariant_delete(::DosQVariant *vptr)
delete variant;
}
void dos_qvariant_assign(::DosQVariant *vptr, ::DosQVariant *other)
void dos_qvariant_assign(::DosQVariant *vptr, const DosQVariant *other)
{
auto leftQVariant = static_cast<QVariant *>(vptr);
auto rightQVariant = static_cast<QVariant *>(other);
auto rightQVariant = static_cast<const QVariant *>(other);
*leftQVariant = *rightQVariant;
}
int dos_qvariant_toInt(::DosQVariant *vptr)
int dos_qvariant_toInt(const ::DosQVariant *vptr)
{
auto variant = static_cast<QVariant *>(vptr);
auto variant = static_cast<const QVariant *>(vptr);
return variant->toInt();
}
bool dos_qvariant_toBool(::DosQVariant *vptr)
bool dos_qvariant_toBool(const ::DosQVariant *vptr)
{
auto variant = static_cast<QVariant *>(vptr);
auto variant = static_cast<const QVariant *>(vptr);
return variant->toBool();
}
float dos_qvariant_toFloat(::DosQVariant *vptr)
float dos_qvariant_toFloat(const DosQVariant *vptr)
{
auto variant = static_cast<QVariant *>(vptr);
auto variant = static_cast<const QVariant *>(vptr);
return variant->toFloat();
}
double dos_qvariant_toDouble(::DosQVariant *vptr)
double dos_qvariant_toDouble(const DosQVariant *vptr)
{
auto variant = static_cast<QVariant *>(vptr);
auto variant = static_cast<const QVariant *>(vptr);
return variant->toDouble();
}
char *dos_qvariant_toString(::DosQVariant *vptr)
char *dos_qvariant_toString(const DosQVariant *vptr)
{
auto variant = static_cast<QVariant *>(vptr);
auto variant = static_cast<const QVariant *>(vptr);
return convert_to_cstring(variant->toString());
}
::DosQObject *dos_qvariant_toQObject(::DosQVariant *vptr)
::DosQObject *dos_qvariant_toQObject(const DosQVariant *vptr)
{
auto variant = static_cast<QVariant *>(vptr);
auto variant = static_cast<const QVariant *>(vptr);
return variant->value<QObject *>();
}
@ -612,15 +612,15 @@ void dos_qabstractlistmodel_endResetModel(::DosQAbstractListModel *vptr)
}
void dos_qabstractlistmodel_dataChanged(::DosQAbstractListModel *vptr,
::DosQModelIndex *topLeftIndex,
::DosQModelIndex *bottomRightIndex,
const ::DosQModelIndex *topLeftIndex,
const ::DosQModelIndex *bottomRightIndex,
int *rolesArrayPtr,
int rolesArrayLength)
{
auto object = static_cast<QObject *>(vptr);
auto model = dynamic_cast<DOS::DosIQAbstractListModelImpl *>(object);
auto topLeft = static_cast<QModelIndex *>(topLeftIndex);
auto bottomRight = static_cast<QModelIndex *>(bottomRightIndex);
auto topLeft = static_cast<const QModelIndex *>(topLeftIndex);
auto bottomRight = static_cast<const QModelIndex *>(bottomRightIndex);
auto roles = QVector<int>::fromStdVector(std::vector<int>(rolesArrayPtr, rolesArrayPtr + rolesArrayLength));
model->publicDataChanged(*topLeft, *bottomRight, roles);
}

View File

@ -5,7 +5,7 @@ using namespace std;
namespace
{
std::string toStringFromQVariant(DosQVariant* variant) {
std::string toStringFromQVariant(const DosQVariant* variant) {
CharPointer charArray(dos_qvariant_toString(variant), &dos_chararray_delete);
return std::string(charArray.get());
}
@ -163,7 +163,22 @@ void MockQAbstractListModel::onDataCalled(void *selfVPtr, const DosQModelIndex *
void MockQAbstractListModel::onSetDataCalled(void *selfVPtr, const DosQModelIndex *index, const DosQVariant *value, int role, bool *result)
{
auto self = static_cast<MockQAbstractListModel*>(selfVPtr);
*result = false;
if (!dos_qmodelindex_isValid(index))
return;
const int row = dos_qmodelindex_row(index);
const int column = dos_qmodelindex_column(index);
if (row < 0 || row >= self->m_names.size() || column != 0)
return;
self->m_names[row] = toStringFromQVariant(value);
dos_qabstractlistmodel_dataChanged(self->data(), index, index, 0, 0);
*result = true;
}
void MockQAbstractListModel::onRoleNamesCalled(void *selfVPtr, DosQHashIntQByteArray *result)

View File

@ -44,4 +44,21 @@ QtObject {
&& testObject.data(testObject.index(2,0, null)) === "Andy"
&& testObject.data(testObject.index(3,0, null)) === "Anna"
}
function testSetData() {
if (!testObject)
return false
var index = testObject.index(0,0, null)
if (!index.valid)
return false;
if (testObject.data(index) !== "John")
return false
var dataChanged = false
testObject.dataChanged.connect(function(topLeft, bottomRight, role) {
dataChanged = topLeft === index && bottomRight === index
})
if (!testObject.setData(index, "Paul"))
return false
return testObject.data(index) === "Paul";
}
}

View File

@ -362,6 +362,15 @@ private slots:
QVERIFY(result.toBool());
}
void testSetData() {
QObject* testCase = engine->rootObjects().first();
QVERIFY(testCase);
QVariant result;
QVERIFY(QMetaObject::invokeMethod(testCase, "testSetData", Q_RETURN_ARG(QVariant, result)));
QVERIFY(result.type() == QVariant::Bool);
QVERIFY(result.toBool());
}
private:
QString value;