roby 0.8.0 → 3.0.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 (644) hide show
  1. checksums.yaml +7 -0
  2. data/.deep-cover.rb +3 -0
  3. data/.gitattributes +1 -0
  4. data/.gitignore +24 -0
  5. data/.simplecov +10 -0
  6. data/.travis.yml +17 -0
  7. data/.yardopts +4 -0
  8. data/Gemfile +15 -0
  9. data/README.md +11 -0
  10. data/Rakefile +47 -177
  11. data/benchmark/{alloc_misc.rb → attic/alloc_misc.rb} +2 -2
  12. data/benchmark/{discovery_latency.rb → attic/discovery_latency.rb} +19 -19
  13. data/benchmark/{garbage_collection.rb → attic/garbage_collection.rb} +9 -9
  14. data/benchmark/{genom.rb → attic/genom.rb} +0 -0
  15. data/benchmark/attic/transactions.rb +62 -0
  16. data/benchmark/plan_basic_operations.rb +28 -0
  17. data/benchmark/relations/graph.rb +63 -0
  18. data/benchmark/ruby/identity.rb +18 -0
  19. data/benchmark/ruby/set_intersect_vs_hash_merge.rb +39 -0
  20. data/benchmark/ruby/yield_vs_block.rb +35 -0
  21. data/benchmark/run +5 -0
  22. data/benchmark/synthetic_plan_modifications_with_transactions.rb +79 -0
  23. data/benchmark/transactions.rb +99 -51
  24. data/bin/roby +38 -197
  25. data/bin/roby-display +14 -0
  26. data/bin/roby-log +3 -176
  27. data/doc/guide/{src → attic}/abstraction/achieve_with.page +1 -1
  28. data/doc/guide/{src → attic}/abstraction/forwarding.page +1 -1
  29. data/doc/guide/{src → attic}/abstraction/hierarchy.page +1 -1
  30. data/doc/guide/{src → attic}/abstraction/index.page +1 -1
  31. data/doc/guide/{src → attic}/abstraction/task_models.page +1 -1
  32. data/doc/guide/{overview.rdoc → attic/cycle/api_overview.rdoc} +6 -1
  33. data/doc/guide/{src → attic}/cycle/cycle-overview.png +0 -0
  34. data/doc/guide/{src → attic}/cycle/cycle-overview.svg +0 -0
  35. data/doc/guide/attic/cycle/error_handling.page +98 -0
  36. data/doc/guide/{src → attic}/cycle/error_instantaneous_repair.png +0 -0
  37. data/doc/guide/{src → attic}/cycle/error_instantaneous_repair.svg +0 -0
  38. data/doc/guide/{src/cycle/error_handling.page → attic/cycle/error_sources.page} +46 -89
  39. data/doc/guide/{src → attic}/cycle/garbage_collection.page +1 -1
  40. data/doc/guide/{src → attic}/cycle/index.page +1 -1
  41. data/doc/guide/{src → attic}/cycle/propagation.page +11 -1
  42. data/doc/guide/{src → attic}/cycle/propagation_diamond.png +0 -0
  43. data/doc/guide/{src → attic}/cycle/propagation_diamond.svg +0 -0
  44. data/doc/guide/attic/plans/building_plans.page +89 -0
  45. data/doc/guide/attic/plans/code.page +192 -0
  46. data/doc/guide/{src/basics → attic/plans}/events.page +3 -4
  47. data/doc/guide/attic/plans/index.page +7 -0
  48. data/doc/guide/{plan_modifications.rdoc → attic/plans/plan_modifications.rdoc} +5 -3
  49. data/doc/guide/{src/basics → attic/plans}/plan_objects.page +2 -1
  50. data/doc/guide/attic/plans/querying_plans.page +5 -0
  51. data/doc/guide/{src/basics → attic/plans}/tasks.page +20 -20
  52. data/doc/guide/config.yaml +7 -4
  53. data/doc/guide/ext/extended_menu.rb +29 -0
  54. data/doc/guide/ext/init.rb +6 -0
  55. data/doc/guide/ext/rdoc_links.rb +7 -6
  56. data/doc/guide/src/advanced_concepts/history.page +5 -0
  57. data/doc/guide/src/advanced_concepts/index.page +11 -0
  58. data/doc/guide/src/advanced_concepts/recognizing_patterns.page +83 -0
  59. data/doc/guide/src/advanced_concepts/scheduling.page +87 -0
  60. data/doc/guide/src/advanced_concepts/transactions.page +5 -0
  61. data/doc/guide/src/advanced_concepts/unreachability.page +42 -0
  62. data/doc/guide/src/base.template +96 -0
  63. data/doc/guide/src/basics_shell_header.txt +5 -7
  64. data/doc/guide/src/building/action_coordination.page +96 -0
  65. data/doc/guide/src/building/actions.page +124 -0
  66. data/doc/guide/src/building/file_layout.page +71 -0
  67. data/doc/guide/src/building/index.page +50 -0
  68. data/doc/guide/src/building/patterns.page +86 -0
  69. data/doc/guide/src/building/patterns_forwarding.png +0 -0
  70. data/doc/guide/src/building/patterns_forwarding.svg +277 -0
  71. data/doc/guide/src/building/runtime.page +95 -0
  72. data/doc/guide/src/building/task_models.page +94 -0
  73. data/doc/guide/src/building/tasks.page +284 -0
  74. data/doc/guide/src/concepts/error_handling.page +100 -0
  75. data/doc/guide/src/concepts/exception_propagation.png +0 -0
  76. data/doc/guide/src/concepts/exception_propagation.svg +445 -0
  77. data/doc/guide/src/concepts/execution.page +85 -0
  78. data/doc/guide/src/concepts/execution.png +0 -0
  79. data/doc/guide/src/concepts/execution.svg +573 -0
  80. data/doc/guide/src/concepts/execution_cycle.png +0 -0
  81. data/doc/guide/src/concepts/garbage_collection.page +57 -0
  82. data/doc/guide/src/concepts/index.page +27 -0
  83. data/doc/guide/src/concepts/plans.page +101 -0
  84. data/doc/guide/src/concepts/policy.page +31 -0
  85. data/doc/guide/src/concepts/reactor.page +61 -0
  86. data/doc/guide/src/concepts/simple_plan_example.png +0 -0
  87. data/doc/guide/src/concepts/simple_plan_example.svg +376 -0
  88. data/doc/guide/src/default.template +9 -74
  89. data/doc/guide/src/event_relations/forward.page +71 -0
  90. data/doc/guide/src/event_relations/index.page +12 -0
  91. data/doc/guide/src/event_relations/scheduling_constraints.page +43 -0
  92. data/doc/guide/src/event_relations/signal.page +55 -0
  93. data/doc/guide/src/event_relations/temporal_constraints.page +77 -0
  94. data/doc/guide/src/htmldoc.metainfo +21 -8
  95. data/doc/guide/src/index.page +8 -3
  96. data/doc/guide/src/{introduction/install.page → installation/index.page} +37 -25
  97. data/doc/guide/src/installation/publications.page +14 -0
  98. data/doc/guide/src/{introduction → installation}/videos.page +14 -7
  99. data/doc/guide/src/interacting/index.page +16 -0
  100. data/doc/guide/src/interacting/run.page +33 -0
  101. data/doc/guide/src/interacting/shell.page +95 -0
  102. data/doc/guide/src/plugins/creating_plugins.page +72 -0
  103. data/doc/guide/src/plugins/index.page +27 -5
  104. data/doc/guide/src/plugins/{fault_tolerance.page → standard_plugins/fault_tolerance.page} +2 -2
  105. data/doc/guide/src/plugins/standard_plugins/index.page +11 -0
  106. data/doc/guide/src/plugins/{subsystems.page → standard_plugins/subsystems.page} +2 -2
  107. data/doc/guide/src/style_screen.css +687 -0
  108. data/doc/guide/src/task_relations/dependency.page +107 -0
  109. data/doc/guide/src/task_relations/executed_by.page +77 -0
  110. data/doc/guide/src/task_relations/index.page +12 -0
  111. data/doc/guide/src/task_relations/new_relations.page +119 -0
  112. data/doc/guide/src/task_relations/planned_by.page +46 -0
  113. data/doc/guide/src/tutorial/app.page +117 -0
  114. data/doc/guide/src/{basics → tutorial}/code_examples.page +6 -5
  115. data/doc/guide/src/{basics → tutorial}/dry.page +15 -15
  116. data/doc/guide/src/{basics → tutorial}/errors.page +43 -68
  117. data/doc/guide/src/tutorial/events.page +195 -0
  118. data/doc/guide/src/{basics → tutorial}/hierarchy.page +53 -52
  119. data/doc/guide/src/tutorial/index.page +13 -0
  120. data/doc/guide/src/tutorial/log_replay/goForward_1.png +0 -0
  121. data/doc/guide/src/tutorial/log_replay/goForward_2.png +0 -0
  122. data/doc/guide/src/tutorial/log_replay/goForward_3.png +0 -0
  123. data/doc/guide/src/{basics → tutorial}/log_replay/goForward_4.png +0 -0
  124. data/doc/guide/src/tutorial/log_replay/goForward_5.png +0 -0
  125. data/doc/guide/src/{basics → tutorial}/log_replay/hierarchy_error_1.png +0 -0
  126. data/doc/guide/src/{basics → tutorial}/log_replay/hierarchy_error_2.png +0 -0
  127. data/doc/guide/src/{basics → tutorial}/log_replay/hierarchy_error_3.png +0 -0
  128. data/doc/guide/src/tutorial/log_replay/moveto_code_error.png +0 -0
  129. data/doc/guide/src/{basics → tutorial}/log_replay/plan_repair_1.png +0 -0
  130. data/doc/guide/src/{basics → tutorial}/log_replay/plan_repair_2.png +0 -0
  131. data/doc/guide/src/{basics → tutorial}/log_replay/plan_repair_3.png +0 -0
  132. data/doc/guide/src/tutorial/log_replay/plan_repair_4.png +0 -0
  133. data/doc/guide/src/tutorial/log_replay/roby_log_main_window.png +0 -0
  134. data/doc/guide/src/{basics → tutorial}/log_replay/roby_log_relation_window.png +0 -0
  135. data/doc/guide/src/{basics → tutorial}/log_replay/roby_replay_event_representation.png +0 -0
  136. data/doc/guide/src/tutorial/relations_display.page +153 -0
  137. data/doc/guide/src/{basics → tutorial}/roby_cycle_overview.png +0 -0
  138. data/doc/guide/src/tutorial/shell.page +121 -0
  139. data/doc/guide/src/{basics → tutorial}/summary.page +1 -1
  140. data/doc/guide/src/tutorial/tasks.page +374 -0
  141. data/lib/roby.rb +102 -47
  142. data/lib/roby/actions.rb +17 -0
  143. data/lib/roby/actions/action.rb +80 -0
  144. data/lib/roby/actions/interface.rb +45 -0
  145. data/lib/roby/actions/library.rb +23 -0
  146. data/lib/roby/actions/models/action.rb +224 -0
  147. data/lib/roby/actions/models/coordination_action.rb +58 -0
  148. data/lib/roby/actions/models/interface.rb +22 -0
  149. data/lib/roby/actions/models/interface_base.rb +294 -0
  150. data/lib/roby/actions/models/library.rb +12 -0
  151. data/lib/roby/actions/models/method_action.rb +90 -0
  152. data/lib/roby/actions/task.rb +114 -0
  153. data/lib/roby/and_generator.rb +125 -0
  154. data/lib/roby/app.rb +2795 -829
  155. data/lib/roby/app/autotest_console_reporter.rb +138 -0
  156. data/lib/roby/app/base.rb +21 -0
  157. data/lib/roby/app/cucumber.rb +2 -0
  158. data/lib/roby/app/cucumber/controller.rb +439 -0
  159. data/lib/roby/app/cucumber/helpers.rb +280 -0
  160. data/lib/roby/app/cucumber/world.rb +32 -0
  161. data/lib/roby/app/debug.rb +136 -0
  162. data/lib/roby/app/gen.rb +2 -0
  163. data/lib/roby/app/rake.rb +178 -38
  164. data/lib/roby/app/robot_config.rb +9 -0
  165. data/lib/roby/app/robot_names.rb +115 -0
  166. data/lib/roby/app/run.rb +3 -2
  167. data/lib/roby/app/scripts.rb +72 -0
  168. data/lib/roby/app/scripts/autotest.rb +173 -0
  169. data/lib/roby/app/scripts/display.rb +2 -0
  170. data/lib/roby/app/scripts/restart.rb +52 -0
  171. data/lib/roby/app/scripts/results.rb +17 -8
  172. data/lib/roby/app/scripts/run.rb +155 -24
  173. data/lib/roby/app/scripts/shell.rb +147 -62
  174. data/lib/roby/app/scripts/test.rb +107 -22
  175. data/lib/roby/app/test_reporter.rb +74 -0
  176. data/lib/roby/app/test_server.rb +159 -0
  177. data/lib/roby/app/vagrant.rb +47 -0
  178. data/lib/roby/backports.rb +16 -0
  179. data/lib/roby/cli/display.rb +190 -0
  180. data/lib/roby/cli/exceptions.rb +17 -0
  181. data/lib/roby/cli/gen/actions/class.rb +5 -0
  182. data/lib/roby/cli/gen/actions/test.rb +6 -0
  183. data/lib/roby/cli/gen/app/.yardopts +6 -0
  184. data/lib/roby/cli/gen/app/README.md +28 -0
  185. data/lib/roby/cli/gen/app/Rakefile +15 -0
  186. data/{app → lib/roby/cli/gen/app}/config/app.yml +29 -39
  187. data/lib/roby/cli/gen/app/models/.gitattributes +1 -0
  188. data/{app → lib/roby/cli/gen/app/scripts}/controllers/.gitattributes +0 -0
  189. data/{app/data/.gitattributes → lib/roby/cli/gen/app/test/.gitignore} +0 -0
  190. data/lib/roby/cli/gen/class/class.rb +6 -0
  191. data/lib/roby/cli/gen/class/test.rb +7 -0
  192. data/lib/roby/cli/gen/helpers.rb +203 -0
  193. data/lib/roby/cli/gen/module/module.rb +5 -0
  194. data/lib/roby/cli/gen/module/test.rb +6 -0
  195. data/lib/roby/cli/gen/roby_app/config/init.rb +17 -0
  196. data/lib/roby/cli/gen/roby_app/config/robots/robot.rb +40 -0
  197. data/lib/roby/cli/gen/task/class.rb +44 -0
  198. data/lib/roby/cli/gen/task/test.rb +6 -0
  199. data/lib/roby/cli/gen_main.rb +120 -0
  200. data/lib/roby/cli/log.rb +276 -0
  201. data/lib/roby/cli/log/flamegraph.html +499 -0
  202. data/lib/roby/cli/log/flamegraph_renderer.rb +88 -0
  203. data/lib/roby/cli/main.rb +153 -0
  204. data/lib/roby/coordination.rb +60 -0
  205. data/lib/roby/coordination/action_script.rb +25 -0
  206. data/lib/roby/coordination/action_state_machine.rb +125 -0
  207. data/lib/roby/coordination/actions.rb +106 -0
  208. data/lib/roby/coordination/base.rb +145 -0
  209. data/lib/roby/coordination/calculus.rb +40 -0
  210. data/lib/roby/coordination/child.rb +28 -0
  211. data/lib/roby/coordination/event.rb +29 -0
  212. data/lib/roby/coordination/fault_handler.rb +25 -0
  213. data/lib/roby/coordination/fault_handling_task.rb +13 -0
  214. data/lib/roby/coordination/fault_response_table.rb +110 -0
  215. data/lib/roby/coordination/models/action_script.rb +64 -0
  216. data/lib/roby/coordination/models/action_state_machine.rb +224 -0
  217. data/lib/roby/coordination/models/actions.rb +191 -0
  218. data/lib/roby/coordination/models/arguments.rb +55 -0
  219. data/lib/roby/coordination/models/base.rb +176 -0
  220. data/lib/roby/coordination/models/capture.rb +86 -0
  221. data/lib/roby/coordination/models/child.rb +35 -0
  222. data/lib/roby/coordination/models/event.rb +41 -0
  223. data/lib/roby/coordination/models/exceptions.rb +42 -0
  224. data/lib/roby/coordination/models/fault_handler.rb +219 -0
  225. data/lib/roby/coordination/models/fault_response_table.rb +77 -0
  226. data/lib/roby/coordination/models/root.rb +22 -0
  227. data/lib/roby/coordination/models/script.rb +283 -0
  228. data/lib/roby/coordination/models/task.rb +184 -0
  229. data/lib/roby/coordination/models/task_from_action.rb +50 -0
  230. data/lib/roby/coordination/models/task_from_as_plan.rb +33 -0
  231. data/lib/roby/coordination/models/task_from_instanciation_object.rb +31 -0
  232. data/lib/roby/coordination/models/task_from_variable.rb +27 -0
  233. data/lib/roby/coordination/models/task_with_dependencies.rb +48 -0
  234. data/lib/roby/coordination/models/variable.rb +32 -0
  235. data/lib/roby/coordination/script.rb +200 -0
  236. data/lib/roby/coordination/script_instruction.rb +12 -0
  237. data/lib/roby/coordination/task.rb +45 -0
  238. data/lib/roby/coordination/task_base.rb +69 -0
  239. data/lib/roby/coordination/task_script.rb +293 -0
  240. data/lib/roby/coordination/task_state_machine.rb +308 -0
  241. data/lib/roby/decision_control.rb +33 -21
  242. data/lib/roby/distributed_object.rb +76 -0
  243. data/lib/roby/droby.rb +17 -0
  244. data/lib/roby/droby/droby_id.rb +6 -0
  245. data/lib/roby/droby/enable.rb +153 -0
  246. data/lib/roby/droby/event_logger.rb +189 -0
  247. data/lib/roby/droby/event_logging.rb +57 -0
  248. data/lib/roby/droby/exceptions.rb +14 -0
  249. data/lib/roby/droby/identifiable.rb +22 -0
  250. data/lib/roby/droby/logfile.rb +141 -0
  251. data/lib/roby/droby/logfile/client.rb +176 -0
  252. data/lib/roby/droby/logfile/file_format.md +97 -0
  253. data/lib/roby/droby/logfile/index.rb +117 -0
  254. data/lib/roby/droby/logfile/reader.rb +139 -0
  255. data/lib/roby/droby/logfile/server.rb +199 -0
  256. data/lib/roby/droby/logfile/writer.rb +114 -0
  257. data/lib/roby/droby/marshal.rb +264 -0
  258. data/lib/roby/droby/marshallable.rb +12 -0
  259. data/lib/roby/droby/null_event_logger.rb +25 -0
  260. data/lib/roby/droby/object_manager.rb +205 -0
  261. data/lib/roby/droby/peer_id.rb +6 -0
  262. data/lib/roby/droby/plan_rebuilder.rb +373 -0
  263. data/lib/roby/droby/rebuilt_plan.rb +160 -0
  264. data/lib/roby/droby/remote_droby_id.rb +6 -0
  265. data/lib/roby/droby/timepoints.rb +205 -0
  266. data/lib/roby/droby/timepoints_ctf.metadata.erb +101 -0
  267. data/lib/roby/droby/timepoints_ctf.rb +125 -0
  268. data/lib/roby/droby/v5.rb +14 -0
  269. data/lib/roby/droby/v5/builtin.rb +120 -0
  270. data/lib/roby/droby/v5/droby_class.rb +45 -0
  271. data/lib/roby/droby/v5/droby_constant.rb +81 -0
  272. data/lib/roby/droby/v5/droby_dump.rb +1026 -0
  273. data/lib/roby/droby/v5/droby_id.rb +44 -0
  274. data/lib/roby/droby/v5/droby_model.rb +82 -0
  275. data/lib/roby/droby/v5/peer_id.rb +10 -0
  276. data/lib/roby/droby/v5/remote_droby_id.rb +42 -0
  277. data/lib/roby/event.rb +79 -957
  278. data/lib/roby/event_constraints.rb +835 -0
  279. data/lib/roby/event_generator.rb +1047 -0
  280. data/lib/roby/event_structure/causal_link.rb +6 -0
  281. data/lib/roby/event_structure/forwarding.rb +6 -0
  282. data/lib/roby/event_structure/precedence.rb +7 -0
  283. data/lib/roby/event_structure/signal.rb +8 -0
  284. data/lib/roby/event_structure/temporal_constraints.rb +640 -0
  285. data/lib/roby/exceptions.rb +446 -152
  286. data/lib/roby/executable_plan.rb +549 -0
  287. data/lib/roby/execution_engine.rb +1997 -950
  288. data/lib/roby/filter_generator.rb +26 -0
  289. data/lib/roby/gui/chronicle_view.rb +225 -0
  290. data/lib/roby/gui/chronicle_widget.rb +925 -0
  291. data/lib/roby/gui/dot_id.rb +11 -0
  292. data/lib/roby/gui/exception_view.rb +44 -0
  293. data/lib/roby/gui/log_display.rb +273 -0
  294. data/lib/roby/gui/model_views.rb +2 -0
  295. data/lib/roby/gui/model_views/action_interface.rb +53 -0
  296. data/lib/roby/gui/model_views/task.rb +47 -0
  297. data/lib/roby/gui/model_views/task.rhtml +41 -0
  298. data/lib/roby/gui/object_info_view.rb +89 -0
  299. data/lib/roby/gui/plan_dot_layout.rb +427 -0
  300. data/lib/roby/gui/plan_rebuilder_widget.rb +357 -0
  301. data/lib/roby/gui/qt4_toMSecsSinceEpoch.rb +8 -0
  302. data/lib/roby/gui/relations_view.rb +278 -0
  303. data/lib/roby/gui/relations_view/relations.ui +139 -0
  304. data/lib/roby/gui/relations_view/relations_canvas.rb +1088 -0
  305. data/lib/roby/gui/relations_view/relations_config.rb +292 -0
  306. data/lib/roby/gui/relations_view/relations_view.ui +53 -0
  307. data/lib/roby/gui/scheduler_view.css +24 -0
  308. data/lib/roby/gui/scheduler_view.rb +46 -0
  309. data/lib/roby/gui/scheduler_view.rhtml +53 -0
  310. data/lib/roby/gui/stepping.rb +93 -0
  311. data/lib/roby/gui/stepping.ui +181 -0
  312. data/lib/roby/gui/styles.rb +81 -0
  313. data/lib/roby/gui/task_display_configuration.rb +42 -0
  314. data/lib/roby/gui/task_state_at.rb +38 -0
  315. data/lib/roby/hooks.rb +26 -0
  316. data/lib/roby/interface.rb +136 -469
  317. data/lib/roby/interface/async.rb +20 -0
  318. data/lib/roby/interface/async/action_monitor.rb +188 -0
  319. data/lib/roby/interface/async/interface.rb +498 -0
  320. data/lib/roby/interface/async/job_monitor.rb +213 -0
  321. data/lib/roby/interface/async/log.rb +238 -0
  322. data/lib/roby/interface/async/new_job_listener.rb +79 -0
  323. data/lib/roby/interface/async/ui_connector.rb +183 -0
  324. data/lib/roby/interface/client.rb +553 -0
  325. data/lib/roby/interface/command.rb +24 -0
  326. data/lib/roby/interface/command_argument.rb +16 -0
  327. data/lib/roby/interface/command_library.rb +92 -0
  328. data/lib/roby/interface/droby_channel.rb +174 -0
  329. data/lib/roby/interface/exceptions.rb +22 -0
  330. data/lib/roby/interface/interface.rb +655 -0
  331. data/lib/roby/interface/job.rb +47 -0
  332. data/lib/roby/interface/rest.rb +10 -0
  333. data/lib/roby/interface/rest/api.rb +29 -0
  334. data/lib/roby/interface/rest/helpers.rb +24 -0
  335. data/lib/roby/interface/rest/server.rb +212 -0
  336. data/lib/roby/interface/server.rb +154 -0
  337. data/lib/roby/interface/shell_client.rb +468 -0
  338. data/lib/roby/interface/shell_subcommand.rb +24 -0
  339. data/lib/roby/interface/subcommand_client.rb +35 -0
  340. data/lib/roby/interface/tcp.rb +168 -0
  341. data/lib/roby/models/arguments.rb +112 -0
  342. data/lib/roby/models/plan_object.rb +83 -0
  343. data/lib/roby/models/task.rb +835 -0
  344. data/lib/roby/models/task_event.rb +62 -0
  345. data/lib/roby/models/task_service.rb +78 -0
  346. data/lib/roby/or_generator.rb +88 -0
  347. data/lib/roby/plan.rb +1751 -864
  348. data/lib/roby/plan_object.rb +611 -0
  349. data/lib/roby/plan_service.rb +200 -0
  350. data/lib/roby/promise.rb +332 -0
  351. data/lib/roby/queries.rb +23 -0
  352. data/lib/roby/queries/and_matcher.rb +32 -0
  353. data/lib/roby/queries/any.rb +27 -0
  354. data/lib/roby/queries/code_error_matcher.rb +58 -0
  355. data/lib/roby/queries/event_generator_matcher.rb +9 -0
  356. data/lib/roby/queries/execution_exception_matcher.rb +165 -0
  357. data/lib/roby/queries/index.rb +165 -0
  358. data/lib/roby/queries/localized_error_matcher.rb +149 -0
  359. data/lib/roby/queries/matcher_base.rb +107 -0
  360. data/lib/roby/queries/none.rb +27 -0
  361. data/lib/roby/queries/not_matcher.rb +30 -0
  362. data/lib/roby/queries/op_matcher.rb +8 -0
  363. data/lib/roby/queries/or_matcher.rb +30 -0
  364. data/lib/roby/queries/plan_object_matcher.rb +363 -0
  365. data/lib/roby/queries/query.rb +188 -0
  366. data/lib/roby/queries/task_event_generator_matcher.rb +86 -0
  367. data/lib/roby/queries/task_matcher.rb +344 -0
  368. data/lib/roby/relations.rb +42 -678
  369. data/lib/roby/relations/bidirectional_directed_adjacency_graph.rb +492 -0
  370. data/lib/roby/relations/directed_relation_support.rb +268 -0
  371. data/lib/roby/relations/event_relation_graph.rb +19 -0
  372. data/lib/roby/relations/fork_merge_visitor.rb +154 -0
  373. data/lib/roby/relations/graph.rb +533 -0
  374. data/lib/roby/relations/models/directed_relation_support.rb +11 -0
  375. data/lib/roby/relations/models/graph.rb +75 -0
  376. data/lib/roby/relations/models/task_relation_graph.rb +18 -0
  377. data/lib/roby/relations/space.rb +380 -0
  378. data/lib/roby/relations/task_relation_graph.rb +20 -0
  379. data/lib/roby/robot.rb +85 -38
  380. data/lib/roby/schedulers/basic.rb +155 -25
  381. data/lib/roby/schedulers/null.rb +20 -0
  382. data/lib/roby/schedulers/reporting.rb +31 -0
  383. data/lib/roby/schedulers/state.rb +129 -0
  384. data/lib/roby/schedulers/temporal.rb +91 -0
  385. data/lib/roby/singletons.rb +87 -0
  386. data/lib/roby/standalone.rb +4 -2
  387. data/lib/roby/standard_errors.rb +405 -82
  388. data/lib/roby/state.rb +6 -3
  389. data/lib/roby/state/conf_model.rb +5 -0
  390. data/lib/roby/state/events.rb +181 -95
  391. data/lib/roby/state/goal_model.rb +77 -0
  392. data/lib/roby/state/open_struct.rb +591 -0
  393. data/lib/roby/state/open_struct_model.rb +68 -0
  394. data/lib/roby/state/pos.rb +45 -45
  395. data/lib/roby/state/shapes.rb +11 -11
  396. data/lib/roby/state/state_model.rb +303 -0
  397. data/lib/roby/state/task.rb +43 -0
  398. data/lib/roby/support.rb +88 -148
  399. data/lib/roby/task.rb +1361 -1750
  400. data/lib/roby/task_arguments.rb +428 -0
  401. data/lib/roby/task_event.rb +127 -0
  402. data/lib/roby/task_event_generator.rb +337 -0
  403. data/lib/roby/task_service.rb +6 -0
  404. data/lib/roby/task_structure/conflicts.rb +104 -0
  405. data/lib/roby/task_structure/dependency.rb +932 -0
  406. data/lib/roby/task_structure/error_handling.rb +118 -0
  407. data/lib/roby/task_structure/executed_by.rb +234 -0
  408. data/lib/roby/task_structure/planned_by.rb +90 -0
  409. data/lib/roby/tasks/aggregator.rb +37 -0
  410. data/lib/roby/tasks/external_process.rb +275 -0
  411. data/lib/roby/tasks/group.rb +27 -0
  412. data/lib/roby/tasks/null.rb +19 -0
  413. data/lib/roby/tasks/parallel.rb +43 -0
  414. data/lib/roby/tasks/sequence.rb +88 -0
  415. data/lib/roby/tasks/simple.rb +21 -0
  416. data/lib/roby/{thread_task.rb → tasks/thread.rb} +50 -24
  417. data/lib/roby/tasks/timeout.rb +17 -0
  418. data/lib/roby/tasks/virtual.rb +55 -0
  419. data/lib/roby/template_plan.rb +7 -0
  420. data/lib/roby/test/aruba_minitest.rb +74 -0
  421. data/lib/roby/test/assertion.rb +16 -0
  422. data/lib/roby/test/assertions.rb +490 -0
  423. data/lib/roby/test/common.rb +368 -591
  424. data/lib/roby/test/dsl.rb +149 -0
  425. data/lib/roby/test/error.rb +18 -0
  426. data/lib/roby/test/event_reporter.rb +83 -0
  427. data/lib/roby/test/execution_expectations.rb +1134 -0
  428. data/lib/roby/test/expect_execution.rb +151 -0
  429. data/lib/roby/test/minitest_helpers.rb +166 -0
  430. data/lib/roby/test/roby_app_helpers.rb +200 -0
  431. data/lib/roby/test/run_planners.rb +155 -0
  432. data/lib/roby/test/self.rb +112 -0
  433. data/lib/roby/test/spec.rb +198 -0
  434. data/lib/roby/test/tasks/empty_task.rb +4 -4
  435. data/lib/roby/test/tasks/goto.rb +28 -27
  436. data/lib/roby/test/teardown_plans.rb +100 -0
  437. data/lib/roby/test/testcase.rb +239 -307
  438. data/lib/roby/test/tools.rb +159 -155
  439. data/lib/roby/test/validate_state_machine.rb +75 -0
  440. data/lib/roby/transaction.rb +1125 -0
  441. data/lib/roby/transaction/event_generator_proxy.rb +63 -0
  442. data/lib/roby/transaction/plan_object_proxy.rb +99 -0
  443. data/lib/roby/transaction/plan_service_proxy.rb +43 -0
  444. data/lib/roby/transaction/proxying.rb +120 -0
  445. data/lib/roby/transaction/task_event_generator_proxy.rb +19 -0
  446. data/lib/roby/transaction/task_proxy.rb +135 -0
  447. data/lib/roby/until_generator.rb +30 -0
  448. data/lib/roby/version.rb +5 -0
  449. data/lib/roby/yard.rb +169 -0
  450. data/lib/yard-roby.rb +1 -0
  451. data/manifest.xml +32 -6
  452. data/roby.gemspec +59 -0
  453. metadata +788 -587
  454. data/Manifest.txt +0 -321
  455. data/NOTES +0 -4
  456. data/README.txt +0 -166
  457. data/TODO.txt +0 -146
  458. data/app/README.txt +0 -24
  459. data/app/Rakefile +0 -8
  460. data/app/config/ROBOT.rb +0 -5
  461. data/app/config/init.rb +0 -33
  462. data/app/config/roby.yml +0 -3
  463. data/app/controllers/ROBOT.rb +0 -2
  464. data/app/planners/ROBOT/main.rb +0 -6
  465. data/app/planners/main.rb +0 -5
  466. data/app/scripts/distributed +0 -3
  467. data/app/scripts/generate/bookmarks +0 -3
  468. data/app/scripts/replay +0 -3
  469. data/app/scripts/results +0 -3
  470. data/app/scripts/run +0 -3
  471. data/app/scripts/server +0 -3
  472. data/app/scripts/shell +0 -3
  473. data/app/scripts/test +0 -3
  474. data/app/tasks/.gitattributes +0 -0
  475. data/app/tasks/ROBOT/.gitattributes +0 -0
  476. data/bin/roby-shell +0 -25
  477. data/doc/guide/src/basics/app.page +0 -139
  478. data/doc/guide/src/basics/index.page +0 -11
  479. data/doc/guide/src/basics/log_replay/goForward_1.png +0 -0
  480. data/doc/guide/src/basics/log_replay/goForward_2.png +0 -0
  481. data/doc/guide/src/basics/log_replay/goForward_3.png +0 -0
  482. data/doc/guide/src/basics/log_replay/goForward_5.png +0 -0
  483. data/doc/guide/src/basics/log_replay/plan_repair_4.png +0 -0
  484. data/doc/guide/src/basics/log_replay/roby_log_main_window.png +0 -0
  485. data/doc/guide/src/basics/relations_display.page +0 -203
  486. data/doc/guide/src/basics/shell.page +0 -102
  487. data/doc/guide/src/default.css +0 -319
  488. data/doc/guide/src/introduction/index.page +0 -29
  489. data/doc/guide/src/introduction/publications.page +0 -14
  490. data/doc/guide/src/relations/dependency.page +0 -89
  491. data/doc/guide/src/relations/index.page +0 -12
  492. data/ext/droby/dump.cc +0 -175
  493. data/ext/droby/extconf.rb +0 -3
  494. data/ext/graph/algorithm.cc +0 -746
  495. data/ext/graph/extconf.rb +0 -7
  496. data/ext/graph/graph.cc +0 -575
  497. data/ext/graph/graph.hh +0 -183
  498. data/ext/graph/iterator_sequence.hh +0 -102
  499. data/ext/graph/undirected_dfs.hh +0 -226
  500. data/ext/graph/undirected_graph.hh +0 -421
  501. data/lib/roby/app/scripts/generate/bookmarks.rb +0 -162
  502. data/lib/roby/app/scripts/replay.rb +0 -31
  503. data/lib/roby/app/scripts/server.rb +0 -18
  504. data/lib/roby/basic_object.rb +0 -151
  505. data/lib/roby/config.rb +0 -14
  506. data/lib/roby/distributed.rb +0 -36
  507. data/lib/roby/distributed/base.rb +0 -448
  508. data/lib/roby/distributed/communication.rb +0 -875
  509. data/lib/roby/distributed/connection_space.rb +0 -616
  510. data/lib/roby/distributed/distributed_object.rb +0 -206
  511. data/lib/roby/distributed/drb.rb +0 -62
  512. data/lib/roby/distributed/notifications.rb +0 -531
  513. data/lib/roby/distributed/peer.rb +0 -555
  514. data/lib/roby/distributed/protocol.rb +0 -529
  515. data/lib/roby/distributed/proxy.rb +0 -343
  516. data/lib/roby/distributed/subscription.rb +0 -311
  517. data/lib/roby/distributed/transaction.rb +0 -498
  518. data/lib/roby/external_process_task.rb +0 -225
  519. data/lib/roby/graph.rb +0 -160
  520. data/lib/roby/log.rb +0 -3
  521. data/lib/roby/log/chronicle.rb +0 -303
  522. data/lib/roby/log/console.rb +0 -74
  523. data/lib/roby/log/data_stream.rb +0 -275
  524. data/lib/roby/log/dot.rb +0 -279
  525. data/lib/roby/log/event_stream.rb +0 -161
  526. data/lib/roby/log/file.rb +0 -396
  527. data/lib/roby/log/gui/basic_display.ui +0 -83
  528. data/lib/roby/log/gui/basic_display_ui.rb +0 -89
  529. data/lib/roby/log/gui/chronicle.rb +0 -26
  530. data/lib/roby/log/gui/chronicle_view.rb +0 -40
  531. data/lib/roby/log/gui/chronicle_view.ui +0 -70
  532. data/lib/roby/log/gui/chronicle_view_ui.rb +0 -90
  533. data/lib/roby/log/gui/data_displays.rb +0 -171
  534. data/lib/roby/log/gui/data_displays.ui +0 -155
  535. data/lib/roby/log/gui/data_displays_ui.rb +0 -146
  536. data/lib/roby/log/gui/notifications.rb +0 -26
  537. data/lib/roby/log/gui/relations.rb +0 -269
  538. data/lib/roby/log/gui/relations.ui +0 -123
  539. data/lib/roby/log/gui/relations_ui.rb +0 -120
  540. data/lib/roby/log/gui/relations_view.rb +0 -185
  541. data/lib/roby/log/gui/relations_view.ui +0 -149
  542. data/lib/roby/log/gui/relations_view_ui.rb +0 -144
  543. data/lib/roby/log/gui/replay.rb +0 -366
  544. data/lib/roby/log/gui/replay_controls.rb +0 -206
  545. data/lib/roby/log/gui/replay_controls.ui +0 -282
  546. data/lib/roby/log/gui/replay_controls_ui.rb +0 -249
  547. data/lib/roby/log/gui/runtime.rb +0 -130
  548. data/lib/roby/log/hooks.rb +0 -186
  549. data/lib/roby/log/logger.rb +0 -203
  550. data/lib/roby/log/notifications.rb +0 -244
  551. data/lib/roby/log/plan_rebuilder.rb +0 -468
  552. data/lib/roby/log/relations.rb +0 -1084
  553. data/lib/roby/log/server.rb +0 -547
  554. data/lib/roby/log/sqlite.rb +0 -47
  555. data/lib/roby/log/timings.rb +0 -233
  556. data/lib/roby/plan-object.rb +0 -371
  557. data/lib/roby/planning.rb +0 -13
  558. data/lib/roby/planning/loops.rb +0 -309
  559. data/lib/roby/planning/model.rb +0 -1012
  560. data/lib/roby/planning/task.rb +0 -180
  561. data/lib/roby/query.rb +0 -655
  562. data/lib/roby/relations/conflicts.rb +0 -67
  563. data/lib/roby/relations/dependency.rb +0 -358
  564. data/lib/roby/relations/ensured.rb +0 -19
  565. data/lib/roby/relations/error_handling.rb +0 -22
  566. data/lib/roby/relations/events.rb +0 -7
  567. data/lib/roby/relations/executed_by.rb +0 -208
  568. data/lib/roby/relations/influence.rb +0 -10
  569. data/lib/roby/relations/planned_by.rb +0 -63
  570. data/lib/roby/state/information.rb +0 -55
  571. data/lib/roby/state/state.rb +0 -367
  572. data/lib/roby/task-operations.rb +0 -186
  573. data/lib/roby/task_index.rb +0 -80
  574. data/lib/roby/test/distributed.rb +0 -230
  575. data/lib/roby/test/tasks/simple_task.rb +0 -23
  576. data/lib/roby/transactions.rb +0 -507
  577. data/lib/roby/transactions/proxy.rb +0 -325
  578. data/plugins/fault_injection/History.txt +0 -4
  579. data/plugins/fault_injection/README.txt +0 -34
  580. data/plugins/fault_injection/Rakefile +0 -12
  581. data/plugins/fault_injection/TODO.txt +0 -0
  582. data/plugins/fault_injection/app.rb +0 -52
  583. data/plugins/fault_injection/fault_injection.rb +0 -89
  584. data/plugins/fault_injection/test/test_fault_injection.rb +0 -78
  585. data/plugins/subsystems/README.txt +0 -37
  586. data/plugins/subsystems/Rakefile +0 -13
  587. data/plugins/subsystems/app.rb +0 -182
  588. data/plugins/subsystems/test/app/README +0 -24
  589. data/plugins/subsystems/test/app/Rakefile +0 -8
  590. data/plugins/subsystems/test/app/config/app.yml +0 -71
  591. data/plugins/subsystems/test/app/config/init.rb +0 -12
  592. data/plugins/subsystems/test/app/config/roby.yml +0 -3
  593. data/plugins/subsystems/test/app/planners/main.rb +0 -20
  594. data/plugins/subsystems/test/app/scripts/distributed +0 -3
  595. data/plugins/subsystems/test/app/scripts/replay +0 -3
  596. data/plugins/subsystems/test/app/scripts/results +0 -3
  597. data/plugins/subsystems/test/app/scripts/run +0 -3
  598. data/plugins/subsystems/test/app/scripts/server +0 -3
  599. data/plugins/subsystems/test/app/scripts/shell +0 -3
  600. data/plugins/subsystems/test/app/scripts/test +0 -3
  601. data/plugins/subsystems/test/app/tasks/services.rb +0 -15
  602. data/plugins/subsystems/test/test_subsystems.rb +0 -78
  603. data/test/distributed/test_communication.rb +0 -195
  604. data/test/distributed/test_connection.rb +0 -284
  605. data/test/distributed/test_execution.rb +0 -378
  606. data/test/distributed/test_mixed_plan.rb +0 -341
  607. data/test/distributed/test_plan_notifications.rb +0 -238
  608. data/test/distributed/test_protocol.rb +0 -525
  609. data/test/distributed/test_query.rb +0 -106
  610. data/test/distributed/test_remote_plan.rb +0 -491
  611. data/test/distributed/test_transaction.rb +0 -466
  612. data/test/mockups/external_process +0 -28
  613. data/test/mockups/tasks.rb +0 -27
  614. data/test/planning/test_loops.rb +0 -432
  615. data/test/planning/test_model.rb +0 -427
  616. data/test/planning/test_task.rb +0 -126
  617. data/test/relations/test_conflicts.rb +0 -42
  618. data/test/relations/test_dependency.rb +0 -324
  619. data/test/relations/test_ensured.rb +0 -38
  620. data/test/relations/test_executed_by.rb +0 -224
  621. data/test/relations/test_planned_by.rb +0 -56
  622. data/test/suite_core.rb +0 -29
  623. data/test/suite_distributed.rb +0 -10
  624. data/test/suite_planning.rb +0 -4
  625. data/test/suite_relations.rb +0 -8
  626. data/test/tasks/test_external_process.rb +0 -126
  627. data/test/tasks/test_thread_task.rb +0 -70
  628. data/test/test_bgl.rb +0 -528
  629. data/test/test_event.rb +0 -969
  630. data/test/test_exceptions.rb +0 -591
  631. data/test/test_execution_engine.rb +0 -987
  632. data/test/test_gui.rb +0 -20
  633. data/test/test_interface.rb +0 -43
  634. data/test/test_log.rb +0 -125
  635. data/test/test_log_server.rb +0 -133
  636. data/test/test_plan.rb +0 -418
  637. data/test/test_query.rb +0 -424
  638. data/test/test_relations.rb +0 -260
  639. data/test/test_state.rb +0 -432
  640. data/test/test_support.rb +0 -16
  641. data/test/test_task.rb +0 -1181
  642. data/test/test_testcase.rb +0 -138
  643. data/test/test_transactions.rb +0 -610
  644. data/test/test_transactions_proxy.rb +0 -216
