forked from BehaviorTree/Groot
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgroot_test_base.cpp
80 lines (72 loc) · 2.67 KB
/
groot_test_base.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include "groot_test_base.h"
#include <QTimer>
#include <QKeyEvent>
QByteArray GrootTestBase::readFile(const char *name)
{
QString fileName(name);
QFile file(fileName);
bool ret = file.open(QIODevice::ReadOnly);
QByteArray data = file.readAll();
file.close();
if( !ret ){
QTest::qFail("can't load file", __FILE__, __LINE__);
}
return data;
}
void GrootTestBase::sleepAndRefresh(int ms)
{
QApplication::processEvents();
QTest::qSleep ( ms );
QApplication::processEvents();
}
void GrootTestBase::testMouseEvent(QGraphicsView *view, QEvent::Type type, QPoint pos, Qt::MouseButton button,
Qt::KeyboardModifier modifier)
{
auto event = new QMouseEvent(type, pos, view->viewport()->mapToGlobal(pos),
button, button, modifier);
QApplication::postEvent(view->viewport(), event);
QApplication::processEvents();
}
void GrootTestBase::testDragObject(QGraphicsView *view, const QPoint &screen_pos, const QPoint &pos_offset)
{
testMouseEvent(view, QEvent::MouseButtonPress, screen_pos , Qt::LeftButton);
testMouseEvent(view, QEvent::MouseMove, screen_pos + pos_offset, Qt::LeftButton);
testMouseEvent(view, QEvent::MouseButtonRelease, screen_pos + pos_offset, Qt::LeftButton);
}
AbsBehaviorTree GrootTestBase::getAbstractTree(const QString &name)
{
if(name.isEmpty() )
return BuildTreeFromScene( main_win->currentTabInfo()->scene() );
else
return BuildTreeFromScene( main_win->getTabByName(name)->scene() );
}
void GrootTestBase::testMessageBox(int deplay_ms, TestLocation location,
std::function<void()> callable_action,
QMessageBox::StandardButton button_to_press)
{
QMutex semaphore;
semaphore.lock();
QTimer::singleShot(deplay_ms, [&]()
{
QWidget* widget = QApplication::activeModalWidget();
if (!widget){
QTest::qFail("no modal widget", location.file, location.line);
}
auto message_box = dynamic_cast<QMessageBox*>(widget);
if (!message_box){
QTest::qFail("no QMessageBox", location.file, location.line);
}
if( button_to_press == QMessageBox::Default || button_to_press == QMessageBox::NoButton)
{
QKeyEvent* event = new QKeyEvent(QEvent::KeyPress, Qt::Key_Enter, Qt::NoModifier);
QCoreApplication::postEvent(widget, event);
}
else{
emit message_box->button(button_to_press)->clicked();
}
semaphore.unlock();
});
callable_action();
semaphore.tryLock( deplay_ms * 2 );
semaphore.unlock();
}