~ubuntu-branches/ubuntu/precise/koffice/precise

« back to all changes in this revision

Viewing changes to kplato/libs/kernel/tests/ProjectTester.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Jonathan Riddell
  • Date: 2010-09-21 15:36:35 UTC
  • mfrom: (1.4.1 upstream) (60.2.11 maverick)
  • Revision ID: james.westby@ubuntu.com-20100921153635-6tejqkiro2u21ydi
Tags: 1:2.2.2-0ubuntu3
Add kubuntu_03_fix-crash-on-closing-sqlite-connection-2.2.2.diff and
kubuntu_04_support-large-memo-values-for-msaccess-2.2.2.diff as
recommended by upstream http://kexi-
project.org/wiki/wikiview/index.php@Kexi2.2_Patches.html#sqlite_stab
ility

Show diffs side-by-side

added added

removed removed

Lines of Context:
30
30
#include <qtest_kde.h>
31
31
#include <kdebug.h>
32
32
 
 
33
#include "debug.cpp"
 
34
 
33
35
namespace KPlato
34
36
{
35
37
 
246
248
    m_project->addScheduleManager( sm );
247
249
    m_project->calculate( *sm );
248
250
    
249
 
    QCOMPARE( t->earlyStart(), m_project->startTime() );
 
251
    QCOMPARE( t->earlyStart(), t->requests().workTimeAfter( m_project->startTime() ) );
250
252
    QVERIFY( t->lateStart() >=  t->earlyStart() );
251
253
    QVERIFY( t->earlyFinish() <= t->endTime() );
252
254
    QVERIFY( t->lateFinish() >= t->endTime() );
261
263
    m_project->addScheduleManager( sm );
262
264
    m_project->calculate( *sm );
263
265
    
264
 
    QCOMPARE( t->earlyStart(), m_project->startTime() );
 
266
    QCOMPARE( t->earlyStart(), t->requests().workTimeAfter( m_project->startTime() ) );
265
267
    QVERIFY( t->lateStart() >=  t->earlyStart() );
266
268
    QVERIFY( t->earlyFinish() <= t->endTime() );
267
269
    QVERIFY( t->lateFinish() >= t->endTime() );
279
281
    
280
282
//    printDebug( m_project, t, s );
281
283
    
282
 
    QCOMPARE( t->earlyStart(), m_project->startTime() );
 
284
    QCOMPARE( t->earlyStart(), t->requests().workTimeAfter( m_project->startTime() ) );
283
285
    QVERIFY( t->lateStart() >=  t->earlyStart() );
284
286
    QVERIFY( t->earlyFinish() <= t->endTime() );
285
287
    QVERIFY( t->lateFinish() >= t->endTime() );
299
301
//    printDebug( m_project, t, s);
300
302
//    printSchedulingLog( *sm, s );
301
303
    
302
 
    QCOMPARE( t->earlyStart(), m_project->startTime() );
 
304
    QCOMPARE( t->earlyStart(), t->requests().workTimeAfter( m_project->startTime() ) );
303
305
    QVERIFY( t->lateStart() >=  t->earlyStart() );
304
306
    QVERIFY( t->earlyFinish() <= t->endTime() );
305
307
    QVERIFY( t->lateFinish() >= t->endTime() );
316
318
    m_project->addScheduleManager( sm );
317
319
    m_project->calculate( *sm );
318
320
    
319
 
    QCOMPARE( t->earlyStart(), m_project->startTime() );
 
321
    QCOMPARE( t->earlyStart(), t->requests().workTimeAfter( m_project->startTime() ) );
320
322
    QVERIFY( t->lateStart() >=  t->earlyStart() );
321
323
    QVERIFY( t->earlyFinish() <= t->endTime() );
322
324
    QVERIFY( t->lateFinish() >= t->endTime() );
333
335
    m_project->addScheduleManager( sm );
334
336
    m_project->calculate( *sm );
335
337
 
336
 
    QCOMPARE( t->earlyStart(), m_project->startTime() );
 
338
    QCOMPARE( t->earlyStart(), t->requests().workTimeAfter( m_project->startTime() ) );
337
339
    QVERIFY( t->lateStart() >=  t->earlyStart() );
338
340
    QVERIFY( t->earlyFinish() <= t->endTime() );
339
341
    QVERIFY( t->lateFinish() >= t->endTime() );
408
410
    m_project->addScheduleManager( sm );
409
411
    m_project->calculate( *sm );
410
412
 
411
 
    QCOMPARE( t->earlyStart(), m_project->startTime() );
 
413
//    Debug::print( m_project, t, s );
 
414
    QCOMPARE( t->earlyStart(), t->requests().workTimeAfter( m_project->startTime() ) );
412
415
    QVERIFY( t->lateStart() >=  t->constraintStartTime() );
413
 
    QCOMPARE( t->earlyFinish(), t->endTime() );
414
 
    QCOMPARE( t->lateFinish(), m_project->endTime() );
 
416
    QCOMPARE( t->earlyFinish(),t->earlyStart() + Duration( 0, 8, 0 ) );
 
417
    QCOMPARE( t->lateFinish(), t->requests().workTimeBefore( m_project->endTime() ) );
415
418
 
416
419
    QCOMPARE( t->startTime(), DateTime( tomorrow, t1 ));
417
420
    QCOMPARE( t->endTime(), t->startTime() + Duration( 0, 8, 0 )  );
427
430
    m_project->addScheduleManager( sm );
428
431
    m_project->calculate( *sm );
429
432
 
430
 
    //printDebug( m_project, t, s );
 
433
//    printDebug( m_project, t, s );
431
434
 
432
 
    QVERIFY( t->earlyStart() <= t->constraintStartTime() );
433
435
    QVERIFY( t->lateStart() >=  t->constraintStartTime() );
434
436
    QCOMPARE( t->earlyFinish(), t->endTime() );
435
437
    QVERIFY( t->lateFinish() <= m_project->constraintEndTime() );
436
438
    
437
439
    QVERIFY( t->endTime() <= t->lateFinish() );
438
440
    QCOMPARE( t->startTime(), t->endTime() - Duration( 0, 8, 0 )  );
439
 
    QVERIFY( t->schedulingError() == false );
 
441
    QVERIFY( t->schedulingError() == true );
440
442
 
441
443
    // Calculate forward
442
444
    s = "Calculate forwards, Task: FinishNotLater -----------------------------------";
803
805
    m_project->addScheduleManager( sm );
804
806
    m_project->calculate( *sm );
805
807
 
806
 
//    printDebug( m_project, t, s );
807
 
//    printDebug( m_project, tsk2, s );
808
 
//    printSchedulingLog( *sm, s );
809
 
    
810
 
    QCOMPARE( t->earlyStart(), m_project->constraintStartTime() );
 
808
//     Debug::print( m_project, t, s );
 
809
//     Debug::print( m_project, tsk2, s );
 
810
//     Debug::printSchedulingLog( *sm, s );
 
811
 
 
812
    QCOMPARE( t->earlyStart(), t->requests().workTimeAfter( m_project->constraintStartTime() ) );
811
813
    QCOMPARE( t->lateStart(), tsk2->startTime() );
812
814
    QCOMPARE( t->earlyFinish(), DateTime( tomorrow, t2 ) );
813
815
    QCOMPARE( t->lateFinish(), t->lateFinish() );
816
818
    QCOMPARE( t->endTime(), t->earlyFinish() );
817
819
    QVERIFY( t->schedulingError() == false );
818
820
 
819
 
    //NOTE: lateStart will be earlier than earlyFinish in this test because
820
 
    //      T2 will be scheduled to run earlier than T1 if scheduled ALAP:
821
 
    //      T1 is scheduled first so is scheduled to run as late as possible,
822
 
    //      T2 will then have to be scheduled to run earlier because the resource
823
 
    //      is booked by T1.
824
821
    QCOMPARE( tsk2->earlyStart(), t->earlyStart() );
825
 
    QCOMPARE( tsk2->lateStart(), DateTime( today, t1 ) );
826
 
    QCOMPARE( tsk2->earlyFinish(), DateTime( tomorrow.addDays( 2 ), t2 ) );
827
 
    QCOMPARE( tsk2->lateFinish(), tsk2->earlyFinish() );
 
822
    QCOMPARE( tsk2->lateStart(), t->earlyFinish() + Duration( 0, 16, 0 ) );
 
823
    QCOMPARE( tsk2->earlyFinish(), DateTime( tomorrow, t2 ) );
 
824
    QCOMPARE( tsk2->lateFinish(), t->lateFinish() );
828
825
 
829
826
    QCOMPARE( tsk2->startTime(), DateTime( tomorrow.addDays( 1 ), t1 ) );
830
 
    QCOMPARE( tsk2->endTime(), tsk2->earlyFinish() );
 
827
    QCOMPARE( tsk2->endTime(), tsk2->lateFinish() );
831
828
    QVERIFY( tsk2->schedulingError() == false );
832
829
    
833
830
    QCOMPARE( m_project->endTime(), tsk2->endTime() );
853
850
//    printDebug( m_project, tsk2, s );
854
851
//    printSchedulingLog( *sm, s );
855
852
 
856
 
    QCOMPARE( t->earlyStart(), m_project->constraintStartTime() );
 
853
    QCOMPARE( t->earlyStart(), t->requests().workTimeAfter( m_project->constraintStartTime() ) );
857
854
    QCOMPARE( t->lateStart(), DateTime( today, t1 ) );
858
855
    QCOMPARE( t->earlyFinish(), DateTime( tomorrow, t2 ) );
859
856
    QCOMPARE( t->lateFinish(), t->lateFinish() );
862
859
    QCOMPARE( t->endTime(), t->earlyFinish() );
863
860
    QVERIFY( t->schedulingError() == false );
864
861
 
865
 
    QCOMPARE( tsk2->earlyStart(), t->earlyFinish() );
 
862
    QCOMPARE( tsk2->earlyStart(), tsk2->requests().workTimeAfter( t->earlyFinish() ) );
866
863
    QCOMPARE( tsk2->lateStart(), DateTime( tomorrow.addDays( 1 ), t1 ) );
867
864
    QCOMPARE( tsk2->earlyFinish(), DateTime( tomorrow.addDays( 2 ), t2 ) );
868
865
    QCOMPARE( tsk2->lateFinish(), tsk2->earlyFinish() );
1230
1227
    project.addScheduleManager( sm );
1231
1228
    project.calculate( *sm );
1232
1229
 
1233
 
    printDebug( r, s);
1234
 
    printDebug( mr, s);
1235
 
    printDebug( &project, task1, s);
1236
 
     printSchedulingLog( *sm, s );
1237
 
 
1238
 
    QCOMPARE( task1->earlyStart(), targetstart );
1239
 
    QVERIFY( task1->lateStart() >=  task1->earlyStart() );
1240
 
    QVERIFY( task1->earlyFinish() <= task1->endTime() );
1241
 
    QVERIFY( task1->lateFinish() >= task1->endTime() );
1242
 
    
1243
 
    QCOMPARE( task1->startTime(), DateTime( r->availableFrom().date(), t1 ) );
1244
 
    QCOMPARE( task1->endTime(), task1->startTime() + Duration( 0, 8, 0 ) );
1245
 
    QVERIFY( task1->schedulingError() == false );
 
1230
//     printDebug( r, s);
 
1231
//     printDebug( mr, s);
 
1232
//     printDebug( &project, task1, s);
 
1233
//     printSchedulingLog( *sm, s );
 
1234
 
 
1235
    QCOMPARE( task1->earlyStart(), task1->requests().workTimeAfter( targetstart ) );
 
1236
    QVERIFY( task1->lateStart() >=  task1->earlyStart() );
 
1237
    QVERIFY( task1->earlyFinish() <= task1->endTime() );
 
1238
    QVERIFY( task1->lateFinish() >= task1->endTime() );
 
1239
    
 
1240
    QCOMPARE( task1->startTime(), DateTime( r->availableFrom().date(), t1 ) );
 
1241
    QCOMPARE( task1->endTime(), task1->startTime() + Duration( 0, 8, 0 ) );
 
1242
    QVERIFY( task1->schedulingError() == false );
 
1243
}
 
