Line data Source code
1 : #ifndef BATTERY_H
2 : #define BATTERY_H
3 :
4 : #include <QWidget>
5 : #include <QPainter>
6 : #include <QPen>
7 : #include <QBrush>
8 : #include <QTimer>
9 : #include <QPaintEvent>
10 : #include <gmock/gmock.h>
11 : #include <iostream>
12 : #include <QPixmap>
13 : #include <QDebug>
14 : #include <QDir>
15 : #include <QCoreApplication>
16 :
17 : //test class (mock)
18 : class TestPainter {
19 : public:
20 4 : virtual ~TestPainter() = default;
21 : virtual void drawPixmap(const QRect &targetRect, const QPixmap &pixmap) = 0;
22 : virtual void drawArc(int x, int y, int width, int height, int startAngle, int spanAngle) = 0;
23 : virtual void setPen(const QPen &pen) = 0;
24 : virtual void drawText(const QRectF &rectangle, int flags, const QString &text) = 0;
25 : virtual void setRenderHint(QPainter::RenderHint hint, bool on) = 0;
26 : virtual bool begin(QPaintDevice *device) = 0;
27 : virtual bool end() = 0;
28 : virtual bool isActive() const = 0;
29 : virtual void setFont(const QFont &font) = 0;
30 : virtual QRect boundingRect(const QRect &rect, int flags, const QString &text) = 0;
31 : };
32 :
33 : //mock painter methods for testing purposes
34 : class MockPainter : public TestPainter {
35 : public:
36 2 : MOCK_METHOD(void, drawPixmap, (const QRect &targetRect, const QPixmap &pixmap), (override));
37 601 : MOCK_METHOD(void, drawArc, (int x, int y, int width, int height, int startAngle, int spanAngle), (override)); // Updated
38 603 : MOCK_METHOD(void, setPen, (const QPen &pen), (override));
39 3 : MOCK_METHOD(void, drawText, (const QRectF &rectangle, int flags, const QString &text), (override));
40 2 : MOCK_METHOD(void, setRenderHint, (QPainter::RenderHint hint, bool on), (override));
41 2 : MOCK_METHOD(bool, begin, (QPaintDevice *device), (override));
42 2 : MOCK_METHOD(bool, end, (), (override));
43 0 : MOCK_METHOD(bool, isActive, (), (const, override));
44 3 : MOCK_METHOD(void, setFont, (const QFont &font), (override));
45 2 : MOCK_METHOD(QRect, boundingRect, (const QRect &rect, int flags, const QString &text), (override));
46 : };
47 :
48 : //calling painter functions, overiding MockPainter (the test class)
49 : class QPainterCaller : public TestPainter {
50 : public:
51 3 : QPainterCaller(QPainter *painter) : painter(painter) {}
52 1506 : void setPen(const QPen &pen) override {
53 1506 : painter->setPen(pen);
54 1506 : }
55 1500 : void drawArc(int x, int y, int width, int height, int startAngle, int spanAngle) override {
56 1500 : painter->drawArc(x, y, width, height, startAngle, spanAngle);
57 1500 : }
58 3 : void drawPixmap(const QRect &targetRect, const QPixmap &pixmap) override {
59 3 : painter->drawPixmap(targetRect, pixmap);
60 3 : }
61 6 : void drawText(const QRectF &rectangle, int flags, const QString &text) override {
62 6 : painter->drawText(rectangle, flags, text);
63 6 : }
64 3 : void setRenderHint(QPainter::RenderHint hint, bool on) override {
65 3 : painter->setRenderHint(hint, on);
66 3 : }
67 0 : bool begin(QPaintDevice *device) override {
68 0 : return painter->begin(device);
69 : }
70 0 : bool end() override {
71 0 : painter->end();
72 0 : return true;
73 : }
74 0 : bool isActive() const override {
75 0 : return painter->isActive();
76 : }
77 6 : void setFont(const QFont &font) override {
78 6 : painter->setFont(font);
79 6 : }
80 3 : QRect boundingRect(const QRect &rect, int flags, const QString &text) override {
81 3 : return painter->boundingRect(rect, flags, text);
82 : }
83 : private:
84 : QPainter *painter;
85 : };
86 :
87 :
88 : class Battery : public QWidget
89 : {
90 : Q_OBJECT
91 : public:
92 : Battery(QWidget *parent = nullptr);
93 : ~Battery();
94 : void set_current(int n);
95 :
96 : void draw_text(TestPainter *painter, QRect bottomRect);
97 : void draw_arcs(TestPainter *activePainter);
98 : void draw_pixmap(TestPainter *activePainter);
99 : int get_current();
100 : protected:
101 : void paintEvent(QPaintEvent *event) override;
102 :
103 : private:
104 : int current;
105 : const int max;
106 : int flag = 0;
107 : TestPainter* test_painter = nullptr; // Pointer to an external painter for testing
108 :
109 : public:
110 2 : void setTestPainter(TestPainter* painter) { test_painter = painter; }
111 : };
112 :
113 : #endif // BATTERY_H
|