taskjuggler 0.0.3 → 0.0.4

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 (495) hide show
  1. data/benchmarks/UTF-8-Strings.rb +58 -0
  2. data/data/css/tjmanual.css +52 -0
  3. data/data/css/tjreport.css +195 -0
  4. data/data/icons/details.png +0 -0
  5. data/data/icons/flag-green.png +0 -0
  6. data/data/icons/flag-red.png +0 -0
  7. data/data/icons/flag-yellow.png +0 -0
  8. data/data/icons/resource.png +0 -0
  9. data/data/icons/resourcegroup.png +0 -0
  10. data/data/icons/task.png +0 -0
  11. data/data/icons/taskgroup.png +0 -0
  12. data/data/icons/trend-down.png +0 -0
  13. data/data/icons/trend-flat.png +0 -0
  14. data/data/icons/trend-up.png +0 -0
  15. data/data/scripts/wz_tooltip.js +1301 -0
  16. data/doc/classes/AppConfig.html +298 -230
  17. data/doc/classes/Arguments.html +8 -8
  18. data/doc/classes/Object.html +7 -7
  19. data/doc/classes/String.html +89 -89
  20. data/doc/classes/TaskJuggler.html +396 -264
  21. data/doc/classes/TaskJuggler/Account.html +18 -18
  22. data/doc/classes/TaskJuggler/AccountAttribute.html +26 -26
  23. data/doc/classes/TaskJuggler/AccountScenario.html +12 -12
  24. data/doc/classes/TaskJuggler/Allocation.html +30 -30
  25. data/doc/classes/TaskJuggler/AllocationAttribute.html +26 -26
  26. data/doc/classes/TaskJuggler/AttributeBase.html +227 -115
  27. data/doc/classes/TaskJuggler/AttributeDefinition.html +6 -6
  28. data/doc/classes/TaskJuggler/BatchProcessor.html +117 -83
  29. data/doc/classes/TaskJuggler/Booking.html +18 -18
  30. data/doc/classes/TaskJuggler/BookingListAttribute.html +26 -26
  31. data/doc/classes/TaskJuggler/BooleanAttribute.html +26 -26
  32. data/doc/classes/TaskJuggler/CSVFile.html +24 -24
  33. data/doc/classes/TaskJuggler/CellSettingPattern.html +201 -0
  34. data/doc/classes/TaskJuggler/CellSettingPatternList.html +253 -0
  35. data/doc/classes/TaskJuggler/Charge.html +18 -18
  36. data/doc/classes/TaskJuggler/ChargeListAttribute.html +20 -20
  37. data/doc/classes/TaskJuggler/ChargeSet.html +37 -37
  38. data/doc/classes/TaskJuggler/ChargeSetListAttribute.html +26 -26
  39. data/doc/classes/TaskJuggler/ColumnListAttribute.html +20 -20
  40. data/doc/classes/TaskJuggler/ColumnTable.html +40 -40
  41. data/doc/classes/TaskJuggler/DateAttribute.html +54 -15
  42. data/doc/classes/TaskJuggler/DefinitionListAttribute.html +10 -10
  43. data/doc/classes/TaskJuggler/DependencyListAttribute.html +47 -47
  44. data/doc/classes/TaskJuggler/DurationAttribute.html +30 -30
  45. data/doc/classes/TaskJuggler/FixnumAttribute.html +20 -20
  46. data/doc/classes/TaskJuggler/FlagListAttribute.html +43 -43
  47. data/doc/classes/TaskJuggler/FloatAttribute.html +30 -30
  48. data/doc/classes/TaskJuggler/FormatListAttribute.html +21 -21
  49. data/doc/classes/TaskJuggler/GanttChart.html +48 -48
  50. data/doc/classes/TaskJuggler/GanttContainer.html +42 -42
  51. data/doc/classes/TaskJuggler/GanttHeader.html +12 -12
  52. data/doc/classes/TaskJuggler/GanttHeaderScaleItem.html +12 -12
  53. data/doc/classes/TaskJuggler/GanttLine.html +24 -24
  54. data/doc/classes/TaskJuggler/GanttLoadStack.html +18 -18
  55. data/doc/classes/TaskJuggler/GanttMilestone.html +42 -42
  56. data/doc/classes/TaskJuggler/GanttRouter.html +24 -24
  57. data/doc/classes/TaskJuggler/GanttTaskBar.html +42 -42
  58. data/doc/classes/TaskJuggler/HTMLDocument.html +13 -13
  59. data/doc/classes/TaskJuggler/HTMLGraphics.html +12 -12
  60. data/doc/classes/TaskJuggler/Interval.html +57 -57
  61. data/doc/classes/TaskJuggler/IntervalListAttribute.html +47 -47
  62. data/doc/classes/TaskJuggler/JobInfo.html +68 -12
  63. data/doc/classes/TaskJuggler/Journal.html +266 -20
  64. data/doc/classes/TaskJuggler/JournalEntry.html +79 -23
  65. data/doc/classes/TaskJuggler/JournalEntryList.html +454 -0
  66. data/doc/classes/TaskJuggler/KeywordArray.html +10 -10
  67. data/doc/classes/TaskJuggler/KeywordDocumentation.html +171 -170
  68. data/doc/classes/TaskJuggler/Limits.html +36 -36
  69. data/doc/classes/TaskJuggler/Limits/Limit.html +30 -30
  70. data/doc/classes/TaskJuggler/LimitsAttribute.html +40 -40
  71. data/doc/classes/TaskJuggler/ListAttributeBase.html +20 -20
  72. data/doc/classes/TaskJuggler/Log.html +145 -107
  73. data/doc/classes/TaskJuggler/LogicalAttribute.html +65 -36
  74. data/doc/classes/TaskJuggler/LogicalExpression.html +61 -24
  75. data/doc/classes/TaskJuggler/LogicalExpressionAttribute.html +20 -20
  76. data/doc/classes/TaskJuggler/LogicalFlag.html +31 -51
  77. data/doc/classes/TaskJuggler/LogicalFunction.html +64 -53
  78. data/doc/classes/TaskJuggler/LogicalOperation.html +103 -55
  79. data/doc/classes/TaskJuggler/Macro.html +6 -6
  80. data/doc/classes/TaskJuggler/MacroParser.html +36 -36
  81. data/doc/classes/TaskJuggler/MacroTable.html +37 -37
  82. data/doc/classes/TaskJuggler/Message.html +12 -12
  83. data/doc/classes/TaskJuggler/MessageHandler.html +32 -20
  84. data/doc/classes/TaskJuggler/Navigator.html +110 -46
  85. data/doc/classes/TaskJuggler/NavigatorElement.html +449 -0
  86. data/doc/classes/TaskJuggler/OnShiftCache.html +24 -24
  87. data/doc/classes/TaskJuggler/Project.html +1158 -893
  88. data/doc/classes/TaskJuggler/ProjectFileParser.html +94 -91
  89. data/doc/classes/TaskJuggler/PropertyAttribute.html +20 -20
  90. data/doc/classes/TaskJuggler/PropertyList.html +225 -155
  91. data/doc/classes/TaskJuggler/PropertySet.html +375 -332
  92. data/doc/classes/TaskJuggler/PropertyTreeNode.html +750 -510
  93. data/doc/classes/TaskJuggler/Query.html +404 -139
  94. data/doc/classes/TaskJuggler/{RTPNavigator.html → RTFNavigator.html} +57 -56
  95. data/doc/classes/TaskJuggler/RTFQuery.html +343 -0
  96. data/doc/classes/TaskJuggler/{RTPReport.html → RTFReport.html} +70 -67
  97. data/doc/classes/TaskJuggler/RealFormat.html +18 -18
  98. data/doc/classes/TaskJuggler/RealFormatAttribute.html +10 -10
  99. data/doc/classes/TaskJuggler/ReferenceAttribute.html +107 -40
  100. data/doc/classes/TaskJuggler/RemoteServiceManager.html +335 -0
  101. data/doc/classes/TaskJuggler/Report.html +66 -64
  102. data/doc/classes/TaskJuggler/ReportBase.html +112 -123
  103. data/doc/classes/TaskJuggler/ReportContext.html +43 -38
  104. data/doc/classes/TaskJuggler/ReportServer.html +320 -0
  105. data/doc/classes/TaskJuggler/ReportTable.html +42 -42
  106. data/doc/classes/TaskJuggler/ReportTableCell.html +221 -129
  107. data/doc/classes/TaskJuggler/ReportTableColumn.html +27 -27
  108. data/doc/classes/TaskJuggler/ReportTableLegend.html +24 -24
  109. data/doc/classes/TaskJuggler/ReportTableLine.html +126 -80
  110. data/doc/classes/TaskJuggler/Resource.html +12 -12
  111. data/doc/classes/TaskJuggler/ResourceListAttribute.html +82 -47
  112. data/doc/classes/TaskJuggler/ResourceListRE.html +43 -39
  113. data/doc/classes/TaskJuggler/ResourceScenario.html +413 -321
  114. data/doc/classes/TaskJuggler/RichText.html +64 -248
  115. data/doc/classes/TaskJuggler/RichTextAttribute.html +94 -30
  116. data/doc/classes/TaskJuggler/RichTextDocument.html +87 -85
  117. data/doc/classes/TaskJuggler/RichTextElement.html +456 -363
  118. data/doc/classes/TaskJuggler/RichTextException.html +13 -13
  119. data/doc/classes/TaskJuggler/{RichTextProtocolExample.html → RichTextFunctionExample.html} +64 -63
  120. data/doc/classes/TaskJuggler/{RichTextProtocolHandler.html → RichTextFunctionHandler.html} +42 -36
  121. data/doc/classes/TaskJuggler/RichTextIntermediate.html +563 -0
  122. data/doc/classes/TaskJuggler/RichTextParser.html +54 -51
  123. data/doc/classes/TaskJuggler/RichTextScanner.html +94 -92
  124. data/doc/classes/TaskJuggler/RichTextSnip.html +96 -60
  125. data/doc/classes/TaskJuggler/RichTextSyntaxRules.html +369 -227
  126. data/doc/classes/TaskJuggler/Scenario.html +6 -6
  127. data/doc/classes/TaskJuggler/ScenarioData.html +37 -37
  128. data/doc/classes/TaskJuggler/ScenarioListAttribute.html +31 -31
  129. data/doc/classes/TaskJuggler/Scoreboard.html +66 -66
  130. data/doc/classes/TaskJuggler/Shift.html +18 -18
  131. data/doc/classes/TaskJuggler/ShiftAssignment.html +54 -54
  132. data/doc/classes/TaskJuggler/ShiftAssignments.html +78 -78
  133. data/doc/classes/TaskJuggler/ShiftAssignmentsAttribute.html +40 -40
  134. data/doc/classes/TaskJuggler/ShiftScenario.html +24 -24
  135. data/doc/classes/TaskJuggler/SortListAttribute.html +22 -22
  136. data/doc/classes/TaskJuggler/SourceFileInfo.html +12 -12
  137. data/doc/classes/TaskJuggler/StringAttribute.html +30 -30
  138. data/doc/classes/TaskJuggler/SymbolAttribute.html +20 -20
  139. data/doc/classes/TaskJuggler/SyntaxReference.html +42 -42
  140. data/doc/classes/TaskJuggler/TOCEntry.html +12 -12
  141. data/doc/classes/TaskJuggler/TSResourceRecord.html +197 -0
  142. data/doc/classes/TaskJuggler/TSTaskRecord.html +215 -0
  143. data/doc/classes/TaskJuggler/TableColumnDefinition.html +64 -43
  144. data/doc/classes/TaskJuggler/TableOfContents.html +18 -18
  145. data/doc/classes/TaskJuggler/TableReport.html +447 -468
  146. data/doc/classes/TaskJuggler/Task.html +12 -12
  147. data/doc/classes/TaskJuggler/TaskDependency.html +12 -12
  148. data/doc/classes/TaskJuggler/TaskListAttribute.html +47 -47
  149. data/doc/classes/TaskJuggler/TaskListRE.html +43 -39
  150. data/doc/classes/TaskJuggler/TaskScenario.html +529 -282
  151. data/doc/classes/TaskJuggler/TextParser.html +215 -194
  152. data/doc/classes/TaskJuggler/TextParser/Pattern.html +97 -97
  153. data/doc/classes/TaskJuggler/TextParser/Rule.html +84 -84
  154. data/doc/classes/TaskJuggler/TextParser/StackElement.html +16 -15
  155. data/doc/classes/TaskJuggler/TextParser/TextParserResultArray.html +12 -12
  156. data/doc/classes/TaskJuggler/TextParser/TokenDoc.html +6 -6
  157. data/doc/classes/TaskJuggler/TextReport.html +77 -74
  158. data/doc/classes/TaskJuggler/TextScanner.html +294 -281
  159. data/doc/classes/TaskJuggler/TextScanner/BufferStreamHandle.html +70 -70
  160. data/doc/classes/TaskJuggler/TextScanner/FileStreamHandle.html +59 -60
  161. data/doc/classes/TaskJuggler/TextScanner/StreamHandle.html +12 -12
  162. data/doc/classes/TaskJuggler/TimeSheetReport.html +406 -0
  163. data/doc/classes/TaskJuggler/TjException.html +6 -6
  164. data/doc/classes/TaskJuggler/TjTime.html +522 -513
  165. data/doc/classes/TaskJuggler/TjpExample.html +25 -25
  166. data/doc/classes/TaskJuggler/TjpExportRE.html +21 -24
  167. data/doc/classes/TaskJuggler/TjpSyntaxRules.html +6177 -4318
  168. data/doc/classes/TaskJuggler/UserManual.html +212 -213
  169. data/doc/classes/TaskJuggler/WorkingHours.html +49 -49
  170. data/doc/classes/TaskJuggler/WorkingHoursAttribute.html +53 -53
  171. data/doc/classes/TaskJuggler/XMLBlob.html +21 -21
  172. data/doc/classes/TaskJuggler/XMLComment.html +21 -21
  173. data/doc/classes/TaskJuggler/XMLDocument.html +27 -26
  174. data/doc/classes/TaskJuggler/XMLElement.html +86 -50
  175. data/doc/classes/TaskJuggler/XMLNamedText.html +11 -11
  176. data/doc/classes/TaskJuggler/XMLText.html +36 -36
  177. data/doc/files/COPYING.html +1 -1
  178. data/doc/files/README.html +1 -1
  179. data/doc/files/lib/AccountScenario_rb.html +3 -2
  180. data/doc/files/lib/Account_rb.html +3 -2
  181. data/doc/files/lib/Allocation_rb.html +3 -2
  182. data/doc/files/lib/AppConfig_rb.html +5 -2
  183. data/doc/files/lib/AttributeBase_rb.html +3 -2
  184. data/doc/files/lib/AttributeDefinition_rb.html +3 -2
  185. data/doc/files/lib/Attributes_rb.html +3 -2
  186. data/doc/files/lib/BatchProcessor_rb.html +4 -3
  187. data/doc/files/lib/Booking_rb.html +3 -2
  188. data/doc/files/lib/ChargeSet_rb.html +3 -2
  189. data/doc/files/lib/Charge_rb.html +3 -2
  190. data/doc/files/lib/HTMLDocument_rb.html +3 -2
  191. data/doc/files/lib/Interval_rb.html +3 -2
  192. data/doc/files/lib/Journal_rb.html +4 -3
  193. data/doc/files/lib/KeywordArray_rb.html +3 -2
  194. data/doc/files/lib/KeywordDocumentation_rb.html +3 -2
  195. data/doc/files/lib/Limits_rb.html +3 -2
  196. data/doc/files/lib/Log_rb.html +3 -2
  197. data/doc/files/lib/LogicalExpression_rb.html +3 -2
  198. data/doc/files/lib/LogicalFunction_rb.html +3 -2
  199. data/doc/files/lib/LogicalOperation_rb.html +3 -2
  200. data/doc/files/lib/MacroParser_rb.html +3 -2
  201. data/doc/files/lib/MacroTable_rb.html +3 -2
  202. data/doc/files/lib/MessageHandler_rb.html +3 -2
  203. data/doc/files/lib/Message_rb.html +3 -2
  204. data/doc/files/lib/ProjectFileParser_rb.html +7 -4
  205. data/doc/files/lib/Project_rb.html +3 -2
  206. data/doc/files/lib/PropertyList_rb.html +3 -2
  207. data/doc/files/lib/PropertySet_rb.html +3 -2
  208. data/doc/files/lib/PropertyTreeNode_rb.html +3 -2
  209. data/doc/files/lib/Query_rb.html +3 -2
  210. data/doc/files/lib/{RTPNavigator_rb.html → RTFNavigator_rb.html} +8 -7
  211. data/doc/files/lib/RTFQuery_rb.html +121 -0
  212. data/doc/files/lib/{RTPReport_rb.html → RTFReport_rb.html} +8 -7
  213. data/doc/files/lib/RealFormat_rb.html +3 -2
  214. data/doc/files/lib/RemoteServiceManager_rb.html +117 -0
  215. data/doc/files/lib/ReportServer_rb.html +107 -0
  216. data/doc/files/lib/ResourceScenario_rb.html +3 -2
  217. data/doc/files/lib/Resource_rb.html +3 -2
  218. data/doc/files/lib/RichTextDocument_rb.html +4 -3
  219. data/doc/files/lib/RichTextElement_rb.html +3 -2
  220. data/doc/files/lib/{RichTextProtocolExample_rb.html → RichTextFunctionExample_rb.html} +8 -7
  221. data/doc/files/lib/{RichTextProtocolHandler_rb.html → RichTextFunctionHandler_rb.html} +7 -6
  222. data/doc/files/lib/RichTextParser_rb.html +3 -2
  223. data/doc/files/lib/RichTextScanner_rb.html +3 -2
  224. data/doc/files/lib/RichTextSnip_rb.html +3 -2
  225. data/doc/files/lib/RichTextSyntaxRules_rb.html +3 -2
  226. data/doc/files/lib/RichText_rb.html +3 -2
  227. data/doc/files/lib/ScenarioData_rb.html +3 -2
  228. data/doc/files/lib/Scenario_rb.html +3 -2
  229. data/doc/files/lib/Scoreboard_rb.html +3 -2
  230. data/doc/files/lib/ShiftAssignments_rb.html +3 -2
  231. data/doc/files/lib/ShiftScenario_rb.html +3 -2
  232. data/doc/files/lib/Shift_rb.html +3 -2
  233. data/doc/files/lib/SourceFileInfo_rb.html +3 -2
  234. data/doc/files/lib/SyntaxReference_rb.html +3 -2
  235. data/doc/files/lib/TOCEntry_rb.html +3 -2
  236. data/doc/files/lib/TableColumnDefinition_rb.html +3 -2
  237. data/doc/files/lib/TableOfContents_rb.html +3 -2
  238. data/doc/files/lib/TaskDependency_rb.html +3 -2
  239. data/doc/files/lib/TaskJuggler_rb.html +7 -2
  240. data/doc/files/lib/TaskScenario_rb.html +3 -2
  241. data/doc/files/lib/Task_rb.html +3 -2
  242. data/doc/files/lib/TextParser/Pattern_rb.html +4 -3
  243. data/doc/files/lib/TextParser/Rule_rb.html +4 -3
  244. data/doc/files/lib/TextParser/StackElement_rb.html +4 -3
  245. data/doc/files/lib/TextParser/TokenDoc_rb.html +4 -3
  246. data/doc/files/lib/TextParser_rb.html +3 -2
  247. data/doc/files/lib/TextScanner_rb.html +3 -2
  248. data/doc/files/lib/Tj3Config_rb.html +3 -2
  249. data/doc/files/lib/TjException_rb.html +3 -2
  250. data/doc/files/lib/TjTime_rb.html +3 -2
  251. data/doc/files/lib/TjpExample_rb.html +3 -2
  252. data/doc/files/lib/TjpSyntaxRules_rb.html +3 -2
  253. data/doc/files/lib/UTF8String_rb.html +14 -6
  254. data/doc/files/lib/UserManual_rb.html +6 -3
  255. data/doc/files/lib/WorkingHours_rb.html +3 -2
  256. data/doc/files/lib/XMLDocument_rb.html +3 -2
  257. data/doc/files/lib/XMLElement_rb.html +3 -2
  258. data/doc/files/lib/deep_copy_rb.html +3 -2
  259. data/doc/files/lib/reports/CSVFile_rb.html +3 -2
  260. data/doc/files/lib/reports/ColumnTable_rb.html +3 -2
  261. data/doc/files/lib/reports/GanttChart_rb.html +3 -2
  262. data/doc/files/lib/reports/GanttContainer_rb.html +3 -2
  263. data/doc/files/lib/reports/GanttHeaderScaleItem_rb.html +3 -2
  264. data/doc/files/lib/reports/GanttHeader_rb.html +3 -2
  265. data/doc/files/lib/reports/GanttLine_rb.html +3 -2
  266. data/doc/files/lib/reports/GanttLoadStack_rb.html +3 -2
  267. data/doc/files/lib/reports/GanttMilestone_rb.html +3 -2
  268. data/doc/files/lib/reports/GanttRouter_rb.html +3 -2
  269. data/doc/files/lib/reports/GanttTaskBar_rb.html +3 -2
  270. data/doc/files/lib/reports/HTMLGraphics_rb.html +3 -2
  271. data/doc/files/lib/reports/Navigator_rb.html +3 -2
  272. data/doc/files/lib/reports/ReportBase_rb.html +3 -2
  273. data/doc/files/lib/reports/ReportContext_rb.html +3 -2
  274. data/doc/files/lib/reports/ReportTableCell_rb.html +3 -2
  275. data/doc/files/lib/reports/ReportTableColumn_rb.html +3 -2
  276. data/doc/files/lib/reports/ReportTableLegend_rb.html +3 -2
  277. data/doc/files/lib/reports/ReportTableLine_rb.html +3 -2
  278. data/doc/files/lib/reports/ReportTable_rb.html +3 -2
  279. data/doc/files/lib/reports/Report_rb.html +7 -2
  280. data/doc/files/lib/reports/ResourceListRE_rb.html +3 -2
  281. data/doc/files/lib/reports/TableReport_rb.html +3 -2
  282. data/doc/files/lib/reports/TaskListRE_rb.html +3 -2
  283. data/doc/files/lib/reports/TextReport_rb.html +4 -3
  284. data/doc/files/lib/reports/TimeSheetReport_rb.html +117 -0
  285. data/doc/files/lib/reports/TjpExportRE_rb.html +3 -2
  286. data/doc/files/lib/taskjuggler3_rb.html +94 -77
  287. data/doc/files/lib/tj3client_rb.html +280 -0
  288. data/doc/files/lib/tj3man_rb.html +10 -9
  289. data/doc/fr_class_index.html +27 -5
  290. data/doc/fr_file_index.html +15 -7
  291. data/doc/fr_method_index.html +1312 -1020
  292. data/examples/tutorial.tjp +113 -14
  293. data/gem_spec.rb +2 -1
  294. data/lib/Account.rb +1 -1
  295. data/lib/AccountScenario.rb +1 -1
  296. data/lib/Allocation.rb +1 -1
  297. data/lib/AppConfig.rb +23 -10
  298. data/lib/AttributeBase.rb +34 -6
  299. data/lib/AttributeDefinition.rb +1 -1
  300. data/lib/Attributes.rb +51 -16
  301. data/lib/BatchProcessor.rb +204 -77
  302. data/lib/Booking.rb +1 -1
  303. data/lib/Charge.rb +1 -1
  304. data/lib/ChargeSet.rb +1 -1
  305. data/lib/HTMLDocument.rb +2 -2
  306. data/lib/Interval.rb +1 -1
  307. data/lib/Journal.rb +231 -9
  308. data/lib/KeywordArray.rb +1 -1
  309. data/lib/KeywordDocumentation.rb +6 -4
  310. data/lib/Limits.rb +1 -1
  311. data/lib/Log.rb +8 -1
  312. data/lib/LogicalExpression.rb +14 -13
  313. data/lib/LogicalFunction.rb +88 -14
  314. data/lib/LogicalOperation.rb +124 -53
  315. data/lib/MacroParser.rb +1 -1
  316. data/lib/MacroTable.rb +2 -2
  317. data/lib/Message.rb +1 -1
  318. data/lib/MessageHandler.rb +7 -3
  319. data/lib/Project.rb +93 -14
  320. data/lib/ProjectFileParser.rb +30 -15
  321. data/lib/PropertyList.rb +103 -36
  322. data/lib/PropertySet.rb +22 -10
  323. data/lib/PropertyTreeNode.rb +120 -15
  324. data/lib/Query.rb +119 -48
  325. data/lib/{RTPNavigator.rb → RTFNavigator.rb} +11 -10
  326. data/lib/RTFQuery.rb +166 -0
  327. data/lib/{RTPReport.rb → RTFReport.rb} +11 -8
  328. data/lib/RealFormat.rb +1 -1
  329. data/lib/RemoteServiceManager.rb +80 -0
  330. data/lib/ReportServer.rb +66 -0
  331. data/lib/Resource.rb +1 -1
  332. data/lib/ResourceScenario.rb +48 -19
  333. data/lib/RichText.rb +98 -41
  334. data/lib/RichTextDocument.rb +10 -8
  335. data/lib/RichTextElement.rb +72 -28
  336. data/lib/{RichTextProtocolExample.rb → RichTextFunctionExample.rb} +8 -7
  337. data/lib/{RichTextProtocolHandler.rb → RichTextFunctionHandler.rb} +12 -14
  338. data/lib/RichTextParser.rb +6 -3
  339. data/lib/RichTextScanner.rb +91 -19
  340. data/lib/RichTextSnip.rb +8 -3
  341. data/lib/RichTextSyntaxRules.rb +103 -45
  342. data/lib/Scenario.rb +1 -1
  343. data/lib/ScenarioData.rb +2 -2
  344. data/lib/Scoreboard.rb +1 -1
  345. data/lib/Shift.rb +1 -1
  346. data/lib/ShiftAssignments.rb +1 -1
  347. data/lib/ShiftScenario.rb +1 -1
  348. data/lib/SourceFileInfo.rb +1 -1
  349. data/lib/SyntaxReference.rb +2 -2
  350. data/lib/TOCEntry.rb +1 -1
  351. data/lib/TableColumnDefinition.rb +59 -16
  352. data/lib/TableOfContents.rb +1 -1
  353. data/lib/Task.rb +1 -1
  354. data/lib/TaskDependency.rb +1 -1
  355. data/lib/TaskJuggler.rb +31 -8
  356. data/lib/TaskScenario.rb +165 -16
  357. data/lib/TextParser.rb +36 -22
  358. data/lib/TextParser/Pattern.rb +3 -3
  359. data/lib/TextParser/Rule.rb +2 -2
  360. data/lib/TextParser/StackElement.rb +4 -3
  361. data/lib/TextParser/TokenDoc.rb +2 -2
  362. data/lib/TextScanner.rb +52 -37
  363. data/lib/Tj3Config.rb +6 -5
  364. data/lib/TjException.rb +1 -1
  365. data/lib/TjTime.rb +12 -3
  366. data/lib/TjpExample.rb +1 -1
  367. data/lib/TjpSyntaxRules.rb +1044 -150
  368. data/lib/UTF8String.rb +2 -1
  369. data/lib/UserManual.rb +18 -70
  370. data/lib/WorkingHours.rb +3 -3
  371. data/lib/XMLDocument.rb +3 -2
  372. data/lib/XMLElement.rb +6 -1
  373. data/lib/deep_copy.rb +1 -1
  374. data/lib/reports/CSVFile.rb +1 -1
  375. data/lib/reports/ColumnTable.rb +9 -9
  376. data/lib/reports/GanttChart.rb +1 -1
  377. data/lib/reports/GanttContainer.rb +1 -1
  378. data/lib/reports/GanttHeader.rb +1 -1
  379. data/lib/reports/GanttHeaderScaleItem.rb +1 -1
  380. data/lib/reports/GanttLine.rb +40 -40
  381. data/lib/reports/GanttLoadStack.rb +1 -1
  382. data/lib/reports/GanttMilestone.rb +1 -1
  383. data/lib/reports/GanttRouter.rb +1 -1
  384. data/lib/reports/GanttTaskBar.rb +1 -1
  385. data/lib/reports/HTMLGraphics.rb +1 -1
  386. data/lib/reports/Navigator.rb +149 -22
  387. data/lib/reports/Report.rb +115 -172
  388. data/lib/reports/ReportBase.rb +22 -27
  389. data/lib/reports/ReportContext.rb +29 -15
  390. data/lib/reports/ReportTable.rb +1 -1
  391. data/lib/reports/ReportTableCell.rb +120 -27
  392. data/lib/reports/ReportTableColumn.rb +3 -3
  393. data/lib/reports/ReportTableLegend.rb +1 -1
  394. data/lib/reports/ReportTableLine.rb +10 -2
  395. data/lib/reports/ResourceListRE.rb +5 -1
  396. data/lib/reports/TableReport.rb +237 -287
  397. data/lib/reports/TaskListRE.rb +5 -1
  398. data/lib/reports/TextReport.rb +7 -4
  399. data/lib/reports/TimeSheetReport.rb +233 -0
  400. data/lib/reports/TjpExportRE.rb +2 -2
  401. data/lib/taskjuggler3.rb +27 -11
  402. data/lib/tj3client.rb +110 -0
  403. data/lib/tj3man.rb +4 -4
  404. data/manual/Getting_Started +0 -50
  405. data/manual/How_To_Contribute +6 -13
  406. data/manual/Installation +102 -28
  407. data/manual/Intro +11 -1
  408. data/manual/Reporting_Bugs +23 -7
  409. data/manual/Rich_Text_Attributes +59 -6
  410. data/manual/TaskJuggler_2x_Migration +27 -0
  411. data/manual/The_TaskJuggler_Syntax +104 -0
  412. data/manual/Tutorial +10 -9
  413. data/prj_cfg.rb +8 -2
  414. data/tasks/csts.rake +1 -1
  415. data/tasks/manual.rake +5 -3
  416. data/test/MessageChecker.rb +1 -1
  417. data/test/TestSuite/HTML-Reports/Alerts.html +172 -0
  418. data/test/TestSuite/HTML-Reports/Alerts.tjp +77 -0
  419. data/test/TestSuite/HTML-Reports/CellText.html +758 -0
  420. data/test/TestSuite/HTML-Reports/CellText.tjp +75 -0
  421. data/test/TestSuite/HTML-Reports/ColumnPeriods.html +156 -0
  422. data/test/TestSuite/HTML-Reports/ColumnPeriods.tjp +44 -0
  423. data/test/TestSuite/HTML-Reports/IsOngoing.html +172 -0
  424. data/test/TestSuite/HTML-Reports/IsOngoing.tjp +34 -0
  425. data/test/TestSuite/HTML-Reports/LogicalFunctions.html +80 -0
  426. data/test/TestSuite/HTML-Reports/LogicalFunctions.tjp +20 -0
  427. data/test/TestSuite/HTML-Reports/Query.html +31 -0
  428. data/test/TestSuite/HTML-Reports/Query.tjp +28 -0
  429. data/test/TestSuite/HTML-Reports/Sorting.tjp +68 -0
  430. data/test/TestSuite/HTML-Reports/TimeSheet.tjp +69 -0
  431. data/test/TestSuite/HTML-Reports/UDAQuery.tjp +27 -0
  432. data/test/TestSuite/HTML-Reports/css/tjmanual.css +52 -0
  433. data/test/TestSuite/HTML-Reports/css/tjreport.css +195 -0
  434. data/test/TestSuite/HTML-Reports/depArrows.html +842 -0
  435. data/test/TestSuite/HTML-Reports/icons/details.png +0 -0
  436. data/test/TestSuite/HTML-Reports/icons/flag-green.png +0 -0
  437. data/test/TestSuite/HTML-Reports/icons/flag-red.png +0 -0
  438. data/test/TestSuite/HTML-Reports/icons/flag-yellow.png +0 -0
  439. data/test/TestSuite/HTML-Reports/icons/resource.png +0 -0
  440. data/test/TestSuite/HTML-Reports/icons/resourcegroup.png +0 -0
  441. data/test/TestSuite/HTML-Reports/icons/task.png +0 -0
  442. data/test/TestSuite/HTML-Reports/icons/taskgroup.png +0 -0
  443. data/test/TestSuite/HTML-Reports/reference.tjp +7 -8
  444. data/test/TestSuite/HTML-Reports/scripts/scripts/wz_tooltip.js +1301 -0
  445. data/test/TestSuite/HTML-Reports/scripts/wz_tooltip.js +1301 -0
  446. data/test/TestSuite/Scheduler/Correct/Mandatory.tjp +34 -0
  447. data/test/TestSuite/Syntax/Correct/Celltext.tjp +2 -1
  448. data/test/TestSuite/Syntax/Correct/Journal.tjp +2 -2
  449. data/test/TestSuite/Syntax/Correct/LogicalExpression.tjp +2 -1
  450. data/test/TestSuite/Syntax/Correct/LogicalFunction.tjp +20 -0
  451. data/test/TestSuite/Syntax/Correct/Query.tjp +18 -0
  452. data/test/TestSuite/Syntax/Correct/StatusSheet.tjp +45 -0
  453. data/test/TestSuite/Syntax/Correct/TimeSheet.tjp +49 -0
  454. data/test/TestSuite/Syntax/Correct/icons/details.png +0 -0
  455. data/test/TestSuite/Syntax/Correct/icons/flag-green.png +0 -0
  456. data/test/TestSuite/Syntax/Correct/icons/flag-red.png +0 -0
  457. data/test/TestSuite/Syntax/Correct/icons/flag-yellow.png +0 -0
  458. data/test/TestSuite/Syntax/Correct/icons/resource.png +0 -0
  459. data/test/TestSuite/Syntax/Correct/icons/resourcegroup.png +0 -0
  460. data/test/TestSuite/Syntax/Correct/icons/task.png +0 -0
  461. data/test/TestSuite/Syntax/Correct/icons/taskgroup.png +0 -0
  462. data/test/TestSuite/Syntax/Correct/scripts/wz_tooltip.js +1301 -0
  463. data/test/TestSuite/Syntax/Correct/tutorial.tjp +113 -14
  464. data/test/TestSuite/Syntax/Errors/macro_stack_overflow.tjp +28 -0
  465. data/test/TestSuite/Syntax/Errors/unsupported_token.tjp +12 -0
  466. data/test/all.rb +2 -2
  467. data/test/test_BatchProcessor.rb +42 -13
  468. data/test/test_CSV-Reports.rb +1 -1
  469. data/test/test_Journal.rb +176 -0
  470. data/test/test_Limits.rb +1 -1
  471. data/test/test_LogicalExpression.rb +14 -5
  472. data/test/test_MacroTable.rb +1 -1
  473. data/test/test_Project.rb +1 -1
  474. data/test/test_PropertySet.rb +1 -1
  475. data/test/test_Query.rb +1 -1
  476. data/test/test_RealFormat.rb +1 -1
  477. data/test/test_RichText.rb +30 -20
  478. data/test/test_Scheduler.rb +1 -1
  479. data/test/test_ShiftAssignments.rb +2 -2
  480. data/test/test_Syntax.rb +1 -1
  481. data/test/test_TextScanner.rb +1 -1
  482. data/test/test_TjTime.rb +1 -1
  483. data/test/test_TjpExample.rb +1 -1
  484. data/test/test_UTF8String.rb +1 -1
  485. data/test/test_WorkingHours.rb +1 -1
  486. data/test/test_deep_copy.rb +2 -2
  487. metadata +610 -532
  488. data/doc/files/lib/ms_test_rb.html +0 -90
  489. data/examples/ContactList.html +0 -1467
  490. data/examples/Deliveries.html +0 -485
  491. data/examples/Development.html +0 -2525
  492. data/examples/Overview.html +0 -747
  493. data/examples/Resource Graph.html +0 -616
  494. data/lib/ms_test.rb +0 -27
  495. data/test/TestSuite/HTML-Reports/reference-export.html +0 -187