@@ -1,138 +0,0 @@
1
- $LOAD_PATH.unshift File.expand_path(File.join('..', 'lib'), File.dirname(__FILE__))
2
- require 'roby/test/common'
3
- require 'roby/test/testcase'
4
- require 'roby/test/tasks/simple_task'
5
- require 'flexmock'
6
-
7
- class TC_Test_TestCase < Test::Unit::TestCase
8
- include Roby::Test
9
- include Roby::Test::Assertions
10
-
11
- def setup
12
- Roby.app.setup_global_singletons
13
-
14
- Roby.engine.at_cycle_end(&Test.method(:check_event_assertions))
15
- Roby.engine.finalizers << Test.method(:finalize_event_assertions)
16
- @plan = Roby.plan
17
- @control = Roby.control
18
- @engine = Roby.engine
19
- super
20
- end
21
- def teardown
22
- Roby.engine.at_cycle_end_handlers.delete(Test.method(:check_event_assertions))
23
- Roby.engine.finalizers.delete(Test.method(:finalize_event_assertions))
24
- super
25
- end
26
-
27
- def test_assert_any_event
28
- plan.add(t = SimpleTask.new)
29
- t.start!
30
- assert_nothing_raised do
31
- assert_any_event(t.event(:start))
32
- end
33
-
34
- t.success!
35
- assert_nothing_raised do
36
- assert_any_event(t.event(:start))
37
- assert_any_event([t.event(:success)], [t.event(:stop)])
38
- end
39
-
40
- plan.add(t = SimpleTask.new)
41
- t.start!
42
- t.failed!
43
- assert_raises(Test::Unit::AssertionFailedError) do
44
- assert_any_event([t.event(:success)], [t.event(:stop)])
45
- end
46
-
47
- Roby.logger.level = Logger::FATAL
48
- Robot.logger.level = Logger::FATAL
49
- engine.run
50
- plan.add_permanent(t = SimpleTask.new)
51
- assert_any_event(t.event(:success)) do
52
- t.start!
53
- t.success!
54
- end
55
-
56
- plan.add_permanent(t = SimpleTask.new)
57
- assert_raises(Test::Unit::AssertionFailedError) do
58
- assert_any_event(t.event(:success)) do
59
- t.start!
60
- t.failed!
61
- end
62
- end
63
-
64
- ## Same test, but check that the assertion succeeds since we *are*
65
- ## checking that +failed+ happens
66
- plan.add_permanent(t = SimpleTask.new)
67
- assert_nothing_raised do
68
- assert_any_event(t.event(:failed)) do
69
- t.start!
70
- t.failed!
71
- end
72
- end
73
- end
74
-
75
- def test_assert_succeeds
76
- engine.run
77
-
78
- task = Class.new(SimpleTask) do
79
- forward :start => :success
80
- end.new
81
- assert_nothing_raised do
82
- assert_succeeds(task)
83
- end
84
-
85
- task = Class.new(SimpleTask) do
86
- forward :start => :failed
87
- end.new
88
- assert_raises(Test::Unit::AssertionFailedError) do
89
- assert_succeeds(task)
90
- end
91
- end
92
-
93
- def test_sampling
94
- engine.run
95
-
96
- i = 0
97
- # Sampling of 1s, every 100ms (== 1 cycle)
98
- samples = Roby::Test.sampling(1, 0.1, :time_test, :index, :dummy) do
99
- i += 1
100
- [engine.cycle_start, i + rand / 10 - 0.05, rand / 10 + 0.95]
101
- end
102
- cur_size = samples.size
103
-
104
- # Check the result
105
- samples.each { |a| assert_equal(a.time_test, a.t) }
106
- samples.each_with_index do |a, i|
107
- next if i == 0
108
- assert(a.dt)
109
- assert_in_delta(0.1, a.dt, 0.01)
110
- end
111
- samples.each_with_index do |a, b|
112
- assert_in_delta(b + 1, a.index, 0.05)
113
- end
114
-
115
- # Check that the handler has been removed
116
- assert_equal(cur_size, samples.size)
117
-
118
- samples
119
- end
120
-
121
- def test_stats
122
- samples = test_sampling
123
- stats = Roby::Test.stats(samples, :dummy => :absolute)
124
- assert_in_delta(1, stats.index.mean, 0.05)
125
- assert_in_delta(0.025, stats.index.stddev, 0.1)
126
- assert_in_delta(1, stats.dummy.mean, 0.05)
127
- assert_in_delta(0.025, stats.dummy.stddev, 0.1)
128
- assert_in_delta(0.1, stats.dt.mean, 0.001, stats.dt)
129
- assert_in_delta(0, stats.dt.stddev, 0.001)
130
-
131
- stats = Roby::Test.stats(samples, :index => :rate, :dummy => :absolute_rate)
132
- assert_in_delta(10, stats.index.mean, 1)
133
- assert_in_delta(0.25, stats.index.stddev, 0.5)
134
- assert_in_delta(10, stats.dummy.mean, 1)
135
- assert_in_delta(0.25, stats.dummy.stddev, 0.5)
136
- end
137
- end
138
-
@@ -1,610 +0,0 @@
1
- $LOAD_PATH.unshift File.expand_path('.', File.dirname(__FILE__))
2
- $LOAD_PATH.unshift File.expand_path(File.join('..', 'lib'), File.dirname(__FILE__))
3
- require 'roby/test/common'
4
- require 'roby/test/tasks/simple_task'
5
- require 'flexmock'
6
-
7
- require 'test_plan'
8
-
9
- # Check that a transaction behaves like a plan
10
- class TC_TransactionAsPlan < Test::Unit::TestCase
11
- include TC_PlanStatic
12
- include Roby::Test
13
-
14
- attr_reader :real_plan
15
- attr_reader :plan
16
- def engine; (real_plan || plan).engine end
17
- def setup
18
- super
19
- @real_plan = @plan
20
- @plan = Transaction.new(real_plan)
21
- end
22
- def teardown
23
- @plan.discard_transaction
24
- real_plan.clear
25
- super
26
- end
27
- end
28
-
29
- module TC_TransactionBehaviour
30
- include Roby::Transactions
31
-
32
- Hierarchy = Roby::TaskStructure::Hierarchy
33
- PlannedBy = Roby::TaskStructure::PlannedBy
34
- Signal = Roby::EventStructure::Signal
35
- Forwarding = Roby::EventStructure::Forwarding
36
-
37
- SimpleTask = Roby::Test::SimpleTask
38
-
39
- def test_proxy_creation
40
- plan.add(t = SimpleTask.new)
41
- transaction_commit(plan) do |trsc|
42
- assert !trsc[t, false]
43
- assert trsc.known_tasks.empty?
44
-
45
- assert(proxy = trsc[t, true])
46
- assert(trsc.include?(proxy))
47
- assert_same(proxy, trsc[t, false])
48
- end
49
- end
50
-
51
- def test_remove_object
52
- plan.add(t = SimpleTask.new)
53
- transaction_commit(plan, t) do |trsc, p|
54
- trsc.remove_object(p)
55
- assert_same(nil, trsc[t, false])
56
- assert(!trsc.include?(p))
57
- end
58
-
59
- t1, t2, t3 = prepare_plan :missions => 1, :add => 1, :tasks => 1
60
- t1.depends_on t2
61
- transaction_commit(plan, t1, t2) do |trsc, p1, p2|
62
- p1.depends_on(t3)
63
- trsc.remove_object(p1)
64
- end
65
- assert(plan.include?(t1))
66
- assert_equal([t2], t1.children.to_a)
67
-
68
- t3 = SimpleTask.new
69
- transaction_commit(plan, t1, t2) do |trsc, p1, p2|
70
- p1.depends_on t3
71
- p1.remove_child p2
72
- trsc.remove_object(p1)
73
- end
74
- assert(plan.include?(t1))
75
- assert_equal([t2], t1.children.to_a)
76
- end
77
-
78
- def test_add_tasks_from_plan
79
- plan.add(t = SimpleTask.new)
80
- transaction_commit(plan) do |trsc|
81
- assert_raises(Roby::ModelViolation) { trsc.add(t) }
82
- end
83
- end
84
-
85
- def test_object_transaction_stack
86
- plan.add(t = SimpleTask.new)
87
- transaction_commit(plan, t) do |trsc1, p1|
88
- assert_equal([trsc1, plan], p1.transaction_stack)
89
- transaction_commit(trsc1, p1) do |trsc2, p2|
90
- assert_equal([trsc2, trsc1, plan], p2.transaction_stack)
91
- end
92
- end
93
- end
94
-
95
- def test_merged_relations
96
- t1, t2, t3 = prepare_plan :add => 3
97
- t1.depends_on t2
98
- t2.depends_on t3
99
-
100
- transaction_commit(plan, t2) do |trsc, p2|
101
- assert_equal [t1], p2.merged_relations(:each_parent_task, true).map(&:__getobj__)
102
- assert_equal [t3], p2.merged_relations(:each_child, true).map(&:__getobj__)
103
- end
104
-
105
- transaction_commit(plan, t2) do |trsc, p2|
106
- assert_equal [[t2, t1]], p2.merged_relations(:each_parent_task, false).to_a
107
- assert_equal [[t2, t3]], p2.merged_relations(:each_child, false).to_a
108
- assert !trsc[t1, false]
109
- assert !trsc[t3, false]
110
- end
111
- end
112
-
113
- def transaction_op(plan, op, *needed_proxies)
114
- trsc = Roby::Transaction.new(plan)
115
- proxies = needed_proxies.map do |o|
116
- plan.add(o) unless o.plan
117
-
118
- p = trsc[o]
119
- assert_not_equal(p, o)
120
- p
121
- end
122
- yield(trsc, *proxies)
123
-
124
- # Check that no task in trsc are in plan, and that no task of plan are in trsc
125
- assert( (trsc.known_tasks & plan.known_tasks).empty?, (trsc.known_tasks & plan.known_tasks))
126
-
127
- plan = trsc.plan
128
- trsc.send(op)
129
- assert(!trsc.plan)
130
- assert(plan.transactions.empty?)
131
-
132
- # Check that there is no proxy left in the graph
133
- [[Roby::TaskStructure, Roby::Task], [Roby::EventStructure, Roby::EventGenerator]].each do |structure, klass|
134
- structure.each_relation do |rel|
135
- rel.each_vertex do |v|
136
- assert_kind_of(klass, v)
137
- end
138
- end
139
- end
140
- plan.known_tasks.each do |t|
141
- assert_kind_of(Roby::Task, t, t.class.ancestors.inspect)
142
- end
143
-
144
- rescue
145
- trsc.discard_transaction rescue nil
146
- raise
147
- end
148
-
149
- def transaction_commit(plan, *needed_proxies, &block)
150
- transaction_op(plan, :commit_transaction, *needed_proxies, &block)
151
- end
152
- def transaction_discard(plan, *needed_proxies, &block)
153
- transaction_op(plan, :discard_transaction, *needed_proxies, &block)
154
- end
155
-
156
- # Checks that model-level task relations are kept if a task is modified by a transaction
157
- def test_commit_task
158
- t = prepare_plan :tasks => 1
159
- transaction_commit(plan, t) do |trsc, p|
160
- trsc.add(p)
161
- assert(p.event(:start).child_object?(p.event(:updated_data), Roby::EventStructure::Precedence))
162
- assert(p.event(:failed).child_object?(p.event(:stop), Roby::EventStructure::Forwarding))
163
- end
164
- assert(t.event(:start).child_object?(t.event(:updated_data), Roby::EventStructure::Precedence))
165
- assert(t.event(:failed).child_object?(t.event(:stop), Roby::EventStructure::Forwarding))
166
-
167
- t = prepare_plan :add => 1
168
- transaction_commit(plan, t) do |trsc, p|
169
- trsc.add_mission(p)
170
- end
171
- assert(t.event(:start).child_object?(t.event(:updated_data), Roby::EventStructure::Precedence))
172
- assert(t.event(:failed).child_object?(t.event(:stop), Roby::EventStructure::Forwarding))
173
- end
174
-
175
- def test_commit_arguments
176
- (t1, t2), t = prepare_plan :add => 2, :tasks => 1
177
- t1.arguments[:first] = 10
178
- transaction_commit(plan, t1, t2) do |trsc, p1, p2|
179
- p1.arguments[:first] = 20
180
- p1.arguments[:second] = p2
181
- trsc.add(t)
182
- t.arguments[:task] = p2
183
- end
184
-
185
- assert_equal(20, t1.arguments[:first])
186
- assert_equal(t2, t1.arguments[:second])
187
- assert_equal(t2, t.arguments[:task])
188
-
189
- transaction_discard(plan, t1, t2) do |trsc, p1, p2|
190
- p1.arguments[:first] = 10
191
- assert_equal(p2, p1.arguments[:second])
192
- end
193
-
194
- assert_equal(20, t1.arguments[:first])
195
- assert_equal(t2, t1.arguments[:second])
196
- end
197
-
198
- # Tests insertion and removal of tasks
199
- def test_commit_plan_tasks
200
- t1, (t2, t3) = prepare_plan(:missions => 1, :tasks => 2)
201
-
202
- transaction_commit(plan, t1) do |trsc, p1|
203
- assert(trsc.include?(p1))
204
- assert(trsc.mission?(p1))
205
- end
206
-
207
- transaction_commit(plan) do |trsc|
208
- assert(!trsc.include?(t3))
209
- trsc.add(t3)
210
- assert(trsc.include?(t3))
211
- assert(!trsc.mission?(t3))
212
- assert(!plan.include?(t3))
213
- assert(!plan.mission?(t3))
214
- end
215
- assert(plan.include?(t3))
216
- assert(!plan.mission?(t3))
217
-
218
- transaction_commit(plan) do |trsc|
219
- assert(!trsc.include?(t2))
220
- trsc.add_mission(t2)
221
- assert(trsc.include?(t2))
222
- assert(trsc.mission?(t2))
223
- assert(!plan.include?(t2))
224
- assert(!plan.mission?(t2))
225
- end
226
- assert(plan.include?(t2))
227
- assert(plan.mission?(t2))
228
-
229
- transaction_commit(plan, t2) do |trsc, p2|
230
- assert(trsc.mission?(p2))
231
- trsc.unmark_mission(p2)
232
- assert(trsc.include?(p2))
233
- assert(!trsc.mission?(p2))
234
- assert(plan.include?(t2))
235
- assert(plan.mission?(t2))
236
- end
237
- assert(plan.include?(t2))
238
- assert(!plan.mission?(t2))
239
-
240
- plan.add_mission(t3)
241
- transaction_commit(plan, t3) do |trsc, p3|
242
- assert(trsc.include?(p3))
243
- trsc.remove_object(p3)
244
- assert(!trsc.include?(p3))
245
- assert(plan.include?(t3))
246
- end
247
- assert(plan.include?(t3))
248
- assert(plan.mission?(t3))
249
-
250
- plan.add_permanent(t3 = Roby::Task.new)
251
- transaction_commit(plan, t3) do |trsc, p3|
252
- assert(trsc.permanent?(p3))
253
- trsc.unmark_permanent(t3)
254
- assert(!trsc.permanent?(p3))
255
- assert(plan.permanent?(t3))
256
- end
257
- assert(!plan.permanent?(t3))
258
-
259
- transaction_commit(plan, t3) do |trsc, p3|
260
- trsc.add_permanent(p3)
261
- assert(trsc.permanent?(p3))
262
- assert(!plan.permanent?(t3))
263
- end
264
- assert(plan.permanent?(t3))
265
- end
266
-
267
- # Tests insertion and removal of free events
268
- def test_commit_plan_events
269
- e1, e2 = (1..2).map { Roby::EventGenerator.new }
270
- plan.add_permanent(e1)
271
- plan.add(e2)
272
-
273
- transaction_commit(plan, e1, e2) do |trsc, p1, p2|
274
- assert(trsc.include?(p1))
275
- assert(trsc.permanent?(p1))
276
- assert(trsc.include?(p2))
277
- assert(!trsc.permanent?(p2))
278
-
279
- trsc.unmark_permanent(p1)
280
- assert(!trsc.permanent?(p1))
281
- end
282
- assert(!plan.permanent?(e1))
283
-
284
- e3, e4 = (1..2).map { Roby::EventGenerator.new }
285
- transaction_commit(plan) do |trsc|
286
- trsc.add_permanent(e3)
287
- trsc.add(e4)
288
- assert(trsc.permanent?(e3))
289
- assert(trsc.include?(e4))
290
- assert(!trsc.permanent?(e4))
291
- end
292
- assert(plan.include?(e3))
293
- assert(plan.permanent?(e3))
294
- assert(plan.include?(e4))
295
- assert(!plan.permanent?(e4))
296
- end
297
-
298
-
299
- def test_commit_task_relations
300
- (t1, t2), (t3, t4) = prepare_plan(:missions => 2, :tasks => 2)
301
- t1.depends_on t2
302
-
303
- transaction_commit(plan) do |trsc|
304
- trsc.add t3
305
- trsc.add t4
306
- t3.planned_by t4
307
- end
308
- assert(PlannedBy.linked?(t3, t4))
309
-
310
- t = Roby::Task.new
311
- transaction_commit(plan, t1, t2) do |trsc, p1, p2|
312
- t.depends_on p1
313
- assert(Hierarchy.linked?(t, p1))
314
- assert(!Hierarchy.linked?(t, t1))
315
- end
316
- assert(Hierarchy.linked?(t, t1))
317
-
318
- t = Roby::Task.new
319
- transaction_commit(plan, t1, t2) do |trsc, p1, p2|
320
- p2.depends_on t
321
- assert(Hierarchy.linked?(p2, t))
322
- assert(!Hierarchy.linked?(t2, t))
323
- end
324
- assert(Hierarchy.linked?(t2, t))
325
-
326
- transaction_commit(plan, t1, t2) do |trsc, p1, p2|
327
- p1.remove_child_object(p2, Hierarchy)
328
- assert(!Hierarchy.linked?(p1, p2))
329
- assert(Hierarchy.linked?(t1, t2))
330
- end
331
- assert(!Hierarchy.linked?(t1, t2))
332
-
333
- transaction_commit(plan, t3, t4) do |trsc, p3, p4|
334
- trsc.remove_object(p3)
335
- assert(!trsc.include?(p3))
336
- assert(!PlannedBy.linked?(p3, p4))
337
- assert(PlannedBy.linked?(t3, t4))
338
- end
339
- assert(PlannedBy.linked?(t3, t4))
340
- end
341
-
342
- def test_commit_event_relations
343
- (t1, t2), (t3, t4) = prepare_plan :missions => 2, :tasks => 2,
344
- :model => SimpleTask
345
- t1.signals(:start, t2, :success)
346
-
347
- transaction_commit(plan, t1, t2) do |trsc, p1, p2|
348
- trsc.add t3
349
- t3.signals(:stop, p2, :start)
350
- assert(Signal.linked?(t3.event(:stop), p2.event(:start)))
351
- assert(!Signal.linked?(t3.event(:stop), t2.event(:start)))
352
- end
353
- assert(Signal.linked?(t3.event(:stop), t2.event(:start)))
354
-
355
- transaction_commit(plan, t1, t2) do |trsc, p1, p2|
356
- p1.signals(:stop, p2, :start)
357
- assert(Signal.linked?(p1.event(:stop), p2.event(:start)))
358
- assert(!Signal.linked?(t1.event(:stop), t2.event(:start)))
359
- end
360
- assert(Signal.linked?(t1.event(:stop), t2.event(:start)))
361
-
362
- transaction_commit(plan, t1, t2) do |trsc, p1, p2|
363
- trsc.add t4
364
- p1.signals(:stop, t4, :start)
365
- assert(Signal.linked?(p1.event(:stop), t4.event(:start)))
366
- end
367
- assert(Signal.linked?(t1.event(:stop), t4.event(:start)))
368
-
369
- transaction_commit(plan, t1, t2) do |trsc, p1, p2|
370
- p1.event(:start).remove_child_object(p2.event(:success), Signal)
371
- assert(!Signal.linked?(p1.event(:start), p2.event(:success)))
372
- assert(Signal.linked?(t1.event(:start), t2.event(:success)))
373
- end
374
- assert(!Signal.linked?(t1.event(:start), t2.event(:success)))
375
- end
376
-
377
- def test_commit_replace
378
- task, (planned, mission, child, r) = prepare_plan :missions => 1, :tasks => 4, :model => SimpleTask
379
- mission.depends_on task, :model => SimpleTask
380
- planned.planned_by task
381
- task.depends_on child
382
- task.signals(:stop, mission, :stop)
383
- task.forward_to(:stop, planned, :success)
384
- task.signals(:start, child, :start)
385
-
386
- transaction_commit(plan, mission, planned, task, child) do |trsc, pm, pp, pt, pc|
387
- trsc.replace(pt, r)
388
-
389
- assert([r], trsc.missions.to_a)
390
- assert(Hierarchy.linked?(pm, r))
391
- assert(!Hierarchy.linked?(mission, r))
392
- assert(!Hierarchy.linked?(r, pc))
393
- assert(PlannedBy.linked?(pp, r))
394
- assert(!PlannedBy.linked?(planned, r))
395
-
396
- assert(Signal.linked?(r.event(:stop), pm.event(:stop)))
397
- assert(!Signal.linked?(r.event(:stop), mission.event(:stop)))
398
- assert(Forwarding.linked?(r.event(:stop), pp.event(:success)))
399
- assert(!Forwarding.linked?(r.event(:stop), planned.event(:success)))
400
- assert(!Signal.linked?(r.event(:stop), pc.event(:stop)))
401
- assert(!Signal.linked?(r.event(:stop), mission.event(:stop)))
402
- end
403
- assert(Hierarchy.linked?(mission, r))
404
- assert(!Hierarchy.linked?(mission, task))
405
- assert(PlannedBy.linked?(planned, r))
406
- assert(!PlannedBy.linked?(planned, task))
407
- assert(Hierarchy.linked?(task, child))
408
- assert(!Hierarchy.linked?(r, child))
409
- assert(Signal.linked?(r.event(:stop), mission.event(:stop)))
410
- assert(!Signal.linked?(task.event(:stop), mission.event(:stop)))
411
- assert(Forwarding.linked?(r.event(:stop), planned.event(:success)))
412
- assert(!Forwarding.linked?(task.event(:stop), planned.event(:success)))
413
- assert(Signal.linked?(task.event(:start), child.event(:start)))
414
- assert(!Signal.linked?(r.event(:start), child.event(:start)))
415
- assert_equal([r], plan.missions.to_a)
416
- end
417
-
418
- def test_relation_validation
419
- t1, t2 = prepare_plan :tasks => 2
420
- transaction_commit(plan, t1) do |trsc, p1|
421
- trsc.add_mission(t2)
422
- assert_equal(plan, t1.plan)
423
- assert_equal(trsc, p1.plan)
424
- assert_equal(trsc, t2.plan)
425
- assert_raises(RuntimeError) { t1.depends_on t2 }
426
- assert_equal(plan, t1.event(:start).plan)
427
- assert_equal(trsc, p1.event(:start).plan)
428
- assert_equal(trsc, t2.event(:start).plan)
429
- assert_raises(RuntimeError) { t1.signals(:start, t2, :start) }
430
- end
431
- end
432
-
433
- def test_plan_finalized_task
434
- t1, t2, t3 = prepare_plan :missions => 1, :add => 1
435
- t1.depends_on t2
436
-
437
- t3 = SimpleTask.new
438
- assert_raises(Roby::InvalidTransaction) do
439
- transaction_commit(plan, t1, t2) do |trsc, p1, p2|
440
- p1.depends_on(t3)
441
- assert(trsc.wrap(t1, false))
442
- plan.remove_object(t1)
443
- assert(trsc.invalid?)
444
- assert(!trsc.wrap(t1, false))
445
- end
446
- end
447
- end
448
-
449
- def test_plan_add_remove_invalidate
450
- t1 = prepare_plan :add => 1
451
- assert_raises(Roby::InvalidTransaction) do
452
- transaction_commit(plan, t1) do |trsc, p1|
453
- plan.remove_object(t1)
454
- assert(!plan.include?(t1))
455
- assert(trsc.invalid?)
456
- end
457
- end
458
-
459
- # Test for a special case: the task is removed from the transaction and
460
- # then removed from the plan. We should not invalidate in that case
461
- t1 = prepare_plan :add => 1
462
- transaction_commit(plan, t1) do |trsc, p1|
463
- trsc.remove_object(p1)
464
- plan.remove_object(t1)
465
- assert(!trsc.invalid?)
466
- end
467
- end
468
-
469
- def test_plan_relation_update_invalidate
470
- t1, t2 = prepare_plan :add => 2
471
-
472
- t1.depends_on t2
473
- assert_raises(Roby::InvalidTransaction) do
474
- transaction_commit(plan, t1, t2) do |trsc, p1, p2|
475
- assert(p1.child_object?(p2, Roby::TaskStructure::Hierarchy))
476
- t1.remove_child t2
477
- assert(trsc.invalid?)
478
- end
479
- end
480
-
481
- t1.depends_on t2
482
- transaction_commit(plan, t1, t2) do |trsc, p1, p2|
483
- p1.remove_child p2
484
- t1.remove_child t2
485
- assert(!trsc.invalid?)
486
- end
487
-
488
- t1.remove_child t2
489
- assert_raises(Roby::InvalidTransaction) do
490
- transaction_commit(plan, t1, t2) do |trsc, p1, p2|
491
- t1.depends_on(t2)
492
- assert(trsc.invalid?)
493
- end
494
- end
495
-
496
- t1.remove_child t2
497
- transaction_commit(plan, t1, t2) do |trsc, p1, p2|
498
- p1.depends_on p2
499
- t1.depends_on t2
500
- assert(!trsc.invalid?)
501
- end
502
- end
503
- end
504
-
505
- class TC_Transactions < Test::Unit::TestCase
506
- include TC_TransactionBehaviour
507
- include Roby::Test
508
-
509
- def test_real_plan
510
- transaction_commit(plan) do |trsc|
511
- assert_equal(plan, trsc.real_plan)
512
- end
513
- end
514
-
515
- def test_and_event_aggregator
516
- t1, t2, t3 = (1..3).map { SimpleTask.new }
517
- transaction_commit(plan, t1) do |trsc, p1|
518
- trsc.add_mission(t2)
519
- trsc.add_mission(t3)
520
- and_generator = (p1.event(:start) & t2.event(:start))
521
- assert_equal(trsc, and_generator.plan)
522
- and_generator.signals t3.event(:start)
523
- end
524
-
525
- t1.start!
526
- assert(!t3.running?)
527
- t2.start!
528
- assert(t3.running?)
529
- end
530
-
531
- def test_or_event_aggregator
532
- t1, t2, t3 = (1..3).map { SimpleTask.new }
533
- transaction_commit(plan, t1) do |trsc, p1|
534
- trsc.add_mission(t2)
535
- trsc.add_mission(t3)
536
- (p1.event(:start) | t2.event(:start)).signals t3.event(:start)
537
- end
538
-
539
- t1.start!
540
- assert(t3.running?)
541
- t2.start!
542
- end
543
-
544
- def test_commit_event_handlers
545
- plan.add(e = Roby::EventGenerator.new(true))
546
- def e.called_by_handler(mock)
547
- mock.called_by_handler
548
- end
549
-
550
- FlexMock.use do |mock|
551
- transaction_commit(plan, e) do |trsc, pe|
552
- pe.on { mock.handler_called }
553
- pe.on { pe.called_by_handler(mock) }
554
- end
555
-
556
- mock.should_receive(:handler_called).once
557
- mock.should_receive(:called_by_handler).once
558
- e.call(nil)
559
- end
560
- end
561
-
562
- def test_forwarder_behaviour
563
- t1, t2, t3 = (1..3).map { SimpleTask.new }
564
-
565
- ev = nil
566
- transaction_commit(plan, t1) do |trsc, p1|
567
- ev = EventGenerator.new do
568
- p1.forward_to(:start, t2, :start)
569
- p1.signals(:start, t3, :start)
570
- end
571
- trsc.add(ev)
572
- ev
573
- end
574
- ev.call
575
-
576
- assert(t1.event(:start).child_object?(t2.event(:start), Roby::EventStructure::Forwarding))
577
- assert(t1.event(:start).child_object?(t3.event(:start), Roby::EventStructure::Signal))
578
- end
579
- end
580
-
581
- class TC_RecursiveTransaction < Test::Unit::TestCase
582
- include TC_TransactionBehaviour
583
- include Roby::Test
584
-
585
- attr_reader :real_plan
586
- def engine; (real_plan || plan).engine end
587
- def setup
588
- super
589
- @real_plan = @plan
590
- @plan = Roby::Transaction.new(real_plan)
591
- end
592
- def teardown
593
- plan.discard_transaction
594
- real_plan.clear
595
- super
596
- end
597
-
598
- def test_real_plan
599
- transaction_commit(plan) do |trsc|
600
- assert_equal(real_plan, trsc.real_plan)
601
- end
602
- end
603
-
604
- def test_transaction_stack
605
- transaction_commit(plan) do |trsc|
606
- assert_equal([trsc, plan, real_plan], trsc.transaction_stack)
607
- end
608
- end
609
- end
610
-