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.
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
+