taskjuggler 3.1.0 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (410) hide show
  1. data/CHANGELOG +44 -0
  2. data/bin/tj3webd +4 -0
  3. data/data/css/tjreport.css +14 -5
  4. data/data/tjp.vim +22 -7
  5. data/examples/Fedora-20/reports.tji +2 -4
  6. data/examples/Scrum/Product Burndown.csv +26 -0
  7. data/examples/Scrum/Sprint 1 Burndown.csv +26 -0
  8. data/examples/Scrum/Sprint 2 Burndown.csv +26 -0
  9. data/examples/Scrum/Sprint 3 Burndown.csv +26 -0
  10. data/examples/Scrum/scrum.tjp +141 -0
  11. data/examples/Tutorial/tutorial.tjp +13 -7
  12. data/lib/taskjuggler/Attributes.rb +2 -3
  13. data/lib/taskjuggler/HTMLDocument.rb +25 -18
  14. data/lib/taskjuggler/Journal.rb +85 -65
  15. data/lib/taskjuggler/KeywordDocumentation.rb +25 -13
  16. data/lib/taskjuggler/LeaveList.rb +1 -1
  17. data/lib/taskjuggler/Limits.rb +3 -5
  18. data/lib/taskjuggler/MessageHandler.rb +173 -19
  19. data/lib/taskjuggler/Painter.rb +75 -0
  20. data/lib/taskjuggler/Painter/BasicShapes.rb +76 -0
  21. data/lib/taskjuggler/Painter/Color.rb +273 -0
  22. data/lib/taskjuggler/Painter/Element.rb +56 -0
  23. data/lib/taskjuggler/Painter/FontData.rb +221 -0
  24. data/lib/taskjuggler/Painter/FontMetrics.rb +125 -0
  25. data/lib/taskjuggler/Painter/FontMetricsData.rb +151 -0
  26. data/lib/taskjuggler/Painter/Group.rb +77 -0
  27. data/lib/taskjuggler/Painter/Points.rb +47 -0
  28. data/lib/taskjuggler/Painter/Primitives.rb +100 -0
  29. data/lib/taskjuggler/Painter/SVGSupport.rb +36 -0
  30. data/lib/taskjuggler/Painter/Text.rb +36 -0
  31. data/lib/taskjuggler/Project.rb +46 -29
  32. data/lib/taskjuggler/ProjectFileParser.rb +24 -22
  33. data/lib/taskjuggler/ProjectFileScanner.rb +2 -2
  34. data/lib/taskjuggler/PropertyTreeNode.rb +26 -34
  35. data/lib/taskjuggler/Query.rb +8 -5
  36. data/lib/taskjuggler/RealFormat.rb +3 -0
  37. data/lib/taskjuggler/Resource.rb +3 -5
  38. data/lib/taskjuggler/ResourceScenario.rb +19 -7
  39. data/lib/taskjuggler/RichText.rb +4 -6
  40. data/lib/taskjuggler/RichText/FunctionExample.rb +1 -1
  41. data/lib/taskjuggler/RichText/FunctionHandler.rb +5 -6
  42. data/lib/taskjuggler/RichText/Parser.rb +4 -6
  43. data/lib/taskjuggler/RichText/RTFNavigator.rb +1 -1
  44. data/lib/taskjuggler/RichText/RTFQuery.rb +2 -3
  45. data/lib/taskjuggler/RichText/RTFReport.rb +1 -1
  46. data/lib/taskjuggler/RichText/RTFReportLink.rb +1 -2
  47. data/lib/taskjuggler/RichText/RTFWithQuerySupport.rb +1 -1
  48. data/lib/taskjuggler/RichText/Scanner.rb +6 -6
  49. data/lib/taskjuggler/RichText/Snip.rb +1 -2
  50. data/lib/taskjuggler/RuntimeConfig.rb +9 -6
  51. data/lib/taskjuggler/ScenarioData.rb +4 -3
  52. data/lib/taskjuggler/Scoreboard.rb +6 -0
  53. data/lib/taskjuggler/SheetHandlerBase.rb +25 -8
  54. data/lib/taskjuggler/SimpleQueryExpander.rb +14 -5
  55. data/lib/taskjuggler/SyntaxReference.rb +1 -2
  56. data/lib/taskjuggler/TableColumnSorter.rb +84 -0
  57. data/lib/taskjuggler/Task.rb +3 -5
  58. data/lib/taskjuggler/TaskJuggler.rb +36 -29
  59. data/lib/taskjuggler/TaskScenario.rb +154 -66
  60. data/lib/taskjuggler/TextParser.rb +24 -17
  61. data/lib/taskjuggler/TextParser/Scanner.rb +16 -11
  62. data/lib/taskjuggler/TextParser/SourceFileInfo.rb +20 -15
  63. data/lib/taskjuggler/TimeSheets.rb +6 -12
  64. data/lib/taskjuggler/Tj3AppBase.rb +35 -16
  65. data/lib/taskjuggler/Tj3Config.rb +1 -1
  66. data/lib/taskjuggler/TjpSyntaxRules.rb +239 -49
  67. data/lib/taskjuggler/XMLElement.rb +9 -2
  68. data/lib/taskjuggler/apps/Tj3.rb +43 -37
  69. data/lib/taskjuggler/apps/Tj3Client.rb +62 -112
  70. data/lib/taskjuggler/apps/Tj3Daemon.rb +66 -29
  71. data/lib/taskjuggler/apps/Tj3Man.rb +5 -5
  72. data/lib/taskjuggler/apps/Tj3SsReceiver.rb +10 -13
  73. data/lib/taskjuggler/apps/Tj3SsSender.rb +13 -16
  74. data/lib/taskjuggler/apps/Tj3TsReceiver.rb +10 -13
  75. data/lib/taskjuggler/apps/Tj3TsSender.rb +12 -15
  76. data/lib/taskjuggler/apps/Tj3TsSummary.rb +12 -15
  77. data/lib/taskjuggler/apps/Tj3WebD.rb +99 -0
  78. data/lib/taskjuggler/daemon/Daemon.rb +50 -10
  79. data/lib/taskjuggler/daemon/DaemonConnector.rb +127 -0
  80. data/lib/taskjuggler/daemon/ProcessIntercom.rb +36 -21
  81. data/lib/taskjuggler/daemon/ProjectBroker.rb +122 -112
  82. data/lib/taskjuggler/daemon/ProjectServer.rb +78 -46
  83. data/lib/taskjuggler/daemon/ReportServer.rb +52 -28
  84. data/lib/taskjuggler/daemon/ReportServlet.rb +92 -21
  85. data/lib/taskjuggler/daemon/WebServer.rb +75 -22
  86. data/lib/taskjuggler/daemon/WelcomePage.rb +1 -0
  87. data/lib/taskjuggler/reports/AccountListRE.rb +3 -3
  88. data/lib/taskjuggler/reports/CSVFile.rb +9 -2
  89. data/lib/taskjuggler/reports/ChartPlotter.rb +453 -0
  90. data/lib/taskjuggler/reports/Navigator.rb +1 -0
  91. data/lib/taskjuggler/reports/NikuReport.rb +4 -4
  92. data/lib/taskjuggler/reports/Report.rb +6 -18
  93. data/lib/taskjuggler/reports/ReportBase.rb +9 -9
  94. data/lib/taskjuggler/reports/ReportContext.rb +2 -2
  95. data/lib/taskjuggler/reports/StatusSheetReport.rb +6 -6
  96. data/lib/taskjuggler/reports/TableReport.rb +24 -15
  97. data/lib/taskjuggler/reports/TimeSheetReport.rb +5 -5
  98. data/lib/taskjuggler/reports/TraceReport.rb +251 -0
  99. data/lib/tj3webd.rb +17 -0
  100. data/manual/Day_To_Day_Juggling +10 -3
  101. data/manual/Installation +38 -19
  102. data/manual/Software +25 -19
  103. data/manual/Tutorial +119 -110
  104. data/manual/html/Day_To_Day_Juggling.html +7 -5
  105. data/manual/html/Getting_Started.html +4 -4
  106. data/manual/html/How_To_Contribute.html +4 -4
  107. data/manual/html/Installation.html +19 -11
  108. data/manual/html/Intro.html +4 -4
  109. data/manual/html/Reporting_Bugs.html +4 -4
  110. data/manual/html/Rich_Text_Attributes.html +4 -4
  111. data/manual/html/Software.html +15 -11
  112. data/manual/html/TaskJuggler_2x_Migration.html +4 -4
  113. data/manual/html/TaskJuggler_Internals.html +4 -4
  114. data/manual/html/The_TaskJuggler_Syntax.html +4 -4
  115. data/manual/html/Tutorial.html +41 -32
  116. data/manual/html/account.html +4 -4
  117. data/manual/html/account.task.html +4 -4
  118. data/manual/html/accountprefix.html +4 -4
  119. data/manual/html/accountreport.html +27 -9
  120. data/manual/html/accountroot.html +5 -5
  121. data/manual/html/active.html +4 -4
  122. data/manual/html/adopt.task.html +4 -4
  123. data/manual/html/aggregate.html +4 -4
  124. data/manual/html/alert.html +4 -4
  125. data/manual/html/alertlevels.html +4 -4
  126. data/manual/html/allocate.html +5 -5
  127. data/manual/html/alphabet.html +4 -4
  128. data/manual/html/alternative.html +4 -4
  129. data/manual/html/author.html +4 -4
  130. data/manual/html/balance.html +5 -5
  131. data/manual/html/booking.resource.html +4 -4
  132. data/manual/html/booking.task.html +4 -4
  133. data/manual/html/caption.html +5 -5
  134. data/manual/html/cellcolor.column.html +43 -8
  135. data/manual/html/celltext.column.html +4 -4
  136. data/manual/html/center.html +5 -5
  137. data/manual/html/charge.html +4 -4
  138. data/manual/html/chargeset.html +4 -4
  139. data/manual/html/columnid.html +27 -15
  140. data/manual/html/columns.html +5 -5
  141. data/manual/html/complete.html +4 -4
  142. data/manual/html/copyright.html +4 -4
  143. data/manual/html/credits.html +4 -4
  144. data/manual/html/css/tjreport.css +14 -5
  145. data/manual/html/currency.html +4 -4
  146. data/manual/html/currencyformat.html +5 -5
  147. data/manual/html/dailymax.html +5 -5
  148. data/manual/html/dailymin.html +5 -5
  149. data/manual/html/dailyworkinghours.html +4 -4
  150. data/manual/html/date.extend.html +4 -4
  151. data/manual/html/date.html +5 -5
  152. data/manual/html/definitions.html +4 -4
  153. data/manual/html/depends.html +4 -4
  154. data/manual/html/details.html +4 -4
  155. data/manual/html/disabled.html +4 -4
  156. data/manual/html/duration.html +4 -4
  157. data/manual/html/efficiency.html +4 -4
  158. data/manual/html/effort.html +4 -4
  159. data/manual/html/email.html +4 -4
  160. data/manual/html/enabled.html +4 -4
  161. data/manual/html/end.column.html +4 -4
  162. data/manual/html/end.html +4 -4
  163. data/manual/html/end.limit.html +4 -4
  164. data/manual/html/end.report.html +5 -5
  165. data/manual/html/end.timesheet.html +4 -4
  166. data/manual/html/endcredit.html +4 -4
  167. data/manual/html/epilog.html +5 -5
  168. data/manual/html/export.html +4 -4
  169. data/manual/html/extend.html +4 -4
  170. data/manual/html/fail.html +43 -8
  171. data/manual/html/fdl.html +4 -4
  172. data/manual/html/flags.account.html +4 -4
  173. data/manual/html/flags.html +4 -4
  174. data/manual/html/flags.journalentry.html +4 -4
  175. data/manual/html/flags.report.html +5 -5
  176. data/manual/html/flags.resource.html +4 -4
  177. data/manual/html/flags.statussheet.html +4 -4
  178. data/manual/html/flags.task.html +4 -4
  179. data/manual/html/flags.timesheet.html +4 -4
  180. data/manual/html/fontcolor.column.html +43 -8
  181. data/manual/html/footer.html +5 -5
  182. data/manual/html/formats.html +5 -5
  183. data/manual/html/functions.html +4 -4
  184. data/manual/html/gapduration.html +4 -4
  185. data/manual/html/gaplength.html +4 -4
  186. data/manual/html/halign.center.html +4 -4
  187. data/manual/html/halign.column.html +43 -8
  188. data/manual/html/halign.left.html +4 -4
  189. data/manual/html/halign.right.html +4 -4
  190. data/manual/html/hasalert.html +4 -4
  191. data/manual/html/header.html +5 -5
  192. data/manual/html/headline.html +7 -7
  193. data/manual/html/height.html +72 -0
  194. data/manual/html/hideaccount.html +46 -11
  195. data/manual/html/hidejournalentry.html +5 -5
  196. data/manual/html/hidereport.html +43 -8
  197. data/manual/html/hideresource.html +44 -9
  198. data/manual/html/hidetask.html +44 -9
  199. data/manual/html/icalreport.html +4 -4
  200. data/manual/html/include.macro.html +4 -4
  201. data/manual/html/include.project.html +4 -4
  202. data/manual/html/include.properties.html +4 -4
  203. data/manual/html/index.html +2 -1
  204. data/manual/html/inherit.extend.html +4 -4
  205. data/manual/html/interval1.html +4 -4
  206. data/manual/html/interval2.html +4 -4
  207. data/manual/html/interval3.html +4 -4
  208. data/manual/html/interval4.html +4 -4
  209. data/manual/html/isactive.html +4 -4
  210. data/manual/html/ischildof.html +4 -4
  211. data/manual/html/isdependencyof.html +4 -4
  212. data/manual/html/isdutyof.html +4 -4
  213. data/manual/html/isfeatureof.html +4 -4
  214. data/manual/html/isleaf.html +4 -4
  215. data/manual/html/ismilestone.html +4 -4
  216. data/manual/html/isongoing.html +4 -4
  217. data/manual/html/isresource.html +4 -4
  218. data/manual/html/isresponsibilityof.html +4 -4
  219. data/manual/html/istask.html +4 -4
  220. data/manual/html/journalattributes.html +11 -7
  221. data/manual/html/journalentry.html +4 -4
  222. data/manual/html/journalmode.html +5 -5
  223. data/manual/html/leaveallowance.html +5 -5
  224. data/manual/html/leaves.html +5 -6
  225. data/manual/html/left.html +5 -5
  226. data/manual/html/length.html +4 -4
  227. data/manual/html/limits.allocate.html +4 -4
  228. data/manual/html/limits.html +4 -4
  229. data/manual/html/limits.resource.html +4 -4
  230. data/manual/html/limits.task.html +4 -4
  231. data/manual/html/listitem.column.html +4 -4
  232. data/manual/html/listtype.column.html +4 -4
  233. data/manual/html/loadunit.html +5 -5
  234. data/manual/html/logicalexpression.html +8 -44
  235. data/manual/html/logicalflagexpression.html +4 -4
  236. data/manual/html/macro.html +4 -4
  237. data/manual/html/managers.html +4 -4
  238. data/manual/html/mandatory.html +4 -4
  239. data/manual/html/maxend.html +4 -4
  240. data/manual/html/maximum.html +5 -5
  241. data/manual/html/maxstart.html +4 -4
  242. data/manual/html/milestone.html +4 -4
  243. data/manual/html/minend.html +4 -4
  244. data/manual/html/minimum.html +5 -5
  245. data/manual/html/minstart.html +4 -4
  246. data/manual/html/monthlymax.html +5 -5
  247. data/manual/html/monthlymin.html +5 -5
  248. data/manual/html/navbar.html +10 -4
  249. data/manual/html/navigator.html +4 -4
  250. data/manual/html/newtask.html +4 -4
  251. data/manual/html/nikureport.html +4 -4
  252. data/manual/html/note.task.html +4 -4
  253. data/manual/html/now.html +4 -4
  254. data/manual/html/numberformat.html +5 -5
  255. data/manual/html/onend.html +4 -4
  256. data/manual/html/onstart.html +4 -4
  257. data/manual/html/opennodes.html +5 -5
  258. data/manual/html/overtime.booking.html +4 -4
  259. data/manual/html/period.column.html +4 -4
  260. data/manual/html/period.limit.html +4 -4
  261. data/manual/html/period.report.html +5 -5
  262. data/manual/html/period.task.html +4 -4
  263. data/manual/html/persistent.html +4 -4
  264. data/manual/html/precedes.html +4 -4
  265. data/manual/html/priority.html +4 -4
  266. data/manual/html/priority.timesheet.html +4 -4
  267. data/manual/html/project.html +4 -4
  268. data/manual/html/projectid.html +4 -4
  269. data/manual/html/projectid.task.html +4 -4
  270. data/manual/html/projectids.html +4 -4
  271. data/manual/html/projection.html +5 -7
  272. data/manual/html/prolog.html +5 -5
  273. data/manual/html/properties.html +11 -5
  274. data/manual/html/purge.html +5 -5
  275. data/manual/html/rate.html +4 -4
  276. data/manual/html/rate.resource.html +4 -4
  277. data/manual/html/reference.extend.html +4 -4
  278. data/manual/html/remaining.html +4 -4
  279. data/manual/html/replace.html +4 -4
  280. data/manual/html/reportprefix.html +4 -4
  281. data/manual/html/resource.html +4 -10
  282. data/manual/html/resourceattributes.html +4 -4
  283. data/manual/html/resourceprefix.html +4 -4
  284. data/manual/html/resourcereport.html +28 -10
  285. data/manual/html/resourceroot.html +5 -5
  286. data/manual/html/resources.limit.html +4 -4
  287. data/manual/html/responsible.html +4 -4
  288. data/manual/html/richtext.extend.html +4 -4
  289. data/manual/html/right.html +5 -5
  290. data/manual/html/rollupaccount.html +44 -9
  291. data/manual/html/rollupresource.html +44 -9
  292. data/manual/html/rolluptask.html +44 -9
  293. data/manual/html/scale.column.html +4 -4
  294. data/manual/html/scenario.html +4 -22
  295. data/manual/html/scenario.ical.html +4 -4
  296. data/manual/html/scenarios.export.html +4 -4
  297. data/manual/html/scenarios.html +5 -5
  298. data/manual/html/scenariospecific.extend.html +4 -4
  299. data/manual/html/scheduled.html +4 -4
  300. data/manual/html/scheduling.html +4 -4
  301. data/manual/html/select.html +4 -4
  302. data/manual/html/selfcontained.html +5 -5
  303. data/manual/html/shift.allocate.html +4 -4
  304. data/manual/html/shift.html +4 -4
  305. data/manual/html/shift.resource.html +5 -5
  306. data/manual/html/shift.task.html +4 -4
  307. data/manual/html/shift.timesheet.html +4 -4
  308. data/manual/html/shifts.allocate.html +4 -4
  309. data/manual/html/shifts.resource.html +4 -4
  310. data/manual/html/shifts.task.html +4 -4
  311. data/manual/html/shorttimeformat.html +4 -4
  312. data/manual/html/sloppy.booking.html +4 -4
  313. data/manual/html/sloppy.projection.html +5 -5
  314. data/manual/html/sortaccounts.html +5 -5
  315. data/manual/html/sortjournalentries.html +5 -5
  316. data/manual/html/sortresources.html +5 -5
  317. data/manual/html/sorttasks.html +5 -5
  318. data/manual/html/start.column.html +4 -4
  319. data/manual/html/start.html +4 -4
  320. data/manual/html/start.limit.html +4 -4
  321. data/manual/html/start.report.html +5 -5
  322. data/manual/html/startcredit.html +4 -4
  323. data/manual/html/status.statussheet.html +4 -4
  324. data/manual/html/status.timesheet.html +4 -4
  325. data/manual/html/statussheet.html +4 -4
  326. data/manual/html/statussheetreport.html +4 -4
  327. data/manual/html/strict.projection.html +5 -5
  328. data/manual/html/summary.html +4 -4
  329. data/manual/html/supplement.html +4 -4
  330. data/manual/html/supplement.resource.html +4 -10
  331. data/manual/html/supplement.task.html +4 -28
  332. data/manual/html/tagfile.html +4 -4
  333. data/manual/html/task.html +4 -28
  334. data/manual/html/task.statussheet.html +4 -4
  335. data/manual/html/task.timesheet.html +4 -4
  336. data/manual/html/taskattributes.html +4 -4
  337. data/manual/html/taskprefix.html +4 -4
  338. data/manual/html/taskreport.html +28 -10
  339. data/manual/html/taskroot.html +5 -5
  340. data/manual/html/text.extend.html +4 -4
  341. data/manual/html/textreport.html +27 -9
  342. data/manual/html/timeformat.html +5 -5
  343. data/manual/html/timeoff.nikureport.html +4 -4
  344. data/manual/html/timesheet.html +4 -4
  345. data/manual/html/timesheetreport.html +23 -5
  346. data/manual/html/timezone.export.html +4 -4
  347. data/manual/html/timezone.html +4 -4
  348. data/manual/html/timezone.report.html +5 -5
  349. data/manual/html/timezone.shift.html +4 -4
  350. data/manual/html/timingresolution.html +4 -4
  351. data/manual/html/title.column.html +4 -4
  352. data/manual/html/title.html +5 -5
  353. data/manual/html/toc.html +207 -179
  354. data/manual/html/tooltip.column.html +45 -10
  355. data/manual/html/tracereport.html +405 -0
  356. data/manual/html/trackingscenario.html +6 -6
  357. data/manual/html/treelevel.html +4 -4
  358. data/manual/html/vacation.html +4 -4
  359. data/manual/html/vacation.resource.html +4 -4
  360. data/manual/html/vacation.shift.html +4 -4
  361. data/manual/html/warn.html +43 -8
  362. data/manual/html/weeklymax.html +5 -5
  363. data/manual/html/weeklymin.html +5 -5
  364. data/manual/html/weekstartsmonday.html +4 -4
  365. data/manual/html/weekstartssunday.html +6 -6
  366. data/manual/html/width.column.html +6 -6
  367. data/manual/html/width.html +72 -0
  368. data/manual/html/work.html +4 -4
  369. data/manual/html/workinghours.project.html +4 -4
  370. data/manual/html/workinghours.resource.html +4 -4
  371. data/manual/html/workinghours.shift.html +4 -4
  372. data/manual/html/yearlyworkingdays.html +4 -4
  373. data/spec/Color_spec.rb +60 -0
  374. data/spec/ProjectBroker_spec.rb +3 -2
  375. data/spec/StatusSheets_spec.rb +5 -4
  376. data/spec/TableColumnSorter_spec.rb +78 -0
  377. data/spec/TimeSheets_spec.rb +6 -2
  378. data/spec/Tj3Daemon_spec.rb +2 -2
  379. data/spec/TraceReport_spec.rb +117 -0
  380. data/taskjuggler.gemspec +1 -1
  381. data/test/MessageChecker.rb +3 -1
  382. data/test/ReferenceGenerator.rb +1 -1
  383. data/test/TestSuite/CSV-Reports/Leave.tjp +1 -1
  384. data/test/TestSuite/CSV-Reports/refs/resourcereport_with_tasks.csv +3 -0
  385. data/test/TestSuite/CSV-Reports/refs/taskcounter.csv +9 -0
  386. data/test/TestSuite/CSV-Reports/refs/taskreport_with_resources.csv +19 -16
  387. data/test/TestSuite/CSV-Reports/refs/weekly.csv +1 -0
  388. data/test/TestSuite/Export-Reports/refs/LogicalExpression.tjp +14 -2
  389. data/test/TestSuite/Export-Reports/refs/tutorial.tjp +98 -86
  390. data/test/TestSuite/Scheduler/Correct/Leaves.tjp +25 -0
  391. data/test/TestSuite/Syntax/Correct/Leave.tjp +1 -1
  392. data/test/TestSuite/Syntax/Correct/LogicalExpression.tjp +9 -1
  393. data/test/TestSuite/Syntax/Correct/TraceReport.tjp +10 -0
  394. data/test/TestSuite/Syntax/Correct/tutorial.tjp +10 -4
  395. data/test/test_CSV-Reports.rb +3 -3
  396. data/test/test_Export-Reports.rb +91 -86
  397. data/test/test_Journal.rb +15 -12
  398. data/test/test_Limits.rb +3 -3
  399. data/test/test_Project.rb +1 -2
  400. data/test/test_ProjectFileScanner.rb +1 -1
  401. data/test/test_PropertySet.rb +1 -1
  402. data/test/test_Query.rb +5 -6
  403. data/test/test_ReportGenerator.rb +15 -7
  404. data/test/test_RichText.rb +4 -3
  405. data/test/test_Scheduler.rb +19 -7
  406. data/test/test_ShiftAssignments.rb +2 -2
  407. data/test/test_SimpleQueryExpander.rb +29 -2
  408. data/test/test_Syntax.rb +14 -5
  409. metadata +49 -10
  410. 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-26-10:00-+0000
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-03-13:00-+0000
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-26-10:00-+0000
76
- end 2002-03-28-16:00-+0000
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-03-13:00-+0000
80
- delayed:end 2002-04-08-11:00-+0000
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-01-07:00-+0000
86
- end 2002-04-16-10:00-+0000
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-08-11:00-+0000
90
- delayed:end 2002-04-23-15:00-+0000
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-28-16:00-+0000
122
+ start 2002-04-03-10:00-+0000
123
123
  milestone
