taskjuggler 3.1.0 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +44 -0
- data/bin/tj3webd +4 -0
- data/data/css/tjreport.css +14 -5
- data/data/tjp.vim +22 -7
- data/examples/Fedora-20/reports.tji +2 -4
- data/examples/Scrum/Product Burndown.csv +26 -0
- data/examples/Scrum/Sprint 1 Burndown.csv +26 -0
- data/examples/Scrum/Sprint 2 Burndown.csv +26 -0
- data/examples/Scrum/Sprint 3 Burndown.csv +26 -0
- data/examples/Scrum/scrum.tjp +141 -0
- data/examples/Tutorial/tutorial.tjp +13 -7
- data/lib/taskjuggler/Attributes.rb +2 -3
- data/lib/taskjuggler/HTMLDocument.rb +25 -18
- data/lib/taskjuggler/Journal.rb +85 -65
- data/lib/taskjuggler/KeywordDocumentation.rb +25 -13
- data/lib/taskjuggler/LeaveList.rb +1 -1
- data/lib/taskjuggler/Limits.rb +3 -5
- data/lib/taskjuggler/MessageHandler.rb +173 -19
- data/lib/taskjuggler/Painter.rb +75 -0
- data/lib/taskjuggler/Painter/BasicShapes.rb +76 -0
- data/lib/taskjuggler/Painter/Color.rb +273 -0
- data/lib/taskjuggler/Painter/Element.rb +56 -0
- data/lib/taskjuggler/Painter/FontData.rb +221 -0
- data/lib/taskjuggler/Painter/FontMetrics.rb +125 -0
- data/lib/taskjuggler/Painter/FontMetricsData.rb +151 -0
- data/lib/taskjuggler/Painter/Group.rb +77 -0
- data/lib/taskjuggler/Painter/Points.rb +47 -0
- data/lib/taskjuggler/Painter/Primitives.rb +100 -0
- data/lib/taskjuggler/Painter/SVGSupport.rb +36 -0
- data/lib/taskjuggler/Painter/Text.rb +36 -0
- data/lib/taskjuggler/Project.rb +46 -29
- data/lib/taskjuggler/ProjectFileParser.rb +24 -22
- data/lib/taskjuggler/ProjectFileScanner.rb +2 -2
- data/lib/taskjuggler/PropertyTreeNode.rb +26 -34
- data/lib/taskjuggler/Query.rb +8 -5
- data/lib/taskjuggler/RealFormat.rb +3 -0
- data/lib/taskjuggler/Resource.rb +3 -5
- data/lib/taskjuggler/ResourceScenario.rb +19 -7
- data/lib/taskjuggler/RichText.rb +4 -6
- data/lib/taskjuggler/RichText/FunctionExample.rb +1 -1
- data/lib/taskjuggler/RichText/FunctionHandler.rb +5 -6
- data/lib/taskjuggler/RichText/Parser.rb +4 -6
- data/lib/taskjuggler/RichText/RTFNavigator.rb +1 -1
- data/lib/taskjuggler/RichText/RTFQuery.rb +2 -3
- data/lib/taskjuggler/RichText/RTFReport.rb +1 -1
- data/lib/taskjuggler/RichText/RTFReportLink.rb +1 -2
- data/lib/taskjuggler/RichText/RTFWithQuerySupport.rb +1 -1
- data/lib/taskjuggler/RichText/Scanner.rb +6 -6
- data/lib/taskjuggler/RichText/Snip.rb +1 -2
- data/lib/taskjuggler/RuntimeConfig.rb +9 -6
- data/lib/taskjuggler/ScenarioData.rb +4 -3
- data/lib/taskjuggler/Scoreboard.rb +6 -0
- data/lib/taskjuggler/SheetHandlerBase.rb +25 -8
- data/lib/taskjuggler/SimpleQueryExpander.rb +14 -5
- data/lib/taskjuggler/SyntaxReference.rb +1 -2
- data/lib/taskjuggler/TableColumnSorter.rb +84 -0
- data/lib/taskjuggler/Task.rb +3 -5
- data/lib/taskjuggler/TaskJuggler.rb +36 -29
- data/lib/taskjuggler/TaskScenario.rb +154 -66
- data/lib/taskjuggler/TextParser.rb +24 -17
- data/lib/taskjuggler/TextParser/Scanner.rb +16 -11
- data/lib/taskjuggler/TextParser/SourceFileInfo.rb +20 -15
- data/lib/taskjuggler/TimeSheets.rb +6 -12
- data/lib/taskjuggler/Tj3AppBase.rb +35 -16
- data/lib/taskjuggler/Tj3Config.rb +1 -1
- data/lib/taskjuggler/TjpSyntaxRules.rb +239 -49
- data/lib/taskjuggler/XMLElement.rb +9 -2
- data/lib/taskjuggler/apps/Tj3.rb +43 -37
- data/lib/taskjuggler/apps/Tj3Client.rb +62 -112
- data/lib/taskjuggler/apps/Tj3Daemon.rb +66 -29
- data/lib/taskjuggler/apps/Tj3Man.rb +5 -5
- data/lib/taskjuggler/apps/Tj3SsReceiver.rb +10 -13
- data/lib/taskjuggler/apps/Tj3SsSender.rb +13 -16
- data/lib/taskjuggler/apps/Tj3TsReceiver.rb +10 -13
- data/lib/taskjuggler/apps/Tj3TsSender.rb +12 -15
- data/lib/taskjuggler/apps/Tj3TsSummary.rb +12 -15
- data/lib/taskjuggler/apps/Tj3WebD.rb +99 -0
- data/lib/taskjuggler/daemon/Daemon.rb +50 -10
- data/lib/taskjuggler/daemon/DaemonConnector.rb +127 -0
- data/lib/taskjuggler/daemon/ProcessIntercom.rb +36 -21
- data/lib/taskjuggler/daemon/ProjectBroker.rb +122 -112
- data/lib/taskjuggler/daemon/ProjectServer.rb +78 -46
- data/lib/taskjuggler/daemon/ReportServer.rb +52 -28
- data/lib/taskjuggler/daemon/ReportServlet.rb +92 -21
- data/lib/taskjuggler/daemon/WebServer.rb +75 -22
- data/lib/taskjuggler/daemon/WelcomePage.rb +1 -0
- data/lib/taskjuggler/reports/AccountListRE.rb +3 -3
- data/lib/taskjuggler/reports/CSVFile.rb +9 -2
- data/lib/taskjuggler/reports/ChartPlotter.rb +453 -0
- data/lib/taskjuggler/reports/Navigator.rb +1 -0
- data/lib/taskjuggler/reports/NikuReport.rb +4 -4
- data/lib/taskjuggler/reports/Report.rb +6 -18
- data/lib/taskjuggler/reports/ReportBase.rb +9 -9
- data/lib/taskjuggler/reports/ReportContext.rb +2 -2
- data/lib/taskjuggler/reports/StatusSheetReport.rb +6 -6
- data/lib/taskjuggler/reports/TableReport.rb +24 -15
- data/lib/taskjuggler/reports/TimeSheetReport.rb +5 -5
- data/lib/taskjuggler/reports/TraceReport.rb +251 -0
- data/lib/tj3webd.rb +17 -0
- data/manual/Day_To_Day_Juggling +10 -3
- data/manual/Installation +38 -19
- data/manual/Software +25 -19
- data/manual/Tutorial +119 -110
- data/manual/html/Day_To_Day_Juggling.html +7 -5
- data/manual/html/Getting_Started.html +4 -4
- data/manual/html/How_To_Contribute.html +4 -4
- data/manual/html/Installation.html +19 -11
- data/manual/html/Intro.html +4 -4
- data/manual/html/Reporting_Bugs.html +4 -4
- data/manual/html/Rich_Text_Attributes.html +4 -4
- data/manual/html/Software.html +15 -11
- data/manual/html/TaskJuggler_2x_Migration.html +4 -4
- data/manual/html/TaskJuggler_Internals.html +4 -4
- data/manual/html/The_TaskJuggler_Syntax.html +4 -4
- data/manual/html/Tutorial.html +41 -32
- data/manual/html/account.html +4 -4
- data/manual/html/account.task.html +4 -4
- data/manual/html/accountprefix.html +4 -4
- data/manual/html/accountreport.html +27 -9
- data/manual/html/accountroot.html +5 -5
- data/manual/html/active.html +4 -4
- data/manual/html/adopt.task.html +4 -4
- data/manual/html/aggregate.html +4 -4
- data/manual/html/alert.html +4 -4
- data/manual/html/alertlevels.html +4 -4
- data/manual/html/allocate.html +5 -5
- data/manual/html/alphabet.html +4 -4
- data/manual/html/alternative.html +4 -4
- data/manual/html/author.html +4 -4
- data/manual/html/balance.html +5 -5
- data/manual/html/booking.resource.html +4 -4
- data/manual/html/booking.task.html +4 -4
- data/manual/html/caption.html +5 -5
- data/manual/html/cellcolor.column.html +43 -8
- data/manual/html/celltext.column.html +4 -4
- data/manual/html/center.html +5 -5
- data/manual/html/charge.html +4 -4
- data/manual/html/chargeset.html +4 -4
- data/manual/html/columnid.html +27 -15
- data/manual/html/columns.html +5 -5
- data/manual/html/complete.html +4 -4
- data/manual/html/copyright.html +4 -4
- data/manual/html/credits.html +4 -4
- data/manual/html/css/tjreport.css +14 -5
- data/manual/html/currency.html +4 -4
- data/manual/html/currencyformat.html +5 -5
- data/manual/html/dailymax.html +5 -5
- data/manual/html/dailymin.html +5 -5
- data/manual/html/dailyworkinghours.html +4 -4
- data/manual/html/date.extend.html +4 -4
- data/manual/html/date.html +5 -5
- data/manual/html/definitions.html +4 -4
- data/manual/html/depends.html +4 -4
- data/manual/html/details.html +4 -4
- data/manual/html/disabled.html +4 -4
- data/manual/html/duration.html +4 -4
- data/manual/html/efficiency.html +4 -4
- data/manual/html/effort.html +4 -4
- data/manual/html/email.html +4 -4
- data/manual/html/enabled.html +4 -4
- data/manual/html/end.column.html +4 -4
- data/manual/html/end.html +4 -4
- data/manual/html/end.limit.html +4 -4
- data/manual/html/end.report.html +5 -5
- data/manual/html/end.timesheet.html +4 -4
- data/manual/html/endcredit.html +4 -4
- data/manual/html/epilog.html +5 -5
- data/manual/html/export.html +4 -4
- data/manual/html/extend.html +4 -4
- data/manual/html/fail.html +43 -8
- data/manual/html/fdl.html +4 -4
- data/manual/html/flags.account.html +4 -4
- data/manual/html/flags.html +4 -4
- data/manual/html/flags.journalentry.html +4 -4
- data/manual/html/flags.report.html +5 -5
- data/manual/html/flags.resource.html +4 -4
- data/manual/html/flags.statussheet.html +4 -4
- data/manual/html/flags.task.html +4 -4
- data/manual/html/flags.timesheet.html +4 -4
- data/manual/html/fontcolor.column.html +43 -8
- data/manual/html/footer.html +5 -5
- data/manual/html/formats.html +5 -5
- data/manual/html/functions.html +4 -4
- data/manual/html/gapduration.html +4 -4
- data/manual/html/gaplength.html +4 -4
- data/manual/html/halign.center.html +4 -4
- data/manual/html/halign.column.html +43 -8
- data/manual/html/halign.left.html +4 -4
- data/manual/html/halign.right.html +4 -4
- data/manual/html/hasalert.html +4 -4
- data/manual/html/header.html +5 -5
- data/manual/html/headline.html +7 -7
- data/manual/html/height.html +72 -0
- data/manual/html/hideaccount.html +46 -11
- data/manual/html/hidejournalentry.html +5 -5
- data/manual/html/hidereport.html +43 -8
- data/manual/html/hideresource.html +44 -9
- data/manual/html/hidetask.html +44 -9
- data/manual/html/icalreport.html +4 -4
- data/manual/html/include.macro.html +4 -4
- data/manual/html/include.project.html +4 -4
- data/manual/html/include.properties.html +4 -4
- data/manual/html/index.html +2 -1
- data/manual/html/inherit.extend.html +4 -4
- data/manual/html/interval1.html +4 -4
- data/manual/html/interval2.html +4 -4
- data/manual/html/interval3.html +4 -4
- data/manual/html/interval4.html +4 -4
- data/manual/html/isactive.html +4 -4
- data/manual/html/ischildof.html +4 -4
- data/manual/html/isdependencyof.html +4 -4
- data/manual/html/isdutyof.html +4 -4
- data/manual/html/isfeatureof.html +4 -4
- data/manual/html/isleaf.html +4 -4
- data/manual/html/ismilestone.html +4 -4
- data/manual/html/isongoing.html +4 -4
- data/manual/html/isresource.html +4 -4
- data/manual/html/isresponsibilityof.html +4 -4
- data/manual/html/istask.html +4 -4
- data/manual/html/journalattributes.html +11 -7
- data/manual/html/journalentry.html +4 -4
- data/manual/html/journalmode.html +5 -5
- data/manual/html/leaveallowance.html +5 -5
- data/manual/html/leaves.html +5 -6
- data/manual/html/left.html +5 -5
- data/manual/html/length.html +4 -4
- data/manual/html/limits.allocate.html +4 -4
- data/manual/html/limits.html +4 -4
- data/manual/html/limits.resource.html +4 -4
- data/manual/html/limits.task.html +4 -4
- data/manual/html/listitem.column.html +4 -4
- data/manual/html/listtype.column.html +4 -4
- data/manual/html/loadunit.html +5 -5
- data/manual/html/logicalexpression.html +8 -44
- data/manual/html/logicalflagexpression.html +4 -4
- data/manual/html/macro.html +4 -4
- data/manual/html/managers.html +4 -4
- data/manual/html/mandatory.html +4 -4
- data/manual/html/maxend.html +4 -4
- data/manual/html/maximum.html +5 -5
- data/manual/html/maxstart.html +4 -4
- data/manual/html/milestone.html +4 -4
- data/manual/html/minend.html +4 -4
- data/manual/html/minimum.html +5 -5
- data/manual/html/minstart.html +4 -4
- data/manual/html/monthlymax.html +5 -5
- data/manual/html/monthlymin.html +5 -5
- data/manual/html/navbar.html +10 -4
- data/manual/html/navigator.html +4 -4
- data/manual/html/newtask.html +4 -4
- data/manual/html/nikureport.html +4 -4
- data/manual/html/note.task.html +4 -4
- data/manual/html/now.html +4 -4
- data/manual/html/numberformat.html +5 -5
- data/manual/html/onend.html +4 -4
- data/manual/html/onstart.html +4 -4
- data/manual/html/opennodes.html +5 -5
- data/manual/html/overtime.booking.html +4 -4
- data/manual/html/period.column.html +4 -4
- data/manual/html/period.limit.html +4 -4
- data/manual/html/period.report.html +5 -5
- data/manual/html/period.task.html +4 -4
- data/manual/html/persistent.html +4 -4
- data/manual/html/precedes.html +4 -4
- data/manual/html/priority.html +4 -4
- data/manual/html/priority.timesheet.html +4 -4
- data/manual/html/project.html +4 -4
- data/manual/html/projectid.html +4 -4
- data/manual/html/projectid.task.html +4 -4
- data/manual/html/projectids.html +4 -4
- data/manual/html/projection.html +5 -7
- data/manual/html/prolog.html +5 -5
- data/manual/html/properties.html +11 -5
- data/manual/html/purge.html +5 -5
- data/manual/html/rate.html +4 -4
- data/manual/html/rate.resource.html +4 -4
- data/manual/html/reference.extend.html +4 -4
- data/manual/html/remaining.html +4 -4
- data/manual/html/replace.html +4 -4
- data/manual/html/reportprefix.html +4 -4
- data/manual/html/resource.html +4 -10
- data/manual/html/resourceattributes.html +4 -4
- data/manual/html/resourceprefix.html +4 -4
- data/manual/html/resourcereport.html +28 -10
- data/manual/html/resourceroot.html +5 -5
- data/manual/html/resources.limit.html +4 -4
- data/manual/html/responsible.html +4 -4
- data/manual/html/richtext.extend.html +4 -4
- data/manual/html/right.html +5 -5
- data/manual/html/rollupaccount.html +44 -9
- data/manual/html/rollupresource.html +44 -9
- data/manual/html/rolluptask.html +44 -9
- data/manual/html/scale.column.html +4 -4
- data/manual/html/scenario.html +4 -22
- data/manual/html/scenario.ical.html +4 -4
- data/manual/html/scenarios.export.html +4 -4
- data/manual/html/scenarios.html +5 -5
- data/manual/html/scenariospecific.extend.html +4 -4
- data/manual/html/scheduled.html +4 -4
- data/manual/html/scheduling.html +4 -4
- data/manual/html/select.html +4 -4
- data/manual/html/selfcontained.html +5 -5
- data/manual/html/shift.allocate.html +4 -4
- data/manual/html/shift.html +4 -4
- data/manual/html/shift.resource.html +5 -5
- data/manual/html/shift.task.html +4 -4
- data/manual/html/shift.timesheet.html +4 -4
- data/manual/html/shifts.allocate.html +4 -4
- data/manual/html/shifts.resource.html +4 -4
- data/manual/html/shifts.task.html +4 -4
- data/manual/html/shorttimeformat.html +4 -4
- data/manual/html/sloppy.booking.html +4 -4
- data/manual/html/sloppy.projection.html +5 -5
- data/manual/html/sortaccounts.html +5 -5
- data/manual/html/sortjournalentries.html +5 -5
- data/manual/html/sortresources.html +5 -5
- data/manual/html/sorttasks.html +5 -5
- data/manual/html/start.column.html +4 -4
- data/manual/html/start.html +4 -4
- data/manual/html/start.limit.html +4 -4
- data/manual/html/start.report.html +5 -5
- data/manual/html/startcredit.html +4 -4
- data/manual/html/status.statussheet.html +4 -4
- data/manual/html/status.timesheet.html +4 -4
- data/manual/html/statussheet.html +4 -4
- data/manual/html/statussheetreport.html +4 -4
- data/manual/html/strict.projection.html +5 -5
- data/manual/html/summary.html +4 -4
- data/manual/html/supplement.html +4 -4
- data/manual/html/supplement.resource.html +4 -10
- data/manual/html/supplement.task.html +4 -28
- data/manual/html/tagfile.html +4 -4
- data/manual/html/task.html +4 -28
- data/manual/html/task.statussheet.html +4 -4
- data/manual/html/task.timesheet.html +4 -4
- data/manual/html/taskattributes.html +4 -4
- data/manual/html/taskprefix.html +4 -4
- data/manual/html/taskreport.html +28 -10
- data/manual/html/taskroot.html +5 -5
- data/manual/html/text.extend.html +4 -4
- data/manual/html/textreport.html +27 -9
- data/manual/html/timeformat.html +5 -5
- data/manual/html/timeoff.nikureport.html +4 -4
- data/manual/html/timesheet.html +4 -4
- data/manual/html/timesheetreport.html +23 -5
- data/manual/html/timezone.export.html +4 -4
- data/manual/html/timezone.html +4 -4
- data/manual/html/timezone.report.html +5 -5
- data/manual/html/timezone.shift.html +4 -4
- data/manual/html/timingresolution.html +4 -4
- data/manual/html/title.column.html +4 -4
- data/manual/html/title.html +5 -5
- data/manual/html/toc.html +207 -179
- data/manual/html/tooltip.column.html +45 -10
- data/manual/html/tracereport.html +405 -0
- data/manual/html/trackingscenario.html +6 -6
- data/manual/html/treelevel.html +4 -4
- data/manual/html/vacation.html +4 -4
- data/manual/html/vacation.resource.html +4 -4
- data/manual/html/vacation.shift.html +4 -4
- data/manual/html/warn.html +43 -8
- data/manual/html/weeklymax.html +5 -5
- data/manual/html/weeklymin.html +5 -5
- data/manual/html/weekstartsmonday.html +4 -4
- data/manual/html/weekstartssunday.html +6 -6
- data/manual/html/width.column.html +6 -6
- data/manual/html/width.html +72 -0
- data/manual/html/work.html +4 -4
- data/manual/html/workinghours.project.html +4 -4
- data/manual/html/workinghours.resource.html +4 -4
- data/manual/html/workinghours.shift.html +4 -4
- data/manual/html/yearlyworkingdays.html +4 -4
- data/spec/Color_spec.rb +60 -0
- data/spec/ProjectBroker_spec.rb +3 -2
- data/spec/StatusSheets_spec.rb +5 -4
- data/spec/TableColumnSorter_spec.rb +78 -0
- data/spec/TimeSheets_spec.rb +6 -2
- data/spec/Tj3Daemon_spec.rb +2 -2
- data/spec/TraceReport_spec.rb +117 -0
- data/taskjuggler.gemspec +1 -1
- data/test/MessageChecker.rb +3 -1
- data/test/ReferenceGenerator.rb +1 -1
- data/test/TestSuite/CSV-Reports/Leave.tjp +1 -1
- data/test/TestSuite/CSV-Reports/refs/resourcereport_with_tasks.csv +3 -0
- data/test/TestSuite/CSV-Reports/refs/taskcounter.csv +9 -0
- data/test/TestSuite/CSV-Reports/refs/taskreport_with_resources.csv +19 -16
- data/test/TestSuite/CSV-Reports/refs/weekly.csv +1 -0
- data/test/TestSuite/Export-Reports/refs/LogicalExpression.tjp +14 -2
- data/test/TestSuite/Export-Reports/refs/tutorial.tjp +98 -86
- data/test/TestSuite/Scheduler/Correct/Leaves.tjp +25 -0
- data/test/TestSuite/Syntax/Correct/Leave.tjp +1 -1
- data/test/TestSuite/Syntax/Correct/LogicalExpression.tjp +9 -1
- data/test/TestSuite/Syntax/Correct/TraceReport.tjp +10 -0
- data/test/TestSuite/Syntax/Correct/tutorial.tjp +10 -4
- data/test/test_CSV-Reports.rb +3 -3
- data/test/test_Export-Reports.rb +91 -86
- data/test/test_Journal.rb +15 -12
- data/test/test_Limits.rb +3 -3
- data/test/test_Project.rb +1 -2
- data/test/test_ProjectFileScanner.rb +1 -1
- data/test/test_PropertySet.rb +1 -1
- data/test/test_Query.rb +5 -6
- data/test/test_ReportGenerator.rb +15 -7
- data/test/test_RichText.rb +4 -3
- data/test/test_Scheduler.rb +19 -7
- data/test/test_ShiftAssignments.rb +2 -2
- data/test/test_SimpleQueryExpander.rb +29 -2
- data/test/test_Syntax.rb +14 -5
- metadata +49 -10
- data/lib/taskjuggler/LogFile.rb +0 -73
|
@@ -51,11 +51,11 @@ task AcSo "Accounting Software" {
|
|
|
51
51
|
task gui "Graphical User Interface" {
|
|
52
52
|
depends AcSo.software.database, AcSo.software.backend
|
|
53
53
|
start 2002-02-28-14:00-+0000
|
|
54
|
-
end 2002-03-
|
|
54
|
+
end 2002-03-28-13:00-+0000
|
|
55
55
|
scheduling asap
|
|
56
56
|
scheduled
|
|
57
57
|
delayed:start 2002-03-05-14:00-+0000
|
|
58
|
-
delayed:end 2002-04-
|
|
58
|
+
delayed:end 2002-04-08-11:00-+0000
|
|
59
59
|
delayed:scheduling asap
|
|
60
60
|
}
|
|
61
61
|
task backend "Back-End Functions" {
|
|
@@ -72,22 +72,22 @@ task AcSo "Accounting Software" {
|
|
|
72
72
|
task test "Software testing" {
|
|
73
73
|
task alpha "Alpha Test" {
|
|
74
74
|
depends AcSo.software
|
|
75
|
-
start 2002-03-
|
|
76
|
-
end 2002-03-
|
|
75
|
+
start 2002-03-28-13:00-+0000
|
|
76
|
+
end 2002-04-03-10:00-+0000
|
|
77
77
|
scheduling asap
|
|
78
78
|
scheduled
|
|
79
|
-
delayed:start 2002-04-
|
|
80
|
-
delayed:end 2002-04-
|
|
79
|
+
delayed:start 2002-04-08-11:00-+0000
|
|
80
|
+
delayed:end 2002-04-11-09:00-+0000
|
|
81
81
|
delayed:scheduling asap
|
|
82
82
|
}
|
|
83
83
|
task beta "Beta Test" {
|
|
84
84
|
depends AcSo.test.alpha
|
|
85
|
-
start 2002-04-
|
|
86
|
-
end 2002-04-
|
|
85
|
+
start 2002-04-03-10:00-+0000
|
|
86
|
+
end 2002-04-18-13:00-+0000
|
|
87
87
|
scheduling asap
|
|
88
88
|
scheduled
|
|
89
|
-
delayed:start 2002-04-
|
|
90
|
-
delayed:end 2002-04-
|
|
89
|
+
delayed:start 2002-04-11-09:00-+0000
|
|
90
|
+
delayed:end 2002-04-26-12:00-+0000
|
|
91
91
|
delayed:scheduling asap
|
|
92
92
|
}
|
|
93
93
|
}
|
|
@@ -119,18 +119,18 @@ task AcSo "Accounting Software" {
|
|
|
119
119
|
}
|
|
120
120
|
task beta "Beta version" {
|
|
121
121
|
depends AcSo.test.alpha
|
|
122
|
-
start 2002-03-
|
|
122
|
+
start 2002-04-03-10:00-+0000
|
|
123
123
|
milestone
|
|
124
124
|
scheduled
|
|
125
|
-
delayed:start 2002-04-
|
|
125
|
+
delayed:start 2002-04-11-09:00-+0000
|
|
126
126
|
delayed:milestone
|
|
127
127
|
}
|
|
128
128
|
task done "Ship Product to Customer" {
|
|
129
129
|
depends AcSo.test.beta, AcSo.manual
|
|
130
|
-
start 2002-04-
|
|
130
|
+
start 2002-04-18-13:00-+0000
|
|
131
131
|
milestone
|
|
132
132
|
scheduled
|
|
133
|
-
delayed:start 2002-04-
|
|
133
|
+
delayed:start 2002-04-26-12:00-+0000
|
|
134
134
|
delayed:milestone
|
|
135
135
|
}
|
|
136
136
|
}
|
|
@@ -243,24 +243,26 @@ supplement task AcSo.software.database {
|
|
|
243
243
|
}
|
|
244
244
|
supplement task AcSo.software.gui {
|
|
245
245
|
booking dev2 2002-02-28-14:00-+0000 + 2.0h,
|
|
246
|
-
2002-03-01-08:00-+0000 +
|
|
247
|
-
2002-03-04-08:00-+0000 +
|
|
248
|
-
2002-03-05-08:00-+0000 +
|
|
249
|
-
2002-03-06-08:00-+0000 +
|
|
250
|
-
2002-03-07-08:00-+0000 +
|
|
251
|
-
2002-03-08-08:00-+0000 +
|
|
252
|
-
2002-03-11-08:00-+0000 +
|
|
253
|
-
2002-03-12-08:00-+0000 +
|
|
254
|
-
2002-03-13-08:00-+0000 +
|
|
255
|
-
2002-03-14-08:00-+0000 +
|
|
256
|
-
2002-03-15-08:00-+0000 +
|
|
257
|
-
2002-03-18-08:00-+0000 +
|
|
258
|
-
2002-03-19-08:00-+0000 +
|
|
259
|
-
2002-03-20-08:00-+0000 +
|
|
260
|
-
2002-03-21-08:00-+0000 +
|
|
261
|
-
2002-03-22-08:00-+0000 +
|
|
262
|
-
2002-03-25-08:00-+0000 +
|
|
263
|
-
2002-03-26-08:00-+0000 +
|
|
246
|
+
2002-03-01-08:00-+0000 + 6.0h,
|
|
247
|
+
2002-03-04-08:00-+0000 + 6.0h,
|
|
248
|
+
2002-03-05-08:00-+0000 + 6.0h,
|
|
249
|
+
2002-03-06-08:00-+0000 + 6.0h,
|
|
250
|
+
2002-03-07-08:00-+0000 + 6.0h,
|
|
251
|
+
2002-03-08-08:00-+0000 + 6.0h,
|
|
252
|
+
2002-03-11-08:00-+0000 + 6.0h,
|
|
253
|
+
2002-03-12-08:00-+0000 + 6.0h,
|
|
254
|
+
2002-03-13-08:00-+0000 + 6.0h,
|
|
255
|
+
2002-03-14-08:00-+0000 + 6.0h,
|
|
256
|
+
2002-03-15-08:00-+0000 + 6.0h,
|
|
257
|
+
2002-03-18-08:00-+0000 + 6.0h,
|
|
258
|
+
2002-03-19-08:00-+0000 + 6.0h,
|
|
259
|
+
2002-03-20-08:00-+0000 + 6.0h,
|
|
260
|
+
2002-03-21-08:00-+0000 + 6.0h,
|
|
261
|
+
2002-03-22-08:00-+0000 + 6.0h,
|
|
262
|
+
2002-03-25-08:00-+0000 + 6.0h,
|
|
263
|
+
2002-03-26-08:00-+0000 + 6.0h,
|
|
264
|
+
2002-03-27-08:00-+0000 + 6.0h,
|
|
265
|
+
2002-03-28-08:00-+0000 + 5.0h { overtime 2 }
|
|
264
266
|
booking dev3 2002-02-28-14:00-+0000 + 2.0h,
|
|
265
267
|
2002-03-01-08:00-+0000 + 8.0h,
|
|
266
268
|
2002-03-04-08:00-+0000 + 8.0h,
|
|
@@ -279,28 +281,33 @@ supplement task AcSo.software.gui {
|
|
|
279
281
|
2002-03-21-08:00-+0000 + 8.0h,
|
|
280
282
|
2002-03-22-08:00-+0000 + 8.0h,
|
|
281
283
|
2002-03-25-08:00-+0000 + 8.0h,
|
|
282
|
-
2002-03-26-08:00-+0000 +
|
|
284
|
+
2002-03-26-08:00-+0000 + 8.0h,
|
|
285
|
+
2002-03-27-08:00-+0000 + 8.0h,
|
|
286
|
+
2002-03-28-08:00-+0000 + 5.0h { overtime 2 }
|
|
283
287
|
delayed:booking dev2 2002-03-05-14:00-+0000 + 2.0h,
|
|
284
|
-
2002-03-06-08:00-+0000 +
|
|
285
|
-
2002-03-07-08:00-+0000 +
|
|
286
|
-
2002-03-08-08:00-+0000 +
|
|
287
|
-
2002-03-11-08:00-+0000 +
|
|
288
|
-
2002-03-12-08:00-+0000 +
|
|
289
|
-
2002-03-13-08:00-+0000 +
|
|
290
|
-
2002-03-14-08:00-+0000 +
|
|
291
|
-
2002-03-15-08:00-+0000 +
|
|
292
|
-
2002-03-18-08:00-+0000 +
|
|
293
|
-
2002-03-19-08:00-+0000 +
|
|
294
|
-
2002-03-20-08:00-+0000 +
|
|
295
|
-
2002-03-21-08:00-+0000 +
|
|
296
|
-
2002-03-22-08:00-+0000 +
|
|
297
|
-
2002-03-25-08:00-+0000 +
|
|
298
|
-
2002-03-26-08:00-+0000 +
|
|
299
|
-
2002-03-27-08:00-+0000 +
|
|
300
|
-
2002-03-28-08:00-+0000 +
|
|
301
|
-
2002-04-01-07:00-+0000 +
|
|
302
|
-
2002-04-02-07:00-+0000 +
|
|
303
|
-
2002-04-03-07:00-+0000 + 6.0h
|
|
288
|
+
2002-03-06-08:00-+0000 + 6.0h,
|
|
289
|
+
2002-03-07-08:00-+0000 + 6.0h,
|
|
290
|
+
2002-03-08-08:00-+0000 + 6.0h,
|
|
291
|
+
2002-03-11-08:00-+0000 + 6.0h,
|
|
292
|
+
2002-03-12-08:00-+0000 + 6.0h,
|
|
293
|
+
2002-03-13-08:00-+0000 + 6.0h,
|
|
294
|
+
2002-03-14-08:00-+0000 + 6.0h,
|
|
295
|
+
2002-03-15-08:00-+0000 + 6.0h,
|
|
296
|
+
2002-03-18-08:00-+0000 + 6.0h,
|
|
297
|
+
2002-03-19-08:00-+0000 + 6.0h,
|
|
298
|
+
2002-03-20-08:00-+0000 + 6.0h,
|
|
299
|
+
2002-03-21-08:00-+0000 + 6.0h,
|
|
300
|
+
2002-03-22-08:00-+0000 + 6.0h,
|
|
301
|
+
2002-03-25-08:00-+0000 + 6.0h,
|
|
302
|
+
2002-03-26-08:00-+0000 + 6.0h,
|
|
303
|
+
2002-03-27-08:00-+0000 + 6.0h,
|
|
304
|
+
2002-03-28-08:00-+0000 + 6.0h,
|
|
305
|
+
2002-04-01-07:00-+0000 + 6.0h,
|
|
306
|
+
2002-04-02-07:00-+0000 + 6.0h,
|
|
307
|
+
2002-04-03-07:00-+0000 + 6.0h,
|
|
308
|
+
2002-04-04-07:00-+0000 + 6.0h,
|
|
309
|
+
2002-04-05-07:00-+0000 + 6.0h,
|
|
310
|
+
2002-04-08-07:00-+0000 + 4.0h { overtime 2 }
|
|
304
311
|
delayed:booking dev3 2002-03-05-14:00-+0000 + 2.0h,
|
|
305
312
|
2002-03-06-08:00-+0000 + 8.0h,
|
|
306
313
|
2002-03-07-08:00-+0000 + 8.0h,
|
|
@@ -321,7 +328,10 @@ supplement task AcSo.software.gui {
|
|
|
321
328
|
2002-03-28-08:00-+0000 + 8.0h,
|
|
322
329
|
2002-04-01-07:00-+0000 + 8.0h,
|
|
323
330
|
2002-04-02-07:00-+0000 + 8.0h,
|
|
324
|
-
2002-04-03-07:00-+0000 +
|
|
331
|
+
2002-04-03-07:00-+0000 + 8.0h,
|
|
332
|
+
2002-04-04-07:00-+0000 + 8.0h,
|
|
333
|
+
2002-04-05-07:00-+0000 + 8.0h,
|
|
334
|
+
2002-04-08-07:00-+0000 + 4.0h { overtime 2 }
|
|
325
335
|
priority 1000
|
|
326
336
|
projectid acso
|
|
327
337
|
responsible boss, dev1
|
|
@@ -402,29 +412,29 @@ supplement task AcSo.test {
|
|
|
402
412
|
responsible boss
|
|
403
413
|
}
|
|
404
414
|
supplement task AcSo.test.alpha {
|
|
405
|
-
booking dev2 2002-03-
|
|
406
|
-
2002-
|
|
407
|
-
2002-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
2002-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
2002-04-
|
|
415
|
-
|
|
416
|
-
2002-04-
|
|
417
|
-
|
|
418
|
-
2002-04-
|
|
415
|
+
booking dev2 2002-03-28-13:00-+0000 + 3.0h,
|
|
416
|
+
2002-04-01-07:00-+0000 + 8.0h,
|
|
417
|
+
2002-04-02-07:00-+0000 + 8.0h,
|
|
418
|
+
2002-04-03-07:00-+0000 + 3.0h { overtime 2 }
|
|
419
|
+
booking test 2002-03-28-13:00-+0000 + 3.0h,
|
|
420
|
+
2002-04-01-07:00-+0000 + 6.0h,
|
|
421
|
+
2002-04-02-07:00-+0000 + 6.0h,
|
|
422
|
+
2002-04-03-07:00-+0000 + 3.0h { overtime 2 }
|
|
423
|
+
delayed:booking dev2 2002-04-08-11:00-+0000 + 4.0h,
|
|
424
|
+
2002-04-09-07:00-+0000 + 8.0h,
|
|
425
|
+
2002-04-10-07:00-+0000 + 8.0h,
|
|
426
|
+
2002-04-11-07:00-+0000 + 2.0h { overtime 2 }
|
|
427
|
+
delayed:booking test 2002-04-08-11:00-+0000 + 4.0h,
|
|
428
|
+
2002-04-09-07:00-+0000 + 6.0h,
|
|
429
|
+
2002-04-10-07:00-+0000 + 6.0h,
|
|
430
|
+
2002-04-11-07:00-+0000 + 2.0h { overtime 2 }
|
|
419
431
|
note "Hopefully most bugs will be found and fixed here."
|
|
420
432
|
priority 500
|
|
421
433
|
projectid acso
|
|
422
434
|
responsible boss
|
|
423
435
|
}
|
|
424
436
|
supplement task AcSo.test.beta {
|
|
425
|
-
booking dev1 2002-04-
|
|
426
|
-
2002-04-02-07:00-+0000 + 8.0h,
|
|
427
|
-
2002-04-03-07:00-+0000 + 8.0h,
|
|
437
|
+
booking dev1 2002-04-03-10:00-+0000 + 5.0h,
|
|
428
438
|
2002-04-04-07:00-+0000 + 8.0h,
|
|
429
439
|
2002-04-05-07:00-+0000 + 8.0h,
|
|
430
440
|
2002-04-08-07:00-+0000 + 8.0h,
|
|
@@ -433,10 +443,10 @@ supplement task AcSo.test.beta {
|
|
|
433
443
|
2002-04-11-07:00-+0000 + 8.0h,
|
|
434
444
|
2002-04-12-07:00-+0000 + 8.0h,
|
|
435
445
|
2002-04-15-07:00-+0000 + 8.0h,
|
|
436
|
-
2002-04-16-07:00-+0000 +
|
|
437
|
-
|
|
438
|
-
2002-04-
|
|
439
|
-
|
|
446
|
+
2002-04-16-07:00-+0000 + 8.0h,
|
|
447
|
+
2002-04-17-07:00-+0000 + 8.0h,
|
|
448
|
+
2002-04-18-07:00-+0000 + 6.0h { overtime 2 }
|
|
449
|
+
booking test 2002-04-03-10:00-+0000 + 3.0h,
|
|
440
450
|
2002-04-04-07:00-+0000 + 6.0h,
|
|
441
451
|
2002-04-05-07:00-+0000 + 6.0h,
|
|
442
452
|
2002-04-08-07:00-+0000 + 6.0h,
|
|
@@ -445,11 +455,10 @@ supplement task AcSo.test.beta {
|
|
|
445
455
|
2002-04-11-07:00-+0000 + 6.0h,
|
|
446
456
|
2002-04-12-07:00-+0000 + 6.0h,
|
|
447
457
|
2002-04-15-07:00-+0000 + 6.0h,
|
|
448
|
-
2002-04-16-07:00-+0000 +
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
2002-04-11-07:00-+0000 + 8.0h,
|
|
458
|
+
2002-04-16-07:00-+0000 + 6.0h,
|
|
459
|
+
2002-04-17-07:00-+0000 + 6.0h,
|
|
460
|
+
2002-04-18-07:00-+0000 + 6.0h { overtime 2 }
|
|
461
|
+
delayed:booking dev1 2002-04-11-09:00-+0000 + 6.0h,
|
|
453
462
|
2002-04-12-07:00-+0000 + 8.0h,
|
|
454
463
|
2002-04-15-07:00-+0000 + 8.0h,
|
|
455
464
|
2002-04-16-07:00-+0000 + 8.0h,
|
|
@@ -457,11 +466,11 @@ supplement task AcSo.test.beta {
|
|
|
457
466
|
2002-04-18-07:00-+0000 + 8.0h,
|
|
458
467
|
2002-04-19-07:00-+0000 + 8.0h,
|
|
459
468
|
2002-04-22-07:00-+0000 + 8.0h,
|
|
460
|
-
2002-04-23-07:00-+0000 + 8.0h
|
|
461
|
-
|
|
462
|
-
2002-04-
|
|
463
|
-
2002-04-
|
|
464
|
-
|
|
469
|
+
2002-04-23-07:00-+0000 + 8.0h,
|
|
470
|
+
2002-04-24-07:00-+0000 + 8.0h,
|
|
471
|
+
2002-04-25-07:00-+0000 + 8.0h,
|
|
472
|
+
2002-04-26-07:00-+0000 + 5.0h { overtime 2 }
|
|
473
|
+
delayed:booking test 2002-04-11-09:00-+0000 + 4.0h,
|
|
465
474
|
2002-04-12-07:00-+0000 + 6.0h,
|
|
466
475
|
2002-04-15-07:00-+0000 + 6.0h,
|
|
467
476
|
2002-04-16-07:00-+0000 + 6.0h,
|
|
@@ -469,7 +478,10 @@ supplement task AcSo.test.beta {
|
|
|
469
478
|
2002-04-18-07:00-+0000 + 6.0h,
|
|
470
479
|
2002-04-19-07:00-+0000 + 6.0h,
|
|
471
480
|
2002-04-22-07:00-+0000 + 6.0h,
|
|
472
|
-
2002-04-23-07:00-+0000 + 6.0h
|
|
481
|
+
2002-04-23-07:00-+0000 + 6.0h,
|
|
482
|
+
2002-04-24-07:00-+0000 + 6.0h,
|
|
483
|
+
2002-04-25-07:00-+0000 + 6.0h,
|
|
484
|
+
2002-04-26-07:00-+0000 + 5.0h { overtime 2 }
|
|
473
485
|
priority 500
|
|
474
486
|
projectid acso
|
|
475
487
|
responsible boss
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
project "Leaves" 2012-03-12 +6m {
|
|
2
|
+
scenario s1 "S1" {
|
|
3
|
+
scenario s2 "S2"
|
|
4
|
+
}
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
vacation "Goof-out day" 2012-03-14
|
|
8
|
+
|
|
9
|
+
resource r1 "R1" {
|
|
10
|
+
vacation 2012-03-19 +1w
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
task "T1" {
|
|
14
|
+
effort 20d
|
|
15
|
+
allocate r1
|
|
16
|
+
fail s1.end != 2012-04-16-17:00
|
|
17
|
+
fail s2.end != 2012-04-16-17:00
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
taskreport "Leaves" {
|
|
21
|
+
formats html
|
|
22
|
+
columns no, name, start, end, daily
|
|
23
|
+
scenarios s1, s2
|
|
24
|
+
hideresource 0
|
|
25
|
+
}
|
|
@@ -2,7 +2,11 @@ project "LogExp" 2009-10-19 +2m {
|
|
|
2
2
|
timezone "America/Denver"
|
|
3
3
|
}
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
resource r "R"
|
|
6
|
+
task "T" {
|
|
7
|
+
allocate r
|
|
8
|
+
effort 1d
|
|
9
|
+
}
|
|
6
10
|
|
|
7
11
|
macro rep [
|
|
8
12
|
taskreport "LogExp${1}" {
|
|
@@ -17,3 +21,7 @@ ${rep "4" ">="}
|
|
|
17
21
|
${rep "5" "!="}
|
|
18
22
|
${rep "6" "="}
|
|
19
23
|
|
|
24
|
+
taskreport "LogExp7" {
|
|
25
|
+
hidetask @none
|
|
26
|
+
hideresource @all
|
|
27
|
+
}
|
|
@@ -253,6 +253,12 @@ task AcSo "Accounting Software" {
|
|
|
253
253
|
delayed:effort 40d
|
|
254
254
|
depends !database, !backend
|
|
255
255
|
allocate dev2, dev3
|
|
256
|
+
# Resource dev2 should only work 6 hours per day on this task.
|
|
257
|
+
limits {
|
|
258
|
+
dailymax 6h {
|
|
259
|
+
resources dev2
|
|
260
|
+
}
|
|
261
|
+
}
|
|
256
262
|
# *** EXAMPLE: software +
|
|
257
263
|
}
|
|
258
264
|
# *** EXAMPLE: gui -
|
|
@@ -415,7 +421,7 @@ task AcSo "Accounting Software" {
|
|
|
415
421
|
|
|
416
422
|
# *** EXAMPLE: navigator +
|
|
417
423
|
navigator navbar {
|
|
418
|
-
hidereport
|
|
424
|
+
hidereport @none
|
|
419
425
|
}
|
|
420
426
|
# *** EXAMPLE: navigator -
|
|
421
427
|
|
|
@@ -525,7 +531,7 @@ taskreport overview "" {
|
|
|
525
531
|
timeformat "%a %Y-%m-%d"
|
|
526
532
|
loadunit days
|
|
527
533
|
# *** EXAMPLE: overview3 -
|
|
528
|
-
hideresource
|
|
534
|
+
hideresource @all
|
|
529
535
|
# *** EXAMPLE: overview2 +
|
|
530
536
|
balance cost rev
|
|
531
537
|
# *** EXAMPLE: overview2 -
|
|
@@ -613,7 +619,7 @@ taskreport deliveries "" {
|
|
|
613
619
|
columns bsi { title 'WBS' }, name, start, end, note { width 150 }, complete,
|
|
614
620
|
chart { ${TaskTip} }
|
|
615
621
|
taskroot AcSo.deliveries
|
|
616
|
-
hideresource
|
|
622
|
+
hideresource @all
|
|
617
623
|
scenarios plan, delayed
|
|
618
624
|
}
|
|
619
625
|
# A list of all employees with their contact details.
|
|
@@ -627,7 +633,7 @@ resourcereport contactList "" {
|
|
|
627
633
|
chart { scale day }
|
|
628
634
|
hideresource ~isleaf()
|
|
629
635
|
sortresources name.up
|
|
630
|
-
hidetask
|
|
636
|
+
hidetask @all
|
|
631
637
|
}
|
|
632
638
|
|
|
633
639
|
# A graph showing resource allocation. It identifies whether each
|
data/test/test_CSV-Reports.rb
CHANGED
|
@@ -90,7 +90,8 @@ class TestScheduler < Test::Unit::TestCase
|
|
|
90
90
|
# they need to be in the ./refs/ directory relative to the project file.
|
|
91
91
|
refFile = baseDir + "/refs/#{baseName}.csv"
|
|
92
92
|
|
|
93
|
-
|
|
93
|
+
(mh = TaskJuggler::MessageHandlerInstance.instance).reset
|
|
94
|
+
tj = TaskJuggler.new
|
|
94
95
|
assert(tj.parse([ projectFile ]), "Parser failed for #{projectFile}")
|
|
95
96
|
assert(tj.schedule, "Scheduler failed for #{projectFile}")
|
|
96
97
|
if File.file?(refFile)
|
|
@@ -109,8 +110,7 @@ class TestScheduler < Test::Unit::TestCase
|
|
|
109
110
|
"Reference file generation failed for #{projectFile}")
|
|
110
111
|
end
|
|
111
112
|
end
|
|
112
|
-
assert(
|
|
113
|
-
"Unexpected error in #{projectFile}")
|
|
113
|
+
assert(mh.messages.empty?, "Unexpected error in #{projectFile}")
|
|
114
114
|
end
|
|
115
115
|
|
|
116
116
|
def test_CSV_Reports
|
data/test/test_Export-Reports.rb
CHANGED
|
@@ -21,111 +21,116 @@ require 'MessageChecker'
|
|
|
21
21
|
require 'taskjuggler/TaskJuggler'
|
|
22
22
|
require 'taskjuggler/AlgorithmDiff'
|
|
23
23
|
|
|
24
|
-
class
|
|
25
|
-
|
|
26
|
-
include MessageChecker
|
|
27
|
-
|
|
28
|
-
# This function captures the $stdout output of the passed block to a String
|
|
29
|
-
# and returns it.
|
|
30
|
-
def captureStdout
|
|
31
|
-
oldStdOut = $stdout
|
|
32
|
-
$stdout = (out = StringIO.new)
|
|
33
|
-
begin
|
|
34
|
-
yield
|
|
35
|
-
ensure
|
|
36
|
-
$stdout = oldStdOut
|
|
37
|
-
end
|
|
38
|
-
out.string
|
|
39
|
-
end
|
|
24
|
+
class TaskJuggler
|
|
40
25
|
|
|
41
|
-
|
|
42
|
-
# the name fileName.
|
|
43
|
-
def stdoutToFile(fileName)
|
|
44
|
-
oldStdOut = $stdout
|
|
45
|
-
$stdout = File.open(fileName, 'w')
|
|
46
|
-
begin
|
|
47
|
-
yield
|
|
48
|
-
$stdout.close
|
|
49
|
-
ensure
|
|
50
|
-
$stdout = oldStdOut
|
|
51
|
-
end
|
|
52
|
-
end
|
|
26
|
+
class TestExportReport < Test::Unit::TestCase
|
|
53
27
|
|
|
54
|
-
|
|
55
|
-
# the Export reference files _refFile_.
|
|
56
|
-
def compareExports(out, refFile, testCase)
|
|
57
|
-
ref = File.new(refFile, 'r').read
|
|
28
|
+
include MessageChecker
|
|
58
29
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
30
|
+
# This function captures the $stdout output of the passed block to a String
|
|
31
|
+
# and returns it.
|
|
32
|
+
def captureStdout
|
|
33
|
+
oldStdOut = $stdout
|
|
34
|
+
$stdout = (out = StringIO.new)
|
|
35
|
+
begin
|
|
36
|
+
yield
|
|
37
|
+
ensure
|
|
38
|
+
$stdout = oldStdOut
|
|
39
|
+
end
|
|
40
|
+
out.string
|
|
62
41
|
end
|
|
63
|
-
assert_equal('', diff, "output for #{testCase} does not match " +
|
|
64
|
-
"#{refFile}:\n#{diff}")
|
|
65
|
-
end
|
|
66
42
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
43
|
+
# This functions redirects all output of the passed block to a new file with
|
|
44
|
+
# the name fileName.
|
|
45
|
+
def stdoutToFile(fileName)
|
|
46
|
+
oldStdOut = $stdout
|
|
47
|
+
$stdout = File.open(fileName, 'w')
|
|
48
|
+
begin
|
|
49
|
+
yield
|
|
50
|
+
$stdout.close
|
|
51
|
+
ensure
|
|
52
|
+
$stdout = oldStdOut
|
|
53
|
+
end
|
|
54
|
+
end
|
|
71
55
|
|
|
72
|
-
#
|
|
73
|
-
|
|
56
|
+
# Compare the output Export (passed as String in _out_) with the content of
|
|
57
|
+
# the Export reference files _refFile_.
|
|
58
|
+
def compareExports(out, refFile, testCase)
|
|
59
|
+
ref = File.new(refFile, 'r').read
|
|
74
60
|
|
|
75
|
-
|
|
76
|
-
|
|
61
|
+
diff = ref.extend(DiffableString).diff(out).to_s
|
|
62
|
+
if diff != ''
|
|
63
|
+
File.new('failed.tjp', 'w').write(out)
|
|
64
|
+
end
|
|
65
|
+
assert_equal('', diff, "output for #{testCase} does not match " +
|
|
66
|
+
"#{refFile}:\n#{diff}")
|
|
67
|
+
end
|
|
77
68
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
69
|
+
def checkExportReport(projectFile, repFile, refFile)
|
|
70
|
+
tj = TaskJuggler.new
|
|
71
|
+
assert(tj.parse([ projectFile, repFile ]),
|
|
72
|
+
"Parser failed for #{projectFile}")
|
|
73
|
+
|
|
74
|
+
# Schedule the project.
|
|
75
|
+
assert(tj.schedule, "Scheduler failed for #{projectFile}")
|
|
76
|
+
|
|
77
|
+
tj.project.reports.each do |report|
|
|
78
|
+
next unless report.get('formats').include?(:tjp)
|
|
79
|
+
|
|
80
|
+
if File.file?(refFile)
|
|
81
|
+
# If there is a reference Export file for this test case, compare the
|
|
82
|
+
# output against it.
|
|
83
|
+
out = captureStdout do
|
|
84
|
+
assert(tj.generateReport(report.fullId, false),
|
|
85
|
+
"Report generation failed for #{projectFile}")
|
|
86
|
+
end
|
|
87
|
+
compareExports(out, refFile, projectFile)
|
|
88
|
+
else
|
|
89
|
+
# If not, we generate the reference file.
|
|
90
|
+
stdoutToFile(refFile) do
|
|
91
|
+
assert(tj.generateReport(report.fullId, false),
|
|
92
|
+
"Reference file generation failed for #{projectFile}")
|
|
93
|
+
end
|
|
91
94
|
end
|
|
92
95
|
end
|
|
96
|
+
assert(MessageHandlerInstance.instance.messages.empty?,
|
|
97
|
+
"Unexpected error in #{projectFile}")
|
|
93
98
|
end
|
|
94
|
-
assert(tj.messageHandler.messages.empty?,
|
|
95
|
-
"Unexpected error in #{projectFile}")
|
|
96
|
-
end
|
|
97
99
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
+
def test_Export_Reports
|
|
101
|
+
path = File.dirname(__FILE__)
|
|
100
102
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
103
|
+
ENV['TEST1'] = 't_e_s_t_1'
|
|
104
|
+
ENV['TEST2'] = '"A test String"'
|
|
105
|
+
ENV['TEST3'] = '3'
|
|
106
|
+
testDir = path + '/TestSuite/Syntax/Correct/'
|
|
107
|
+
Dir.glob(testDir + '*.tjp').each do |f|
|
|
108
|
+
# We ignore some test cases that cannot work in this setup.
|
|
109
|
+
next if %w( Freeze.tjp Export.tjp ).include?(f[testDir.length..-1])
|
|
108
110
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
+
# Take the project, schedule it, check it against the reference and
|
|
112
|
+
# export it. Then check the export against the reference file.
|
|
111
113
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
114
|
+
refFile = refFileName(f)
|
|
115
|
+
repFile = reportDefFileName(f)
|
|
116
|
+
checkExportReport(f, repFile, refFile)
|
|
117
|
+
checkExportReport(refFile, repFile, refFile)
|
|
118
|
+
end
|
|
116
119
|
end
|
|
117
|
-
end
|
|
118
120
|
|
|
119
|
-
|
|
121
|
+
private
|
|
120
122
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
123
|
+
def refFileName(originalFile)
|
|
124
|
+
baseDir = File.dirname(originalFile)
|
|
125
|
+
baseName = File.basename(originalFile, '.tjp')
|
|
126
|
+
baseDir + "/../../Export-Reports/refs/#{baseName}.tjp"
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def reportDefFileName(originalFile)
|
|
130
|
+
File.dirname(originalFile) + "/../../Export-Reports/export.tji"
|
|
131
|
+
end
|
|
126
132
|
|
|
127
|
-
def reportDefFileName(originalFile)
|
|
128
|
-
File.dirname(originalFile) + "/../../Export-Reports/export.tji"
|
|
129
133
|
end
|
|
130
134
|
|
|
131
135
|
end
|
|
136
|
+
|