00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "CalendarTester.h"
00020 #include <kptcalendar.h>
00021 #include <kptdatetime.h>
00022 #include <kptduration.h>
00023 #include <kptmap.h>
00024 #include <kunittest/runner.h>
00025 #include <kunittest/module.h>
00026 #include <QString>
00027
00028 using namespace KUnitTest;
00029
00030 KUNITTEST_MODULE(kunittest_CalendarTester, "Calendar Tester");
00031 KUNITTEST_MODULE_REGISTER_TESTER(CalendarTester);
00032
00033 void CalendarTester::allTests() {
00034 testSingleDay();
00035 testWeekdays();
00036 testCalendarWithParent();
00037 }
00038
00039 void CalendarTester::testSingleDay() {
00040 KPlato::Calendar t("Test");
00041 QDate wdate(2006,1,2);
00042 KPlato::DateTime before = KPlato::DateTime(wdate.addDays(-1));
00043 KPlato::DateTime after = KPlato::DateTime(wdate.addDays(1));
00044 QTime t1(8,0,0);
00045 QTime t2(10,0,0);
00046 KPlato::DateTime wdt1(wdate, t1);
00047 KPlato::DateTime wdt2(wdate, t2);
00048 KPlato::CalendarDay *day = new KPlato::CalendarDay(QDate(2006,1,2), KPlato::Map::Working);
00049 day->addInterval(QPair<QTime, QTime>(t1, t2));
00050 VERIFY(t.addDay(day));
00051 COMPARE(t.findDay(wdate), day);
00052 VERIFY((t.firstAvailableAfter(after, after.addDays(10))).isValid() == false);
00053 VERIFY((t.firstAvailableBefore(before, before.addDays(-10))).isValid() == false);
00054
00055 COMPARE(t.firstAvailableAfter(before,after).toString(), wdt1.toString());
00056 COMPARE(t.firstAvailableBefore(after, before).toString(), wdt2.toString());
00057
00058 VERIFY(t.hasInterval(before, after));
00059 VERIFY(t.hasInterval(after, before) == false);
00060
00061 VERIFY(t.hasInterval(after, after.addDays(1)) == false);
00062 VERIFY(t.hasInterval(before, before.addDays(-1)) == false);
00063
00064 KPlato::Duration e(0, 2, 0);
00065 COMPARE((t.effort(before, after)).toString(), e.toString());
00066
00067 }
00068
00069 void CalendarTester::testWeekdays() {
00070 KPlato::Calendar t("Test");
00071 QDate wdate(2006,1,4);
00072 KPlato::DateTime before = KPlato::DateTime(wdate.addDays(-2));
00073 KPlato::DateTime after = KPlato::DateTime(wdate.addDays(2));
00074 QTime t1(8,0,0);
00075 QTime t2(10,0,0);
00076
00077 KPlato::CalendarDay *wd1 = t.weekday(2);
00078 VERIFY(wd1 != 0);
00079
00080 wd1->setState(KPlato::Map::Working);
00081 wd1->addInterval(QPair<QTime, QTime>(t1, t2));
00082
00083 COMPARE(t.firstAvailableAfter(before, after).toString(), QDateTime(QDate(2006, 1, 4), QTime(8,0,0)).toString());
00084 COMPARE((t.firstAvailableBefore(after, before)).toString(), QDateTime(QDate(2006, 1, 4), QTime(10,0,0)).toString());
00085
00086 COMPARE(t.firstAvailableAfter(after, KPlato::DateTime(QDate(2006,1,14))).toString(), QDateTime(QDate(2006, 1, 11), QTime(8,0,0)).toString());
00087 COMPARE(t.firstAvailableBefore(before, KPlato::DateTime(QDate(2005,12,25))).toString(), QDateTime(QDate(2005, 12, 28), QTime(10,0,0)).toString());
00088
00089 }
00090
00091 void CalendarTester::testCalendarWithParent() {
00092 KPlato::Calendar t("Test 3");
00093 KPlato::Calendar p("Test 3 parent");
00094 t.setParent(&p);
00095 QDate wdate(2006,1,2);
00096 KPlato::DateTime before = KPlato::DateTime(wdate.addDays(-1));
00097 KPlato::DateTime after = KPlato::DateTime(wdate.addDays(1));
00098 QTime t1(8,0,0);
00099 QTime t2(10,0,0);
00100 KPlato::DateTime wdt1(wdate, t1);
00101 KPlato::DateTime wdt2(wdate, t2);
00102
00103 KPlato::CalendarDay *day = new KPlato::CalendarDay(QDate(2006,1,2), KPlato::Map::Working);
00104 day->addInterval(QPair<QTime, QTime>(t1, t2));
00105 COMPARE(p.addDay(day), true);
00106 COMPARE(p.findDay(wdate), day);
00107
00108
00109 VERIFY((t.firstAvailableAfter(after, after.addDays(10))).isValid() == false);
00110 VERIFY((t.firstAvailableBefore(before, before.addDays(-10))).isValid() == false);
00111
00112 COMPARE(t.firstAvailableAfter(before,after).toString(), wdt1.toString());
00113 COMPARE(t.firstAvailableBefore(after, before).toString(), wdt2.toString());
00114
00115 VERIFY(t.hasInterval(before, after));
00116 VERIFY(t.hasInterval(after, before) == false);
00117
00118 VERIFY(t.hasInterval(after, after.addDays(1)) == false);
00119 VERIFY(t.hasInterval(before, before.addDays(-1)) == false);
00120
00121 KPlato::Duration e(0, 2, 0);
00122 COMPARE((t.effort(before, after)).toString(), e.toString());
00123
00124 }
00125