1244
 
 
1245
void ProjectTester::requiredResource()
 
1246
{
 
1247
    Project project;
 
1248
    project.setName( "P1" );
 
1249
    DateTime targetstart = DateTime( QDate::currentDate(), QTime(0,0,0) );
 
1250
    DateTime targetend = DateTime( targetstart.addDays( 7 ) );
 
1251
    project.setConstraintStartTime( targetstart );
 
1252
    project.setConstraintEndTime( targetend);
 
1253
 
 
1254
    Calendar *c = new Calendar("Test");
 
1255
    QTime t1(8,0,0);
 
1256
    int length = 8*60*60*1000; // 8 hours
 
1257
 
 
1258
    for ( int i = 1; i <= 7; ++i ) {
 
1259
        CalendarDay *wd1 = c->weekday(i);
 
1260
        wd1->setState(CalendarDay::Working);
 
1261
        wd1->addInterval(TimeInterval(t1, length));
 
1262
    }
 
1263
    project.addCalendar( c );
 
1264
    
 
1265
    Task *task1 = project.createTask( &project );
 
1266
    task1->setName( "T1" );
 
1267
    project.addTask( task1, &project );
 
1268
    task1->estimate()->setUnit( Duration::Unit_h );
 
1269
    task1->estimate()->setExpectedEstimate( 8.0 );
 
1270
    task1->estimate()->setType( Estimate::Type_Effort );
 
1271
 
 
1272
    QString s = "Required resource: Working + required material resource --------";
 
1273
    ResourceGroup *g = new ResourceGroup();
 
1274
    project.addResourceGroup( g );
 
1275
    Resource *r = new Resource();
 
1276
    r->setName( "Work" );
 
1277
    r->setAvailableFrom( targetstart );
 
1278
    r->setCalendar( c );
 
1279
    project.addResource( g, r );
 
1280
 
 
1281
    ResourceGroup *mg = new ResourceGroup();
 
1282
    mg->setType( ResourceGroup::Type_Material );
 
1283
    project.addResourceGroup( mg );
 
1284
    Resource *mr = new Resource();
 
1285
    mr->setType( Resource::Type_Material );
 
1286
    mr->setName( "Material" );
 
1287
    mr->setAvailableFrom( targetstart );
 
1288
    mr->setCalendar( c );
 
1289
    project.addResource( mg, mr );
 
1290
 
 
1291
    ResourceGroupRequest *gr = new ResourceGroupRequest( g );
 
1292
    task1->addRequest( gr );
 
1293
    ResourceRequest *rr = new ResourceRequest( r, 100 );
 
1294
    gr->addResourceRequest( rr );
 
1295
 
 
1296
    QList<Resource*> lst; lst << mr;
 
1297
    rr->setRequiredResources( lst );
 
1298
    
 
1299
    ScheduleManager *sm = project.createScheduleManager( "Test Plan" );
 
1300
    project.addScheduleManager( sm );
 
1301
    project.calculate( *sm );
 
1302
 
 
1303
//     Debug::print( r, s);
 
1304
//     Debug::print( mr, s);
 
1305
//     Debug::print( &project, task1, s);
 
1306
//     Debug::printSchedulingLog( *sm, s );
 
1307
 
 
1308
    QCOMPARE( task1->earlyStart(), task1->requests().workTimeAfter( targetstart ) );
 
1309
    QVERIFY( task1->lateStart() >=  task1->earlyStart() );
 
1310
    QVERIFY( task1->earlyFinish() <= task1->endTime() );
 
1311
    QVERIFY( task1->lateFinish() >= task1->endTime() );
 
1312
    
 
1313
    QCOMPARE( task1->startTime(), DateTime( r->availableFrom().date(), t1 ) );
 
1314
    QCOMPARE( task1->endTime(), task1->startTime() + Duration( 0, 8, 0 ) );
 
1315
    QVERIFY( task1->schedulingError() == false );
 
1316
    
 
1317
    QList<Appointment*> apps = r->appointments( sm->id() );
 
1318
    QVERIFY( apps.count() == 1 );
 
1319
    QCOMPARE( task1->startTime(), apps.first()->startTime() );
 
1320
    QCOMPARE( task1->endTime(), apps.last()->endTime() );
 
1321
 
 
1322
    apps = mr->appointments( sm->id() );
 
1323
    QVERIFY( apps.count() == 1 );
 
1324
    QCOMPARE( task1->startTime(), apps.first()->startTime() );
 
1325
    QCOMPARE( task1->endTime(), apps.last()->endTime() );
 
1326
    
 
1327
    s = "Required resource limits availability --------";
 
1328
    DateTime tomorrow = targetstart.addDays( 1 );
 
1329
    mr->setAvailableFrom( tomorrow );
 
1330
    project.calculate( *sm );
 
1331
 
 
1332
//     Debug::print( r, s);
 
1333
//     Debug::print( mr, s);
 
1334
//     Debug::print( &project, task1, s);
 
1335
//     Debug::printSchedulingLog( *sm, s );
 
1336
 
 
1337
    QCOMPARE( task1->earlyStart(), task1->requests().workTimeAfter( targetstart ) );
 
1338
    QVERIFY( task1->lateStart() >=  task1->earlyStart() );
 
1339
    QVERIFY( task1->earlyFinish() <= task1->endTime() );
 
1340
    QVERIFY( task1->lateFinish() >= task1->endTime() );
 
1341
    
 
1342
    QCOMPARE( task1->startTime(), DateTime( mr->availableFrom().date(), t1 ) );
 
1343
    QCOMPARE( task1->endTime(), task1->startTime() + Duration( 0, 8, 0 ) );
 
1344
    QVERIFY( task1->schedulingError() == false );
 
1345
    
 
1346
    apps = r->appointments( sm->id() );
 
1347
    QVERIFY( apps.count() == 1 );
 
1348
    QCOMPARE( task1->startTime(), apps.first()->startTime() );
 
1349
    QCOMPARE( task1->endTime(), apps.last()->endTime() );
 
1350
 
 
1351
    apps = mr->appointments( sm->id() );
 
1352
    QVERIFY( apps.count() == 1 );
 
1353
    QCOMPARE( task1->startTime(), apps.first()->startTime() );
 
1354
    QCOMPARE( task1->endTime(), apps.last()->endTime() );
 
1355
}
 
