1 /****************************************************************************
2 **
3 ** Copyright (C) 2016 The Qt Company Ltd.
4 ** Contact: https://www.qt.io/licensing/
5 **
6 ** This file is part of Qt Creator.
7 **
8 ** Commercial License Usage
9 ** Licensees holding valid commercial Qt licenses may use this file in
10 ** accordance with the commercial license agreement provided with the
11 ** Software or, alternatively, in accordance with the terms contained in
12 ** a written agreement between you and The Qt Company. For licensing terms
13 ** and conditions see https://www.qt.io/terms-conditions. For further
14 ** information use the contact form at https://www.qt.io/contact-us.
15 **
16 ** GNU General Public License Usage
17 ** Alternatively, this file may be used under the terms of the GNU
18 ** General Public License version 3 as published by the Free Software
19 ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
20 ** included in the packaging of this file. Please review the following
21 ** information to ensure the GNU General Public License requirements will
22 ** be met: https://www.gnu.org/licenses/gpl-3.0.html.
23 **
24 ****************************************************************************/
25 
26 #include <QtTest>
27 #include <tracing/timelinemodelaggregator.h>
28 #include <tracing/timelineabstractrenderer_p.h>
29 
30 using namespace Timeline;
31 
32 class DummyRenderer : public TimelineAbstractRenderer {
33     friend class tst_TimelineAbstractRenderer;
34 public:
DummyRenderer()35     DummyRenderer() : TimelineAbstractRenderer(*new TimelineAbstractRendererPrivate) {}
36 };
37 
38 class tst_TimelineAbstractRenderer : public QObject
39 {
40     Q_OBJECT
41 
42 private slots:
43     void privateCtor();
44     void selectionLocked();
45     void selectedItem();
46     void model();
47     void notes();
48     void zoomer();
49     void dirty();
50 };
51 
privateCtor()52 void tst_TimelineAbstractRenderer::privateCtor()
53 {
54     DummyRenderer renderer;
55     QVERIFY(renderer.d_func() != 0);
56 }
57 
selectionLocked()58 void tst_TimelineAbstractRenderer::selectionLocked()
59 {
60     TimelineAbstractRenderer renderer;
61     QSignalSpy spy(&renderer, SIGNAL(selectionLockedChanged(bool)));
62     QCOMPARE(spy.count(), 0);
63     QVERIFY(renderer.selectionLocked());
64     renderer.setSelectionLocked(false);
65     QCOMPARE(spy.count(), 1);
66     QVERIFY(!renderer.selectionLocked());
67     renderer.setSelectionLocked(true);
68     QCOMPARE(spy.count(), 2);
69     QVERIFY(renderer.selectionLocked());
70 }
71 
selectedItem()72 void tst_TimelineAbstractRenderer::selectedItem()
73 {
74     TimelineAbstractRenderer renderer;
75     QSignalSpy spy(&renderer, SIGNAL(selectedItemChanged(int)));
76     QCOMPARE(spy.count(), 0);
77     QCOMPARE(renderer.selectedItem(), -1);
78     renderer.setSelectedItem(12);
79     QCOMPARE(spy.count(), 1);
80     QCOMPARE(renderer.selectedItem(), 12);
81 }
82 
model()83 void tst_TimelineAbstractRenderer::model()
84 {
85     TimelineAbstractRenderer renderer;
86     TimelineModelAggregator aggregator;
87     QSignalSpy spy(&renderer, SIGNAL(modelChanged(TimelineModel*)));
88     QVERIFY(!renderer.modelDirty());
89     QCOMPARE(spy.count(), 0);
90     TimelineModel model(&aggregator);
91     QCOMPARE(renderer.model(), static_cast<TimelineModel *>(0));
92     renderer.setModel(&model);
93     QVERIFY(renderer.modelDirty());
94     QCOMPARE(spy.count(), 1);
95     QCOMPARE(renderer.model(), &model);
96     renderer.setModel(0);
97     QVERIFY(renderer.modelDirty());
98     QCOMPARE(spy.count(), 2);
99     QCOMPARE(renderer.model(), static_cast<TimelineModel *>(0));
100 }
101 
notes()102 void tst_TimelineAbstractRenderer::notes()
103 {
104     TimelineAbstractRenderer renderer;
105     QSignalSpy spy(&renderer, SIGNAL(notesChanged(TimelineNotesModel*)));
106     QVERIFY(!renderer.notesDirty());
107     QCOMPARE(spy.count(), 0);
108     TimelineNotesModel notes;
109     QCOMPARE(renderer.notes(), static_cast<TimelineNotesModel *>(0));
110     renderer.setNotes(&notes);
111     QVERIFY(renderer.notesDirty());
112     QCOMPARE(spy.count(), 1);
113     QCOMPARE(renderer.notes(), &notes);
114     renderer.setNotes(0);
115     QVERIFY(renderer.notesDirty());
116     QCOMPARE(spy.count(), 2);
117     QCOMPARE(renderer.notes(), static_cast<TimelineNotesModel *>(0));
118 }
119 
zoomer()120 void tst_TimelineAbstractRenderer::zoomer()
121 {
122     TimelineAbstractRenderer renderer;
123     QSignalSpy spy(&renderer, SIGNAL(zoomerChanged(TimelineZoomControl*)));
124     QCOMPARE(spy.count(), 0);
125     TimelineZoomControl zoomer;
126     QCOMPARE(renderer.zoomer(), static_cast<TimelineZoomControl *>(0));
127     renderer.setZoomer(&zoomer);
128     QCOMPARE(spy.count(), 1);
129     QCOMPARE(renderer.zoomer(), &zoomer);
130     renderer.setZoomer(0);
131     QCOMPARE(spy.count(), 2);
132     QCOMPARE(renderer.zoomer(), static_cast<TimelineZoomControl *>(0));
133 }
134 
dirty()135 void tst_TimelineAbstractRenderer::dirty()
136 {
137     DummyRenderer renderer;
138     QVERIFY(!renderer.modelDirty());
139     QVERIFY(!renderer.notesDirty());
140     QVERIFY(!renderer.rowHeightsDirty());
141 
142     renderer.setModelDirty();
143     QVERIFY(renderer.modelDirty());
144     renderer.setNotesDirty();
145     QVERIFY(renderer.notesDirty());
146     renderer.setRowHeightsDirty();
147     QVERIFY(renderer.rowHeightsDirty());
148 
149     renderer.updatePaintNode(0, 0);
150     QVERIFY(!renderer.modelDirty());
151     QVERIFY(!renderer.notesDirty());
152     QVERIFY(!renderer.rowHeightsDirty());
153 }
154 
155 QTEST_MAIN(tst_TimelineAbstractRenderer)
156 
157 #include "tst_timelineabstractrenderer.moc"
158