diff options
author | Matthew Vogt <matthew.vogt@nokia.com> | 2012-02-16 14:43:03 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-02-24 04:51:31 +0100 |
commit | b855240b782395f94315f43ea3e7e182299fac48 (patch) | |
tree | bc594c04449be8cd14cd0ab0bb72dafc2be0ffb2 /tests/auto/quick/shared | |
parent | 6a42a6e0a9a1abdda0d07a5a20b4ac7e45348684 (diff) |
Rename QDeclarative symbols to QQuick and QQml
Symbols beginning with QDeclarative are already exported
by the quick1 module.
Users can apply the bin/rename-qtdeclarative-symbols.sh
script to modify client code using the previous names of the
renamed symbols.
Task-number: QTBUG-23737
Change-Id: Ifaa482663767634931e8711a8e9bf6e404859e66
Reviewed-by: Martin Jones <martin.jones@nokia.com>
Diffstat (limited to 'tests/auto/quick/shared')
-rw-r--r-- | tests/auto/quick/shared/util.pri | 7 | ||||
-rw-r--r-- | tests/auto/quick/shared/viewtestutil.cpp | 493 | ||||
-rw-r--r-- | tests/auto/quick/shared/viewtestutil.h | 180 | ||||
-rw-r--r-- | tests/auto/quick/shared/visualtestutil.cpp | 71 | ||||
-rw-r--r-- | tests/auto/quick/shared/visualtestutil.h | 112 |
5 files changed, 863 insertions, 0 deletions
diff --git a/tests/auto/quick/shared/util.pri b/tests/auto/quick/shared/util.pri new file mode 100644 index 0000000000..aa79c7ca98 --- /dev/null +++ b/tests/auto/quick/shared/util.pri @@ -0,0 +1,7 @@ + +HEADERS += $$PWD/visualtestutil.h \ + $$PWD/viewtestutil.h +SOURCES += $$PWD/visualtestutil.cpp \ + $$PWD/viewtestutil.cpp + +DEFINES += QT_QMLTEST_DATADIR=\\\"$${_PRO_FILE_PWD_}/data\\\" diff --git a/tests/auto/quick/shared/viewtestutil.cpp b/tests/auto/quick/shared/viewtestutil.cpp new file mode 100644 index 0000000000..d00a0e2a96 --- /dev/null +++ b/tests/auto/quick/shared/viewtestutil.cpp @@ -0,0 +1,493 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "viewtestutil.h" + +#include <QtQuick/QQuickView> + +#include <QtTest/QTest> + +template<typename T> +static void qquickmodelviewstestutil_move(int from, int to, int n, T *items) +{ + if (from > to) { + // Only move forwards - flip if backwards moving + int tfrom = from; + int tto = to; + from = tto; + to = tto+n; + n = tfrom-tto; + } + + T replaced; + int i=0; + typename T::ConstIterator it=items->begin(); it += from+n; + for (; i<to-from; ++i,++it) + replaced.append(*it); + i=0; + it=items->begin(); it += from; + for (; i<n; ++i,++it) + replaced.append(*it); + typename T::ConstIterator f=replaced.begin(); + typename T::Iterator t=items->begin(); t += from; + for (; f != replaced.end(); ++f, ++t) + *t = *f; +} + +QQuickView *QQuickViewTestUtil::createView() +{ + QQuickView *canvas = new QQuickView(0); + canvas->setGeometry(0,0,240,320); + + return canvas; +} + +void QQuickViewTestUtil::flick(QQuickView *canvas, const QPoint &from, const QPoint &to, int duration) +{ + const int pointCount = 5; + QPoint diff = to - from; + + // send press, five equally spaced moves, and release. + QTest::mousePress(canvas, Qt::LeftButton, 0, from); + + for (int i = 0; i < pointCount; ++i) { + QMouseEvent mv(QEvent::MouseMove, from + (i+1)*diff/pointCount, Qt::LeftButton, Qt::LeftButton,Qt::NoModifier); + QGuiApplication::sendEvent(canvas, &mv); + QTest::qWait(duration/pointCount); + QCoreApplication::processEvents(); + } + + QTest::mouseRelease(canvas, Qt::LeftButton, 0, to); + QTest::qWait(50); +} + +QList<int> QQuickViewTestUtil::adjustIndexesForAddDisplaced(const QList<int> &indexes, int index, int count) +{ + QList<int> result; + for (int i=0; i<indexes.count(); i++) { + int num = indexes[i]; + if (num >= index) { + num += count; + } + result << num; + } + return result; +} + +QList<int> QQuickViewTestUtil::adjustIndexesForMove(const QList<int> &indexes, int from, int to, int count) +{ + QList<int> result; + for (int i=0; i<indexes.count(); i++) { + int num = indexes[i]; + if (from < to) { + if (num >= from && num < from + count) + num += (to - from); // target + else if (num >= from && num < to + count) + num -= count; // displaced + } else if (from > to) { + if (num >= from && num < from + count) + num -= (from - to); // target + else if (num >= to && num < from + count) + num += count; // displaced + } + result << num; + } + return result; +} + +QList<int> QQuickViewTestUtil::adjustIndexesForRemoveDisplaced(const QList<int> &indexes, int index, int count) +{ + QList<int> result; + for (int i=0; i<indexes.count(); i++) { + int num = indexes[i]; + if (num >= index) + num -= count; + result << num; + } + return result; +} + + +QQuickViewTestUtil::QmlListModel::QmlListModel(QObject *parent) + : QListModelInterface(parent) +{ +} + +QQuickViewTestUtil::QmlListModel::~QmlListModel() +{ +} + +QString QQuickViewTestUtil::QmlListModel::name(int index) const +{ + return list.at(index).first; +} + +QString QQuickViewTestUtil::QmlListModel::number(int index) const +{ + return list.at(index).second; +} + +int QQuickViewTestUtil::QmlListModel::count() const +{ + return list.count(); +} + +QList<int> QQuickViewTestUtil::QmlListModel::roles() const +{ + return QList<int>() << Name << Number; +} + +QString QQuickViewTestUtil::QmlListModel::toString(int role) const +{ + switch (role) { + case Name: + return "name"; + case Number: + return "number"; + default: + return ""; + } +} + +QVariant QQuickViewTestUtil::QmlListModel::data(int index, int role) const +{ + if (role==0) + return list.at(index).first; + if (role==1) + return list.at(index).second; + return QVariant(); +} + +QHash<int, QVariant> QQuickViewTestUtil::QmlListModel::data(int index, const QList<int> &roles) const +{ + QHash<int,QVariant> returnHash; + + for (int i = 0; i < roles.size(); ++i) { + int role = roles.at(i); + QVariant info; + switch (role) { + case Name: + info = list.at(index).first; + break; + case Number: + info = list.at(index).second; + break; + default: + break; + } + returnHash.insert(role, info); + } + return returnHash; +} + +void QQuickViewTestUtil::QmlListModel::addItem(const QString &name, const QString &number) +{ + list.append(QPair<QString,QString>(name, number)); + emit itemsInserted(list.count()-1, 1); +} + +void QQuickViewTestUtil::QmlListModel::insertItem(int index, const QString &name, const QString &number) +{ + list.insert(index, QPair<QString,QString>(name, number)); + emit itemsInserted(index, 1); +} + +void QQuickViewTestUtil::QmlListModel::insertItems(int index, const QList<QPair<QString, QString> > &items) +{ + for (int i=0; i<items.count(); i++) + list.insert(index + i, QPair<QString,QString>(items[i].first, items[i].second)); + emit itemsInserted(index, items.count()); +} + +void QQuickViewTestUtil::QmlListModel::removeItem(int index) +{ + list.removeAt(index); + emit itemsRemoved(index, 1); +} + +void QQuickViewTestUtil::QmlListModel::removeItems(int index, int count) +{ + int c = count; + while (c--) + list.removeAt(index); + emit itemsRemoved(index, count); +} + +void QQuickViewTestUtil::QmlListModel::moveItem(int from, int to) +{ + list.move(from, to); + emit itemsMoved(from, to, 1); +} + +void QQuickViewTestUtil::QmlListModel::moveItems(int from, int to, int count) +{ + qquickmodelviewstestutil_move(from, to, count, &list); + emit itemsMoved(from, to, count); +} + +void QQuickViewTestUtil::QmlListModel::modifyItem(int index, const QString &name, const QString &number) +{ + list[index] = QPair<QString,QString>(name, number); + emit itemsChanged(index, 1, roles()); +} + +void QQuickViewTestUtil::QmlListModel::clear() { + int count = list.count(); + list.clear(); + emit itemsRemoved(0, count); +} + +void QQuickViewTestUtil::QmlListModel::matchAgainst(const QList<QPair<QString, QString> > &other, const QString &error1, const QString &error2) { + for (int i=0; i<other.count(); i++) { + QVERIFY2(list.contains(other[i]), + QTest::toString(other[i].first + " " + other[i].second + " " + error1)); + } + for (int i=0; i<list.count(); i++) { + QVERIFY2(other.contains(list[i]), + QTest::toString(list[i].first + " " + list[i].second + " " + error2)); + } +} + + +QQuickViewTestUtil::QaimModel::QaimModel(QObject *parent) + : QAbstractListModel(parent) +{ + QHash<int, QByteArray> roles; + roles[Name] = "name"; + roles[Number] = "number"; + setRoleNames(roles); +} + +int QQuickViewTestUtil::QaimModel::rowCount(const QModelIndex &parent) const +{ + Q_UNUSED(parent); + return list.count(); +} + +QVariant QQuickViewTestUtil::QaimModel::data(const QModelIndex &index, int role) const +{ + QVariant rv; + if (role == Name) + rv = list.at(index.row()).first; + else if (role == Number) + rv = list.at(index.row()).second; + + return rv; +} + +int QQuickViewTestUtil::QaimModel::count() const +{ + return rowCount(); +} + +QString QQuickViewTestUtil::QaimModel::name(int index) const +{ + return list.at(index).first; +} + +QString QQuickViewTestUtil::QaimModel::number(int index) const +{ + return list.at(index).second; +} + +void QQuickViewTestUtil::QaimModel::addItem(const QString &name, const QString &number) +{ + emit beginInsertRows(QModelIndex(), list.count(), list.count()); + list.append(QPair<QString,QString>(name, number)); + emit endInsertRows(); +} + +void QQuickViewTestUtil::QaimModel::addItems(const QList<QPair<QString, QString> > &items) +{ + emit beginInsertRows(QModelIndex(), list.count(), list.count()+items.count()-1); + for (int i=0; i<items.count(); i++) + list.append(QPair<QString,QString>(items[i].first, items[i].second)); + emit endInsertRows(); +} + +void QQuickViewTestUtil::QaimModel::insertItem(int index, const QString &name, const QString &number) +{ + emit beginInsertRows(QModelIndex(), index, index); + list.insert(index, QPair<QString,QString>(name, number)); + emit endInsertRows(); +} + +void QQuickViewTestUtil::QaimModel::insertItems(int index, const QList<QPair<QString, QString> > &items) +{ + emit beginInsertRows(QModelIndex(), index, index+items.count()-1); + for (int i=0; i<items.count(); i++) + list.insert(index + i, QPair<QString,QString>(items[i].first, items[i].second)); + emit endInsertRows(); +} + +void QQuickViewTestUtil::QaimModel::removeItem(int index) +{ + emit beginRemoveRows(QModelIndex(), index, index); + list.removeAt(index); + emit endRemoveRows(); +} + +void QQuickViewTestUtil::QaimModel::removeItems(int index, int count) +{ + emit beginRemoveRows(QModelIndex(), index, index+count-1); + while (count--) + list.removeAt(index); + emit endRemoveRows(); +} + +void QQuickViewTestUtil::QaimModel::moveItem(int from, int to) +{ + emit beginMoveRows(QModelIndex(), from, from, QModelIndex(), to); + list.move(from, to); + emit endMoveRows(); +} + +void QQuickViewTestUtil::QaimModel::moveItems(int from, int to, int count) +{ + emit beginMoveRows(QModelIndex(), from, from+count-1, QModelIndex(), to > from ? to+count : to); + qquickmodelviewstestutil_move(from, to, count, &list); + emit endMoveRows(); +} + +void QQuickViewTestUtil::QaimModel::modifyItem(int idx, const QString &name, const QString &number) +{ + list[idx] = QPair<QString,QString>(name, number); + emit dataChanged(index(idx,0), index(idx,0)); +} + +void QQuickViewTestUtil::QaimModel::clear() +{ + int count = list.count(); + emit beginRemoveRows(QModelIndex(), 0, count-1); + list.clear(); + emit endRemoveRows(); +} + +void QQuickViewTestUtil::QaimModel::reset() +{ + emit beginResetModel(); + emit endResetModel(); +} + +void QQuickViewTestUtil::QaimModel::matchAgainst(const QList<QPair<QString, QString> > &other, const QString &error1, const QString &error2) { + for (int i=0; i<other.count(); i++) { + QVERIFY2(list.contains(other[i]), + QTest::toString(other[i].first + " " + other[i].second + " " + error1)); + } + for (int i=0; i<list.count(); i++) { + QVERIFY2(other.contains(list[i]), + QTest::toString(list[i].first + " " + list[i].second + " " + error2)); + } +} + + + +QQuickViewTestUtil::ListRange::ListRange() + : valid(false) +{ +} + +QQuickViewTestUtil::ListRange::ListRange(const ListRange &other) + : valid(other.valid) +{ + indexes = other.indexes; +} + +QQuickViewTestUtil::ListRange::ListRange(int start, int end) + : valid(true) +{ + for (int i=start; i<=end; i++) + indexes << i; +} + +QQuickViewTestUtil::ListRange::~ListRange() +{ +} + +QQuickViewTestUtil::ListRange QQuickViewTestUtil::ListRange::operator+(const ListRange &other) const +{ + if (other == *this) + return *this; + ListRange a(*this); + a.indexes.append(other.indexes); + return a; +} + +bool QQuickViewTestUtil::ListRange::operator==(const ListRange &other) const +{ + return indexes.toSet() == other.indexes.toSet(); +} + +bool QQuickViewTestUtil::ListRange::operator!=(const ListRange &other) const +{ + return !(*this == other); +} + +bool QQuickViewTestUtil::ListRange::isValid() const +{ + return valid; +} + +int QQuickViewTestUtil::ListRange::count() const +{ + return indexes.count(); +} + +QList<QPair<QString,QString> > QQuickViewTestUtil::ListRange::getModelDataValues(const QmlListModel &model) +{ + QList<QPair<QString,QString> > data; + if (!valid) + return data; + for (int i=0; i<indexes.count(); i++) + data.append(qMakePair(model.name(indexes[i]), model.number(indexes[i]))); + return data; +} + +QList<QPair<QString,QString> > QQuickViewTestUtil::ListRange::getModelDataValues(const QaimModel &model) +{ + QList<QPair<QString,QString> > data; + if (!valid) + return data; + for (int i=0; i<indexes.count(); i++) + data.append(qMakePair(model.name(indexes[i]), model.number(indexes[i]))); + return data; +} + diff --git a/tests/auto/quick/shared/viewtestutil.h b/tests/auto/quick/shared/viewtestutil.h new file mode 100644 index 0000000000..e940727789 --- /dev/null +++ b/tests/auto/quick/shared/viewtestutil.h @@ -0,0 +1,180 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKVIEWTESTUTIL_H +#define QQUICKVIEWTESTUTIL_H + +#include <QtQuick/QQuickItem> +#include <QtQml/QQmlExpression> +#include <QtQml/private/qlistmodelinterface_p.h> +#include <QtCore/QAbstractListModel> + +QT_FORWARD_DECLARE_CLASS(QQuickView) + +namespace QQuickViewTestUtil +{ + QQuickView *createView(); + + void flick(QQuickView *canvas, const QPoint &from, const QPoint &to, int duration); + + QList<int> adjustIndexesForAddDisplaced(const QList<int> &indexes, int index, int count); + QList<int> adjustIndexesForMove(const QList<int> &indexes, int from, int to, int count); + QList<int> adjustIndexesForRemoveDisplaced(const QList<int> &indexes, int index, int count); + + struct ListChange { + enum { Inserted, Removed, Moved, SetCurrent, SetContentY } type; + int index; + int count; + int to; // Move + qreal pos; // setContentY + + static ListChange insert(int index, int count = 1) { ListChange c = { Inserted, index, count, -1, 0.0 }; return c; } + static ListChange remove(int index, int count = 1) { ListChange c = { Removed, index, count, -1, 0.0 }; return c; } + static ListChange move(int index, int to, int count) { ListChange c = { Moved, index, count, to, 0.0 }; return c; } + static ListChange setCurrent(int index) { ListChange c = { SetCurrent, index, -1, -1, 0.0 }; return c; } + static ListChange setContentY(qreal pos) { ListChange c = { SetContentY, -1, -1, -1, pos }; return c; } + }; + + class QmlListModel : public QListModelInterface + { + Q_OBJECT + public: + QmlListModel(QObject *parent = 0); + ~QmlListModel(); + + enum Roles { Name, Number }; + + QString name(int index) const; + QString number(int index) const; + + int count() const; + + QList<int> roles() const; + QString toString(int role) const; + + QVariant data(int index, int role) const; + QHash<int, QVariant> data(int index, const QList<int> &roles) const; + + Q_INVOKABLE void addItem(const QString &name, const QString &number); + void insertItem(int index, const QString &name, const QString &number); + void insertItems(int index, const QList<QPair<QString, QString> > &items); + + void removeItem(int index); + void removeItems(int index, int count); + + void moveItem(int from, int to); + void moveItems(int from, int to, int count); + + void modifyItem(int index, const QString &name, const QString &number); + + void clear(); + + void matchAgainst(const QList<QPair<QString, QString> > &other, const QString &error1, const QString &error2); + + private: + QList<QPair<QString,QString> > list; + }; + + class QaimModel : public QAbstractListModel + { + Q_OBJECT + public: + enum Roles { Name = Qt::UserRole+1, Number = Qt::UserRole+2 }; + + QaimModel(QObject *parent=0); + + int rowCount(const QModelIndex &parent=QModelIndex()) const; + QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const; + + int count() const; + QString name(int index) const; + QString number(int index) const; + + Q_INVOKABLE void addItem(const QString &name, const QString &number); + void addItems(const QList<QPair<QString, QString> > &items); + void insertItem(int index, const QString &name, const QString &number); + void insertItems(int index, const QList<QPair<QString, QString> > &items); + + void removeItem(int index); + void removeItems(int index, int count); + + void moveItem(int from, int to); + void moveItems(int from, int to, int count); + + void modifyItem(int idx, const QString &name, const QString &number); + + void clear(); + void reset(); + + void matchAgainst(const QList<QPair<QString, QString> > &other, const QString &error1, const QString &error2); + + private: + QList<QPair<QString,QString> > list; + }; + + class ListRange + { + public: + ListRange(); + ListRange(const ListRange &other); + ListRange(int start, int end); + + ~ListRange(); + + ListRange operator+(const ListRange &other) const; + bool operator==(const ListRange &other) const; + bool operator!=(const ListRange &other) const; + + bool isValid() const; + int count() const; + + QList<QPair<QString,QString> > getModelDataValues(const QmlListModel &model); + QList<QPair<QString,QString> > getModelDataValues(const QaimModel &model); + + QList<int> indexes; + bool valid; + }; +} + +Q_DECLARE_METATYPE(QList<QQuickViewTestUtil::ListChange>) +Q_DECLARE_METATYPE(QQuickViewTestUtil::ListRange) + +#endif // QQUICKVIEWTESTUTIL_H diff --git a/tests/auto/quick/shared/visualtestutil.cpp b/tests/auto/quick/shared/visualtestutil.cpp new file mode 100644 index 0000000000..8680df10e9 --- /dev/null +++ b/tests/auto/quick/shared/visualtestutil.cpp @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "visualtestutil.h" + +#include <QtQuick/QQuickItem> +#include <QtCore/QDebug> + +QQuickItem *QQuickVisualTestUtil::findVisibleChild(QQuickItem *parent, const QString &objectName) +{ + QQuickItem *item = 0; + QList<QQuickItem*> items = parent->findChildren<QQuickItem*>(objectName); + for (int i = 0; i < items.count(); ++i) { + if (items.at(i)->isVisible()) { + item = items.at(i); + break; + } + } + return item; +} + +void QQuickVisualTestUtil::dumpTree(QQuickItem *parent, int depth) +{ + static QString padding(" "); + for (int i = 0; i < parent->childItems().count(); ++i) { + QQuickItem *item = qobject_cast<QQuickItem*>(parent->childItems().at(i)); + if (!item) + continue; + qDebug() << padding.left(depth*2) << item; + dumpTree(item, depth+1); + } +} + diff --git a/tests/auto/quick/shared/visualtestutil.h b/tests/auto/quick/shared/visualtestutil.h new file mode 100644 index 0000000000..9407ff8e8f --- /dev/null +++ b/tests/auto/quick/shared/visualtestutil.h @@ -0,0 +1,112 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKVISUALTESTUTIL_H +#define QQUICKVISUALTESTUTIL_H + +#include <QtQuick/QQuickItem> +#include <QtQml/QQmlExpression> + +namespace QQuickVisualTestUtil +{ + QQuickItem *findVisibleChild(QQuickItem *parent, const QString &objectName); + + void dumpTree(QQuickItem *parent, int depth = 0); + + + /* + Find an item with the specified objectName. If index is supplied then the + item must also evaluate the {index} expression equal to index + */ + template<typename T> + T *findItem(QQuickItem *parent, const QString &objectName, int index = -1) + { + const QMetaObject &mo = T::staticMetaObject; + for (int i = 0; i < parent->childItems().count(); ++i) { + QQuickItem *item = qobject_cast<QQuickItem*>(parent->childItems().at(i)); + if (!item) + continue; + if (mo.cast(item) && (objectName.isEmpty() || item->objectName() == objectName)) { + if (index != -1) { + QQmlExpression e(qmlContext(item), item, "index"); + if (e.evaluate().toInt() == index) + return static_cast<T*>(item); + } else { + return static_cast<T*>(item); + } + } + item = findItem<T>(item, objectName, index); + if (item) + return static_cast<T*>(item); + } + + return 0; + } + + template<typename T> + QList<T*> findItems(QQuickItem *parent, const QString &objectName, bool visibleOnly = true) + { + QList<T*> items; + const QMetaObject &mo = T::staticMetaObject; + for (int i = 0; i < parent->childItems().count(); ++i) { + QQuickItem *item = qobject_cast<QQuickItem*>(parent->childItems().at(i)); + if (!item || (visibleOnly && !item->isVisible())) + continue; + if (mo.cast(item) && (objectName.isEmpty() || item->objectName() == objectName)) + items.append(static_cast<T*>(item)); + items += findItems<T>(item, objectName); + } + + return items; + } + + template<typename T> + QList<T*> findItems(QQuickItem *parent, const QString &objectName, const QList<int> &indexes) + { + QList<T*> items; + for (int i=0; i<indexes.count(); i++) + items << qobject_cast<QQuickItem*>(findItem<T>(parent, objectName, indexes[i])); + return items; + } + +} + +#endif // QQUICKVISUALTESTUTIL_H |