ctkVTKObjectTestHelper.cpp 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. // Qt includes
  2. #include <QDebug>
  3. #include <QApplication>
  4. // CTKVTK includes
  5. #include "ctkVTKObjectTestHelper.h"
  6. // VTK includes
  7. #include <vtkObject.h>
  8. //------------------------------------------------------------------------------
  9. class ctkVTKObjectTestPrivate
  10. {
  11. public:
  12. ctkVTKObjectTestPrivate();
  13. int PublicSlotCalled ;
  14. int ProtectedSlotCalled;
  15. int PrivateSlotCalled;
  16. };
  17. //------------------------------------------------------------------------------
  18. ctkVTKObjectTestPrivate::ctkVTKObjectTestPrivate()
  19. {
  20. this->PublicSlotCalled = 0;
  21. this->ProtectedSlotCalled = 0;
  22. this->PrivateSlotCalled = 0;
  23. }
  24. //------------------------------------------------------------------------------
  25. ctkVTKObjectTest::ctkVTKObjectTest(QObject* parentObject)
  26. : QObject(parentObject)
  27. , d_ptr(new ctkVTKObjectTestPrivate)
  28. {
  29. }
  30. //------------------------------------------------------------------------------
  31. ctkVTKObjectTest::~ctkVTKObjectTest()
  32. {
  33. }
  34. //------------------------------------------------------------------------------
  35. bool ctkVTKObjectTest::test()
  36. {
  37. Q_D(ctkVTKObjectTest);
  38. // should do nothing but shouldn't fail neither
  39. qDebug() << "The following can generate error message.";
  40. qDebug() << "Disconnect:";
  41. this->qvtkDisconnect(0, static_cast<unsigned long>(-1), this, SLOT(onVTKObjectModifiedPublic()));
  42. qDebug() << "Connect:";
  43. QString connection = this->qvtkConnect(0, static_cast<unsigned long>(-1), this, SLOT(onVTKObjectModifiedPublic()));
  44. if (!connection.isEmpty())
  45. {
  46. qDebug() << "ctkVTKObject::qvtkConnect() failed: "<< connection;
  47. return false;
  48. }
  49. qDebug() << "Reconnect:";
  50. connection = this->qvtkReconnect(0, 0, static_cast<unsigned long>(-1), this, SLOT(onVTKObjectModifiedPublic()));
  51. if (!connection.isEmpty())
  52. {
  53. qDebug() << "ctkVTKObject::qvtkReconnect() failed: "<< connection;
  54. return false;
  55. }
  56. qDebug() << "End of possible error messages.";
  57. vtkObject* object = vtkObject::New();
  58. connection = this->qvtkConnect(object, vtkCommand::ModifiedEvent,
  59. this, SLOT(onVTKObjectModifiedPublic()));
  60. if (connection.isEmpty() || object->GetReferenceCount() != 1)
  61. {
  62. qDebug() << "ctkVTKObject::qvtkConnect() failed: "<< connection;
  63. return false;
  64. }
  65. object->Modified();
  66. if (d->PublicSlotCalled != 1)
  67. {
  68. qDebug() << "qvtkConnect failed";
  69. return false;
  70. }
  71. this->resetSlotCalls();
  72. // should do nothing...
  73. connection = this->qvtkConnect(object, vtkCommand::ModifiedEvent,
  74. this, SLOT(onVTKObjectModifiedPublic()));
  75. if (!connection.isEmpty())
  76. {
  77. qDebug() << __LINE__ << "ctkVTKObject::qvtkConnect() failed: "<< connection;
  78. return false;
  79. }
  80. object->Modified();
  81. if (d->PublicSlotCalled != 1)
  82. {
  83. qDebug() << __LINE__ << "qvtkConnect failed";
  84. return false;
  85. }
  86. this->resetSlotCalls();
  87. this->qvtkDisconnect(object, vtkCommand::WarningEvent,
  88. this, SLOT(onVTKObjectModifiedPublic()));
  89. object->Modified();
  90. if (d->PublicSlotCalled != 1)
  91. {
  92. qDebug() << __LINE__ << "qvtkDisconnect failed" << d->PublicSlotCalled;
  93. return false;
  94. }
  95. this->resetSlotCalls();
  96. this->qvtkDisconnect(object, vtkCommand::ModifiedEvent,
  97. this, SLOT(onVTKObjectModifiedPublic()));
  98. QCoreApplication::instance()->processEvents();
  99. object->Modified();
  100. if (d->PublicSlotCalled != 0)
  101. {
  102. qDebug() << __LINE__ << "qvtkDisconnect failed" << d->PublicSlotCalled;
  103. return false;
  104. }
  105. this->resetSlotCalls();
  106. // Set a new connection (protected)
  107. connection = this->qvtkConnect(object, vtkCommand::ModifiedEvent,
  108. this, SLOT( onVTKObjectModifiedProtected ( ) ));
  109. if (connection.isEmpty())
  110. {
  111. qDebug() << __LINE__ << "ctkVTKObject::qvtkConnect() failed: "<< connection;
  112. return false;
  113. }
  114. object->Modified();
  115. if (d->ProtectedSlotCalled != 1)
  116. {
  117. qDebug() << __LINE__ << "ctkVTKObject::qvtkConnect failed" << d->ProtectedSlotCalled;
  118. return false;
  119. }
  120. this->resetSlotCalls();
  121. // remove the connection using flags, 0 means any event, qt object or slot
  122. this->qvtkDisconnect(object, vtkCommand::NoEvent, 0, 0);
  123. object->Modified();
  124. if (d->ProtectedSlotCalled != 0)
  125. {
  126. qDebug() << __LINE__ << "qvtkDisconnect failed" << d->ProtectedSlotCalled;
  127. return false;
  128. }
  129. this->resetSlotCalls();
  130. // Set new connections
  131. this->qvtkConnect(object, vtkCommand::ModifiedEvent,
  132. this, SLOT(onVTKObjectModifiedProtected()));
  133. this->qvtkConnect(object, vtkCommand::ModifiedEvent,
  134. this, SLOT(onVTKObjectModifiedPrivate()));
  135. object->Modified();
  136. if (d->ProtectedSlotCalled != 1 ||
  137. d->PrivateSlotCalled != 1)
  138. {
  139. qDebug() << __LINE__ << "qvtkConnect failed"
  140. << d->ProtectedSlotCalled
  141. << d->PrivateSlotCalled;
  142. return false;
  143. }
  144. this->resetSlotCalls();
  145. // remove the connection using flags, 0 means any event, qt object or slot
  146. this->qvtkDisconnect(object, vtkCommand::ModifiedEvent, this, 0);
  147. object->Modified();
  148. if (d->ProtectedSlotCalled != 0 || d->PrivateSlotCalled != 0)
  149. {
  150. qDebug() << __LINE__ << "qvtkDisconnect failed"
  151. << d->ProtectedSlotCalled
  152. << d->PrivateSlotCalled;
  153. return false;
  154. }
  155. this->resetSlotCalls();
  156. // Set new connections
  157. this->qvtkConnect(object, vtkCommand::ModifiedEvent,
  158. this, SLOT(onVTKObjectModifiedPublic ()));
  159. this->qvtkConnect(object, vtkCommand::WarningEvent,
  160. this, SLOT(onVTKObjectModifiedPublic( )));
  161. int disconnected = this->qvtkDisconnect(object, vtkCommand::NoEvent,
  162. this, SLOT(onVTKObjectModifiedPublic() ));
  163. if (disconnected != 2)
  164. {
  165. qDebug() << __LINE__ << "qvtkDisconnect failed" << disconnected;
  166. return false;
  167. }
  168. object->InvokeEvent(vtkCommand::ModifiedEvent, 0);
  169. object->InvokeEvent(vtkCommand::WarningEvent, 0);
  170. if (d->PublicSlotCalled != 0)
  171. {
  172. qDebug() << __LINE__ << "qvtkConnect failed"
  173. << d->PublicSlotCalled;
  174. return false;
  175. }
  176. this->resetSlotCalls();
  177. disconnected = this->qvtkDisconnectAll();
  178. if (disconnected != 0)
  179. {
  180. qDebug() << __LINE__ << "qvtkDisconnectAll failed" << disconnected;
  181. return false;
  182. }
  183. this->qvtkConnect(object, vtkCommand::ModifiedEvent,
  184. this, SLOT(deleteConnection()));
  185. object->InvokeEvent(vtkCommand::ModifiedEvent, 0);
  186. object->Delete();
  187. return true;
  188. }
  189. //------------------------------------------------------------------------------
  190. void ctkVTKObjectTest::resetSlotCalls()
  191. {
  192. Q_D(ctkVTKObjectTest);
  193. d->PublicSlotCalled = 0;
  194. d->ProtectedSlotCalled = 0;
  195. d->PrivateSlotCalled = 0;
  196. }
  197. //------------------------------------------------------------------------------
  198. void ctkVTKObjectTest::emitSignalEmitted()
  199. {
  200. emit signalEmitted();
  201. }
  202. //------------------------------------------------------------------------------
  203. void ctkVTKObjectTest::onVTKObjectModifiedPublic()
  204. {
  205. Q_D(ctkVTKObjectTest);
  206. //qDebug() << __FUNCTION__;
  207. d->PublicSlotCalled = true;
  208. }
  209. //------------------------------------------------------------------------------
  210. void ctkVTKObjectTest::deleteConnection()
  211. {
  212. //qDebug() << __FUNCTION__;
  213. this->qvtkDisconnect(0, vtkCommand::NoEvent, 0, 0);
  214. }
  215. //------------------------------------------------------------------------------
  216. void ctkVTKObjectTest::onVTKObjectModifiedProtected()
  217. {
  218. Q_D(ctkVTKObjectTest);
  219. //qDebug() << __FUNCTION__;
  220. d->ProtectedSlotCalled = true;
  221. }
  222. //------------------------------------------------------------------------------
  223. void ctkVTKObjectTest::onVTKObjectModifiedPrivate()
  224. {
  225. Q_D(ctkVTKObjectTest);
  226. //qDebug() << __FUNCTION__;
  227. d->PrivateSlotCalled = true;
  228. }