taskjuggler 0.0.7 → 0.0.8

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 (415) hide show
  1. data/CHANGELOG +119 -0
  2. data/benchmarks/allocatedSlots.tjp +1602 -0
  3. data/benchmarks/booking.tjp +40 -30
  4. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/css/tjmanual.css +0 -0
  5. data/{test/TestSuite/Scheduler/Correct → benchmarks}/css/tjreport.css +1 -0
  6. data/benchmarks/gantt.tjp +57 -0
  7. data/benchmarks/htmltaskreport.tjp +26 -1
  8. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/details.png +0 -0
  9. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/flag-green.png +0 -0
  10. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/flag-red.png +0 -0
  11. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/flag-yellow.png +0 -0
  12. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/resource.png +0 -0
  13. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/resourcegroup.png +0 -0
  14. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/task.png +0 -0
  15. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/taskgroup.png +0 -0
  16. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/trend-down.png +0 -0
  17. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/trend-flat.png +0 -0
  18. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/trend-up.png +0 -0
  19. data/benchmarks/profile.clt +36082 -0
  20. data/benchmarks/profile.html +58182 -0
  21. data/benchmarks/runbench.rb +6 -0
  22. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/scripts/wz_tooltip.js +0 -0
  23. data/doc/AppConfig.html +85 -37
  24. data/doc/Arguments.html +11 -1
  25. data/doc/CHANGELOG.html +131 -2
  26. data/doc/COPYING.html +11 -1
  27. data/doc/Object.html +12 -3
  28. data/doc/README.html +11 -1
  29. data/doc/RuntimeConfig.html +11 -1
  30. data/doc/String.html +11 -1
  31. data/doc/StringIO.html +11 -1
  32. data/doc/TaskJuggler.html +250 -219
  33. data/doc/TaskJuggler/Account.html +11 -1
  34. data/doc/TaskJuggler/AccountAttribute.html +11 -1
  35. data/doc/TaskJuggler/AccountScenario.html +11 -1
  36. data/doc/TaskJuggler/Allocation.html +11 -1
  37. data/doc/TaskJuggler/AllocationAttribute.html +11 -1
  38. data/doc/TaskJuggler/AttributeBase.html +11 -1
  39. data/doc/TaskJuggler/AttributeDefinition.html +11 -1
  40. data/doc/TaskJuggler/BatchProcessor.html +11 -1
  41. data/doc/TaskJuggler/Booking.html +11 -1
  42. data/doc/TaskJuggler/BookingListAttribute.html +11 -1
  43. data/doc/TaskJuggler/BooleanAttribute.html +11 -1
  44. data/doc/TaskJuggler/CSVFile.html +12 -2
  45. data/doc/TaskJuggler/CellSettingPattern.html +11 -1
  46. data/doc/TaskJuggler/CellSettingPatternList.html +11 -1
  47. data/doc/TaskJuggler/Charge.html +11 -1
  48. data/doc/TaskJuggler/ChargeListAttribute.html +11 -1
  49. data/doc/TaskJuggler/ChargeSet.html +11 -1
  50. data/doc/TaskJuggler/ChargeSetListAttribute.html +11 -1
  51. data/doc/TaskJuggler/CollisionDetector.html +1063 -0
  52. data/doc/TaskJuggler/ColumnListAttribute.html +11 -1
  53. data/doc/TaskJuggler/ColumnTable.html +11 -1
  54. data/doc/TaskJuggler/Daemon.html +11 -1
  55. data/doc/TaskJuggler/{OnShiftCache.html → DataCache.html} +127 -139
  56. data/doc/TaskJuggler/DataCacheEntry.html +711 -0
  57. data/doc/TaskJuggler/DateAttribute.html +11 -1
  58. data/doc/TaskJuggler/DefinitionListAttribute.html +11 -1
  59. data/doc/TaskJuggler/DependencyListAttribute.html +11 -1
  60. data/doc/TaskJuggler/DurationAttribute.html +16 -5
  61. data/doc/TaskJuggler/FileList.html +11 -1
  62. data/doc/TaskJuggler/FileRecord.html +11 -1
  63. data/doc/TaskJuggler/FixnumAttribute.html +19 -9
  64. data/doc/TaskJuggler/FlagListAttribute.html +29 -19
  65. data/doc/TaskJuggler/FloatAttribute.html +23 -13
  66. data/doc/TaskJuggler/FormatListAttribute.html +19 -9
  67. data/doc/TaskJuggler/GanttChart.html +94 -133
  68. data/doc/TaskJuggler/GanttContainer.html +11 -1
  69. data/doc/TaskJuggler/GanttHeader.html +11 -1
  70. data/doc/TaskJuggler/GanttHeaderScaleItem.html +11 -1
  71. data/doc/TaskJuggler/GanttLine.html +11 -1
  72. data/doc/TaskJuggler/GanttLoadStack.html +11 -1
  73. data/doc/TaskJuggler/GanttMilestone.html +11 -1
  74. data/doc/TaskJuggler/GanttRouter.html +247 -596
  75. data/doc/TaskJuggler/GanttTaskBar.html +11 -1
  76. data/doc/TaskJuggler/HTMLDocument.html +11 -1
  77. data/doc/TaskJuggler/HTMLGraphics.html +11 -1
  78. data/doc/TaskJuggler/Interval.html +11 -1
  79. data/doc/TaskJuggler/IntervalListAttribute.html +33 -23
  80. data/doc/TaskJuggler/JobInfo.html +11 -1
  81. data/doc/TaskJuggler/Journal.html +11 -1
  82. data/doc/TaskJuggler/JournalEntry.html +11 -1
  83. data/doc/TaskJuggler/JournalEntryList.html +11 -1
  84. data/doc/TaskJuggler/KeywordArray.html +11 -1
  85. data/doc/TaskJuggler/KeywordDocumentation.html +16 -6
  86. data/doc/TaskJuggler/Limits.html +11 -1
  87. data/doc/TaskJuggler/Limits/Limit.html +11 -1
  88. data/doc/TaskJuggler/LimitsAttribute.html +24 -14
  89. data/doc/TaskJuggler/ListAttributeBase.html +11 -1
  90. data/doc/TaskJuggler/Log.html +11 -1
  91. data/doc/TaskJuggler/LogFile.html +11 -1
  92. data/doc/TaskJuggler/LogicalAttribute.html +11 -1
  93. data/doc/TaskJuggler/LogicalExpression.html +11 -1
  94. data/doc/TaskJuggler/LogicalExpressionAttribute.html +19 -9
  95. data/doc/TaskJuggler/LogicalFlag.html +11 -1
  96. data/doc/TaskJuggler/LogicalFunction.html +11 -1
  97. data/doc/TaskJuggler/LogicalOperation.html +11 -1
  98. data/doc/TaskJuggler/Macro.html +11 -1
  99. data/doc/TaskJuggler/MacroTable.html +11 -1
  100. data/doc/TaskJuggler/ManagerResponsibilities.html +11 -1
  101. data/doc/TaskJuggler/ManagerStatusRecord.html +11 -1
  102. data/doc/TaskJuggler/Message.html +11 -1
  103. data/doc/TaskJuggler/MessageHandler.html +11 -1
  104. data/doc/TaskJuggler/Navigator.html +12 -2
  105. data/doc/TaskJuggler/NavigatorElement.html +11 -1
  106. data/doc/TaskJuggler/NikuProject.html +11 -1
  107. data/doc/TaskJuggler/NikuReport.html +11 -1
  108. data/doc/TaskJuggler/NikuResource.html +11 -1
  109. data/doc/TaskJuggler/NodeListAttribute.html +17 -7
  110. data/doc/TaskJuggler/PlaceHolderCell.html +722 -0
  111. data/doc/TaskJuggler/ProcessIntercom.html +11 -1
  112. data/doc/TaskJuggler/ProcessIntercomIface.html +11 -1
  113. data/doc/TaskJuggler/Project.html +587 -500
  114. data/doc/TaskJuggler/ProjectBroker.html +11 -1
  115. data/doc/TaskJuggler/ProjectBrokerIface.html +11 -1
  116. data/doc/TaskJuggler/ProjectFileParser.html +205 -192
  117. data/doc/TaskJuggler/ProjectFileScanner.html +230 -207
  118. data/doc/TaskJuggler/ProjectRecord.html +11 -1
  119. data/doc/TaskJuggler/ProjectServer.html +11 -1
  120. data/doc/TaskJuggler/ProjectServerIface.html +11 -1
  121. data/doc/TaskJuggler/PropertyAttribute.html +19 -9
  122. data/doc/TaskJuggler/PropertyList.html +95 -83
  123. data/doc/TaskJuggler/PropertySet.html +11 -1
  124. data/doc/TaskJuggler/PropertyTreeNode.html +11 -1
  125. data/doc/TaskJuggler/Query.html +234 -232
  126. data/doc/TaskJuggler/RTFHandlers.html +11 -1
  127. data/doc/TaskJuggler/RTFNavigator.html +11 -1
  128. data/doc/TaskJuggler/RTFQuery.html +11 -1
  129. data/doc/TaskJuggler/RTFReport.html +11 -1
  130. data/doc/TaskJuggler/RTFReportLink.html +11 -1
  131. data/doc/TaskJuggler/RTFWithQuerySupport.html +11 -1
  132. data/doc/TaskJuggler/RealFormat.html +12 -2
  133. data/doc/TaskJuggler/RealFormatAttribute.html +15 -5
  134. data/doc/TaskJuggler/ReferenceAttribute.html +38 -28
  135. data/doc/TaskJuggler/Report.html +96 -113
  136. data/doc/TaskJuggler/ReportBase.html +161 -152
  137. data/doc/TaskJuggler/ReportContext.html +11 -1
  138. data/doc/TaskJuggler/ReportServer.html +59 -48
  139. data/doc/TaskJuggler/ReportServerIface.html +51 -41
  140. data/doc/TaskJuggler/ReportServerRecord.html +11 -1
  141. data/doc/TaskJuggler/ReportServlet.html +11 -1
  142. data/doc/TaskJuggler/ReportTable.html +46 -25
  143. data/doc/TaskJuggler/ReportTableCell.html +296 -275
  144. data/doc/TaskJuggler/ReportTableColumn.html +14 -4
  145. data/doc/TaskJuggler/ReportTableLegend.html +11 -1
  146. data/doc/TaskJuggler/ReportTableLine.html +19 -7
  147. data/doc/TaskJuggler/Resource.html +12 -2
  148. data/doc/TaskJuggler/ResourceListAttribute.html +40 -30
  149. data/doc/TaskJuggler/ResourceListRE.html +11 -1
  150. data/doc/TaskJuggler/ResourceScenario.html +708 -565
  151. data/doc/TaskJuggler/RichText.html +54 -36
  152. data/doc/TaskJuggler/RichTextAttribute.html +31 -21
  153. data/doc/TaskJuggler/RichTextDocument.html +11 -1
  154. data/doc/TaskJuggler/RichTextElement.html +11 -1
  155. data/doc/TaskJuggler/RichTextFunctionExample.html +11 -1
  156. data/doc/TaskJuggler/RichTextFunctionHandler.html +11 -1
  157. data/doc/TaskJuggler/RichTextImage.html +11 -1
  158. data/doc/TaskJuggler/RichTextIntermediate.html +81 -71
  159. data/doc/TaskJuggler/RichTextParser.html +88 -33
  160. data/doc/TaskJuggler/RichTextScanner.html +45 -35
  161. data/doc/TaskJuggler/RichTextSnip.html +11 -1
  162. data/doc/TaskJuggler/RichTextSyntaxRules.html +436 -389
  163. data/doc/TaskJuggler/Scenario.html +11 -1
  164. data/doc/TaskJuggler/ScenarioData.html +11 -1
  165. data/doc/TaskJuggler/ScenarioListAttribute.html +23 -13
  166. data/doc/TaskJuggler/Scoreboard.html +92 -73
  167. data/doc/TaskJuggler/SheetHandlerBase.html +11 -1
  168. data/doc/TaskJuggler/SheetReceiver.html +11 -1
  169. data/doc/TaskJuggler/SheetSender.html +11 -1
  170. data/doc/TaskJuggler/Shift.html +11 -1
  171. data/doc/TaskJuggler/ShiftAssignment.html +11 -1
  172. data/doc/TaskJuggler/ShiftAssignments.html +11 -1
  173. data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +24 -14
  174. data/doc/TaskJuggler/ShiftScenario.html +11 -1
  175. data/doc/TaskJuggler/SimpleQueryExpander.html +11 -1
  176. data/doc/TaskJuggler/SortListAttribute.html +21 -11
  177. data/doc/TaskJuggler/SourceFileInfo.html +11 -1
  178. data/doc/TaskJuggler/StatusSheetReceiver.html +11 -1
  179. data/doc/TaskJuggler/StatusSheetReport.html +11 -1
  180. data/doc/TaskJuggler/StatusSheetSender.html +112 -11
  181. data/doc/TaskJuggler/StringAttribute.html +23 -13
  182. data/doc/TaskJuggler/SymbolAttribute.html +19 -9
  183. data/doc/TaskJuggler/SyntaxReference.html +80 -71
  184. data/doc/TaskJuggler/TOCEntry.html +11 -1
  185. data/doc/TaskJuggler/TSResourceRecord.html +11 -1
  186. data/doc/TaskJuggler/TSTaskRecord.html +11 -1
  187. data/doc/TaskJuggler/TableColumnDefinition.html +11 -1
  188. data/doc/TaskJuggler/TableOfContents.html +11 -1
  189. data/doc/TaskJuggler/TableReport.html +422 -411
  190. data/doc/TaskJuggler/Task.html +11 -1
  191. data/doc/TaskJuggler/TaskDependency.html +11 -1
  192. data/doc/TaskJuggler/TaskListAttribute.html +33 -23
  193. data/doc/TaskJuggler/TaskListRE.html +11 -1
  194. data/doc/TaskJuggler/TaskScenario.html +2007 -1919
  195. data/doc/TaskJuggler/TextFormatter.html +11 -1
  196. data/doc/TaskJuggler/TextParser.html +421 -612
  197. data/doc/TaskJuggler/TextParser/Pattern.html +410 -211
  198. data/doc/TaskJuggler/TextParser/Rule.html +224 -152
  199. data/doc/TaskJuggler/TextParser/StackElement.html +190 -28
  200. data/doc/TaskJuggler/TextParser/State.html +989 -0
  201. data/doc/TaskJuggler/TextParser/StateTransition.html +782 -0
  202. data/doc/TaskJuggler/TextParser/TextParserResultArray.html +25 -14
  203. data/doc/TaskJuggler/TextParser/TokenDoc.html +11 -1
  204. data/doc/TaskJuggler/TextReport.html +11 -1
  205. data/doc/TaskJuggler/TextScanner.html +285 -273
  206. data/doc/TaskJuggler/TextScanner/BufferStreamHandle.html +17 -7
  207. data/doc/TaskJuggler/TextScanner/FileStreamHandle.html +24 -14
  208. data/doc/TaskJuggler/TextScanner/MacroStackEntry.html +11 -1
  209. data/doc/TaskJuggler/TextScanner/StreamHandle.html +64 -52
  210. data/doc/TaskJuggler/TimeSheet.html +11 -1
  211. data/doc/TaskJuggler/TimeSheetReceiver.html +11 -1
  212. data/doc/TaskJuggler/TimeSheetRecord.html +11 -1
  213. data/doc/TaskJuggler/TimeSheetReport.html +11 -1
  214. data/doc/TaskJuggler/TimeSheetSender.html +11 -1
  215. data/doc/TaskJuggler/TimeSheetSummary.html +11 -1
  216. data/doc/TaskJuggler/TimeSheets.html +11 -1
  217. data/doc/TaskJuggler/Tj3AppBase.html +11 -1
  218. data/doc/TaskJuggler/Tj3Client.html +11 -1
  219. data/doc/TaskJuggler/Tj3Daemon.html +11 -1
  220. data/doc/TaskJuggler/Tj3SheetAppBase.html +11 -1
  221. data/doc/TaskJuggler/Tj3SsReceiver.html +11 -1
  222. data/doc/TaskJuggler/Tj3SsSender.html +11 -1
  223. data/doc/TaskJuggler/Tj3TsReceiver.html +11 -1
  224. data/doc/TaskJuggler/Tj3TsSender.html +11 -1
  225. data/doc/TaskJuggler/Tj3TsSummary.html +11 -1
  226. data/doc/TaskJuggler/TjException.html +11 -1
  227. data/doc/TaskJuggler/TjTime.html +474 -324
  228. data/doc/TaskJuggler/TjpExample.html +11 -1
  229. data/doc/TaskJuggler/TjpExportRE.html +11 -1
  230. data/doc/TaskJuggler/TjpSyntaxRules.html +3731 -3662
  231. data/doc/TaskJuggler/URLParameter.html +11 -1
  232. data/doc/TaskJuggler/UserManual.html +11 -1
  233. data/doc/TaskJuggler/VimSyntax.html +11 -1
  234. data/doc/TaskJuggler/WebServer.html +11 -1
  235. data/doc/TaskJuggler/WorkingHours.html +295 -221
  236. data/doc/TaskJuggler/WorkingHoursAttribute.html +11 -1
  237. data/doc/TaskJuggler/XMLBlob.html +11 -1
  238. data/doc/TaskJuggler/XMLComment.html +11 -1
  239. data/doc/TaskJuggler/XMLDocument.html +11 -1
  240. data/doc/TaskJuggler/XMLElement.html +11 -1
  241. data/doc/TaskJuggler/XMLNamedText.html +11 -1
  242. data/doc/TaskJuggler/XMLText.html +11 -1
  243. data/doc/index.html +694 -624
  244. data/doc/lib/AppConfig_rb.html +1 -1
  245. data/doc/lib/Attributes_rb.html +1 -1
  246. data/doc/lib/Booking_rb.html +1 -1
  247. data/doc/lib/DataCache_rb.html +69 -0
  248. data/doc/lib/KeywordDocumentation_rb.html +1 -1
  249. data/doc/lib/ProjectFileParser_rb.html +1 -1
  250. data/doc/lib/ProjectFileScanner_rb.html +1 -1
  251. data/doc/lib/Project_rb.html +1 -1
  252. data/doc/lib/PropertyList_rb.html +1 -1
  253. data/doc/lib/Query_rb.html +1 -1
  254. data/doc/lib/RealFormat_rb.html +1 -1
  255. data/doc/lib/ResourceScenario_rb.html +1 -1
  256. data/doc/lib/Resource_rb.html +1 -1
  257. data/doc/lib/RichTextParser_rb.html +1 -1
  258. data/doc/lib/RichTextScanner_rb.html +1 -1
  259. data/doc/lib/RichTextSyntaxRules_rb.html +1 -1
  260. data/doc/lib/RichText_rb.html +1 -1
  261. data/doc/lib/Scoreboard_rb.html +1 -1
  262. data/doc/lib/StatusSheetSender_rb.html +1 -1
  263. data/doc/lib/SyntaxReference_rb.html +1 -1
  264. data/doc/lib/TaskJuggler_rb.html +1 -1
  265. data/doc/lib/TaskScenario_rb.html +3 -1
  266. data/doc/lib/TextParser/Pattern_rb.html +3 -1
  267. data/doc/lib/TextParser/Rule_rb.html +3 -1
  268. data/doc/lib/TextParser/StackElement_rb.html +3 -1
  269. data/doc/lib/TextParser/State_rb.html +65 -0
  270. data/doc/lib/TextParser_rb.html +1 -1
  271. data/doc/lib/TextScanner_rb.html +1 -1
  272. data/doc/lib/Tj3Config_rb.html +1 -1
  273. data/doc/lib/TjTime_rb.html +1 -1
  274. data/doc/lib/TjpSyntaxRules_rb.html +1 -1
  275. data/doc/lib/WorkingHours_rb.html +3 -1
  276. data/doc/lib/daemon/ReportServer_rb.html +1 -1
  277. data/doc/lib/reports/CSVFile_rb.html +1 -1
  278. data/doc/lib/reports/CollisionDetector_rb.html +67 -0
  279. data/doc/lib/reports/GanttChart_rb.html +1 -1
  280. data/doc/lib/reports/GanttRouter_rb.html +3 -1
  281. data/doc/lib/reports/Navigator_rb.html +1 -1
  282. data/doc/lib/reports/ReportBase_rb.html +1 -1
  283. data/doc/lib/reports/ReportTableCell_rb.html +1 -1
  284. data/doc/lib/reports/ReportTableColumn_rb.html +1 -1
  285. data/doc/lib/reports/ReportTableLine_rb.html +1 -1
  286. data/doc/lib/reports/ReportTable_rb.html +1 -1
  287. data/doc/lib/reports/Report_rb.html +1 -1
  288. data/doc/lib/reports/TableReport_rb.html +1 -1
  289. data/doc/lib/taskjuggler3_rb.html +1 -1
  290. data/examples/tutorial.tjp +1 -2
  291. data/lib/AppConfig.rb +10 -4
  292. data/lib/Attributes.rb +4 -4
  293. data/lib/DataCache.rb +124 -0
  294. data/lib/KeywordDocumentation.rb +5 -5
  295. data/lib/Project.rb +54 -10
  296. data/lib/ProjectFileParser.rb +10 -9
  297. data/lib/ProjectFileScanner.rb +38 -25
  298. data/lib/PropertyList.rb +6 -4
  299. data/lib/Query.rb +0 -8
  300. data/lib/RealFormat.rb +1 -1
  301. data/lib/Resource.rb +1 -1
  302. data/lib/ResourceScenario.rb +96 -31
  303. data/lib/RichText.rb +17 -5
  304. data/lib/RichTextParser.rb +22 -9
  305. data/lib/RichTextScanner.rb +34 -34
  306. data/lib/RichTextSyntaxRules.rb +41 -36
  307. data/lib/Scoreboard.rb +16 -7
  308. data/lib/StatusSheetSender.rb +63 -0
  309. data/lib/SyntaxReference.rb +9 -10
  310. data/lib/TaskJuggler.rb +28 -4
  311. data/lib/TaskScenario.rb +66 -19
  312. data/lib/TextParser.rb +219 -384
  313. data/lib/TextParser/Pattern.rb +168 -49
  314. data/lib/TextParser/Rule.rb +33 -17
  315. data/lib/TextParser/StackElement.rb +42 -2
  316. data/lib/TextParser/State.rb +175 -0
  317. data/lib/TextScanner.rb +19 -15
  318. data/lib/Tj3Config.rb +1 -1
  319. data/lib/TjTime.rb +111 -3
  320. data/lib/TjpSyntaxRules.rb +122 -66
  321. data/lib/WorkingHours.rb +91 -186
  322. data/lib/daemon/ReportServer.rb +3 -2
  323. data/lib/reports/CSVFile.rb +1 -1
  324. data/lib/reports/CollisionDetector.rb +177 -0
  325. data/lib/reports/GanttChart.rb +25 -41
  326. data/lib/reports/GanttRouter.rb +104 -233
  327. data/lib/reports/Navigator.rb +1 -1
  328. data/lib/reports/Report.rb +9 -33
  329. data/lib/reports/ReportBase.rb +0 -1
  330. data/lib/reports/ReportTable.rb +19 -8
  331. data/lib/reports/ReportTableCell.rb +61 -25
  332. data/lib/reports/ReportTableColumn.rb +2 -2
  333. data/lib/reports/ReportTableLine.rb +4 -2
  334. data/lib/reports/TableReport.rb +1 -0
  335. data/lib/taskjuggler3.rb +0 -1
  336. data/manual/Installation +7 -3
  337. data/manual/Intro +12 -10
  338. data/manual/The_TaskJuggler_Syntax +4 -4
  339. data/test/TestSuite/CSV-Reports/celltext-Reference.csv +14 -14
  340. data/test/TestSuite/CSV-Reports/genrefs +1 -1
  341. data/test/TestSuite/CSV-Reports/resourcereport-Reference.csv +4 -4
  342. data/test/TestSuite/CSV-Reports/resourcereport_with_tasks-Reference.csv +22 -22
  343. data/test/TestSuite/CSV-Reports/sortByTree-Reference.csv +14 -14
  344. data/test/TestSuite/CSV-Reports/sortBy_duration.down-Reference.csv +14 -14
  345. data/test/TestSuite/CSV-Reports/sortBy_effort.up-Reference.csv +14 -14
  346. data/test/TestSuite/CSV-Reports/sortBy_plan.start.down-Reference.csv +14 -14
  347. data/test/TestSuite/CSV-Reports/taskreport-Reference.csv +14 -14
  348. data/test/TestSuite/CSV-Reports/taskreport_with_resources-Reference.csv +32 -24
  349. data/test/TestSuite/CSV-Reports/weekly-Reference.csv +13 -0
  350. data/test/TestSuite/CSV-Reports/weekly.tjp +9 -0
  351. data/test/TestSuite/HTML-Reports/css/tjreport.css +7 -2
  352. data/test/TestSuite/HTML-Reports/depArrows.html +839 -830
  353. data/test/TestSuite/HTML-Reports/depArrows.tjp +12 -12
  354. data/test/TestSuite/HTML-Reports/profile.html +37581 -0
  355. data/test/TestSuite/ReportGenerator/Errors/no_report_defined.tjp +7 -0
  356. data/test/TestSuite/ReportGenerator/Errors/rtp_report_recursion.tjp +1 -1
  357. data/test/TestSuite/StatusSheets/TimeSheets/2002-03-01/missing-reports +2 -0
  358. data/test/TestSuite/StatusSheets/run +2 -0
  359. data/test/TestSuite/Syntax/Correct/Booking.tjp +13 -5
  360. data/test/TestSuite/Syntax/Correct/ResourceRoot.tjp +21 -0
  361. data/test/TestSuite/Syntax/Correct/RollupResource.tjp +21 -0
  362. data/test/TestSuite/Syntax/Correct/TaskRoot.tjp +1 -1
  363. data/test/TestSuite/Syntax/Errors/empty.tjp +1 -1
  364. data/test/TestSuite/Syntax/Errors/include_before_project.tjp +2 -0
  365. data/test/TestSuite/Syntax/Errors/no_reduce.tjp +6 -0
  366. data/test/TestSuite/Syntax/Errors/unsupported_token.tjp +1 -1
  367. data/test/TestSuite/TimeSheets/run +1 -1
  368. data/test/test_CSV-Reports.rb +2 -4
  369. data/test/test_CollisionDetector.rb +85 -0
  370. data/test/test_Project.rb +2 -2
  371. data/test/test_ProjectFileScanner.rb +73 -31
  372. data/test/test_Query.rb +2 -2
  373. data/test/test_ReportGenerator.rb +1 -1
  374. data/test/test_RichText.rb +4 -4
  375. data/test/test_WorkingHours.rb +150 -11
  376. metadata +75 -67
  377. data/test/TestSuite/ReportGenerator/Errors/css/tjreport.css +0 -407
  378. data/test/TestSuite/ReportGenerator/Errors/rtp_report_recursion.html +0 -26
  379. data/test/TestSuite/Scheduler/Correct/Allocate.html +0 -3210
  380. data/test/TestSuite/Scheduler/Correct/Container.html +0 -349
  381. data/test/TestSuite/Scheduler/Correct/Limits.html +0 -4964
  382. data/test/TestSuite/Scheduler/Correct/Shift.html +0 -1719
  383. data/test/TestSuite/Scheduler/Correct/Shift2.html +0 -476
  384. data/test/TestSuite/Scheduler/Correct/css/tjmanual.css +0 -66
  385. data/test/TestSuite/Scheduler/Correct/icons/details.png +0 -0
  386. data/test/TestSuite/Scheduler/Correct/icons/flag-green.png +0 -0
  387. data/test/TestSuite/Scheduler/Correct/icons/flag-red.png +0 -0
  388. data/test/TestSuite/Scheduler/Correct/icons/flag-yellow.png +0 -0
  389. data/test/TestSuite/Scheduler/Correct/icons/resource.png +0 -0
  390. data/test/TestSuite/Scheduler/Correct/icons/resourcegroup.png +0 -0
  391. data/test/TestSuite/Scheduler/Correct/icons/task.png +0 -0
  392. data/test/TestSuite/Scheduler/Correct/icons/taskgroup.png +0 -0
  393. data/test/TestSuite/Scheduler/Correct/icons/trend-down.png +0 -0
  394. data/test/TestSuite/Scheduler/Correct/icons/trend-flat.png +0 -0
  395. data/test/TestSuite/Scheduler/Correct/icons/trend-up.png +0 -0
  396. data/test/TestSuite/Scheduler/Correct/scripts/wz_tooltip.js +0 -1301
  397. data/test/TestSuite/Scheduler/Errors/css/tjmanual.css +0 -66
  398. data/test/TestSuite/Scheduler/Errors/css/tjreport.css +0 -407
  399. data/test/TestSuite/Scheduler/Errors/icons/details.png +0 -0
  400. data/test/TestSuite/Scheduler/Errors/icons/flag-green.png +0 -0
  401. data/test/TestSuite/Scheduler/Errors/icons/flag-red.png +0 -0
  402. data/test/TestSuite/Scheduler/Errors/icons/flag-yellow.png +0 -0
  403. data/test/TestSuite/Scheduler/Errors/icons/resource.png +0 -0
  404. data/test/TestSuite/Scheduler/Errors/icons/resourcegroup.png +0 -0
  405. data/test/TestSuite/Scheduler/Errors/icons/task.png +0 -0
  406. data/test/TestSuite/Scheduler/Errors/icons/taskgroup.png +0 -0
  407. data/test/TestSuite/Scheduler/Errors/icons/trend-down.png +0 -0
  408. data/test/TestSuite/Scheduler/Errors/icons/trend-flat.png +0 -0
  409. data/test/TestSuite/Scheduler/Errors/icons/trend-up.png +0 -0
  410. data/test/TestSuite/Scheduler/Errors/scripts/wz_tooltip.js +0 -1301
  411. data/test/TestSuite/StatusSheets/resrep.tji +0 -7
  412. data/test/TestSuite/StatusSheets/tj3d.log +0 -312
  413. data/test/TestSuite/Syntax/Correct/Managers.html +0 -263
  414. data/test/TestSuite/TimeSheets/acceptable_intervals +0 -1
  415. data/test/TestSuite/TimeSheets/statussheets.log +0 -1