1356
 
 
1357
void ProjectTester::resourceWithLimitedAvailability()
 
1358
{
 
1359
    Project project;
 
1360
    project.setName( "P1" );
 
1361
    DateTime targetstart = DateTime( QDate( 2010, 5, 1 ), QTime(0,0,0) );
 
1362
    DateTime targetend = DateTime( targetstart.addDays( 7 ) );
 
1363
    project.setConstraintStartTime( targetstart );
 
1364
    project.setConstraintEndTime( targetend);
 
1365
 
 
1366
    DateTime expectedEndTime( QDate( 2010, 5, 3 ), QTime( 16, 0, 0 ) );
 
1367
 
 
1368
    Calendar *c = new Calendar("Test");
 
1369
    QTime t1(8,0,0);
 
1370
    int length = 8*60*60*1000; // 8 hours
 
1371
 
 
1372
    for ( int i = 1; i <= 7; ++i ) {
 
1373
        CalendarDay *wd1 = c->weekday(i);
 
1374
        wd1->setState(CalendarDay::Working);
 
1375
        wd1->addInterval(TimeInterval(t1, length));
 
1376
    }
 
1377
    project.addCalendar( c );
 
1378
    
 
1379
    Task *task1 = project.createTask( &project );
 
1380
    task1->setName( "T1" );
 
1381
    project.addTask( task1, &project );
 
1382
    task1->estimate()->setUnit( Duration::Unit_d );
 
1383
    task1->estimate()->setExpectedEstimate( 4.0 );
 
1384
    task1->estimate()->setType( Estimate::Type_Effort );
 
1385
 
 
1386
    QString s = "Two resources: One with available until < resulting task length --------";
 
1387
    ResourceGroup *g = new ResourceGroup();
 
1388
    project.addResourceGroup( g );
 
1389
    Resource *r1 = new Resource();
 
1390
    r1->setName( "R1" );
 
1391
    r1->setAvailableFrom( targetstart );
 
1392
    r1->setCalendar( c );
 
1393
    project.addResource( g, r1 );
 
1394
 
 
1395
    Resource *r2 = new Resource();
 
1396
    r2->setName( "R2" );
 
1397
    r2->setAvailableFrom( targetstart );
 
1398
    r2->setAvailableUntil( targetstart.addDays( 1 ) );
 
1399
    r2->setCalendar( c );
 
1400
    project.addResource( g, r2 );
 
1401
 
 
1402
    ResourceGroupRequest *gr = new ResourceGroupRequest( g );
 
1403
    task1->addRequest( gr );
 
1404
    ResourceRequest *rr1 = new ResourceRequest( r1, 100 );
 
1405
    gr->addResourceRequest( rr1 );
 
1406
    ResourceRequest *rr2 = new ResourceRequest( r2, 100 );
 
1407
    gr->addResourceRequest( rr2 );
 
1408
 
 
1409
    ScheduleManager *sm = project.createScheduleManager( "Test Plan" );
 
1410
    project.addScheduleManager( sm );
 
1411
    project.calculate( *sm );
 
1412
 
 
1413
    Debug::print( r1, s);
 
1414
    Debug::print( r2, s);
 
1415
    Debug::print( &project, task1, s);
 
1416
    Debug::printSchedulingLog( *sm, s );
 
1417
 
 
1418
    QCOMPARE( task1->endTime(), expectedEndTime );
1246
1419
}
1247
1420
 
1248
1421
} //namespace KPlato