Qt 4.8
qtesttable.cpp
Go to the documentation of this file.
1 /****************************************************************************
2 **
3 ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/legal
5 **
6 ** This file is part of the QtTest module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and Digia. For licensing terms and
14 ** conditions see http://qt.digia.com/licensing. For further information
15 ** use the contact form at http://qt.digia.com/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 2.1 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 2.1 requirements
23 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24 **
25 ** In addition, as a special exception, Digia gives you certain additional
26 ** rights. These rights are described in the Digia Qt LGPL Exception
27 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28 **
29 ** GNU General Public License Usage
30 ** Alternatively, this file may be used under the terms of the GNU
31 ** General Public License version 3.0 as published by the Free Software
32 ** Foundation and appearing in the file LICENSE.GPL included in the
33 ** packaging of this file. Please review the following information to
34 ** ensure the GNU General Public License version 3.0 requirements will be
35 ** met: http://www.gnu.org/copyleft/gpl.html.
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41 
42 #include "QtTest/private/qtesttable_p.h"
43 #include "QtTest/qtestdata.h"
44 
45 #include <QtCore/qmetaobject.h>
46 
47 #include <string.h>
48 
49 #include "QtTest/qtestassert.h"
50 
52 
54 {
55 public:
56  struct ElementList
57  {
59  const char *elementName;
62  };
63 
64  struct DataList
65  {
66  DataList(): data(0), next(0) {}
69  };
70 
73 
76 
77  void append(int elemType, const char *elemName);
78  void append(QTestData *data);
80  QTestData *dataAt(int index);
81 
83  static QTestTable *gTable;
84 };
85 
88 
90 {
91  ElementList *iter = list;
92  for (int i = 0; i < index; ++i) {
93  if (!iter)
94  return 0;
95  iter = iter->next;
96  }
97  return iter;
98 }
99 
101 {
102  DataList *iter = dataList;
103  for (int i = 0; i < index; ++i) {
104  if (!iter)
105  return 0;
106  iter = iter->next;
107  }
108  return iter ? iter->data : 0;
109 }
110 
112 {
113  DataList *dit = dataList;
114  while (dit) {
115  DataList *next = dit->next;
116  delete dit->data;
117  delete dit;
118  dit = next;
119  }
120  ElementList *iter = list;
121  while (iter) {
122  ElementList *next = iter->next;
123  delete iter;
124  iter = next;
125  }
126 }
127 
128 void QTestTablePrivate::append(int elemType, const char *elemName)
129 {
130  ElementList *item = new ElementList;
131  item->elementName = elemName;
132  item->elementType = elemType;
133  if (!list) {
134  list = item;
135  return;
136  }
137  ElementList *last = list;
138  while (last->next != 0)
139  last = last->next;
140  last->next = item;
141 }
142 
144 {
145  DataList *item = new DataList;
146  item->data = data;
147  if (!dataList) {
148  dataList = item;
149  return;
150  }
151  DataList *last = dataList;
152  while (last->next != 0)
153  last = last->next;
154  last->next = item;
155 }
156 
157 void QTestTable::addColumn(int type, const char *name)
158 {
159  QTEST_ASSERT(type);
160  QTEST_ASSERT(name);
161 
162  d->append(type, name);
163 }
164 
166 {
167  QTestTablePrivate::ElementList *item = d->list;
168  int count = 0;
169  while (item) {
170  ++count;
171  item = item->next;
172  }
173  return count;
174 }
175 
176 
178 {
179  QTestTablePrivate::DataList *item = d->dataList;
180  int count = 0;
181  while (item) {
182  ++count;
183  item = item->next;
184  }
185  return count;
186 }
187 
189 {
190  return !d->list;
191 }
192 
194 {
195  QTestData *dt = new QTestData(tag, this);
196  d->append(dt);
197  return dt;
198 }
199 
201 {
202  d = new QTestTablePrivate;
203  QTestTablePrivate::currentTestTable = this;
204 }
205 
207 {
208  QTestTablePrivate::currentTestTable = 0;
209  delete d;
210 }
211 
213 {
214  QTestTablePrivate::ElementList *item = d->elementAt(index);
215  if (!item)
216  return -1;
217  return item->elementType;
218 }
219 
220 const char *QTestTable::dataTag(int index) const
221 {
222  QTestTablePrivate::ElementList *item = d->elementAt(index);
223  if (!item)
224  return 0;
225  return item->elementName;
226 }
227 
229 {
230  return d->dataAt(index);
231 }
232 
233 int QTestTable::indexOf(const char *elementName) const
234 {
235  QTEST_ASSERT(elementName);
236 
237  QTestTablePrivate::ElementList *item = d->list;
238  int i = 0;
239  while (item) {
240  if (strcmp(elementName, item->elementName) == 0)
241  return i;
242  item = item->next;
243  ++i;
244  }
245  return -1;
246 }
247 
249 {
250  if (!QTestTablePrivate::gTable)
251  QTestTablePrivate::gTable = new QTestTable();
253 }
254 
256 {
258  QTestTablePrivate::gTable = 0;
259 }
260 
262 {
264 }
265 
double d
Definition: qnumeric_p.h:62
int type
Definition: qmetatype.cpp:239
QTestData * testData(int index) const
Definition: qtesttable.cpp:228
#define QT_END_NAMESPACE
This macro expands to.
Definition: qglobal.h:90
void append(int elemType, const char *elemName)
Definition: qtesttable.cpp:128
static void clearGlobalTestTable()
Definition: qtesttable.cpp:255
QTestData * newData(const char *tag)
Definition: qtesttable.cpp:193
#define QT_BEGIN_NAMESPACE
This macro expands to.
Definition: qglobal.h:89
static QTestTable * currentTestTable
Definition: qtesttable.cpp:82
int dataCount() const
Definition: qtesttable.cpp:177
const char * name
static QTestTable * gTable
Definition: qtesttable.cpp:83
QTestData * dataAt(int index)
Definition: qtesttable.cpp:100
static const char * data(const QByteArray &arr)
DataList * dataList
Definition: qtesttable.cpp:75
int elementTypeId(int index) const
Definition: qtesttable.cpp:212
const char * dataTag(int index) const
Definition: qtesttable.cpp:220
static QTestTable * globalTestTable()
Definition: qtesttable.cpp:248
ElementList * list
Definition: qtesttable.cpp:74
int elementCount() const
Definition: qtesttable.cpp:165
void addColumn(int elementType, const char *elementName)
Definition: qtesttable.cpp:157
ElementList * elementAt(int index)
Definition: qtesttable.cpp:89
int indexOf(const char *elementName) const
Definition: qtesttable.cpp:233
#define QTEST_ASSERT(cond)
Definition: qtestassert.h:53
static QTestTable * currentTestTable()
Definition: qtesttable.cpp:261
quint16 index
bool isEmpty() const
Definition: qtesttable.cpp:188