124
124
  scheduled
125
- delayed:start 2002-04-08-11:00-+0000
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-16-10:00-+0000
130
+ start 2002-04-18-13:00-+0000
131
131
  milestone
132
132
  scheduled
133
- delayed:start 2002-04-23-15:00-+0000
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 + 8.0h,
247
- 2002-03-04-08:00-+0000 + 8.0h,
248
- 2002-03-05-08:00-+0000 + 8.0h,
249
- 2002-03-06-08:00-+0000 + 8.0h,
250
- 2002-03-07-08:00-+0000 + 8.0h,
251
- 2002-03-08-08:00-+0000 + 8.0h,
252
- 2002-03-11-08:00-+0000 + 8.0h,
253
- 2002-03-12-08:00-+0000 + 8.0h,
254
- 2002-03-13-08:00-+0000 + 8.0h,
255
- 2002-03-14-08:00-+0000 + 8.0h,
256
- 2002-03-15-08:00-+0000 + 8.0h,
257
- 2002-03-18-08:00-+0000 + 8.0h,
258
- 2002-03-19-08:00-+0000 + 8.0h,
259
- 2002-03-20-08:00-+0000 + 8.0h,
260
- 2002-03-21-08:00-+0000 + 8.0h,
261
- 2002-03-22-08:00-+0000 + 8.0h,
262
- 2002-03-25-08:00-+0000 + 8.0h,
263
- 2002-03-26-08:00-+0000 + 2.0h { overtime 2 }
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 + 2.0h { overtime 2 }
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 + 8.0h,
285
- 2002-03-07-08:00-+0000 + 8.0h,
286
- 2002-03-08-08:00-+0000 + 8.0h,
287
- 2002-03-11-08:00-+0000 + 8.0h,
288
- 2002-03-12-08:00-+0000 + 8.0h,
289
- 2002-03-13-08:00-+0000 + 8.0h,
290
- 2002-03-14-08:00-+0000 + 8.0h,
291
- 2002-03-15-08:00-+0000 + 8.0h,
292
- 2002-03-18-08:00-+0000 + 8.0h,
293
- 2002-03-19-08:00-+0000 + 8.0h,
294
- 2002-03-20-08:00-+0000 + 8.0h,
295
- 2002-03-21-08:00-+0000 + 8.0h,
296
- 2002-03-22-08:00-+0000 + 8.0h,
297
- 2002-03-25-08:00-+0000 + 8.0h,
298
- 2002-03-26-08:00-+0000 + 8.0h,
299
- 2002-03-27-08:00-+0000 + 8.0h,
300
- 2002-03-28-08:00-+0000 + 8.0h,
301
- 2002-04-01-07:00-+0000 + 8.0h,
302
- 2002-04-02-07:00-+0000 + 8.0h,
303
- 2002-04-03-07:00-+0000 + 6.0h { overtime 2 }
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 + 6.0h { overtime 2 }
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-26-10:00-+0000 + 6.0h,
406
- 2002-03-27-08:00-+0000 + 8.0h,
407
- 2002-03-28-08:00-+0000 + 8.0h { overtime 2 }
408
- booking test 2002-03-26-10:00-+0000 + 6.0h,
409
- 2002-03-27-08:00-+0000 + 6.0h,
410
- 2002-03-28-08:00-+0000 + 6.0h { overtime 2 }
411
- delayed:booking dev2 2002-04-03-13:00-+0000 + 2.0h,
412
- 2002-04-04-07:00-+0000 + 8.0h,
413
- 2002-04-05-07:00-+0000 + 8.0h,
414
- 2002-04-08-07:00-+0000 + 4.0h { overtime 2 }
415
- delayed:booking test 2002-04-03-13:00-+0000 + 2.0h,
416
- 2002-04-04-07:00-+0000 + 6.0h,
417
- 2002-04-05-07:00-+0000 + 6.0h,
418
- 2002-04-08-07:00-+0000 + 4.0h { overtime 2 }
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-01-07:00-+0000 + 8.0h,
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 + 3.0h { overtime 2 }
437
- booking test 2002-04-01-07:00-+0000 + 6.0h,
438
- 2002-04-02-07:00-+0000 + 6.0h,
439
- 2002-04-03-07:00-+0000 + 6.0h,
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 + 3.0h { overtime 2 }
449
- delayed:booking dev1 2002-04-08-11:00-+0000 + 4.0h,
450
- 2002-04-09-07:00-+0000 + 8.0h,
451
- 2002-04-10-07:00-+0000 + 8.0h,
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 { overtime 2 }
461
- delayed:booking test 2002-04-08-11:00-+0000 + 2.0h,
462
- 2002-04-09-07:00-+0000 + 6.0h,
463
- 2002-04-10-07:00-+0000 + 6.0h,
464
- 2002-04-11-07:00-+0000 + 6.0h,
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 { overtime 2 }
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
+ }
@@ -25,7 +25,7 @@ resource team "Team" {
25
25
  }