@@ -99,6 +99,11 @@ balance cost rev
99
99
  # *** EXAMPLE: balance -
100
100
 
101
101
  # *** EXAMPLE: resources +
102
+ resource boss "Paul Henry Bullock" {
103
+ Email "phb@crappysoftware.com"
104
+ Phone "x100"
105
+ rate 480
106
+ }
102
107
  resource dev "Developers" {
103
108
  resource dev1 "Paul Smith" {
104
109
  Email "paul@crappysoftware.com"
@@ -212,6 +217,18 @@ task AcSo "Accounting Software" {
212
217
  effort 20d
213
218
  allocate dev1, dev2
214
219
  # *** EXAMPLE: software +
220
+ journalentry 2002-02-03 "Problems with the SQL Libary" {
221
+ author dev1
222
+ alert yellow
223
+ summary -8<-
224
+ We ran into some compatibility problems with the SQL
225
+ Library.
226
+ ->8-
227
+ details -8<-
228
+ We have already contacted the vendor and are now waiting for
229
+ their advise.
230
+ ->8-
231
+ }
215
232
  }
216
233
  # *** EXAMPLE: database -
217
234
  # *** EXAMPLE: software -
@@ -278,6 +295,17 @@ task AcSo "Accounting Software" {
278
295
  depends !!software
279
296
  allocate test, dev2
280
297
  note "Hopefully most bugs will be found and fixed here."
298
+ journalentry 2002-03-01 "Contract with Peter not yet signed" {
299
+ author boss
300
+ alert red
301
+ summary -8<-
302
+ The paperwork is stuck with HR and I can't hunt it down.
303
+ ->8-
304
+ details -8<-
305
+ If we don't get the contract closed within the next week,
306
+ the start of the testing is at risk.
307
+ ->8-
308
+ }
281
309
  }
282
310
 
283
311
  task beta "Beta Test" {
@@ -300,6 +328,10 @@ task AcSo "Accounting Software" {
300
328
  purge chargeset
301
329
  chargeset doc
302
330
  # *** EXAMPLE: task1 +
331
+ journalentry 2002-02-28 "User manual completed" {
332
+ author boss
333
+ summary "The doc writers did a really great job to finish on time."
334
+ }
303
335
  }
304
336
  # *** EXAMPLE: manual -
305
337
  # *** EXAMPLE: task1 -
@@ -380,8 +412,7 @@ navigator navbar {
380
412
 
381
413
  # *** EXAMPLE: overview_report1 +
382
414
  # *** EXAMPLE: overview_report2 +
383
- textreport "Overview" {
384
- formats html
415
+ textreport "" {
385
416
  # *** EXAMPLE: overview_report1 -
386
417
  header -8<-
387
418
  == Accounting Software Project ==
@@ -389,23 +420,46 @@ textreport "Overview" {
389
420
  <[navigator id="navbar"]>
390
421
  ----
391
422
  ->8-
423
+ footer "----"
392
424
  # *** EXAMPLE: overview_report1 +
393
- center '<[report id="overview"]>'
425
+ textreport "Overview" {
426
+ formats html
427
+ center '<[report id="overview"]>'
428
+ }
394
429
  # *** EXAMPLE: overview_report1 -
395
430
  # *** EXAMPLE: overview_report2 -
396
431
 
432
+ textreport "Status" {
433
+ formats html
434
+ center -8<-
435
+ <[report id="status.dashboard"]>
436
+ ----
437
+ <[report id="status.completed"]>
438
+ ----
439
+ <[report id="status.ongoing"]>
440
+ ----
441
+ <[report id="status.future"]>
442
+ ->8-
443
+ }
444
+
397
445
  textreport "Development" {
446
+ formats html
398
447
  center '<[report id="development"]>'
399
448
  }
400
449
 
401
450
  textreport "Deliveries" {
451
+ formats html
402
452
  center '<[report id="deliveries"]>'
403
453
  }
404
454
 
405
455
  textreport "ContactList" {
456
+ formats html
457
+ title "Contact List"
406
458
  center '<[report id="contactList"]>'
407
459
  }
408
- textreport "Resource Graph" {
460
+ textreport "ResourceGraph" {
461
+ formats html
462
+ title "Resource Graph"
409
463
  center '<[report id="resourceGraph"]>'
410
464
  }
411
465
  # *** EXAMPLE: overview_report1 +
@@ -429,11 +483,13 @@ taskreport overview "" {
429
483
  # [[Development]]
430
484
  # Testing
431
485
 
432
- === Project Plan ===
486
+ === Original Project Plan ===
433
487
  ->8-
434
488
  # *** EXAMPLE: overview4 -
435
489
  # *** EXAMPLE: overview1 +
436
- columns hierarchindex, name, start, end, effort, duration, cost,
490
+ columns hierarchindex,
491
+ name { tooltip 1 "'''ID''': <-query attribute='id'->" },
492
+ start, end, effort, duration, cost,
437
493
  revenue, chart
438
494
  # *** EXAMPLE: overview1 -
439
495
  # For this report we like to have the abbreviated weekday in front
@@ -467,29 +523,69 @@ taskreport overview "" {
467
523
  # *** EXAMPLE: overview1 -
468
524
  # *** EXAMPLE: overview -
469
525
 
526
+ # Macro to set the background color of a cell according to the alert
527
+ # level of the task.
528
+ macro AlertColor [
529
+ cellcolor plan.alert = 0 "#00D000" # green
530
+ cellcolor plan.alert = 1 "#D0D000" # yellow
531
+ cellcolor plan.alert = 2 "#D00000" # red
532
+ ]
533
+
534
+ taskreport status "" {
535
+ columns wbs, name, start, end, effort, alert, status
536
+ scenarios delayed
537
+
538
+ taskreport dashboard "" {
539
+ headline "Project Dashboard (<-query attribute='now'->)"
540
+ columns name { title "Task" ${AlertColor} },
541
+ resources { width 200 ${AlertColor}
542
+ start ${projectstart} end ${projectend} },
543
+ alerttrend { title "Trend" ${AlertColor} },
544
+ alertmessage { width 260 ${AlertColor} }
545
+ hidetask ~hasalert(0)
546
+ sorttasks alert.down, delayed.end.up
547
+ period %{${now} - 1w} +1w
548
+ }
549
+ taskreport completed "" {
550
+ headline "Already completed tasks"
551
+ hidetask ~(delayed.end <= ${now})
552
+ }
553
+ taskreport ongoing "" {
554
+ headline "Ongoing tasks"
555
+ hidetask ~((delayed.start <= ${now}) & (delayed.end > ${now}))
556
+ }
557
+ taskreport future "" {
558
+ headline "Future tasks"
559
+ hidetask ~(delayed.start > ${now})
560
+ }
561
+ }
562
+
470
563
  # A list of tasks showing the resources assigned to each task.
471
564
  taskreport development "" {
565
+ scenarios delayed
472
566
  headline "Development - Resource Allocation Report"
473
567
  columns hierarchindex, name, start, end, effort { title "Work" },
474
- duration, chart { scale day }
568
+ duration, chart { scale day width 500 }
475
569
  timeformat "%Y-%m-%d"
476
- hideresource ~isleaf()
570
+ hideresource ~(isleaf() & isleaf_())
477
571
  sortresources name.up
478
572
  }
479
573
 
480
574
  # A list of all tasks with the percentage completed for each task
481
575
  taskreport deliveries "" {
482
- headline "Project Deliveries"
483
- columns hierarchindex, name, start, end, note, complete, chart
576
+ headline "Project Deliverables"
577
+ columns hierarchindex, name, start, end, note { width 150 }, complete, chart
484
578
  taskroot AcSo.deliveries
485
- loadunit days
486
579
  hideresource 1
487
580
  scenarios plan, delayed
488
581
  }
489
582
  # A list of all employees with their contact details.
490
583
  resourcereport contactList "" {
584
+ scenarios delayed
491
585
  headline "Contact list and duty plan"
492
- columns name, Email { cellurl "mailto:$${Email}" }, Phone,
586
+ columns name,
587
+ Email { celltext 1 "[mailto:<-Email-> <-Email->]" },
588
+ Phone,
493
589
  chart { scale day }
494
590
  hideresource ~isleaf()
495
591
  sortresources name.up
@@ -499,9 +595,12 @@ resourcereport contactList "" {
499
595
  # A graph showing resource allocation. It identifies whether each
500
596
  # resource is under- or over-allocated for.
501
597
  resourcereport resourceGraph "" {
598
+ scenarios delayed
502
599
  headline "Resource Allocation Graph"
503
- columns no, name, effort, rate, weekly #, utilization, freeload, chart
600
+ columns no, name, effort, rate, weekly
504
601
  loadunit shortauto
505
- hidetask ~isleaf()
602
+ # We only like to show leaf tasks for leaf resources.
603
+ hidetask ~(isleaf() & isleaf_())
506
604
  sorttasks plan.start.up
507
605
  }
606
+
@@ -0,0 +1,28 @@
1
+ project "Macro Stack Overflow" 2009-11-01 +2m
2
+
3
+ macro foo [ task "bar" { ${foo} } ]
4
+
5
+ # MARK: error 27 macro_stack_overflow
6
+ # MARK: info 3 macro_stack
7
+ # MARK: info 3 macro_stack
8
+ # MARK: info 3 macro_stack
9
+ # MARK: info 3 macro_stack
10
+ # MARK: info 3 macro_stack
11
+ # MARK: info 3 macro_stack
12
+ # MARK: info 3 macro_stack
13
+ # MARK: info 3 macro_stack
14
+ # MARK: info 3 macro_stack
15
+ # MARK: info 3 macro_stack
16
+ # MARK: info 3 macro_stack
17
+ # MARK: info 3 macro_stack
18
+ # MARK: info 3 macro_stack
19
+ # MARK: info 3 macro_stack
20
+ # MARK: info 3 macro_stack
21
+ # MARK: info 3 macro_stack
22
+ # MARK: info 3 macro_stack
23
+ # MARK: info 3 macro_stack
24
+ # MARK: info 3 macro_stack
25
+ # MARK: info 3 macro_stack
26
+ # MARK: info 3 macro_stack
27
+ ${foo}
28
+
@@ -0,0 +1,12 @@
1
+ project "Test" 2009-11-28 +2m
2
+
3
+ task t "T" {
4
+ journalentry 2009-11-28 "Just testing" {
5
+ # MARK: error 8 unsupported_token
6
+ summary -8<-
7
+ This is all good.
8
+ * This is bad.
9
+ ->8-
10
+ }
11
+ }
12
+
data/test/all.rb CHANGED
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env ruby -w
2
2
  # encoding: UTF-8
3
3
  #
4
- # = test_all.rb -- The TaskJuggler III Project Management Software
4
+ # = all.rb -- The TaskJuggler III Project Management Software
5
5
  #
6
- # Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
7
7
  #
8
8
  # This program is free software; you can redistribute it and/or modify
9
9
  # it under the terms of version 2 of the GNU General Public License as
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env ruby -w
2
2
  # encoding: UTF-8
3
3
  #
4
- # = test_Project.rb -- The TaskJuggler III Project Management Software
4
+ # = test_BatchProcessor.rb -- The TaskJuggler III Project Management Software
5
5
  #
6
- # Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
7
7
  #
8
8
  # This program is free software; you can redistribute it and/or modify
9
9
  # it under the terms of version 2 of the GNU General Public License as
@@ -18,25 +18,54 @@ require 'BatchProcessor'
18
18
  class TestProject < Test::Unit::TestCase
19
19
 
20
20
  def test_simple
21
- bp = TaskJuggler::BatchProcessor.new(2)
22
- @i = 0
23
- 6.times { |i| bp.queue("job #{i}") { job(i) } }
24
- bp.wait { |j| postprocess(j) }
25
- assert_equal(6, @i, "Not all threads terminated propertly (#{@i})")
21
+ doRun(1, 1) { sleep 0.1 }
22
+ doRun(1, 2) { sleep 0.1 }
23
+ doRun(1, 7) { sleep 0.1 }
24
+ doRun(2, 1) { sleep 0.1 }
25
+ doRun(2, 2) { sleep 0.1 }
26
+ doRun(2, 33) { sleep 0.1 }
27
+ doRun(3, 1) { sleep 0.1 }
28
+ doRun(3, 3) { sleep 0.1 }
29
+ doRun(3, 67) { sleep 0.1 }
26
30
  end
27
31
 
28
- def job(n)
32
+ # This test case triggers a Ruby 1.9.x mutex bug
33
+ #def test_fileIO
34
+ # doRun(3, 200) do
35
+ # fname = "test#{$$}.txt"
36
+ # f = File.new(fname, 'w')
37
+ # 0.upto(10000) { |i| f.puts "#{i} Hello, world!" }
38
+ # f.close
39
+ # File.delete(fname)
40
+ # end
41
+ #end
42
+
43
+ def doRun(maxCPUs, jobs, &block)
44
+ bp = TaskJuggler::BatchProcessor.new(maxCPUs)
45
+ jobs.times do |i|
46
+ bp.queue("job #{i}") { runJob(i, &block) }
47
+ end
48
+ @cnt = 0
49
+ lock = Monitor.new
50
+ bp.wait do |j|
51
+ puts "Signal error" if j.retVal.signaled?
52
+ postprocess(j)
53
+ lock.synchronize { @cnt += 1 }
54
+ end
55
+ assert_equal(jobs, @cnt, "Not all threads terminated propertly (#{@cnt})")
56
+ end
57
+
58
+ def runJob(n, &block)
29
59
  puts "Job #{n} started"
30
- sleep(1)
60
+ yield
31
61
  $stderr.puts "Error #{n}" if n % 2 == 0
32
62
  puts "Job #{n} finished"
33
- exit n
63
+ n
34
64
  end
35
65
 
36
66
  def postprocess(job)
37
- @i += 1
38
- assert_equal(job.retVal.exitstatus, job.jobId)
39
- assert_equal(job.retVal.pid, job.pid)
67
+ assert_equal(job.retVal.exitstatus, job.jobId, 'JobID mismatch')
68
+ assert_equal(job.retVal.pid, job.pid, 'PID mismatch')
40
69
  assert_equal("job #{job.jobId}", job.tag)
41
70
  text = <<"EOT"
42
71
  Job #{job.jobId} started
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # = test_CSV-Reports.rb -- The TaskJuggler III Project Management Software
5
5
  #
6
- # Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
7
7
  #
8
8
  # This program is free software; you can redistribute it and/or modify
9
9
  # it under the terms of version 2 of the GNU General Public License as
@@ -0,0 +1,176 @@
1
+ #!/usr/bin/env ruby -w
2
+ # encoding: UTF-8
3
+ #
4
+ # = test_Journal.rb -- The TaskJuggler III Project Management Software
5
+ #
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
7
+ #
8
+ # This program is free software; you can redistribute it and/or modify
9
+ # it under the terms of version 2 of the GNU General Public License as
10
+ # published by the Free Software Foundation.
11
+ #
12
+
13
+ $:.unshift File.join(File.dirname(__FILE__), '..', 'lib') if __FILE__ == $0
14
+
15
+ require 'test/unit'
16
+ require 'Project'
17
+
18
+ class TaskJuggler
19
+
20
+ class TestJournal < Test::Unit::TestCase
21
+
22
+ def setup
23
+ @p = TaskJuggler::Project.new('hello', 'Hello World', '1.0',
24
+ MessageHandler.new(true))
25
+ @p['start'] = tm('2009-11-01')
26
+ @p['end'] = tm('2009-12-31')
27
+ @j = @p['journal']
28
+ end
29
+
30
+ def teardown
31
+ end
32
+
33
+ def test_add
34
+ # First some simple add tests.
35
+ @j.addEntry(e = JournalEntry.new(@j, tm('2009-11-29'), "E1", 1))
36
+ assert_equal(1, @j.entries.count)
37
+
38
+ # Make sure we don't add the same entry twice.
39
+ @j.addEntry(e)
40
+ assert_equal(1, @j.entries.count)
41
+
42
+ @j.addEntry(JournalEntry.new(@j, tm('2009-11-30'), "E2", 2))
43
+ @j.addEntry(JournalEntry.new(@j, tm('2009-12-01'), "E3", 3))
44
+ assert_equal(3, @j.entries.count)
45
+ end
46
+
47
+ def test_sort
48
+ # Add a bunch of entries and see if the sorting by date works properly.
49
+ @j.addEntry(JournalEntry.new(@j, tm('2009-12-10'), "E4", 4))
50
+ @j.addEntry(JournalEntry.new(@j, tm('2009-12-03'), "E2", 2))
51
+ @j.addEntry(JournalEntry.new(@j, tm('2009-12-06'), "E3", 3))
52
+ @j.addEntry(JournalEntry.new(@j, tm('2009-11-29'), "E0", 0))
53
+ @j.addEntry(JournalEntry.new(@j, tm('2009-12-01'), "E1", 1))
54
+ @j.addEntry(JournalEntry.new(@j, tm('2009-12-24'), "E5", 5))
55
+
56
+ pList = []
57
+ @j.entries.each { |e| pList << e.property }
58
+ pList.each do |i|
59
+ assert_equal(pList.index(i), i)
60
+ end
61
+ end
62
+
63
+ def test_sortSameDate
64
+ # Add a bunch of entries and see if the sorting by date works properly.
65
+ @j.addEntry(e = JournalEntry.new(@j, tm('2009-12-10'), "A2", 0))
66
+ e.alertLevel = 2
67
+ @j.addEntry(e = JournalEntry.new(@j, tm('2009-12-10'), "A0", 0))
68
+ e.alertLevel = 0
69
+ @j.addEntry(e = JournalEntry.new(@j, tm('2009-12-10'), "A1", 0))
70
+ e.alertLevel = 1
71
+ @j.addEntry(e = JournalEntry.new(@j, tm('2009-12-10'), "A3", 0))
72
+ e.alertLevel = 3
73
+
74
+ i = 0
75
+ @j.entries.each do |entry|
76
+ assert_equal(i, entry.alertLevel)
77
+ i += 1
78
+ end
79
+ end
80
+
81
+ def test_currentEntries
82
+ createTaskTree
83
+ # Set a 0 alert for a task
84
+ a1 = addAlert('2009-11-29', 0, t = task('p1.m1.l1'))
85
+ ce = @j.currentEntriesR(tm('2009-12-05'), t)
86
+ assert_equal(1, ce.count)
87
+ assert_equal(a1, ce[0])
88
+
89
+ # Add a later alert for the same task
90
+ a2 = addAlert('2009-11-30', 0, t = task('p1.m1.l1'))
91
+ ce = @j.currentEntriesR(tm('2009-12-05'), t)
92
+ assert_equal(1, ce.count)
93
+ assert_equal(a2, ce[0])
94
+
95
+ # Add another alert to the sister task and check parent
96
+ a3 = addAlert('2009-11-30', 0, t = task('p1.m1.l2'))
97
+ ce = @j.currentEntriesR(tm('2009-12-05'), task('p1.m1'))
98
+ assert_equal(2, ce.count)
99
+ assert_equal(a2, ce[0])
100
+ assert_equal(a3, ce[1])
101
+
102
+ # Check root task
103
+ ce = @j.currentEntriesR(tm('2009-12-05'), task('p1'))
104
+ assert_equal(2, ce.count)
105
+ assert_equal(a2, ce[0])
106
+ assert_equal(a3, ce[1])
107
+
108
+ # Add old override alert to p1.m1
109
+ a4 = addAlert('2009-11-29', 0, t = task('p1.m1'))
110
+ ce = @j.currentEntriesR(tm('2009-12-05'), task('p1'))
111
+ assert_equal(2, ce.count)
112
+ assert_equal(a2, ce[0])
113
+ assert_equal(a3, ce[1])
114
+
115
+ # Add new override alert to p1.m1
116
+ a5 = addAlert('2009-12-01', 0, t = task('p1.m1'))
117
+ ce = @j.currentEntriesR(tm('2009-12-05'), task('p1'))
118
+ assert_equal(1, ce.count)
119
+ assert_equal(a5, ce[0])
120
+ end
121
+
122
+ def test_alertSimple
123
+ createTaskTree
124
+ # Set a 0 alert for a task
125
+ addAlert('2009-11-29', 0, t = task('p1.m1.l1'))
126
+ assert_equal(0, @j.alertLevel(tm('2009-12-01'), t))
127
+
128
+ # Now add a later 1 alert
129
+ addAlert('2009-12-01', 1, t)
130
+ assert_equal(1, @j.alertLevel(tm('2009-12-02'), t))
131
+
132
+ # Set a 2 alert for p1.m1.l2
133
+ addAlert('2009-11-29', 2, task('p1.m1.l2'))
134
+ assert_equal(2, @j.alertLevel(tm('2009-12-01'), task('p1')))
135
+
136
+ # Overide p1.m1 with 0 alert
137
+ addAlert('2009-12-01', 0, task('p1.m1'))
138
+ assert_equal(0, @j.alertLevel(tm('2009-12-01'), task('p1')))
139
+ end
140
+
141
+ private
142
+
143
+ def tm(s)
144
+ TjTime.new(s)
145
+ end
146
+
147
+ def addAlert(date, level, property)
148
+ raise "No property" unless property
149
+ @j.addEntry(e = JournalEntry.new(@j, tm(date),
150
+ "Set #{property.fullId} " +
151
+ "to level #{level}i at #{date}",
152
+ property))
153
+ e.alertLevel = level
154
+ e
155
+ end
156
+
157
+ def createTaskTree
158
+ p1 = newTask(nil, 'p1')
159
+ m1 = newTask(p1, 'm1')
160
+ m2 = newTask(p1, 'm2')
161
+ newTask(m1, 'l1')
162
+ newTask(m1, 'l2')
163
+ newTask(nil, 'p2')
164
+ end
165
+
166
+ def newTask(parent, id)
167
+ t = Task.new(@p, id, 'Task #{id}', parent)
168
+ end
169
+
170
+ def task(id)
171
+ @p.task(id) || ( raise "Unknown task id #{id}" )
172
+ end
173
+
174
+ end
175
+
176
+ end