1 | /* This file is part of the KDE project |
2 | Copyright (C) 2012 Dag Andersen <danders@get2net.dk> |
3 | |
4 | This library is free software; you can redistribute it and/or |
5 | modify it under the terms of the GNU Library General Public |
6 | License as published by the Free Software Foundation; either |
7 | version 2 of the License, or (at your option) any later version. |
8 | |
9 | This library is distributed in the hope that it will be useful, |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
12 | Library General Public License for more details. |
13 | |
14 | You should have received a copy of the GNU Library General Public License |
15 | along with this library; see the file COPYING.LIB. If not, write to |
16 | the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
17 | Boston, MA 02110-1301, USA. |
18 | */ |
19 | #include "WorkPackageProxyModelTester.h" |
20 | #include "kptcommand.h" |
21 | #include "kpttask.h" |
22 | #include "kptnode.h" |
23 | #include "kptnodeitemmodel.h" |
24 | |
25 | #include <QModelIndex> |
26 | |
27 | #include <qtest_kde.h> |
28 | #include <kdebug.h> |
29 | |
30 | #include "../../kernel/tests/debug.cpp" |
31 | |
32 | namespace KPlato |
33 | { |
34 | |
35 | Task *WorkPackageProxyModelTester::addTask( Node *parent, int after ) |
36 | { |
37 | Task *task = project.createTask(); |
38 | TaskAddCmd cmd( &project, task, parent->childNode( after ) ); |
39 | cmd.redo(); |
40 | ResourceGroupRequest *gr = new ResourceGroupRequest( project.resourceGroupAt(0) ); |
41 | ResourceRequest *rr = new ResourceRequest( project.resourceGroupAt(0)->resourceAt(0), 100 ); |
42 | gr->addResourceRequest( rr ); |
43 | AddResourceGroupRequestCmd c( *task, gr ); |
44 | c.redo(); |
45 | return task; |
46 | } |
47 | |
48 | void WorkPackageProxyModelTester::removeTask( Node *task ) |
49 | { |
50 | NodeDeleteCmd cmd( task ); |
51 | cmd.redo(); |
52 | } |
53 | |
54 | void WorkPackageProxyModelTester::moveTask( Node *task, Node *newParent, int newPos ) |
55 | { |
56 | NodeMoveCmd cmd( &project, task, newParent, newPos ); |
57 | cmd.redo(); |
58 | } |
59 | |
60 | void WorkPackageProxyModelTester::initTestCase() |
61 | { |
62 | project.setName( "P1" ); |
63 | project.setId( project.uniqueNodeId() ); |
64 | project.registerNodeId( &project ); |
65 | Calendar *calendar = new Calendar(); |
66 | calendar->setName( "C1" ); |
67 | calendar->setDefault( true ); |
68 | QTime t1( 9, 0, 0 ); |
69 | QTime t2 ( 17, 0, 0 ); |
70 | int length = t1.msecsTo( t2 ); |
71 | for ( int i=1; i <= 7; ++i ) { |
72 | CalendarDay *d = calendar->weekday( i ); |
73 | d->setState( CalendarDay::Working ); |
74 | d->addInterval( t1, length ); |
75 | } |
76 | project.addCalendar( calendar ); |
77 | |
78 | QCOMPARE( m_model.rowCount(), 0 ); |
79 | m_model.setProject( &project ); |
80 | QCOMPARE( m_model.rowCount(), 0 ); |
81 | |
82 | ResourceGroup *g = new ResourceGroup(); |
83 | g->setName( "G1" ); |
84 | project.addResourceGroup( g ); |
85 | Resource *r = new Resource(); |
86 | r->setName( "R1" ); |
87 | project.addResource( g, r ); |
88 | |
89 | sm = project.createScheduleManager(); |
90 | m_model.setScheduleManager( sm ); |
91 | } |
92 | |
93 | void WorkPackageProxyModelTester::testInsert() |
94 | { |
95 | Task *task = addTask( &project, 0 ); |
96 | task->setName( "T1" ); |
97 | QCOMPARE( m_model.baseModel()->rowCount(), 1 ); |
98 | QCOMPARE( m_model.rowCount(), 0 ); // filtered, (not scheduled) |
99 | |
100 | sm->createSchedules(); |
101 | project.calculate( *sm ); |
102 | QVERIFY( task->isScheduled() ); |
103 | QCOMPARE( m_model.rowCount(), 1 ); |
104 | QCOMPARE( m_model.index( 0, NodeModel::NodeName ).data().toString(), QString( "T1" ) ); |
105 | |
106 | task = addTask( &project, -1 ); |
107 | task->setName( "T2" ); |
108 | QCOMPARE( m_model.baseModel()->rowCount(), 2 ); |
109 | QCOMPARE( m_model.rowCount(), 1 ); // filtered, (not scheduled) |
110 | sm->createSchedules(); |
111 | project.calculate( *sm ); |
112 | QVERIFY( task->isScheduled() ); |
113 | QCOMPARE( m_model.rowCount(), 2 ); |
114 | QCOMPARE( m_model.index( 1, NodeModel::NodeName ).data().toString(), QString( "T2" ) ); |
115 | |
116 | task = addTask( &project, -1 ); |
117 | task->setName( "T3" ); |
118 | QCOMPARE( m_model.baseModel()->rowCount(), 3 ); |
119 | QCOMPARE( m_model.rowCount(), 2 ); // filtered, (not scheduled) |
120 | sm->createSchedules(); |
121 | project.calculate( *sm ); |
122 | QVERIFY( task->isScheduled() ); |
123 | QCOMPARE( m_model.rowCount(), 3 ); |
124 | QCOMPARE( m_model.index( 2, NodeModel::NodeName ).data().toString(), QString( "T3" ) ); |
125 | } |
126 | |
127 | void WorkPackageProxyModelTester::testRemove() |
128 | { |
129 | |
130 | removeTask( project.childNode( 0 ) ); |
131 | QCOMPARE( m_model.rowCount(), 2 ); |
132 | QCOMPARE( m_model.index( 0, NodeModel::NodeName ).data().toString(), QString( "T2" ) ); |
133 | QCOMPARE( m_model.index( 1, NodeModel::NodeName ).data().toString(), QString( "T3" ) ); |
134 | |
135 | removeTask( project.childNode( 1 ) ); |
136 | QCOMPARE( m_model.rowCount(), 1 ); |
137 | QCOMPARE( m_model.index( 0, NodeModel::NodeName ).data().toString(), QString( "T2" ) ); |
138 | |
139 | removeTask( project.childNode( 0 ) ); |
140 | QCOMPARE( m_model.rowCount(), 0 ); |
141 | } |
142 | |
143 | void WorkPackageProxyModelTester::testMove() |
144 | { |
145 | testInsert(); |
146 | //Debug::print( &project, "T1, T2, T3 ---------", true ); |
147 | moveTask( project.childNode( 0 ), &project, 1 ); |
148 | //Debug::print( &project, "T2, T1, T3 ---------", true ); |
149 | QCOMPARE( m_model.rowCount(), 3 ); |
150 | QCOMPARE( m_model.index( 0, NodeModel::NodeName ).data().toString(), QString( "T2" ) ); |
151 | QCOMPARE( m_model.index( 1, NodeModel::NodeName ).data().toString(), QString( "T1" ) ); |
152 | QCOMPARE( m_model.index( 2, NodeModel::NodeName ).data().toString(), QString( "T3" ) ); |
153 | |
154 | moveTask( project.childNode( 1 ), &project, 0 ); |
155 | QCOMPARE( m_model.index( 0, NodeModel::NodeName ).data().toString(), QString( "T1" ) ); |
156 | QCOMPARE( m_model.index( 1, NodeModel::NodeName ).data().toString(), QString( "T2" ) ); |
157 | QCOMPARE( m_model.index( 2, NodeModel::NodeName ).data().toString(), QString( "T3" ) ); |
158 | |
159 | moveTask( project.childNode( 1 ), &project, 0 ); |
160 | QCOMPARE( m_model.index( 0, NodeModel::NodeName ).data().toString(), QString( "T2" ) ); |
161 | QCOMPARE( m_model.index( 1, NodeModel::NodeName ).data().toString(), QString( "T1" ) ); |
162 | QCOMPARE( m_model.index( 2, NodeModel::NodeName ).data().toString(), QString( "T3" ) ); |
163 | |
164 | moveTask( project.childNode( 0 ), &project, -1 ); // last |
165 | QCOMPARE( m_model.index( 0, NodeModel::NodeName ).data().toString(), QString( "T1" ) ); |
166 | QCOMPARE( m_model.index( 1, NodeModel::NodeName ).data().toString(), QString( "T3" ) ); |
167 | QCOMPARE( m_model.index( 2, NodeModel::NodeName ).data().toString(), QString( "T2" ) ); |
168 | } |
169 | |
170 | void WorkPackageProxyModelTester::testMoveChild() |
171 | { |
172 | while ( project.numChildren() > 0 ) { |
173 | Node *t = project.childNode( 0 ); |
174 | project.takeTask( t ); |
175 | delete t; |
176 | } |
177 | testInsert(); |
178 | Task *task = addTask( &project, 1 ); // after 1 = 2 :( |
179 | task->setName( "T4" ); |
180 | //Debug::print( &project, "T1, T2, T4, T3 ----", true ); |
181 | QCOMPARE( project.numChildren(), 4 ); |
182 | QCOMPARE( m_model.rowCount(), 3 ); // filtered, (not scheduled) |
183 | |
184 | sm->createSchedules(); |
185 | project.calculate( *sm ); |
186 | //Debug::print( &project, "T1, T2, T4, T3 ----", true ); |
187 | QVERIFY( task->isScheduled() ); |
188 | QCOMPARE( m_model.rowCount(), 4 ); |
189 | QCOMPARE( m_model.index( 0, NodeModel::NodeName ).data().toString(), QString( "T1" ) ); |
190 | QCOMPARE( m_model.index( 1, NodeModel::NodeName ).data().toString(), QString( "T2" ) ); |
191 | QCOMPARE( m_model.index( 2, NodeModel::NodeName ).data().toString(), QString( "T4" ) ); |
192 | QCOMPARE( m_model.index( 3, NodeModel::NodeName ).data().toString(), QString( "T3" ) ); |
193 | |
194 | project.indentTask( project.childNode( 2 ) ); |
195 | //Debug::print( &project, "T1, T2 -> T4, T3 ----", true ); |
196 | QCOMPARE( m_model.rowCount(), 3 ); |
197 | QCOMPARE( m_model.index( 0, NodeModel::NodeName ).data().toString(), QString( "T1" ) ); |
198 | QCOMPARE( m_model.index( 1, NodeModel::NodeName ).data().toString(), QString( "T4" ) ); |
199 | QCOMPARE( m_model.index( 2, NodeModel::NodeName ).data().toString(), QString( "T3" ) ); |
200 | |
201 | moveTask( project.childNode( 1 )->childNode( 0 ), project.childNode( 0 ), 0 ); |
202 | //Debug::print( &project, "T1 -> T4, T2, T3 ----", true ); |
203 | QCOMPARE( m_model.rowCount(), 3 ); |
204 | QCOMPARE( m_model.index( 0, NodeModel::NodeName ).data().toString(), QString( "T4" ) ); |
205 | QCOMPARE( m_model.index( 1, NodeModel::NodeName ).data().toString(), QString( "T2" ) ); |
206 | QCOMPARE( m_model.index( 2, NodeModel::NodeName ).data().toString(), QString( "T3" ) ); |
207 | |
208 | moveTask( project.childNode( 0 )->childNode( 0 ), project.childNode( 2 ), 0 ); |
209 | //Debug::print( &project, "T1, T2, T3 -> T4 ----", true ); |
210 | QCOMPARE( m_model.rowCount(), 3 ); |
211 | QCOMPARE( m_model.index( 0, NodeModel::NodeName ).data().toString(), QString( "T1" ) ); |
212 | QCOMPARE( m_model.index( 1, NodeModel::NodeName ).data().toString(), QString( "T2" ) ); |
213 | QCOMPARE( m_model.index( 2, NodeModel::NodeName ).data().toString(), QString( "T4" ) ); |
214 | |
215 | moveTask( project.childNode( 2 )->childNode( 0 ), &project, 0 ); |
216 | //Debug::print( &project, "T4, T1, T2, T3 ----", true ); |
217 | QCOMPARE( m_model.rowCount(), 4 ); |
218 | QCOMPARE( m_model.index( 0, NodeModel::NodeName ).data().toString(), QString( "T4" ) ); |
219 | QCOMPARE( m_model.index( 1, NodeModel::NodeName ).data().toString(), QString( "T1" ) ); |
220 | QCOMPARE( m_model.index( 2, NodeModel::NodeName ).data().toString(), QString( "T2" ) ); |
221 | QCOMPARE( m_model.index( 3, NodeModel::NodeName ).data().toString(), QString( "T3" ) ); |
222 | } |
223 | |
224 | } //namespace KPlato |
225 | |
226 | QTEST_KDEMAIN_CORE( KPlato::WorkPackageProxyModelTester ) |
227 | |
228 | #include "WorkPackageProxyModelTester.moc" |
229 | |