@@ -0,0 +1,7 @@
1
+ project "test" 2010-05-23 +1w
2
+
3
+ task "foo"
4
+
5
+ # MARK: warning 0 no_report_defined
6
+ # MARK: warning 0 all_formats_empty
7
+
@@ -13,8 +13,8 @@ textreport r1 "R1" {
13
13
  textreport r2 "R2" {
14
14
  center "<[report id='r3']>"
15
15
  }
16
+ # MARK: error 19 rtp_report_recursion
16
17
  textreport r3 "R3" {
17
18
  left "Hello, world!"
18
- # MARK: error 19 rtp_report_recursion
19
19
  center "<[report id='r1']>"
20
20
  }
@@ -0,0 +1,2 @@
1
+ resource1
2
+ resource2
@@ -34,6 +34,8 @@ tj3ss_sender --dryrun -e 2002-03-02 > sender.log || error "sender1"
34
34
  check "From: foo@bar.com" sender.log 2
35
35
  check "Content-Disposition: attachment;" sender.log 2
36
36
  check "^statussheet " sender.log 2
37
+ check "^resource1" sender.log 0
38
+ check "^resource2" sender.log 2
37
39
 
38
40
  # Run a receiver test
39
41
  tj3ss_receiver --dryrun < boss_mail >> receiver.log || error "rec1"
@@ -17,10 +17,18 @@ task test "Testing" {
17
17
  }
18
18
 
19
19
  supplement resource tux {
20
- # This is the work that has been done up until now by tux.
21
- booking test 2007-01-06 +8h { sloppy 2 }
22
- booking test 2007-01-08 +4h,
23
- 2007-01-09 +4h { sloppy 2 }
24
- # Book interval that extends into off-hours.
20
+ # Book a whole day (8 hours). The 1 hour lunch break is skipped.
21
+ booking test 2007-01-06-9:00 +9h { sloppy 1 }
22
+ # Book 2 days in the afternoon, 4 hours each.
23
+ booking test 2007-01-08-13:00 +4h,
24
+ 2007-01-09-13:00 +4h
25
+ # This is a common mistake. With standard working hours, this will
26
+ # yield a zero time booking! The interval is midnight to 8am. So
27
+ # it's outside of the working hours and 'sloopy 2' surpresses the
28
+ # warning.
29
+ booking test 2007-01-11 +8h { sloppy 2 }
30
+ # Use 'overtime' to book off-hour slots. This booking will book the
31
+ # full 10 hours, ignoring the lunch break and adding an extra hour
32
+ # in the morning.
25
33
  booking test 2007-01-11-8:00 +10h { overtime 1 }
26
34
  }
@@ -0,0 +1,21 @@
1
+ project "Test" "1.0" 2010-11-10 +2m
2
+
3
+ resource org "Org" {
4
+ resource team1 "Team1" {
5
+ resource r1 "R1"
6
+ resource r2 "R2"
7
+ resource r3 "R3"
8
+ }
9
+ resource r4 "R4"
10
+ }
11
+ resource r5 "R5"
12
+
13
+ task "T"
14
+
15
+ resourcereport "ResourceRoot" {
16
+ formats html
17
+ columns name, id
18
+ # Only list the Team1 as if it would be a top-level resource.
19
+ resourceroot team1
20
+ }
21
+
@@ -0,0 +1,21 @@
1
+ project "Test" "1.0" 2010-11-10 +2m
2
+
3
+ resource org "Org" {
4
+ resource team1 "Team1" {
5
+ resource r1 "R1"
6
+ resource r2 "R2"
7
+ resource r3 "R3"
8
+ }
9
+ resource r4 "R4"
10
+ }
11
+ resource r5 "R5"
12
+
13
+ task "T"
14
+
15
+ resourcereport "RollupResource" {
16
+ formats html
17
+ columns name, id
18
+ # Don't list the Team1 resources.
19
+ rollupresource plan.id = 'team1'
20
+ }
21
+
@@ -1,4 +1,4 @@
1
- project prj "Taskroot Example" "1.0" 2005-07-22 - 2005-08-26
1
+ project "Taskroot Example" 2005-07-22 - 2005-08-26
2
2
 
3
3
  task items "Project breakdown" {
4
4
  start 2005-07-22
@@ -1 +1 @@
1
- # MARK: error 2 unexpctd_token
1
+ # MARK: error 1 unexpctd_token
@@ -0,0 +1,2 @@
1
+ # MARK: error 2 include_before_project
2
+ include "foo.tji"
@@ -0,0 +1,6 @@
1
+ project test "Test" "1.0" 2010-11-06 +1m
2
+
3
+ task t "T" {
4
+ # MARK: error 5 no_reduce
5
+ effort 1dd
6
+ }
@@ -2,7 +2,7 @@ project "Test" 2009-11-28 +2m
2
2
 
3
3
  task t "T" {
4
4
  journalentry 2009-11-28 "Just testing" {
5
- # MARK: error 7 unsupported_token
5
+ # MARK: error 8 unsupported_token
6
6
  summary -8<-
7
7
  This is all good.
8
8
  * This is bad.
@@ -50,7 +50,7 @@ tj3ts_summary --dryrun -e 2002-03-01 >> summary.log || error "summary"
50
50
  check "To: archive@bar.com" summary.log 2
51
51
  check "To: crew@bar.com" summary.log 1
52
52
  check "From: foo@bar.com" summary.log 7
53
- check "From: =?UTF-8?B?U8OpYmFzdGllbg==?= Bono <SBono@crappysoftware.com>" summary.log 1
53
+ check "Message-ID:" summary.log 8
54
54
  check "The following 5 person(s) have not yet submitted their time sheets" summary.log 4
55
55
  check "Weekly Report from" summary.log 4
56
56
  check "Green" summary.log 12
@@ -52,11 +52,9 @@ class TestScheduler < Test::Unit::TestCase
52
52
  # Compare the output CSV (passed as String) with the content of the CSV
53
53
  # reference files _refFile_.
54
54
  def compareCSVs(outStr, refFile)
55
- ref = []
56
- TaskJuggler::CSVFile.new(ref).read(refFile)
55
+ ref = TaskJuggler::CSVFile.new.read(refFile)
57
56
 
58
- out = []
59
- TaskJuggler::CSVFile.new(out).parse(outStr)
57
+ out = TaskJuggler::CSVFile.new.parse(outStr)
60
58
  assert(ref.length == out.length,
61
59
  "Line number mismatch (#{out.length} instead of #{ref.length}) " +
62
60
  "in #{refFile}")
@@ -0,0 +1,85 @@
1
+ #!/usr/bin/env ruby -w
2
+ # encoding: UTF-8
3
+ #
4
+ # = test_GanttRouter.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 'reports/GanttRouter'
17
+
18
+ class TaskJuggler
19
+
20
+ class TestCollisionDetector < Test::Unit::TestCase
21
+
22
+ def test_collisions
23
+ # To test the collion?() method we use a fix block area and then try
24
+ # various lines that either collide or not.
25
+ #
26
+ # 2,2
27
+ # +--+
28
+ # | |
29
+ # +--+
30
+ # 4,4
31
+ #
32
+ # We use the same set of lines for horizontal and vertical tests. The
33
+ # first value is the x or y coordinate of the line, the tuple is the start
34
+ # and end coordinate in the other dimension. The third value is the
35
+ # expected result.
36
+ lines = [
37
+ [ [ 1, [0, 1] ], false ],
38
+ [ [ 2, [0, 1] ], false ],
39
+ [ [ 3, [0, 1] ], false ],
40
+ [ [ 4, [0, 1] ], false ],
41
+ [ [ 5, [0, 1] ], false ],
42
+ [ [ 1, [0, 2] ], false ],
43
+ [ [ 2, [0, 2] ], true ],
44
+ [ [ 3, [0, 2] ], true ],
45
+ [ [ 4, [0, 2] ], true ],
46
+ [ [ 5, [0, 2] ], false ],
47
+ [ [ 1, [0, 4] ], false ],
48
+ [ [ 2, [0, 4] ], true ],
49
+ [ [ 3, [0, 4] ], true ],
50
+ [ [ 4, [0, 4] ], true ],
51
+ [ [ 5, [0, 4] ], false ],
52
+ [ [ 1, [0, 5] ], false ],
53
+ [ [ 2, [0, 5] ], true ],
54
+ [ [ 3, [0, 5] ], true ],
55
+ [ [ 4, [0, 5] ], true ],
56
+ [ [ 5, [0, 6] ], false ],
57
+ [ [ 1, [4, 6] ], false ],
58
+ [ [ 2, [4, 6] ], true ],
59
+ [ [ 3, [4, 6] ], true ],
60
+ [ [ 4, [4, 6] ], true ],
61
+ [ [ 5, [4, 6] ], false ],
62
+ [ [ 1, [5, 6] ], false ],
63
+ [ [ 2, [5, 6] ], false],
64
+ [ [ 3, [5, 6] ], false ],
65
+ [ [ 4, [5, 6] ], false ],
66
+ [ [ 5, [5, 6] ], false ]
67
+ ]
68
+ # Try horizontal lines first.
69
+ cd = CollisionDetector.new(10, 10)
70
+ cd.addBlockedZone(2, 2, 3, 3, true, true)
71
+
72
+ lines.each do |line|
73
+ assert_equal(line[1], cd.collision?(*(line[0] + [ true ])),
74
+ "Horizontal #{line[0]} is not #{line[1]}")
75
+ end
76
+ lines.each do |line|
77
+ assert_equal(line[1], cd.collision?(*(line[0] + [ false ])),
78
+ "Vertical #{line[0]} is not #{line[1]}")
79
+ end
80
+ end
81
+
82
+ end
83
+
84
+ end
85
+
data/test/test_Project.rb CHANGED
@@ -42,12 +42,12 @@ class TestProject < Test::Unit::TestCase
42
42
  assert_equal(p['rate'], 100.0)
43
43
 
44
44
  t = Task.new(p, 'foo', 'Foo', nil)
45
- t['start', 0] = TjTime.new('2008-07-25 9:00')
45
+ t['start', 0] = TjTime.new('2008-07-25-9:00')
46
46
  t['duration', 0] = 10
47
47
  assert_equal(p.task('foo'), t)
48
48
 
49
49
  p.schedule
50
- assert_equal(t['end', 0], TjTime.new('2008-07-25 19:00'))
50
+ assert_equal(t['end', 0], TjTime.new('2008-07-25-19:00'))
51
51
  p.generateReports(1)
52
52
  end
53
53
 
@@ -44,21 +44,21 @@ comment */
44
44
  EOT
45
45
 
46
46
  ref = [
47
- ['ID', 'Hello', 1],
48
- ['ID', 'world', 1],
49
- ['INTEGER', 1, 1],
50
- ['FLOAT', 2.0, 2],
51
- ['DATE', TjTime.new('2008-12-14'), 3],
52
- ['ID_WITH_COLON', 'foo', 5],
53
- ['ABSOLUTE_ID', 'a.b.c', 6],
54
- ['LITERAL', '-', 6],
55
- ['LITERAL', '$', 6],
56
- ['MACRO', 'A Macro', 6],
57
- ['TIME', ((15 * 60) + 23) * 60, 7],
58
- ['STRING', 'A string', 7],
59
- ['STRING', "It's a string", 8],
60
- ['STRING', "A\nmult\"i line\nstring", 9],
61
- ['.', '<END>', 14 ]
47
+ [:ID, 'Hello', 1],
48
+ [:ID, 'world', 1],
49
+ [:INTEGER, 1, 1],
50
+ [:FLOAT, 2.0, 2],
51
+ [:DATE, TjTime.new('2008-12-14'), 3],
52
+ [:ID_WITH_COLON, 'foo', 5],
53
+ [:ABSOLUTE_ID, 'a.b.c', 6],
54
+ [:LITERAL, '-', 6],
55
+ [:LITERAL, '$', 6],
56
+ [:MACRO, 'A Macro', 6],
57
+ [:TIME, time(15, 23), 7],
58
+ [:STRING, 'A string', 7],
59
+ [:STRING, "It's a string", 8],
60
+ [:STRING, "A\nmult\"i line\nstring", 9],
61
+ [:eof, '<END>', 14 ]
62
62
  ]
63
63
 
64
64
  check(text, ref)
@@ -76,19 +76,57 @@ EOT
76
76
  ]
77
77
 
78
78
  ref = [
79
- ['ID', 'This', 1],
80
- ['ID', 'great', 1],
81
- ['ID', 'software', 1],
82
- ['ID', 'macro', 2],
83
- ['ID', 'with', 2],
84
- ['ID', 'arg1', 2],
85
- ['ID', 'argument', 2],
86
- ['.', '<END>', 3]
79
+ [:ID, 'This', 1],
80
+ [:ID, 'great', 1],
81
+ [:ID, 'software', 1],
82
+ [:ID, 'macro', 2],
83
+ [:ID, 'with', 2],
84
+ [:ID, 'arg1', 2],
85
+ [:ID, 'argument', 2],
86
+ [:eof, '<END>', 3]
87
87
  ]
88
88
 
89
89
  check(text, ref, macros)
90
90
  end
91
91
 
92
+ def test_time
93
+ text = <<'EOT'
94
+ 0:00
95
+ 00:00
96
+ 1:00
97
+ 11:59
98
+ 12:01
99
+ 24:00
100
+ EOT
101
+ ref = [
102
+ [:TIME, time(0, 0), 1],
103
+ [:TIME, time(0, 0), 2],
104
+ [:TIME, time(1, 0), 3],
105
+ [:TIME, time(11, 59), 4],
106
+ [:TIME, time(12, 1), 5],
107
+ [:TIME, time(24, 0), 6],
108
+ [:eof, '<END>', 7]
109
+ ]
110
+
111
+ check(text, ref)
112
+ end
113
+
114
+ def test_date
115
+ text = <<'EOT'
116
+ 1970-01-01
117
+ 2035-12-31-23:59:59
118
+ 2010-08-11-23:10
119
+ EOT
120
+ ref = [
121
+ [:DATE, TjTime.new('1970-01-01'), 1],
122
+ [:DATE, TjTime.new('2035-12-31-23:59:59'), 2],
123
+ [:DATE, TjTime.new('2010-08-11-23:10'), 3],
124
+ [:eof, '<END>', 4]
125
+ ]
126
+
127
+ check(text, ref)
128
+ end
129
+
92
130
  def test_macroDef
93
131
  text = <<'EOT'
94
132
  [ foo ]
@@ -106,13 +144,13 @@ EOT
106
144
  EOT
107
145
 
108
146
  ref = [
109
- [ 'MACRO', ' foo ', 1 ],
110
- [ 'MACRO', "\n bar ", 2 ],
111
- [ 'MACRO', " foo\n ", 4 ],
112
- [ 'MACRO', "\n bar\n ", 6 ],
113
- [ 'MACRO', '', 9 ],
114
- [ 'MACRO', "\n ", 10 ],
115
- [ '.', '<END>', 13 ]
147
+ [ :MACRO, ' foo ', 1 ],
148
+ [ :MACRO, "\n bar ", 2 ],
149
+ [ :MACRO, " foo\n ", 4 ],
150
+ [ :MACRO, "\n bar\n ", 6 ],
151
+ [ :MACRO, '', 9 ],
152
+ [ :MACRO, "\n ", 10 ],
153
+ [ :eof, '<END>', 13 ]
116
154
  ]
117
155
 
118
156
  check(text, ref)
@@ -124,7 +162,7 @@ EOT
124
162
  [ 'foo', 'hello' ]
125
163
  ]
126
164
  ref = [
127
- [ 'ID', 'hello', 1 ]
165
+ [ :ID, 'hello', 1 ]
128
166
  ]
129
167
 
130
168
  check(text, ref, macros)
@@ -132,6 +170,10 @@ EOT
132
170
 
133
171
  private
134
172
 
173
+ def time(h, m)
174
+ (h * 60 + m) * 60
175
+ end
176
+
135
177
  def check(text, ref, macros = [])
136
178
  s = TaskJuggler::ProjectFileScanner.new(text, MessageHandler.new(true))
137
179
  s.open(true)
data/test/test_Query.rb CHANGED
@@ -23,8 +23,8 @@ class TestQuery < Test::Unit::TestCase
23
23
  def setup
24
24
  @mh = MessageHandler.new
25
25
  @p = TaskJuggler::Project.new('id', 'name', 'ver', @mh)
26
- @p['start'] = TjTime.new(1202491644)
27
- @p['end'] = TjTime.new(1202439409)
26
+ @p['start'] = TjTime.new('2010-09-25')
27
+ @p['end'] = TjTime.new('2010-09-25')
28
28
  end
29
29
 
30
30
  def teardown
@@ -53,7 +53,7 @@ class TestReportGenerator < Test::Unit::TestCase
53
53
  Dir.glob(path + 'TestSuite/ReportGenerator/Correct/*.tjp').each do |f|
54
54
  ENV['TZ'] = 'Europe/Berlin'
55
55
  tj = TaskJuggler.new(true)
56
- assert(tj.parse([ f ]), "Parser failed for ${f}")
56
+ assert(tj.parse([ f ]), "Parser failed for #{f}")
57
57
  assert(tj.schedule, "Scheduler failed for #{f}")
58
58
  assert(tj.generateReports(@tmpDir), "Report generator failed for #{f}")
59
59
  assert(tj.messageHandler.messages.empty?, "Unexpected error in #{f}")
@@ -47,10 +47,10 @@ class TestRichText < Test::Unit::TestCase
47
47
 
48
48
  assert_outputs(inp, tagged, str, html)
49
49
 
50
- assert_equal(true, newRichText(inp).empty?)
51
- assert_equal(true, newRichText("\n").empty?)
52
- assert_equal(true, newRichText("\n \n").empty?)
53
- assert_equal(false, newRichText("foo").empty?)
50
+ assert_equal(true, newRichText(inp).empty?, 'Empty string')
51
+ assert_equal(true, newRichText("\n").empty?, '\n')
52
+ assert_equal(true, newRichText("\n \n").empty?, '\n \n')
53
+ assert_equal(false, newRichText("foo").empty?, 'foo')
54
54
  end
55
55
 
56
56
  def test_one_word