##// END OF EJS Templates
Some test refac and prepared synchronized graph test...
jeandet -
r1369:8a5759a257ef
parent child
Show More
@@ -1,3 +1,3
1 1 subdirs(GUITestUtils)
2 2 declare_test(simple_graph simple_graph simple_graph/main.cpp "sciqlopgui;TestUtils;GUITestUtils;Qt5::Test")
3 declare_test(two_sync_graph two_sync_graph two_sync_graph/main.cpp "sciqlopgui;TestUtils;GUITestUtils;Qt5::Test")
3 declare_test(multiple_sync_graph multiple_sync_graph multiple_sync_graph/main.cpp "sciqlopgui;TestUtils;GUITestUtils;Qt5::Test")
@@ -1,148 +1,151
1 1 #ifndef GUITESTUTILS_H
2 2 #define GUITESTUTILS_H
3 3
4 4 #include <Common/cpp_utils.h>
5 5 #include <QPoint>
6 6 #include <QCursor>
7 7 #include <QMouseEvent>
8 8 #include <QCoreApplication>
9 9 #include <QtTest>
10 10 #include <QDesktopWidget>
11 11
12 12 #include <qcustomplot.h>
13 13
14 14 template <typename T>
15 15 QPoint center(T* widget)
16 16 {
17 17 return QPoint{widget->width()/2,widget->height()/2};
18 18 }
19 19
20 20 HAS_METHOD(viewport)
21 21
22 22 template <typename T>
23 23 static inline constexpr bool is_QWidgetOrDerived = std::is_base_of<QWidget,T>::value;
24 24
25 25 template <typename T> using viewport_type = decltype(std::declval<T>().viewport());
26 26
27 27 HAS_METHOD(topLevelItem)
28 28
29 29 template<typename T>
30 30 void mouseMove(T* widget, QPoint pos, Qt::MouseButton mouseModifier)
31 31 {
32 32 QCursor::setPos(widget->mapToGlobal(pos));
33 33 QMouseEvent event(QEvent::MouseMove, pos, Qt::NoButton, mouseModifier, Qt::NoModifier);
34 34 if constexpr(has_viewport<T>)
35 35 {
36 36 if constexpr(is_QWidgetOrDerived<viewport_type<T>>)
37 37 {
38 38 qApp->sendEvent(widget->viewport(), &event);
39 39 }
40 40 else
41 41 {
42 42 qApp->sendEvent(widget, &event);
43 43 }
44 44 }
45 45 else
46 46 {
47 47 qApp->sendEvent(widget, &event);
48 48 }
49 49 qApp->processEvents();
50 50 }
51 51
52 52
53 53 template <typename T>
54 54 void setMouseTracking(T* widget)
55 55 {
56 56 if constexpr(has_viewport<T>)
57 57 {
58 58 if constexpr(is_QWidgetOrDerived<viewport_type<T>>)
59 59 {
60 60 widget->viewport()->setMouseTracking(true);
61 61 }
62 62 else
63 63 {
64 64 widget->setMouseTracking(true);
65 65 }
66 66 }
67 67 else
68 68 {
69 69 widget->setMouseTracking(true);
70 70 }
71 71 }
72 72
73 73 template <typename T, typename T2>
74 74 auto getItem(T* widget, T2 itemIndex)
75 75 {
76 76 if constexpr(has_topLevelItem<T>)
77 77 {
78 78 return widget->topLevelItem(itemIndex);
79 79 }
80 80 else
81 81 {
82 82 return widget->item(itemIndex);
83 83 }
84 84 }
85 85
86 86 #define SELECT_ITEM(widget, itemIndex, item)\
87 87 auto item = getItem(widget, itemIndex);\
88 {\
89 auto itemCenterPos = widget->visualItemRect(item).center();\
90 QTest::mouseClick(widget->viewport(), Qt::LeftButton, Qt::NoModifier, itemCenterPos);\
91 QVERIFY(widget->selectedItems().size() > 0);\
92 QVERIFY(widget->selectedItems().contains(item));\
88 {\
89 auto itemCenterPos = widget->visualItemRect(item).center();\
90 QTest::mouseClick(widget->viewport(), Qt::LeftButton, Qt::NoModifier, itemCenterPos);\
91 QVERIFY(widget->selectedItems().size() > 0);\
92 QVERIFY(widget->selectedItems().contains(item));\
93 93 }
94 94
95 95
96 96 #define GET_CHILD_WIDGET_FOR_GUI_TESTS(parent, child, childType, childName)\
97 97 childType* child = parent.findChild<childType*>(childName); \
98 98 QVERIFY(child!=Q_NULLPTR); \
99 99 setMouseTracking(child);
100 100
101 101 template<typename T1, typename T2, typename T3, typename T4=void>
102 102 void dragnDropItem(T1* sourceWidget, T2* destWidget, T3* item, T4* destItem=Q_NULLPTR)
103 103 {
104 104 auto itemCenterPos = sourceWidget->visualItemRect(item).center();
105 105 if constexpr(has_viewport<T1>)
106 106 {
107 107 QTest::mousePress(sourceWidget->viewport(), Qt::LeftButton, Qt::NoModifier, itemCenterPos);
108 108 }
109 109 else
110 110 {
111 111 QTest::mousePress(sourceWidget, Qt::LeftButton, Qt::NoModifier, itemCenterPos);
112 112 }
113 113 mouseMove(sourceWidget,itemCenterPos, Qt::LeftButton);
114 114 itemCenterPos+=QPoint(0,-10);
115 115 QTimer::singleShot(100,[destWidget,destItem](){
116 116 mouseMove(destWidget, destWidget->rect().center(),Qt::LeftButton);
117 117 mouseMove(destWidget, destWidget->rect().center()+QPoint(0,-10),Qt::LeftButton);
118 118 if constexpr(!std::is_same_v<void, T4>)
119 119 {
120 120 auto destItemCenterPos = destWidget->visualItemRect(destItem).center();
121 121 QTest::mouseRelease(destWidget, Qt::LeftButton, Qt::NoModifier, destItemCenterPos);
122 122 }
123 123 else if constexpr(has_viewport<T2>)
124 124 {
125 125 QTest::mouseRelease(destWidget->viewport(), Qt::LeftButton);
126 126 }
127 127 else
128 128 {
129 129 QTest::mouseRelease(destWidget, Qt::LeftButton);
130 130 }
131 131 QTest::mouseRelease(destWidget->viewport(), Qt::LeftButton);
132 132 });
133 133 mouseMove(sourceWidget,itemCenterPos,Qt::LeftButton);
134 134 }
135 135
136 #define PREPARE_GUI_TEST(main_widget)\
137 main_widget.setGeometry(QRect(QPoint(QApplication::desktop()->geometry().center() - QPoint(250, 250)),\
138 QSize(500, 500)));\
139 main_widget.show();\
140 qApp->setActiveWindow(&main_widget);\
141 QVERIFY(QTest::qWaitForWindowActive(&main_widget))
136 template<typename T>
137 bool prepare_gui_test(T* w)
138 {
139 w->setGeometry(QRect(QPoint(QApplication::desktop()->geometry().center() - QPoint(250, 250)),
140 QSize(500, 500)));
141 w->show();
142 qApp->setActiveWindow(w);
143 return QTest::qWaitForWindowActive(w);
144 }
142 145
143 146 #define GET_CHILD_WIDGET_FOR_GUI_TESTS(parent, child, childType, childName)\
144 147 childType* child = parent.findChild<childType*>(childName); \
145 148 QVERIFY(child!=Q_NULLPTR); \
146 149 setMouseTracking(child);
147 150
148 151 #endif
@@ -1,87 +1,104
1 1 #include <QtTest>
2 2 #include <QObject>
3 3 #include <QString>
4 4 #include <QScreen>
5 5 #include <QMainWindow>
6 6 #include <QWheelEvent>
7 7
8 8 #include <qcustomplot.h>
9 9
10 10 #include <SqpApplication.h>
11 11 #include <Variable/VariableController2.h>
12 12 #include <Common/cpp_utils.h>
13 13
14 14 #include <Visualization/VisualizationZoneWidget.h>
15 #include <Visualization/VisualizationGraphWidget.h>
15 16 #include <TestProviders.h>
16 17 #include <GUITestUtils.h>
17 18
18 19
19 20 ALIAS_TEMPLATE_FUNCTION(isReady, static_cast<SqpApplication *>(qApp)->variableController().isReady)
20 21
21 #define A_SIMPLE_GRAPH_FIXTURE \
22 VisualizationZoneWidget w;\
23 PREPARE_GUI_TEST(w);\
24 auto provider = std::make_shared<SimpleRange<10> >();\
25 auto range = DateTimeRange::fromDateTime(QDate(2018, 8, 7), QTime(14, 00), QDate(2018, 8, 7),\
26 QTime(16, 00));\
27 auto var = static_cast<SqpApplication *>(qApp)->variableController().createVariable(\
28 "V1", {{"", "scalar"}}, provider, range);\
29 while (!isReady(var))\
30 QCoreApplication::processEvents();\
31 //w.addVariable(var, range);\
32 auto cent = center(&w);
33
22 template <int GraphCount=2>
23 std::tuple< std::unique_ptr<VisualizationZoneWidget>,
24 std::vector<std::shared_ptr<Variable>>,
25 std::vector<VisualizationGraphWidget*> >
26 build_multi_graph_test()
27 {
28 auto w = std::make_unique<VisualizationZoneWidget>();
29 auto provider = std::make_shared<SimpleRange<10> >();
30 auto range = DateTimeRange::fromDateTime(QDate(2018, 8, 7), QTime(14, 00), QDate(2018, 8, 7),QTime(16, 00));
31 std::vector<std::shared_ptr<Variable>> variables;
32 std::vector<VisualizationGraphWidget*> graphs;
33 for(auto i=0;i<GraphCount;i++)
34 {
35 auto var = static_cast<SqpApplication *>(qApp)->variableController().createVariable(
36 QString("V%1").arg(i), {{"", "scalar"}}, provider, range);
37 auto graph = new VisualizationGraphWidget();
38 graph->addVariable(var, range);
39 while (!isReady(var))
40 QCoreApplication::processEvents();
41 variables.push_back(var);
42 graphs.push_back(graph);
43 w->addGraph(graph);
44 }
45 auto cent = center(w.get());
46 return {std::move(w), variables, graphs};
47 }
34 48
35 49
36 class A_SimpleGraph : public QObject {
50 class A_MultipleSyncGraphs : public QObject {
37 51 Q_OBJECT
38 52 public:
39 explicit A_SimpleGraph(QObject *parent = Q_NULLPTR) : QObject(parent) {}
53 explicit A_MultipleSyncGraphs(QObject *parent = Q_NULLPTR) : QObject(parent) {}
40 54
41 55 private slots:
42 56 void scrolls_left_with_mouse()
43 57 {
44 A_SIMPLE_GRAPH_FIXTURE;
58 auto [w, variables, graphs] = build_multi_graph_test<3>();
59 QVERIFY(prepare_gui_test(w.get()));
45 60
46 while (!isReady(var))
47 QCoreApplication::processEvents();
48 auto r = var->range();
49 61 /*
50 62 * Scrolling to the left implies going back in time
51 63 * Scroll only implies keeping the same delta T -> shit only transformation
52 64 */
53 65 //QVERIFY(r.m_TEnd < range.m_TEnd);
54 66 //QVERIFY(SciQLop::numeric::almost_equal<double>(r.delta(),range.delta(),1));
55 67 }
56 68
57 69 void scrolls_right_with_mouse()
58 70 {
59 A_SIMPLE_GRAPH_FIXTURE;
71 auto [w, variables, graphs] = build_multi_graph_test<3>();
72 QVERIFY(prepare_gui_test(w.get()));
73 w->show();
74 for(int i=0;i<10000;i++)
75 {
76 QThread::usleep(1000);
77 qApp->processEvents();
78 }
60 79
61 while (!isReady(var))
62 QCoreApplication::processEvents();
63 auto r = var->range();
64 80 /*
65 81 * Scrolling to the right implies going forward in time
66 82 * Scroll only implies keeping the same delta T -> shit only transformation
67 83 */
68 84 //QVERIFY(r.m_TEnd > range.m_TEnd);
69 85 //QVERIFY(SciQLop::numeric::almost_equal<double>(r.delta(),range.delta(),1));
70 86 }
71 87 };
72 88
89
73 90 QT_BEGIN_NAMESPACE
74 91 QTEST_ADD_GPU_BLACKLIST_SUPPORT_DEFS
75 92 QT_END_NAMESPACE
76 93 int main(int argc, char *argv[])
77 94 {
78 95 SqpApplication app{argc, argv};
79 96 app.setAttribute(Qt::AA_Use96Dpi, true);
80 97 QTEST_DISABLE_KEYPAD_NAVIGATION;
81 98 QTEST_ADD_GPU_BLACKLIST_SUPPORT;
82 A_SimpleGraph tc;
99 A_MultipleSyncGraphs tc;
83 100 QTEST_SET_MAIN_SOURCE_PATH;
84 101 return QTest::qExec(&tc, argc, argv);
85 102 }
86 103
87 104 #include "main.moc"
@@ -1,101 +1,107
1 1 #include <QtTest>
2 2 #include <QObject>
3 3 #include <QString>
4 4 #include <QScreen>
5 5 #include <QMainWindow>
6 6 #include <QWheelEvent>
7 7
8 8 #include <qcustomplot.h>
9 9
10 10 #include <SqpApplication.h>
11 11 #include <Variable/VariableController2.h>
12 12 #include <Common/cpp_utils.h>
13 13
14 14 #include <Visualization/VisualizationGraphWidget.h>
15 15 #include <TestProviders.h>
16 16 #include <GUITestUtils.h>
17 17
18 18
19 19 ALIAS_TEMPLATE_FUNCTION(isReady, static_cast<SqpApplication *>(qApp)->variableController().isReady)
20 20
21 #define A_SIMPLE_GRAPH_FIXTURE \
22 VisualizationGraphWidget w;\
23 PREPARE_GUI_TEST(w);\
24 auto provider = std::make_shared<SimpleRange<10> >();\
25 auto range = DateTimeRange::fromDateTime(QDate(2018, 8, 7), QTime(14, 00), QDate(2018, 8, 7),\
26 QTime(16, 00));\
27 auto var = static_cast<SqpApplication *>(qApp)->variableController().createVariable(\
28 "V1", {{"", "scalar"}}, provider, range);\
29 while (!isReady(var))\
30 QCoreApplication::processEvents();\
31 w.addVariable(var, range);\
32 auto cent = center(&w);
33
21 std::tuple< std::unique_ptr<VisualizationGraphWidget>,
22 std::shared_ptr<Variable>,
23 DateTimeRange >
24 build_simple_graph_test()
25 {
26 auto w = std::make_unique<VisualizationGraphWidget>();
27 auto provider = std::make_shared<SimpleRange<10> >();
28 auto range = DateTimeRange::fromDateTime(QDate(2018, 8, 7), QTime(14, 00), QDate(2018, 8, 7),QTime(16, 00));
29 auto var = static_cast<SqpApplication *>(qApp)->variableController().createVariable("V1", {{"", "scalar"}}, provider, range);
30 w->addVariable(var, range);
31 while (!isReady(var))
32 QCoreApplication::processEvents();
33 auto cent = center(w.get());
34 return {std::move(w), var, range};
35 }
34 36
35 37
36 38 class A_SimpleGraph : public QObject {
37 39 Q_OBJECT
38 40 public:
39 41 explicit A_SimpleGraph(QObject *parent = Q_NULLPTR) : QObject(parent) {}
40 42
41 43 private slots:
42 44 void scrolls_left_with_mouse()
43 45 {
44 A_SIMPLE_GRAPH_FIXTURE;
46 auto [w, var, range] = build_simple_graph_test();
47 QVERIFY(prepare_gui_test(w.get()));
48 auto cent = center(w.get());
45 49
46 50 for (auto i = 0; i < 100; i++) {
47 QTest::mousePress(&w, Qt::LeftButton, Qt::NoModifier, cent, 1);
48 mouseMove(&w, {cent.x() + 200, cent.y()}, Qt::LeftButton);
49 QTest::mouseRelease(&w, Qt::LeftButton);
51 QTest::mousePress(w.get(), Qt::LeftButton, Qt::NoModifier, cent, 1);
52 mouseMove(w.get(), {cent.x() + 200, cent.y()}, Qt::LeftButton);
53 QTest::mouseRelease(w.get(), Qt::LeftButton);
50 54 while (!isReady(var))
51 55 QCoreApplication::processEvents();
52 56 }
53 57 while (!isReady(var))
54 58 QCoreApplication::processEvents();
55 59 auto r = var->range();
56 60 /*
57 61 * Scrolling to the left implies going back in time
58 62 * Scroll only implies keeping the same delta T -> shit only transformation
59 63 */
60 64 QVERIFY(r.m_TEnd < range.m_TEnd);
61 65 QVERIFY(SciQLop::numeric::almost_equal<double>(r.delta(),range.delta(),1));
62 66 }
63 67
64 68 void scrolls_right_with_mouse()
65 69 {
66 A_SIMPLE_GRAPH_FIXTURE;
70 auto [w, var, range] = build_simple_graph_test();
71 QVERIFY(prepare_gui_test(w.get()));
72 auto cent = center(w.get());
67 73
68 74 for (auto i = 0; i < 100; i++) {
69 QTest::mousePress(&w, Qt::LeftButton, Qt::NoModifier, cent, 1);
70 mouseMove(&w, {cent.x() - 200, cent.y()}, Qt::LeftButton);
71 QTest::mouseRelease(&w, Qt::LeftButton);
75 QTest::mousePress(w.get(), Qt::LeftButton, Qt::NoModifier, cent, 1);
76 mouseMove(w.get(), {cent.x() - 200, cent.y()}, Qt::LeftButton);
77 QTest::mouseRelease(w.get(), Qt::LeftButton);
72 78 while (!isReady(var))
73 79 QCoreApplication::processEvents();
74 80 }
75 81 while (!isReady(var))
76 82 QCoreApplication::processEvents();
77 83 auto r = var->range();
78 84 /*
79 85 * Scrolling to the right implies going forward in time
80 86 * Scroll only implies keeping the same delta T -> shit only transformation
81 87 */
82 88 QVERIFY(r.m_TEnd > range.m_TEnd);
83 89 QVERIFY(SciQLop::numeric::almost_equal<double>(r.delta(),range.delta(),1));
84 90 }
85 91 };
86 92
87 93 QT_BEGIN_NAMESPACE
88 94 QTEST_ADD_GPU_BLACKLIST_SUPPORT_DEFS
89 95 QT_END_NAMESPACE
90 96 int main(int argc, char *argv[])
91 97 {
92 98 SqpApplication app{argc, argv};
93 99 app.setAttribute(Qt::AA_Use96Dpi, true);
94 100 QTEST_DISABLE_KEYPAD_NAVIGATION;
95 101 QTEST_ADD_GPU_BLACKLIST_SUPPORT;
96 102 A_SimpleGraph tc;
97 103 QTEST_SET_MAIN_SOURCE_PATH;
98 104 return QTest::qExec(&tc, argc, argv);
99 105 }
100 106
101 107 #include "main.moc"
General Comments 0
You need to be logged in to leave comments. Login now