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,20 +0,0 @@
1
- $LOAD_PATH.unshift File.expand_path(File.join('..', 'lib'), File.dirname(__FILE__))
2
- require 'roby/test/common'
3
- require 'roby/test/tasks/simple_task'
4
- require 'roby/test/tasks/empty_task'
5
-
6
- require 'roby/log/gui/relations'
7
-
8
- class TC_Task < Test::Unit::TestCase
9
- include Roby::Test
10
-
11
- def test_index_handling
12
- model = Ui::RelationConfigModel.new(nil)
13
- [-1, 0, 222].each do |id|
14
- idx = model.createIndex(0, 0, id)
15
- assert_equal(id, Ui::RelationConfigModel.category_from_index(idx))
16
- end
17
- end
18
- end
19
-
20
-
@@ -1,43 +0,0 @@
1
- $LOAD_PATH.unshift File.expand_path(File.join('..', 'lib'), File.dirname(__FILE__))
2
- require 'roby/test/common'
3
- require 'roby/interface'
4
- require 'flexmock'
5
-
6
- class TC_Interface < Test::Unit::TestCase
7
- include Roby::Test
8
-
9
- def setup
10
- super
11
- Roby.app.filter_backtraces = false
12
- end
13
-
14
-
15
- include Roby::Planning
16
- def test_method_missing
17
- iface = Interface.new(engine)
18
-
19
- task_model = Class.new(Task)
20
-
21
- result_task = nil
22
- planner = Class.new(Planner) do
23
- method(:null_task) { result_task = task_model.new }
24
- end
25
- Roby.app.planners << planner
26
-
27
- engine.run
28
- returned_task = iface.null_task! do |_, planner|
29
- planner.start!
30
- end
31
-
32
- assert_kind_of(Roby::RemoteObjectProxy, returned_task)
33
- marshalled = nil
34
- assert_nothing_raised { marshalled = Marshal.dump(returned_task) }
35
- unmarshalled = Marshal.load(marshalled)
36
-
37
- assert_kind_of(Roby::Task, unmarshalled)
38
- assert_equal(result_task, unmarshalled)
39
- plan_task = plan.missions.find { true }
40
- assert_equal(plan_task, unmarshalled)
41
- end
42
- end
43
-
@@ -1,125 +0,0 @@
1
- $LOAD_PATH.unshift File.expand_path(File.join('..', 'lib'), File.dirname(__FILE__))
2
- require 'roby/test/common'
3
- require 'roby/test/distributed'
4
- require 'roby/test/tasks/simple_task'
5
-
6
- require 'roby'
7
- require 'roby/log'
8
- require 'flexmock'
9
-
10
- class TC_Log < Test::Unit::TestCase
11
- include Roby::Test
12
-
13
- def teardown
14
- super
15
- Log.clear_loggers
16
- end
17
-
18
- def test_start_stop_logger
19
- FlexMock.use do |mock|
20
- mock.should_receive(:close).once
21
- Log.add_logger mock
22
- assert(Log.logging?)
23
- assert_nothing_raised { Log.start_logging }
24
-
25
- Log.remove_logger mock
26
- assert(!Log.logging?)
27
- assert_nothing_raised { Log.stop_logging }
28
- end
29
- end
30
-
31
- def test_misc
32
- FlexMock.use do |mock|
33
- mock.should_receive(:logs_message?).with(:flush).and_return(false)
34
- mock.should_receive(:logs_message?).with(:event).and_return(true)
35
- mock.should_receive(:splat?).and_return(true)
36
- mock.should_receive(:event).with(1, 2)
37
- mock.should_receive(:flush)
38
- mock.should_receive(:close).once
39
- Log.add_logger mock
40
-
41
- assert(!Log.has_logger?(:flush))
42
- assert(Log.has_logger?(:event))
43
-
44
- assert_equal([mock], Log.enum_for(:each_logger, :event).to_a)
45
- assert_equal([], Log.enum_for(:each_logger, :bla).to_a)
46
- Log.remove_logger mock
47
- end
48
- end
49
-
50
- def test_message_splat
51
- FlexMock.use do |mock|
52
- mock.should_receive(:logs_message?).and_return(true)
53
- mock.should_receive(:splat?).and_return(true).twice
54
- mock.should_receive(:splat_event).with(FlexMock.any, 1, 2).once
55
- mock.should_receive(:flush).once
56
- mock.should_receive(:close).once
57
- Log.add_logger mock
58
-
59
- Log.log(:splat_event) { [1, 2] }
60
- Log.remove_logger mock
61
- end
62
- end
63
-
64
- def test_message_nonsplat
65
- FlexMock.use do |mock|
66
- mock.should_receive(:logs_message?).and_return(true)
67
- mock.should_receive(:splat?).and_return(false).twice
68
- mock.should_receive(:nonsplat_event).with(FlexMock.any, [1, 2]).once
69
- mock.should_receive(:flush).once
70
- mock.should_receive(:close).once
71
- Log.add_logger mock
72
-
73
- Log.log(:nonsplat_event) { [1, 2] }
74
- Log.remove_logger mock
75
- end
76
- end
77
-
78
- def on_marshalled_task(task)
79
- FlexMock.on do |obj|
80
- obj.remote_siblings[Roby::Distributed.droby_dump(nil)] == task.remote_id
81
- end
82
- end
83
- def test_known_objects_management
84
- t1, t2 = SimpleTask.new, SimpleTask.new
85
- FlexMock.use do |mock|
86
- mock.should_receive(:logs_message?).and_return(true)
87
- mock.should_receive(:splat?).and_return(true)
88
- mock.should_receive(:added_task_child).
89
- with(FlexMock.any, on_marshalled_task(t1), [TaskStructure::Hierarchy].droby_dump(nil),
90
- on_marshalled_task(t2), FlexMock.any).once
91
-
92
- match_discovered_set = FlexMock.on do |task_set|
93
- task_set.map { |obj| obj.remote_siblings[Roby::Distributed.droby_dump(nil)] }.to_set == [t1.remote_id, t2.remote_id].to_set
94
- end
95
-
96
- mock.should_receive(:added_tasks).
97
- with(FlexMock.any, FlexMock.any, match_discovered_set).
98
- once
99
- mock.should_receive(:removed_task_child).
100
- with(FlexMock.any, t1.remote_id, [TaskStructure::Hierarchy].droby_dump(nil), t2.remote_id).
101
- once
102
- mock.should_receive(:finalized_task).
103
- with(FlexMock.any, FlexMock.any, t1.remote_id).
104
- once
105
- mock.should_receive(:close).once
106
-
107
- Log.add_logger mock
108
- begin
109
- t1.depends_on t2
110
- assert(Log.known_objects.empty?)
111
- plan.add(t1)
112
- assert_equal([t1, t2].to_value_set, Log.known_objects)
113
- t1.remove_child t2
114
- assert_equal([t1, t2].to_value_set, Log.known_objects)
115
- plan.remove_object(t1)
116
- assert_equal([t2].to_value_set, Log.known_objects)
117
-
118
- Log.flush
119
- ensure
120
- Log.remove_logger mock
121
- end
122
- end
123
- end
124
- end
125
-
@@ -1,133 +0,0 @@
1
- $LOAD_PATH.unshift File.expand_path(File.join('..', 'lib'), File.dirname(__FILE__))
2
- require 'roby/test/distributed'
3
- require 'roby/log/server'
4
-
5
- class TC_LogServer < Test::Unit::TestCase
6
- include Roby::Distributed::Test
7
- include Roby::Log
8
-
9
- def test_discovery(remote = nil)
10
- recursive = !remote
11
- remote ||= remote_server do
12
- def display_server
13
- unless @display_server
14
- @display_server = Log::Server.new
15
- timings = DataStream.new 'robot', 'roby-timings'
16
- @display_server.added_stream(timings)
17
- end
18
- DRbObject.new(@display_server)
19
- end
20
- end
21
-
22
- remote_display = remote.display_server
23
-
24
- Log::Server.enable_discovery 'localhost'
25
- assert_raises(ArgumentError) { Log::Server.enable_discovery 'localhost' }
26
- sleep(0.5)
27
- assert_equal([remote_display], Log::Server.available_servers)
28
-
29
- Log::Server.disable_discovery
30
- if recursive
31
- test_discovery(remote)
32
- end
33
- end
34
-
35
- def test_connection(remote = nil)
36
- recursive = !remote
37
- remote ||= remote_server do
38
- attr_reader :timings, :events
39
- def display_server
40
- unless @display_server
41
- @display_server = Log::Server.new
42
-
43
- @timings = DataStream.new 'robot', 'roby-timings'
44
- @display_server.added_stream(timings)
45
- end
46
- DRbObject.new(@display_server)
47
- end
48
- def timings_id; timings.id end
49
- def events_id; events.id end
50
- def add_stream
51
- @events = DataStream.new 'robot', 'roby-events'
52
- @display_server.added_stream(events)
53
- nil
54
- end
55
- def remove_stream
56
- @display_server.removed_stream(events.id)
57
- nil
58
- end
59
- def quit
60
- @display_server.quit
61
- nil
62
- end
63
- end
64
-
65
- display_server = remote.display_server
66
- source = Log::Client.new(display_server)
67
- assert_equal([[remote.timings_id, 'robot', 'roby-timings']],
68
- source.streams.map { |s| [s.id, s.name, s.type] })
69
- assert(source.connected?)
70
-
71
- remote.add_stream
72
- sleep(0.5)
73
- assert_equal([[remote.timings_id, 'robot', 'roby-timings'], [remote.events_id, 'robot', 'roby-events']].to_set,
74
- source.streams.map { |s| [s.id, s.name, s.type] }.to_set)
75
-
76
- remote.remove_stream
77
- sleep(0.5)
78
- assert_equal([['robot', 'roby-timings']], source.streams.map { |s| [s.name, s.type] })
79
-
80
- source.disconnect
81
- remote.add_stream
82
- sleep(0.5)
83
- assert(!source.connected?)
84
-
85
- # try reconnection ...
86
- if recursive
87
- remote.remove_stream
88
- test_connection(remote)
89
- else
90
- source.connect
91
- assert_equal([['robot', 'roby-timings'], ['robot', 'roby-events']].to_set,
92
- source.streams.map { |s| [s.name, s.type] }.to_set)
93
-
94
- # ... or check what happens if the remote server quits
95
- remote.quit
96
- sleep(0.5)
97
- assert(!source.connected?)
98
- end
99
- end
100
-
101
- def test_subscription
102
- remote = remote_server do
103
- attr_reader :timings, :events
104
- def display_server
105
- unless @display_server
106
- @display_server = Log::Server.new
107
- @timings = DataStream.new 'robot', 'roby-timings'
108
- @display_server.added_stream(timings)
109
- end
110
- DRbObject.new(@display_server)
111
- end
112
- def add_sample
113
- @display_server.push(timings.id, Time.now, 42)
114
- end
115
- end
116
-
117
- display_server = remote.display_server
118
- source = Log::Client.new(display_server)
119
- source.subscribe(stream = source.streams.first)
120
-
121
- remote.add_sample
122
- sleep(0.5)
123
- stream = source.streams.find { |s| s.id == stream.id }
124
- assert(stream.has_sample?)
125
- assert_equal(42, stream.read, source.streams)
126
- assert(!stream.has_sample?)
127
-
128
- source.unsubscribe(stream)
129
- remote.add_sample
130
- sleep(0.5)
131
- end
132
- end
133
-
@@ -1,418 +0,0 @@
1
- $LOAD_PATH.unshift File.expand_path(File.join('..', 'lib'), File.dirname(__FILE__))
2
- require 'roby/test/common'
3
- require 'roby/test/tasks/simple_task'
4
-
5
- require 'flexmock'
6
-
7
-
8
- module TC_PlanStatic
9
- include Roby
10
- include Roby::Test
11
-
12
- def assert_task_state(task, state)
13
- assert_planobject_state(task, state)
14
- if state == :removed
15
- assert(!plan.mission?(task))
16
- assert(!task.mission?)
17
- else
18
- if state == :mission
19
- assert(plan.mission?(task))
20
- assert(task.mission?)
21
- elsif state == :permanent
22
- assert(!plan.mission?(task))
23
- assert(!task.mission?)
24
- elsif state == :normal
25
- assert(!plan.mission?(task))
26
- assert(!task.mission?)
27
- end
28
- end
29
- end
30
- def assert_planobject_state(obj, state)
31
- if state == :removed
32
- assert(!plan.include?(obj))
33
- assert(!plan.permanent?(obj))
34
- assert_equal(nil, obj.plan)
35
- else
36
- assert_equal(plan, obj.plan)
37
- assert(plan.include?(obj))
38
- if state == :permanent
39
- assert(plan.permanent?(obj))
40
- else
41
- assert(!plan.permanent?(obj))
42
- end
43
- end
44
- end
45
-
46
- def test_add_task
47
- plan.add(t = Task.new)
48
- assert_task_state(t, :normal)
49
-
50
- other_plan = Plan.new
51
- assert_raises(ModelViolation) { other_plan.add(t) }
52
- end
53
- def test_add_task_deprecated_discover
54
- t = Task.new
55
- deprecated_feature { plan.discover(t) }
56
- assert_task_state(t, :normal)
57
- end
58
- def test_remove_task
59
- plan.remove_object(t)
60
- assert_task_state(t, :removed)
61
- end
62
-
63
- def test_add_mission
64
- plan.add_mission(t = Task.new)
65
- assert_task_state(t, :mission)
66
- end
67
- def test_add_mission_deprecated_insert
68
- plan.insert(t = Task.new)
69
- assert_task_state(t, :mission)
70
- end
71
- def test_unmark_mission
72
- plan.add_mission(t = Task.new)
73
- plan.unmark_mission(t)
74
- assert_task_state(t, :normal)
75
- end
76
- def test_removed_mission
77
- plan.add_mission(t = Task.new)
78
- plan.remove_object(t)
79
- assert_task_state(t, :removed)
80
- end
81
-
82
- def test_add_mission_deprecated_insert
83
- t = Task.new
84
- deprecated_feature { plan.insert(t) }
85
- assert_task_state(t, :mission)
86
- end
87
- def test_unmark_mission_deprecated_discard
88
- plan.add_mission(t = Task.new)
89
- deprecated_feature { plan.discard(t) }
90
- assert_task_state(t, :normal)
91
- end
92
- def test_unmark_mission_deprecated_remove_mission
93
- plan.add_mission(t = Task.new)
94
- deprecated_feature { plan.remove_mission(t) }
95
- assert_task_state(t, :normal)
96
- end
97
-
98
- def test_add_permanent
99
- plan.add_permanent(t = Task.new)
100
- assert_task_state(t, :permanent)
101
- end
102
- def test_unmark_permanent
103
- plan.add_permanent(t = Task.new)
104
- plan.unmark_permanent(t)
105
- assert_task_state(t, :normal)
106
- end
107
- def test_remove_permanent
108
- plan.add_permanent(t = Task.new)
109
- plan.remove_object(t)
110
- assert_task_state(t, :removed)
111
- end
112
-
113
- def test_add_permanent_deprecated_permanent
114
- t = Task.new
115
- deprecated_feature { plan.permanent(t) }
116
- assert_task_state(t, :permanent)
117
- end
118
- def test_unmark_permanent_deprecated_auto
119
- plan.add_permanent(t = Task.new)
120
- deprecated_feature { plan.auto(t) }
121
- assert_task_state(t, :normal)
122
- end
123
-
124
- def test_add_event
125
- plan.add(ev = EventGenerator.new)
126
- assert_planobject_state(ev, :normal)
127
- end
128
- def test_remove_event
129
- plan.add(ev = EventGenerator.new)
130
- plan.remove_object(ev)
131
- assert_planobject_state(ev, :removed)
132
- end
133
- def test_add_permanent_event
134
- plan.add_permanent(ev = EventGenerator.new)
135
- assert_planobject_state(ev, :permanent)
136
- end
137
- def test_unmark_permanent_event
138
- plan.add_permanent(ev = EventGenerator.new)
139
- plan.unmark_permanent(ev)
140
- assert_planobject_state(ev, :normal)
141
- end
142
- def test_permanent_event_deprecated_permanent
143
- ev = EventGenerator.new
144
- deprecated_feature { plan.permanent(ev) }
145
- assert_planobject_state(ev, :permanent)
146
- end
147
- def test_unmark_permanent_event_deprecated_auto
148
- plan.add_permanent(ev = EventGenerator.new)
149
- deprecated_feature { plan.unmark_permanent(ev) }
150
- assert_planobject_state(ev, :normal)
151
- end
152
-
153
- # TODO: test that #remove_object removes the object from its relations
154
- # TODO: test that #add adds related objects
155
-
156
- #def test_discover
157
- # t1, t2, t3, t4 = prepare_plan :tasks => 4, :model => Roby::Test::SimpleTask
158
- # t1.depends_on t2
159
- # or_ev = OrGenerator.new
160
- # t2.event(:start).signals or_ev
161
- # or_ev.signals t3.event(:stop)
162
- # t2.planned_by t4
163
-
164
- # result = plan.discover(t1)
165
- # assert_equal(plan, result)
166
- # assert( plan.include?(t1) )
167
- # assert( plan.include?(t2) )
168
- # assert( plan.free_events.include?(or_ev))
169
- # assert( !plan.include?(t3) ) # t3 not related because of task structure
170
- # assert( plan.include?(t4) )
171
-
172
- # # Discover t3 to help plan cleanup
173
- # plan.discover(t3)
174
-
175
- # # Discover an AndGenerator and not its sources. The sources
176
- # # must be discovered automatically
177
- # a, b = (1..2).map { EventGenerator.new(true) }
178
- # and_event = a & b
179
- # plan.discover(and_event)
180
- # assert_equal(plan, a.plan)
181
- #end
182
-
183
- def test_useful_task_components
184
- t1, t2, t3, t4 = prepare_plan :tasks => 4, :model => Roby::Test::SimpleTask
185
- t1.depends_on t2
186
- t2.signals(:start, t3, :stop)
187
- t2.planned_by t4
188
-
189
- plan.add_mission(t1)
190
-
191
- assert_equal([t1, t2, t4].to_value_set, plan.locally_useful_tasks)
192
- plan.add_mission(t3)
193
- assert_equal([t1, t2, t3, t4].to_value_set, plan.locally_useful_tasks)
194
- plan.unmark_mission(t1)
195
- assert_equal([t3].to_value_set, plan.locally_useful_tasks)
196
- assert_equal([t1, t2, t4].to_value_set, plan.unneeded_tasks)
197
- end
198
-
199
- def test_replace_task
200
- (p, c1), (c11, c12, c2, c3) = prepare_plan :missions => 2, :tasks => 4, :model => Roby::Test::SimpleTask
201
- p.depends_on c1, :model => [Roby::Test::SimpleTask, {}]
202
- c1.depends_on c11
203
- c1.depends_on c12
204
- p.depends_on c2
205
- c1.signals(:stop, c2, :start)
206
- c1.forward_to :start, c1, :stop
207
- c11.forward_to :success, c1, :success
208
-
209
- # Replace c1 by c3 and check that the hooks are properly called
210
- FlexMock.use do |mock|
211
- p.singleton_class.class_eval do
212
- define_method('removed_child_object') do |child, relations|
213
- mock.removed_hook(self, child, relations)
214
- end
215
- end
216
- c1.singleton_class.class_eval do
217
- define_method('removed_parent_object') do |parent, relations|
218
- mock.removed_hook(self, parent, relations)
219
- end
220
- end
221
-
222
- mock.should_receive(:removed_hook).with(p, c1, [TaskStructure::Hierarchy]).once
223
- mock.should_receive(:removed_hook).with(c1, p, [TaskStructure::Hierarchy]).once
224
- mock.should_receive(:removed_hook).with(p, c2, [TaskStructure::Hierarchy])
225
- mock.should_receive(:removed_hook).with(c2, p, [TaskStructure::Hierarchy])
226
- mock.should_receive(:removed_hook).with(p, c3, [TaskStructure::Hierarchy])
227
- mock.should_receive(:removed_hook).with(c3, p, [TaskStructure::Hierarchy])
228
- plan.replace_task(c1, c3)
229
- end
230
-
231
- # Check that the external task and event structures have been
232
- # transferred.
233
- assert( !p.child_object?(c1, TaskStructure::Hierarchy) )
234
- assert( p.child_object?(c3, TaskStructure::Hierarchy) )
235
- assert( c3.child_object?(c11, TaskStructure::Hierarchy) )
236
- assert( !c1.child_object?(c11, TaskStructure::Hierarchy) )
237
-
238
- assert( !c1.event(:stop).child_object?(c2.event(:start), EventStructure::Signal) )
239
- assert( c3.event(:stop).child_object?(c2.event(:start), EventStructure::Signal) )
240
- assert( c3.event(:success).parent_object?(c11.event(:success), EventStructure::Forwarding) )
241
- assert( !c1.event(:success).parent_object?(c11.event(:success), EventStructure::Forwarding) )
242
- # Also check that the internal event structure has *not* been transferred
243
- assert( !c3.event(:start).child_object?(c3.event(:stop), EventStructure::Forwarding) )
244
- assert( c1.event(:start).child_object?(c1.event(:stop), EventStructure::Forwarding) )
245
-
246
- # Check that +c1+ is no more marked as mission, and that c3 is marked. c1 should
247
- # still be in the plan
248
- assert(! plan.mission?(c1) )
249
- assert( plan.mission?(c3) )
250
- assert( plan.include?(c1) )
251
-
252
- # Check that #replace_task keeps the permanent flag too
253
- (root, p), t = prepare_plan :permanent => 2, :tasks => 1, :model => Roby::Test::SimpleTask
254
- root.depends_on p, :model => Roby::Test::SimpleTask
255
-
256
- plan.add_permanent(p)
257
- plan.replace_task(p, t)
258
- assert(!plan.permanent?(p))
259
- assert(plan.permanent?(t))
260
- end
261
-
262
- def test_replace
263
- (p, c1), (c11, c12, c2, c3) = prepare_plan :missions => 2, :tasks => 4, :model => Roby::Test::SimpleTask
264
- p.depends_on c1, :model => Roby::Test::SimpleTask
265
- c1.depends_on c11
266
- c1.depends_on c12
267
- p.depends_on c2
268
- c1.signals(:stop, c2, :start)
269
- c1.forward_to :start, c1, :stop
270
- c11.forward_to :success, c1, :success
271
-
272
- # Replace c1 by c3 and check that the hooks are properly called
273
- FlexMock.use do |mock|
274
- p.singleton_class.class_eval do
275
- define_method('removed_child_object') do |child, relations|
276
- mock.removed_hook(self, child, relations)
277
- end
278
- end
279
- c1.singleton_class.class_eval do
280
- define_method('removed_parent_object') do |parent, relations|
281
- mock.removed_hook(self, parent, relations)
282
- end
283
- end
284
-
285
- mock.should_receive(:removed_hook).with(p, c1, [TaskStructure::Hierarchy]).once
286
- mock.should_receive(:removed_hook).with(c1, p, [TaskStructure::Hierarchy]).once
287
- mock.should_receive(:removed_hook).with(p, c2, [TaskStructure::Hierarchy])
288
- mock.should_receive(:removed_hook).with(c2, p, [TaskStructure::Hierarchy])
289
- mock.should_receive(:removed_hook).with(p, c3, [TaskStructure::Hierarchy])
290
- mock.should_receive(:removed_hook).with(c3, p, [TaskStructure::Hierarchy])
291
- plan.replace(c1, c3)
292
- end
293
-
294
- # Check that the external task and event structures have been
295
- # transferred.
296
- assert( !p.child_object?(c1, TaskStructure::Hierarchy) )
297
- assert( p.child_object?(c3, TaskStructure::Hierarchy) )
298
- assert( c1.child_object?(c11, TaskStructure::Hierarchy) )
299
- assert( !c3.child_object?(c11, TaskStructure::Hierarchy) )
300
-
301
- assert( !c1.event(:stop).child_object?(c2.event(:start), EventStructure::Signal) )
302
- assert( c3.event(:stop).child_object?(c2.event(:start), EventStructure::Signal) )
303
- assert( c1.event(:success).parent_object?(c11.event(:success), EventStructure::Forwarding) )
304
- assert( !c3.event(:success).parent_object?(c11.event(:success), EventStructure::Forwarding) )
305
- # Also check that the internal event structure has *not* been transferred
306
- assert( !c3.event(:start).child_object?(c3.event(:stop), EventStructure::Forwarding) )
307
- assert( c1.event(:start).child_object?(c1.event(:stop), EventStructure::Forwarding) )
308
-
309
- # Check that +c1+ is no more marked as mission, and that c3 is marked. c1 should
310
- # still be in the plan
311
- assert(! plan.mission?(c1) )
312
- assert( plan.mission?(c3) )
313
- assert( plan.include?(c1) )
314
- end
315
-
316
- def test_remove_task
317
- t1, t2, t3 = (1..3).map { Roby::Task.new }
318
- t1.depends_on t2
319
- t1.signals(:stop, t3, :start)
320
-
321
- plan.add_mission(t1)
322
- plan.add_mission(t3)
323
-
324
- assert(!t1.leaf?)
325
- plan.remove_object(t2)
326
- assert(t1.leaf?)
327
- assert(!plan.include?(t2))
328
-
329
- assert(!t1.event(:stop).leaf?(EventStructure::Signal))
330
- plan.remove_object(t3)
331
- assert(t1.event(:stop).leaf?(EventStructure::Signal))
332
- assert(!plan.include?(t3))
333
- end
334
-
335
- def test_free_events
336
- t1, t2, t3 = (1..3).map { Roby::Task.new }
337
- plan.add_mission(t1)
338
- t1.depends_on t2
339
- assert_equal(plan, t2.plan)
340
- assert_equal(plan, t1.event(:start).plan)
341
-
342
- or_generator = (t1.event(:stop) | t2.event(:stop))
343
- assert_equal(plan, or_generator.plan)
344
- assert(plan.free_events.include?(or_generator))
345
- or_generator.signals t3.event(:start)
346
- assert_equal(plan, t3.plan)
347
-
348
- and_generator = (t1.event(:stop) & t2.event(:stop))
349
- assert_equal(plan, and_generator.plan)
350
- assert(plan.free_events.include?(and_generator))
351
- end
352
-
353
- def test_plan_synchronization
354
- t1, t2 = prepare_plan :tasks => 2
355
- plan.add_mission(t1)
356
- assert_equal(plan, t1.plan)
357
- assert_equal(nil, t2.plan)
358
- t1.depends_on t2
359
- assert_equal(plan, t1.plan)
360
- assert_equal(plan, t2.plan)
361
- assert(plan.include?(t2))
362
-
363
- e = EventGenerator.new(true)
364
- assert_equal(nil, e.plan)
365
- t1.signals(:start, e, :start)
366
- assert_equal(plan, e.plan)
367
- assert(plan.free_events.include?(e))
368
-
369
- # Now, make sure a PlanObject don't get included in the plan if add_child_object
370
- # raises
371
- adding_child_failure = Module.new do
372
- def adding_child_object(child, relation, info)
373
- raise RuntimeError
374
- end
375
- end
376
- model = Class.new(Task) do
377
- include adding_child_failure
378
- end
379
- t1, t2 = model.new, model.new
380
- plan.add_mission(t1)
381
- assert_equal(plan, t1.plan)
382
- assert_equal(nil, t2.plan)
383
- assert_raises(RuntimeError) { t1.depends_on t2 }
384
- assert_equal(plan, t1.plan)
385
- assert_equal(plan, t2.plan)
386
- assert(plan.include?(t2))
387
- end
388
-
389
- # Checks that a garbage collected object (event or task) cannot be added back into the plan
390
- def test_garbage_collection_final
391
- t = SimpleTask.new
392
- e = EventGenerator.new(true)
393
- plan.real_plan.add [t, e]
394
- engine.garbage_collect
395
- assert_raises(ArgumentError) { plan.add(t) }
396
- assert_raises(ArgumentError) { plan.add(e) }
397
- end
398
-
399
- def test_proxy_operator
400
- t = SimpleTask.new
401
- assert_same t, plan[t, false]
402
-
403
- assert plan.include?(t)
404
- assert_same t, plan[t, true]
405
-
406
- plan.remove_object(t)
407
- assert_raises(ArgumentError) { plan[t] }
408
- end
409
- end
410
-
411
- class TC_Plan < Test::Unit::TestCase
412
- include TC_PlanStatic
413
-
414
- def test_transaction_stack
415
- assert_equal [plan], plan.transaction_stack
416
- end
417
- end
418
-