umbrello  2.32.3
Umbrello UML Modeller is a Unified Modelling Language (UML) diagram program based on KDE Technology
testbase.h
Go to the documentation of this file.
1 /*
2  Copyright 2015, 2019 Ralf Habacker <ralf.habacker@freenet.de>
3 
4  This program is free software; you can redistribute it and/or
5  modify it under the terms of the GNU General Public License as
6  published by the Free Software Foundation; either version 2 of
7  the License or (at your option) version 3 or any later version
8  accepted by the membership of KDE e.V. (or its successor approved
9  by the membership of KDE e.V.), which shall act as a proxy
10  defined in Section 14 of version 3 of the license.
11 
12  This program is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  GNU General Public License for more details.
16 
17  You should have received a copy of the GNU General Public License
18  along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 
21 #ifndef TESTBASE_H
22 #define TESTBASE_H
23 
24 // qt includes
25 #include <QObject>
26 #include <QtTest>
27 
28 #ifdef RUN_ALL
29 #undef QCOMPARE
30 #define QCOMPARE(actual, expected) \
31  QTest::qCompare(actual, expected, #actual, #expected, __FILE__, __LINE__)
32 #undef QVERIFY
33 #define QVERIFY(statement) \
34  QTest::qVerify((statement), #statement, "", __FILE__, __LINE__)
35 #endif
36 
37 #define IS_NOT_IMPL() QSKIP("not implemented yet", SkipSingle)
38 
47 class TestBase : public QObject
48 {
49  Q_OBJECT
50 public:
51  explicit TestBase(QObject *parent = 0);
52 
53 protected slots:
54  virtual void initTestCase();
55  virtual void cleanupTestCase();
56  virtual void cleanupOnExit(QObject *p);
57 
58 protected:
59  QList<QPointer<QObject>> m_objectsToDelete;
60 };
61 
71 {
72  Q_OBJECT
73 private slots:
74  virtual void initTestCase();
75 
76 protected:
77  QString m_tempPath;
78  QString temporaryPath();
79 };
80 
81 #if QT_VERSION < QT_VERSION_CHECK(5,0,0)
85 class SignalBlocker
86 {
87 public:
88  explicit SignalBlocker(QObject *o)
89  : _o(o)
90  {
91  _state = _o->blockSignals(true);
92  }
93 
94  SignalBlocker(QObject &o)
95  : _o(&o)
96  {
97  _state = _o->blockSignals(true);
98  }
99 
100  ~SignalBlocker()
101  {
102  _o->blockSignals(_state);
103  }
104 
105 protected:
106  QObject *_o;
107  bool _state;
108 };
109 #else
110 #include <QSignalBlocker>
111 typedef QSignalBlocker SignalBlocker;
112 #endif
113 
118 {
119 public:
120  SetLoading();
121  ~SetLoading();
122 protected:
123  bool _state;
124 };
125 
126 #include <QDomDocument>
127 #include "uml.h"
128 #include "umldoc.h"
129 
133 template <class T, typename N>
134 class TestUML : public T
135 {
136 public:
137  TestUML<T,N>() : T() {}
138  TestUML<T,N>(N name) : T(name) {}
139  TestUML<T,N>(N p1, UMLObject *p2, UMLObject *p3) : T(p1, p2, p3) {}
140  QDomDocument testSave1();
141  bool testLoad1(QDomDocument &qDoc);
142  void testDump(const QString &title = QString());
144 };
145 
146 template <class T, typename N>
148 {
149  QDomDocument qDoc;
150  QDomElement root = qDoc.createElement("unittest");
151  qDoc.appendChild(root);
152  T::saveToXMI1(qDoc, root);
153  return qDoc;
154 }
155 
156 template <class T, typename N>
157 bool TestUML<T,N>::testLoad1(QDomDocument &qDoc)
158 {
159  QDomElement root = qDoc.childNodes().at(0).toElement();
160  QDomElement e = root.childNodes().at(0).toElement();
161  bool result = T::loadFromXMI1(e);
162  if (result) {
163  const SignalBlocker sb(UMLApp::app()->document());
164  result = T::resolveRef();
165  }
166  return result;
167 }
168 
169 template <class T, typename N>
170 void TestUML<T,N>::testDump(const QString &title)
171 {
172  QDomDocument doc = testSave1();
173  QString xml = doc.toString();
174  qDebug() << title << doc.toString();
175 }
176 
177 // used by resolveRef() tests
178 template <class T, typename N>
180 {
181  return T::m_pSecondary.data();
182 }
183 
187 template <class T, typename N>
188 class TestWidget : public T
189 {
190 public:
191  TestWidget<T,N>(UMLScene *scene, N w) : T(scene, w) {}
192  QDomDocument testSave1();
193  bool testLoad1(QDomDocument &qDoc);
194  void testDump(const QString &title = QString());
195 };
196 
197 template <class T, typename N>
199 {
200  QDomDocument qDoc;
201  QDomElement root = qDoc.createElement("unittest");
202  qDoc.appendChild(root);
203  T::saveToXMI1(qDoc, root);
204  return qDoc;
205 }
206 
207 template <class T, typename N>
208 bool TestWidget<T,N>::testLoad1(QDomDocument &qDoc)
209 {
210  QDomElement root = qDoc.childNodes().at(0).toElement();
211  QDomElement e = root.childNodes().at(0).toElement();
212  bool result = T::loadFromXMI1(e);
213  if (result) {
214  const SignalBlocker sb(UMLApp::app()->document());
215  result = T::activate(nullptr);
216  }
217  return result;
218 }
219 
220 template <class T, typename N>
221 void TestWidget<T,N>::testDump(const QString &title)
222 {
223  QDomDocument doc = testSave1();
224  QString xml = doc.toString();
225  qDebug() << title << doc.toString();
226 }
227 
228 #endif // TESTBASE_H
Definition: testbase.h:118
SetLoading()
Definition: testbase.cpp:91
~SetLoading()
Definition: testbase.cpp:97
bool _state
Definition: testbase.h:123
Definition: testbase.h:48
virtual void initTestCase()
Definition: testbase.cpp:48
virtual void cleanupOnExit(QObject *p)
Definition: testbase.cpp:63
TestBase(QObject *parent=0)
Definition: testbase.cpp:43
virtual void cleanupTestCase()
Definition: testbase.cpp:55
QList< QPointer< QObject > > m_objectsToDelete
Definition: testbase.h:59
Definition: testbase.h:71
virtual void initTestCase()
Definition: testbase.cpp:68
QString temporaryPath()
Definition: testbase.cpp:86
QString m_tempPath
holds path to temporary directory
Definition: testbase.h:77
Definition: testbase.h:135
bool testLoad1(QDomDocument &qDoc)
Definition: testbase.h:157
QDomDocument testSave1()
Definition: testbase.h:147
UMLObject * secondary() const
Definition: testbase.h:179
void testDump(const QString &title=QString())
Definition: testbase.h:170
Definition: testbase.h:189
void testDump(const QString &title=QString())
Definition: testbase.h:221
QDomDocument testSave1()
Definition: testbase.h:198
bool testLoad1(QDomDocument &qDoc)
Definition: testbase.h:208
static UMLApp * app()
Definition: uml.cpp:278
The base class for UML objects.
Definition: umlobject.h:74
Definition: umlscene.h:69
QSignalBlocker SignalBlocker
Definition: testbase.h:111