Unity 8
 All Classes Functions Properties
testutil.cpp
1 /*
2  * Copyright (C) 2012, 2013 Canonical, Ltd.
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; version 3.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program. If not, see <http://www.gnu.org/licenses/>.
15  */
16 
17 
18 #include "testutil.h"
19 
20 #include <qpa/qwindowsysteminterface.h>
21 #include <QtGui/QGuiApplication>
22 
23 TestUtil::TestUtil(QObject *parent)
24  : QObject(parent)
25  , m_targetWindow(0)
26  , m_touchDevice(0)
27 {
28 }
29 
30 TestUtil::~TestUtil()
31 {
32 }
33 
34 bool
35 TestUtil::isInstanceOf(QObject *obj, QString name)
36 {
37  if (!obj) return false;
38  bool result = obj->inherits(name.toUtf8());
39  if (!result) {
40  const QMetaObject *metaObject = obj->metaObject();
41  while (!result && metaObject) {
42  const QString className = metaObject->className();
43  const QString qmlName = className.left(className.indexOf("_QMLTYPE_"));
44  result = qmlName == name;
45  metaObject = metaObject->superClass();
46  }
47  }
48  return result;
49 }
50 
51 TouchEventSequenceWrapper *TestUtil::touchEvent()
52 {
53  ensureTargetWindow();
54  ensureTouchDevice();
55 
56  return new TouchEventSequenceWrapper(
57  QTest::touchEvent(m_targetWindow, m_touchDevice, /* autoCommit */ false));
58 }
59 
60 void TestUtil::ensureTargetWindow()
61 {
62  if (!m_targetWindow)
63  m_targetWindow = QGuiApplication::topLevelWindows()[0];
64 }
65 
66 void TestUtil::ensureTouchDevice()
67 {
68  if (!m_touchDevice) {
69  m_touchDevice = new QTouchDevice;
70  m_touchDevice->setType(QTouchDevice::TouchScreen);
71  QWindowSystemInterface::registerTouchDevice(m_touchDevice);
72  }
73 }