26
26
  }
27
27
  resource r3 "R3" {
28
- shift s1 2011-12-19 +3w
28
+ shifts s1 2011-12-19 +3w
29
29
  leaves sick 2012-01-04 +2d
30
30
  }
31
31
 
@@ -2,7 +2,11 @@ project "LogExp" 2009-10-19 +2m {
2
2
  timezone "America/Denver"
3
3
  }
4
4
 
5
- task "T"
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
+ }
@@ -0,0 +1,10 @@
1
+ project "Trace Reports" 2012-01-14 +2m
2
+
3
+ task "Foo"
4
+ task "Bar"
5
+ task "FooBar"
6
+
7
+ tracereport "TraceReport" {
8
+ columns end { title "<-name->" }
9
+ hidetask 0
10
+ }
@@ -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 0
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 1
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 1
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 1
636
+ hidetask @all
631
637
  }
632
638
 
633
639
  # A graph showing resource allocation. It identifies whether each
@@ -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
- tj = TaskJuggler.new(true)
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(tj.messageHandler.messages.empty?,
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
@@ -21,111 +21,116 @@ require 'MessageChecker'
21
21
  require 'taskjuggler/TaskJuggler'
22
22
  require 'taskjuggler/AlgorithmDiff'
23
23
 
24
- class TestExportReport < Test::Unit::TestCase
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
- # This functions redirects all output of the passed block to a new file with
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
- # Compare the output Export (passed as String in _out_) with the content of
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
- diff = ref.extend(DiffableString).diff(out).to_s
60
- if diff != ''
61
- File.new('failed.tjp', 'w').write(out)
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
- def checkExportReport(projectFile, repFile, refFile)
68
- tj = TaskJuggler.new(true)
69
- assert(tj.parse([ projectFile, repFile ]),
70
- "Parser failed for #{projectFile}")
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
- # Schedule the project.
73
- assert(tj.schedule, "Scheduler failed for #{projectFile}")
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
- tj.project.reports.each do |report|
76
- next unless report.get('formats').include?(:tjp)
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
- if File.file?(refFile)
79
- # If there is a reference Export file for this test case, compare the
80
- # output against it.
81
- out = captureStdout do
82
- assert(tj.generateReport(report.fullId, false),
83
- "Report generation failed for #{projectFile}")
84
- end
85
- compareExports(out, refFile, projectFile)
86
- else
87
- # If not, we generate the reference file.
88
- stdoutToFile(refFile) do
89
- assert(tj.generateReport(report.fullId, false),
90
- "Reference file generation failed for #{projectFile}")
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
- def test_Export_Reports
99
- path = File.dirname(__FILE__)
100
+ def test_Export_Reports
101
+ path = File.dirname(__FILE__)
100
102
 
101
- ENV['TEST1'] = 't_e_s_t_1'
102
- ENV['TEST2'] = '"A test String"'
103
- ENV['TEST3'] = '3'
104
- testDir = path + '/TestSuite/Syntax/Correct/'
105
- Dir.glob(testDir + '*.tjp').each do |f|
106
- # We ignore some test cases that cannot work in this setup.
107
- next if %w( Freeze.tjp Export.tjp ).include?(f[testDir.length..-1])
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
- # Take the project, schedule it, check it against the reference and
110
- # export it. Then check the export against the reference file.
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
- refFile = refFileName(f)
113
- repFile = reportDefFileName(f)
114
- checkExportReport(f, repFile, refFile)
115
- checkExportReport(refFile, repFile, refFile)
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
- private
121
+ private
120
122
 
121
- def refFileName(originalFile)
122
- baseDir = File.dirname(originalFile)
123
- baseName = File.basename(originalFile, '.tjp')
124
- baseDir + "/../../Export-Reports/refs/#{baseName}.tjp"
125
- end
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
+