state_machines 0.0.2 → 0.1.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 (465) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +10 -4
  3. data/Changelog.md +0 -0
  4. data/Gemfile +6 -0
  5. data/LICENSE.txt +1 -1
  6. data/README.md +6 -8
  7. data/Rakefile +9 -6
  8. data/Testing.md +0 -0
  9. data/lib/state_machines/assertions.rb +5 -5
  10. data/lib/state_machines/error.rb +2 -1
  11. data/lib/state_machines/integrations.rb +18 -11
  12. data/lib/state_machines/machine.rb +8 -12
  13. data/lib/state_machines/version.rb +1 -1
  14. data/state_machines.gemspec +6 -8
  15. data/test/files/integrations/event_on_failure_integration.rb +10 -0
  16. data/test/files/integrations/vehicle.rb +7 -0
  17. data/{spec/internal/app → test/files}/models/auto_shop.rb +0 -0
  18. data/{spec/internal/app → test/files}/models/car.rb +2 -0
  19. data/{spec/internal/app → test/files}/models/model_base.rb +0 -0
  20. data/{spec/internal/app → test/files}/models/motorcycle.rb +2 -0
  21. data/{spec/internal/app → test/files}/models/traffic_light.rb +2 -2
  22. data/{spec/internal/app → test/files}/models/vehicle.rb +9 -5
  23. data/test/files/node.rb +5 -0
  24. data/test/files/switch.rb +15 -0
  25. data/test/functional/auto_shop_available_test.rb +20 -0
  26. data/test/functional/auto_shop_busy_test.rb +25 -0
  27. data/test/functional/car_backing_up_test.rb +45 -0
  28. data/test/functional/car_test.rb +49 -0
  29. data/test/functional/motorcycle_test.rb +46 -0
  30. data/test/functional/traffic_light_caution_test.rb +17 -0
  31. data/test/functional/traffic_light_proceed_test.rb +17 -0
  32. data/test/functional/traffic_light_stop_test.rb +26 -0
  33. data/test/functional/vehicle_first_gear_test.rb +42 -0
  34. data/test/functional/vehicle_idling_test.rb +59 -0
  35. data/test/functional/vehicle_locked_test.rb +29 -0
  36. data/test/functional/vehicle_parked_test.rb +53 -0
  37. data/test/functional/vehicle_repaired_test.rb +20 -0
  38. data/test/functional/vehicle_second_gear_test.rb +42 -0
  39. data/test/functional/vehicle_stalled_test.rb +65 -0
  40. data/test/functional/vehicle_test.rb +20 -0
  41. data/test/functional/vehicle_third_gear_test.rb +42 -0
  42. data/test/functional/vehicle_unsaved_test.rb +181 -0
  43. data/test/functional/vehicle_with_event_attributes_test.rb +30 -0
  44. data/test/functional/vehicle_with_parallel_events_test.rb +36 -0
  45. data/test/test_helper.rb +15 -0
  46. data/test/unit/assertions/assert_exclusive_keys_test.rb +22 -0
  47. data/test/unit/assertions/assert_valid_key_test.rb +12 -0
  48. data/test/unit/branch/branch_test.rb +28 -0
  49. data/test/unit/branch/branch_with_conflicting_conditionals_test.rb +27 -0
  50. data/test/unit/branch/branch_with_conflicting_from_requirements_test.rb +8 -0
  51. data/test/unit/branch/branch_with_conflicting_on_requirements_test.rb +8 -0
  52. data/test/unit/branch/branch_with_conflicting_to_requirements_test.rb +8 -0
  53. data/test/unit/branch/branch_with_different_requirements_test.rb +41 -0
  54. data/test/unit/branch/branch_with_except_from_matcher_requirement_test.rb +8 -0
  55. data/test/unit/branch/branch_with_except_from_requirement_test.rb +36 -0
  56. data/test/unit/branch/branch_with_except_on_matcher_requirement_test.rb +8 -0
  57. data/test/unit/branch/branch_with_except_on_requirement_test.rb +36 -0
  58. data/test/unit/branch/branch_with_except_to_matcher_requirement_test.rb +8 -0
  59. data/test/unit/branch/branch_with_except_to_requirement_test.rb +36 -0
  60. data/test/unit/branch/branch_with_from_matcher_requirement_test.rb +20 -0
  61. data/test/unit/branch/branch_with_from_requirement_test.rb +45 -0
  62. data/test/unit/branch/branch_with_if_conditional_test.rb +27 -0
  63. data/test/unit/branch/branch_with_implicit_and_explicit_requirements_test.rb +23 -0
  64. data/test/unit/branch/branch_with_implicit_from_requirement_matcher_test.rb +20 -0
  65. data/test/unit/branch/branch_with_implicit_requirement_test.rb +20 -0
  66. data/test/unit/branch/branch_with_implicit_to_requirement_matcher_test.rb +16 -0
  67. data/test/unit/branch/branch_with_multiple_except_from_requirements_test.rb +20 -0
  68. data/test/unit/branch/branch_with_multiple_except_on_requirements_test.rb +16 -0
  69. data/test/unit/branch/branch_with_multiple_except_to_requirements_test.rb +20 -0
  70. data/test/unit/branch/branch_with_multiple_from_requirements_test.rb +16 -0
  71. data/test/unit/branch/branch_with_multiple_if_conditionals_test.rb +20 -0
  72. data/test/unit/branch/branch_with_multiple_implicit_requirements_test.rb +53 -0
  73. data/test/unit/branch/branch_with_multiple_on_requirements_test.rb +20 -0
  74. data/test/unit/branch/branch_with_multiple_to_requirements_test.rb +20 -0
  75. data/test/unit/branch/branch_with_multiple_unless_conditionals_test.rb +20 -0
  76. data/test/unit/branch/branch_with_nil_requirements_test.rb +28 -0
  77. data/test/unit/branch/branch_with_no_requirements_test.rb +36 -0
  78. data/test/unit/branch/branch_with_on_matcher_requirement_test.rb +16 -0
  79. data/test/unit/branch/branch_with_on_requirement_test.rb +45 -0
  80. data/test/unit/branch/branch_with_to_matcher_requirement_test.rb +20 -0
  81. data/test/unit/branch/branch_with_to_requirement_test.rb +45 -0
  82. data/test/unit/branch/branch_with_unless_conditional_test.rb +27 -0
  83. data/test/unit/branch/branch_without_guards_test.rb +27 -0
  84. data/test/unit/callback/callback_by_default_test.rb +25 -0
  85. data/test/unit/callback/callback_test.rb +53 -0
  86. data/test/unit/callback/callback_with_application_bound_object_test.rb +23 -0
  87. data/test/unit/callback/callback_with_application_terminator_test.rb +24 -0
  88. data/test/unit/callback/callback_with_arguments_test.rb +14 -0
  89. data/test/unit/callback/callback_with_around_type_and_arguments_test.rb +25 -0
  90. data/test/unit/callback/callback_with_around_type_and_block_test.rb +44 -0
  91. data/test/unit/callback/callback_with_around_type_and_bound_method_test.rb +23 -0
  92. data/test/unit/callback/callback_with_around_type_and_multiple_methods_test.rb +93 -0
  93. data/test/unit/callback/callback_with_around_type_and_terminator_test.rb +17 -0
  94. data/test/unit/callback/callback_with_block_test.rb +20 -0
  95. data/test/unit/callback/callback_with_bound_method_and_arguments_test.rb +28 -0
  96. data/test/unit/callback/callback_with_bound_method_test.rb +35 -0
  97. data/test/unit/callback/callback_with_do_method_test.rb +18 -0
  98. data/test/unit/callback/callback_with_explicit_requirements_test.rb +32 -0
  99. data/test/unit/callback/callback_with_if_condition_test.rb +17 -0
  100. data/test/unit/callback/callback_with_implicit_requirements_test.rb +32 -0
  101. data/test/unit/callback/callback_with_method_argument_test.rb +18 -0
  102. data/test/unit/callback/callback_with_mixed_methods_test.rb +31 -0
  103. data/test/unit/callback/callback_with_multiple_bound_methods_test.rb +21 -0
  104. data/test/unit/callback/callback_with_multiple_do_methods_test.rb +29 -0
  105. data/test/unit/callback/callback_with_multiple_method_arguments_test.rb +29 -0
  106. data/test/unit/callback/callback_with_terminator_test.rb +22 -0
  107. data/test/unit/callback/callback_with_unbound_method_test.rb +14 -0
  108. data/test/unit/callback/callback_with_unless_condition_test.rb +17 -0
  109. data/test/unit/callback/callback_without_arguments_test.rb +14 -0
  110. data/test/unit/callback/callback_without_terminator_test.rb +12 -0
  111. data/test/unit/error/error_by_default_test.rb +21 -0
  112. data/test/unit/error/error_with_message_test.rb +23 -0
  113. data/test/unit/eval_helper/eval_helpers_base_test.rb +8 -0
  114. data/test/unit/eval_helper/eval_helpers_proc_block_and_explicit_arguments_test.rb +14 -0
  115. data/test/unit/eval_helper/eval_helpers_proc_block_and_implicit_arguments_test.rb +14 -0
  116. data/test/unit/eval_helper/eval_helpers_proc_test.rb +13 -0
  117. data/test/unit/eval_helper/eval_helpers_proc_with_arguments_test.rb +13 -0
  118. data/test/unit/eval_helper/eval_helpers_proc_with_block_test.rb +13 -0
  119. data/test/unit/eval_helper/eval_helpers_proc_with_block_without_arguments_test.rb +18 -0
  120. data/test/unit/eval_helper/eval_helpers_proc_with_block_without_object_test.rb +14 -0
  121. data/test/unit/eval_helper/eval_helpers_proc_without_arguments_test.rb +19 -0
  122. data/test/unit/eval_helper/eval_helpers_string_test.rb +25 -0
  123. data/test/unit/eval_helper/eval_helpers_string_with_block_test.rb +12 -0
  124. data/test/unit/eval_helper/eval_helpers_symbol_method_missing_test.rb +20 -0
  125. data/test/unit/eval_helper/eval_helpers_symbol_private_test.rb +17 -0
  126. data/test/unit/eval_helper/eval_helpers_symbol_protected_test.rb +17 -0
  127. data/test/unit/eval_helper/eval_helpers_symbol_tainted_method_test.rb +18 -0
  128. data/test/unit/eval_helper/eval_helpers_symbol_test.rb +16 -0
  129. data/test/unit/eval_helper/eval_helpers_symbol_with_arguments_and_block_test.rb +16 -0
  130. data/test/unit/eval_helper/eval_helpers_symbol_with_arguments_test.rb +16 -0
  131. data/test/unit/eval_helper/eval_helpers_symbol_with_block_test.rb +16 -0
  132. data/test/unit/eval_helper/eval_helpers_test.rb +13 -0
  133. data/test/unit/event/event_after_being_copied_test.rb +17 -0
  134. data/test/unit/event/event_by_default_test.rb +60 -0
  135. data/test/unit/event/event_context_test.rb +16 -0
  136. data/test/unit/event/event_on_failure_test.rb +44 -0
  137. data/test/unit/event/event_test.rb +34 -0
  138. data/test/unit/event/event_transitions_test.rb +62 -0
  139. data/test/unit/event/event_with_conflicting_helpers_after_definition_test.rb +79 -0
  140. data/test/unit/event/event_with_conflicting_helpers_before_definition_test.rb +58 -0
  141. data/test/unit/event/event_with_conflicting_machine_test.rb +48 -0
  142. data/test/unit/event/event_with_dynamic_human_name_test.rb +26 -0
  143. data/test/unit/event/event_with_human_name_test.rb +13 -0
  144. data/test/unit/event/event_with_invalid_current_state_test.rb +30 -0
  145. data/test/unit/event/event_with_machine_action_test.rb +33 -0
  146. data/test/unit/event/event_with_marshalling_test.rb +47 -0
  147. data/test/unit/event/event_with_matching_disabled_transitions_test.rb +115 -0
  148. data/test/unit/event/event_with_matching_enabled_transitions_test.rb +75 -0
  149. data/test/unit/event/event_with_multiple_transitions_test.rb +61 -0
  150. data/test/unit/event/event_with_namespace_test.rb +34 -0
  151. data/test/unit/event/event_with_transition_with_blacklisted_to_state_test.rb +60 -0
  152. data/test/unit/event/event_with_transition_with_loopback_state_test.rb +36 -0
  153. data/test/unit/event/event_with_transition_with_nil_to_state_test.rb +36 -0
  154. data/test/unit/event/event_with_transition_with_whitelisted_to_state_test.rb +51 -0
  155. data/test/unit/event/event_with_transition_without_to_state_test.rb +36 -0
  156. data/test/unit/event/event_with_transitions_test.rb +32 -0
  157. data/test/unit/event/event_without_matching_transitions_test.rb +41 -0
  158. data/test/unit/event/event_without_transitions_test.rb +28 -0
  159. data/{spec/state_machines/invalid_event_spec.rb → test/unit/event/invalid_event_test.rb} +8 -7
  160. data/test/unit/event_collection/event_collection_attribute_with_machine_action_test.rb +62 -0
  161. data/test/unit/event_collection/event_collection_attribute_with_namespaced_machine_test.rb +36 -0
  162. data/test/unit/event_collection/event_collection_by_default_test.rb +26 -0
  163. data/test/unit/event_collection/event_collection_test.rb +39 -0
  164. data/test/unit/event_collection/event_collection_with_custom_machine_attribute_test.rb +31 -0
  165. data/test/unit/event_collection/event_collection_with_events_with_transitions_test.rb +76 -0
  166. data/test/unit/event_collection/event_collection_with_multiple_events_test.rb +27 -0
  167. data/test/unit/event_collection/event_collection_with_validations_test.rb +75 -0
  168. data/test/unit/event_collection/event_collection_without_machine_action_test.rb +18 -0
  169. data/test/unit/event_collection/event_string_collection_test.rb +31 -0
  170. data/test/unit/helper_module_test.rb +17 -0
  171. data/test/unit/integrations/integration_finder_test.rb +16 -0
  172. data/test/unit/integrations/integration_matcher_test.rb +27 -0
  173. data/test/unit/invalid_transition/invalid_parallel_transition_test.rb +18 -0
  174. data/test/unit/invalid_transition/invalid_transition_test.rb +47 -0
  175. data/test/unit/invalid_transition/invalid_transition_with_integration_test.rb +47 -0
  176. data/test/unit/invalid_transition/invalid_transition_with_namespace_test.rb +32 -0
  177. data/test/unit/machine/machine_after_being_copied_test.rb +62 -0
  178. data/test/unit/machine/machine_after_changing_initial_state.rb +28 -0
  179. data/test/unit/machine/machine_after_changing_owner_class_test.rb +31 -0
  180. data/test/unit/machine/machine_by_default_test.rb +160 -0
  181. data/test/unit/machine/machine_finder_custom_options_test.rb +17 -0
  182. data/test/unit/machine/machine_finder_with_existing_machine_on_superclass_test.rb +86 -0
  183. data/test/unit/machine/machine_finder_with_existing_on_same_class_test.rb +23 -0
  184. data/test/unit/machine/machine_finder_without_existing_machine_test.rb +25 -0
  185. data/test/unit/machine/machine_persistence_test.rb +52 -0
  186. data/test/unit/machine/machine_state_initialization_test.rb +56 -0
  187. data/test/unit/machine/machine_test.rb +30 -0
  188. data/test/unit/machine/machine_with_action_already_overridden_test.rb +23 -0
  189. data/test/unit/machine/machine_with_action_defined_in_class_test.rb +37 -0
  190. data/test/unit/machine/machine_with_action_defined_in_included_module_test.rb +46 -0
  191. data/test/unit/machine/machine_with_action_defined_in_superclass_test.rb +43 -0
  192. data/test/unit/machine/machine_with_action_undefined_test.rb +33 -0
  193. data/test/unit/machine/machine_with_cached_state_test.rb +20 -0
  194. data/test/unit/machine/machine_with_class_helpers_test.rb +179 -0
  195. data/test/unit/machine/machine_with_conflicting_helpers_after_definition_test.rb +243 -0
  196. data/test/unit/machine/machine_with_conflicting_helpers_before_definition_test.rb +175 -0
  197. data/test/unit/machine/machine_with_custom_action_test.rb +11 -0
  198. data/test/unit/machine/machine_with_custom_attribute_test.rb +103 -0
  199. data/test/unit/machine/machine_with_custom_initialize_test.rb +24 -0
  200. data/test/unit/machine/machine_with_custom_integration_test.rb +69 -0
  201. data/test/unit/machine/machine_with_custom_invalidation_test.rb +40 -0
  202. data/test/unit/machine/machine_with_custom_name_test.rb +57 -0
  203. data/test/unit/machine/machine_with_custom_plural_test.rb +53 -0
  204. data/test/unit/machine/machine_with_dynamic_initial_state_test.rb +65 -0
  205. data/test/unit/machine/machine_with_event_matchers_test.rb +41 -0
  206. data/test/unit/machine/machine_with_events_test.rb +52 -0
  207. data/test/unit/machine/machine_with_events_with_custom_human_names_test.rb +18 -0
  208. data/test/unit/machine/machine_with_events_with_transitions_test.rb +37 -0
  209. data/test/unit/machine/machine_with_existing_event_test.rb +17 -0
  210. data/test/unit/machine/machine_with_existing_machines_on_owner_class_test.rb +20 -0
  211. data/test/unit/machine/machine_with_existing_machines_with_same_attributes_on_owner_class_test.rb +71 -0
  212. data/test/unit/machine/machine_with_existing_machines_with_same_attributes_on_owner_subclass_test.rb +31 -0
  213. data/test/unit/machine/machine_with_existing_state_test.rb +27 -0
  214. data/test/unit/machine/machine_with_failure_callbacks_test.rb +48 -0
  215. data/test/unit/machine/machine_with_helpers_test.rb +14 -0
  216. data/test/unit/machine/machine_with_initial_state_with_value_and_owner_default.rb +25 -0
  217. data/test/unit/machine/machine_with_initialize_and_super_test.rb +17 -0
  218. data/test/unit/machine/machine_with_initialize_arguments_and_block_test.rb +31 -0
  219. data/test/unit/machine/machine_with_initialize_without_super_test.rb +17 -0
  220. data/test/unit/machine/machine_with_instance_helpers_test.rb +179 -0
  221. data/test/unit/machine/machine_with_integration_test.rb +71 -0
  222. data/test/unit/machine/machine_with_multiple_events_test.rb +32 -0
  223. data/test/unit/machine/machine_with_namespace_test.rb +48 -0
  224. data/test/unit/machine/machine_with_nil_action_test.rb +24 -0
  225. data/test/unit/machine/machine_with_other_states.rb +22 -0
  226. data/test/unit/machine/machine_with_owner_subclass_test.rb +18 -0
  227. data/test/unit/machine/machine_with_paths_test.rb +25 -0
  228. data/test/unit/machine/machine_with_private_action_test.rb +43 -0
  229. data/test/unit/machine/machine_with_state_matchers_test.rb +41 -0
  230. data/test/unit/machine/machine_with_state_with_matchers_test.rb +19 -0
  231. data/test/unit/machine/machine_with_states_test.rb +55 -0
  232. data/test/unit/machine/machine_with_states_with_behaviors_test.rb +23 -0
  233. data/test/unit/machine/machine_with_states_with_custom_human_names_test.rb +18 -0
  234. data/test/unit/machine/machine_with_states_with_custom_values_test.rb +21 -0
  235. data/test/unit/machine/machine_with_states_with_runtime_dependencies_test.rb +19 -0
  236. data/test/unit/machine/machine_with_static_initial_state_test.rb +60 -0
  237. data/test/unit/machine/machine_with_superclass_conflicting_helpers_after_definition_test.rb +36 -0
  238. data/test/unit/machine/machine_with_transition_callbacks_test.rb +144 -0
  239. data/test/unit/machine/machine_with_transitions_test.rb +87 -0
  240. data/test/unit/machine/machine_without_initialization_test.rb +31 -0
  241. data/test/unit/machine/machine_without_initialize_test.rb +14 -0
  242. data/test/unit/machine/machine_without_integration_test.rb +31 -0
  243. data/test/unit/machine_collection/machine_collection_by_default_test.rb +11 -0
  244. data/test/unit/machine_collection/machine_collection_fire_attributes_with_validations_test.rb +72 -0
  245. data/test/unit/machine_collection/machine_collection_fire_test.rb +80 -0
  246. data/test/unit/machine_collection/machine_collection_fire_with_transactions_test.rb +54 -0
  247. data/test/unit/machine_collection/machine_collection_fire_with_validations_test.rb +76 -0
  248. data/test/unit/machine_collection/machine_collection_state_initialization_test.rb +101 -0
  249. data/test/unit/machine_collection/machine_collection_transitions_with_blank_events_test.rb +25 -0
  250. data/test/unit/machine_collection/machine_collection_transitions_with_custom_options_test.rb +20 -0
  251. data/test/unit/machine_collection/machine_collection_transitions_with_different_actions_test.rb +26 -0
  252. data/test/unit/machine_collection/machine_collection_transitions_with_exisiting_transitions_test.rb +25 -0
  253. data/test/unit/machine_collection/machine_collection_transitions_with_invalid_events_test.rb +25 -0
  254. data/test/unit/machine_collection/machine_collection_transitions_with_same_actions_test.rb +31 -0
  255. data/test/unit/machine_collection/machine_collection_transitions_with_transition_test.rb +26 -0
  256. data/test/unit/machine_collection/machine_collection_transitions_without_events_test.rb +25 -0
  257. data/test/unit/machine_collection/machine_collection_transitions_without_transition_test.rb +27 -0
  258. data/test/unit/matcher/all_matcher_test.rb +29 -0
  259. data/test/unit/matcher/blacklist_matcher_test.rb +30 -0
  260. data/test/unit/matcher/loopback_matcher_test.rb +27 -0
  261. data/test/unit/matcher/matcher_by_default_test.rb +15 -0
  262. data/test/unit/matcher/matcher_with_multiple_values_test.rb +15 -0
  263. data/test/unit/matcher/matcher_with_value_test.rb +15 -0
  264. data/test/unit/matcher/whitelist_matcher_test.rb +30 -0
  265. data/test/unit/matcher_helpers/matcher_helpers_all_test.rb +14 -0
  266. data/test/unit/matcher_helpers/matcher_helpers_any_test.rb +14 -0
  267. data/test/unit/matcher_helpers/matcher_helpers_same_test.rb +13 -0
  268. data/test/unit/node_collection/node_collection_after_being_copied_test/n.rb +46 -0
  269. data/test/unit/node_collection/node_collection_after_update_test/n.rb +36 -0
  270. data/test/unit/node_collection/node_collection_by_default_test.rb +22 -0
  271. data/test/unit/node_collection/node_collection_test.rb +23 -0
  272. data/test/unit/node_collection/node_collection_with_indices_test/n.rb +42 -0
  273. data/test/unit/node_collection/node_collection_with_matcher_contexts_test.rb +25 -0
  274. data/test/unit/node_collection/node_collection_with_nodes_test/n.rb +46 -0
  275. data/test/unit/node_collection/node_collection_with_numeric_index_test/n.rb +24 -0
  276. data/test/unit/node_collection/node_collection_with_postdefined_contexts_test/n.rb +22 -0
  277. data/test/unit/node_collection/node_collection_with_predefined_contexts_test/n.rb +23 -0
  278. data/test/unit/node_collection/node_collection_with_string_index_test/n.rb +20 -0
  279. data/test/unit/node_collection/node_collection_with_symbol_index_test/n.rb +20 -0
  280. data/test/unit/node_collection/node_collection_without_indices_test/n.rb +30 -0
  281. data/test/unit/path/path_by_default_test.rb +54 -0
  282. data/test/unit/path/path_test.rb +14 -0
  283. data/test/unit/path/path_with_available_transitions_after_reaching_target_test.rb +40 -0
  284. data/test/unit/path/path_with_available_transitions_test.rb +54 -0
  285. data/test/unit/path/path_with_deep_target_reached_test.rb +50 -0
  286. data/test/unit/path/path_with_deep_target_test.rb +40 -0
  287. data/test/unit/path/path_with_duplicates_test.rb +32 -0
  288. data/test/unit/path/path_with_encountered_transitions_test.rb +34 -0
  289. data/test/unit/path/path_with_guarded_transitions_test.rb +42 -0
  290. data/test/unit/path/path_with_reached_target_test.rb +35 -0
  291. data/test/unit/path/path_with_transitions_test.rb +54 -0
  292. data/test/unit/path/path_with_unreached_target_test.rb +31 -0
  293. data/test/unit/path/path_without_transitions_test.rb +24 -0
  294. data/test/unit/path_collection/path_collection_by_default_test.rb +46 -0
  295. data/test/unit/path_collection/path_collection_test.rb +24 -0
  296. data/test/unit/path_collection/path_collection_with_deep_paths_test.rb +43 -0
  297. data/test/unit/path_collection/path_collection_with_duplicate_nodes_test.rb +31 -0
  298. data/test/unit/path_collection/path_collection_with_from_state_test.rb +27 -0
  299. data/test/unit/path_collection/path_collection_with_paths_test.rb +47 -0
  300. data/test/unit/path_collection/path_collection_with_to_state_test.rb +29 -0
  301. data/test/unit/path_collection/path_with_guarded_paths_test.rb +25 -0
  302. data/test/unit/state/state_after_being_copied_test.rb +19 -0
  303. data/test/unit/state/state_by_default_test.rb +41 -0
  304. data/test/unit/state/state_final_test.rb +28 -0
  305. data/test/unit/state/state_initial_test.rb +13 -0
  306. data/test/unit/state/state_not_final_test.rb +32 -0
  307. data/test/unit/state/state_not_initial_test.rb +13 -0
  308. data/test/unit/state/state_test.rb +44 -0
  309. data/test/unit/state/state_with_cached_lambda_value_test.rb +29 -0
  310. data/test/unit/state/state_with_conflicting_helpers_after_definition_test.rb +38 -0
  311. data/test/unit/state/state_with_conflicting_helpers_before_definition_test.rb +29 -0
  312. data/test/unit/state/state_with_conflicting_machine_name_test.rb +20 -0
  313. data/test/unit/state/state_with_conflicting_machine_test.rb +37 -0
  314. data/test/unit/state/state_with_context_test.rb +60 -0
  315. data/test/unit/state/state_with_dynamic_human_name_test.rb +25 -0
  316. data/test/unit/state/state_with_existing_context_method_test.rb +24 -0
  317. data/test/unit/state/state_with_human_name_test.rb +13 -0
  318. data/test/unit/state/state_with_integer_value_test.rb +32 -0
  319. data/test/unit/state/state_with_invalid_method_call_test.rb +21 -0
  320. data/test/unit/state/state_with_lambda_value_test.rb +37 -0
  321. data/test/unit/state/state_with_matcher_test.rb +18 -0
  322. data/test/unit/state/state_with_multiple_contexts_test.rb +57 -0
  323. data/test/unit/state/state_with_name_test.rb +43 -0
  324. data/test/unit/state/state_with_namespace_test.rb +22 -0
  325. data/test/unit/state/state_with_nil_value_test.rb +35 -0
  326. data/test/unit/state/state_with_redefined_context_method_test.rb +45 -0
  327. data/test/unit/state/state_with_symbolic_value_test.rb +32 -0
  328. data/test/unit/state/state_with_valid_inherited_method_call_for_current_state_test.rb +40 -0
  329. data/test/unit/state/state_with_valid_method_call_for_current_state_test.rb +33 -0
  330. data/test/unit/state/state_with_valid_method_call_for_different_state_test.rb +41 -0
  331. data/test/unit/state/state_without_cached_lambda_value_test.rb +25 -0
  332. data/test/unit/state/state_without_name_test.rb +39 -0
  333. data/test/unit/state_collection/state_collection_by_default_test.rb +21 -0
  334. data/test/unit/state_collection/state_collection_string_test.rb +35 -0
  335. data/test/unit/state_collection/state_collection_test.rb +74 -0
  336. data/test/unit/state_collection/state_collection_with_custom_state_values_test.rb +29 -0
  337. data/test/unit/state_collection/state_collection_with_event_transitions_test.rb +39 -0
  338. data/test/unit/state_collection/state_collection_with_initial_state_test.rb +40 -0
  339. data/test/unit/state_collection/state_collection_with_namespace_test.rb +21 -0
  340. data/test/unit/state_collection/state_collection_with_state_behaviors_test.rb +40 -0
  341. data/test/unit/state_collection/state_collection_with_state_matchers_test.rb +29 -0
  342. data/test/unit/state_collection/state_collection_with_transition_callbacks_test.rb +40 -0
  343. data/test/unit/state_context/state_context_proxy_test.rb +26 -0
  344. data/test/unit/state_context/state_context_proxy_with_if_and_unless_conditions_test.rb +42 -0
  345. data/test/unit/state_context/state_context_proxy_with_if_condition_test.rb +64 -0
  346. data/test/unit/state_context/state_context_proxy_with_multiple_if_conditions_test.rb +32 -0
  347. data/test/unit/state_context/state_context_proxy_with_multiple_unless_conditions_test.rb +32 -0
  348. data/test/unit/state_context/state_context_proxy_with_unless_condition_test.rb +64 -0
  349. data/test/unit/state_context/state_context_proxy_without_conditions_test.rb +31 -0
  350. data/test/unit/state_context/state_context_test.rb +28 -0
  351. data/test/unit/state_context/state_context_transition_test.rb +104 -0
  352. data/test/unit/state_context/state_context_with_matching_transition_test.rb +27 -0
  353. data/test/unit/state_machine/state_machine_by_default_test.rb +12 -0
  354. data/test/unit/state_machine/state_machine_test.rb +20 -0
  355. data/test/unit/transition/transition_after_being_performed_test.rb +48 -0
  356. data/test/unit/transition/transition_after_being_persisted_test.rb +46 -0
  357. data/test/unit/transition/transition_after_being_rolled_back_test.rb +35 -0
  358. data/test/unit/transition/transition_equality_test.rb +52 -0
  359. data/test/unit/transition/transition_loopback_test.rb +18 -0
  360. data/test/unit/transition/transition_test.rb +96 -0
  361. data/test/unit/transition/transition_transient_test.rb +20 -0
  362. data/test/unit/transition/transition_with_action_test.rb +27 -0
  363. data/test/unit/transition/transition_with_after_callbacks_skipped_test.rb +127 -0
  364. data/test/unit/transition/transition_with_after_callbacks_test.rb +93 -0
  365. data/test/unit/transition/transition_with_around_callbacks_test.rb +141 -0
  366. data/test/unit/transition/transition_with_before_callbacks_skipped_test.rb +30 -0
  367. data/test/unit/transition/transition_with_before_callbacks_test.rb +104 -0
  368. data/test/unit/transition/transition_with_custom_machine_attribute_test.rb +28 -0
  369. data/test/unit/transition/transition_with_different_states_test.rb +18 -0
  370. data/test/unit/transition/transition_with_dynamic_to_value_test.rb +19 -0
  371. data/test/unit/transition/transition_with_failure_callbacks_test.rb +84 -0
  372. data/test/unit/transition/transition_with_invalid_nodes_test.rb +29 -0
  373. data/test/unit/transition/transition_with_mixed_callbacks_test.rb +105 -0
  374. data/test/unit/transition/transition_with_multiple_after_callbacks_test.rb +40 -0
  375. data/test/unit/transition/transition_with_multiple_around_callbacks_test.rb +114 -0
  376. data/test/unit/transition/transition_with_multiple_before_callbacks_test.rb +40 -0
  377. data/test/unit/transition/transition_with_multiple_failure_callbacks_test.rb +40 -0
  378. data/test/unit/transition/transition_with_namespace_test.rb +47 -0
  379. data/test/unit/transition/transition_with_perform_arguments_test.rb +35 -0
  380. data/test/unit/transition/transition_with_transactions_test.rb +42 -0
  381. data/test/unit/transition/transition_without_callbacks_test.rb +33 -0
  382. data/test/unit/transition/transition_without_reading_state_test.rb +22 -0
  383. data/test/unit/transition/transition_without_running_action_test.rb +47 -0
  384. data/test/unit/transition_collection/attribute_transition_collection_by_default_test.rb +23 -0
  385. data/test/unit/transition_collection/attribute_transition_collection_marshalling_test.rb +64 -0
  386. data/test/unit/transition_collection/attribute_transition_collection_with_action_error_test.rb +44 -0
  387. data/test/unit/transition_collection/attribute_transition_collection_with_action_failed_test.rb +44 -0
  388. data/test/unit/transition_collection/attribute_transition_collection_with_after_callback_error_test.rb +32 -0
  389. data/test/unit/transition_collection/attribute_transition_collection_with_after_callback_halt_test.rb +33 -0
  390. data/test/unit/transition_collection/attribute_transition_collection_with_around_after_yield_callback_error_test.rb +32 -0
  391. data/test/unit/transition_collection/attribute_transition_collection_with_around_callback_after_yield_error_test.rb +32 -0
  392. data/test/unit/transition_collection/attribute_transition_collection_with_around_callback_after_yield_halt_test.rb +33 -0
  393. data/test/unit/transition_collection/attribute_transition_collection_with_around_callback_before_yield_halt_test.rb +33 -0
  394. data/test/unit/transition_collection/attribute_transition_collection_with_before_callback_error_test.rb +32 -0
  395. data/test/unit/transition_collection/attribute_transition_collection_with_before_callback_halt_test.rb +33 -0
  396. data/test/unit/transition_collection/attribute_transition_collection_with_callbacks_test.rb +68 -0
  397. data/test/unit/transition_collection/attribute_transition_collection_with_event_transitions_test.rb +41 -0
  398. data/test/unit/transition_collection/attribute_transition_collection_with_events_test.rb +44 -0
  399. data/test/unit/transition_collection/attribute_transition_collection_with_skipped_after_callbacks_test.rb +42 -0
  400. data/test/unit/transition_collection/transition_collection_by_default_test.rb +23 -0
  401. data/test/unit/transition_collection/transition_collection_empty_with_block_test.rb +23 -0
  402. data/test/unit/transition_collection/transition_collection_empty_without_block_test.rb +12 -0
  403. data/test/unit/transition_collection/transition_collection_invalid_test.rb +21 -0
  404. data/test/unit/transition_collection/transition_collection_partial_invalid_test.rb +69 -0
  405. data/test/unit/transition_collection/transition_collection_test.rb +26 -0
  406. data/test/unit/transition_collection/transition_collection_valid_test.rb +57 -0
  407. data/test/unit/transition_collection/transition_collection_with_action_error_test.rb +66 -0
  408. data/test/unit/transition_collection/transition_collection_with_action_failed_test.rb +60 -0
  409. data/test/unit/transition_collection/transition_collection_with_action_hook_and_block_test.rb +17 -0
  410. data/test/unit/transition_collection/transition_collection_with_action_hook_and_skipped_action_test.rb +17 -0
  411. data/test/unit/transition_collection/transition_collection_with_action_hook_and_skipped_after_callbacks_test.rb +37 -0
  412. data/test/unit/transition_collection/transition_collection_with_action_hook_base_test.rb +34 -0
  413. data/test/unit/transition_collection/transition_collection_with_action_hook_error_test.rb +29 -0
  414. data/test/unit/transition_collection/transition_collection_with_action_hook_invalid_test.rb +17 -0
  415. data/test/unit/transition_collection/transition_collection_with_action_hook_multiple_test.rb +79 -0
  416. data/test/unit/transition_collection/transition_collection_with_action_hook_test.rb +45 -0
  417. data/test/unit/transition_collection/transition_collection_with_action_hook_with_different_actions_test.rb +48 -0
  418. data/test/unit/transition_collection/transition_collection_with_action_hook_with_nil_action_test.rb +42 -0
  419. data/test/unit/transition_collection/transition_collection_with_after_callback_halt_test.rb +51 -0
  420. data/test/unit/transition_collection/transition_collection_with_before_callback_halt_test.rb +47 -0
  421. data/test/unit/transition_collection/transition_collection_with_block_test.rb +46 -0
  422. data/test/unit/transition_collection/transition_collection_with_callbacks_test.rb +135 -0
  423. data/test/unit/transition_collection/transition_collection_with_different_actions_test.rb +189 -0
  424. data/test/unit/transition_collection/transition_collection_with_duplicate_actions_test.rb +48 -0
  425. data/test/unit/transition_collection/transition_collection_with_empty_actions_test.rb +41 -0
  426. data/test/unit/transition_collection/transition_collection_with_mixed_actions_test.rb +41 -0
  427. data/test/unit/transition_collection/transition_collection_with_skipped_actions_and_block_test.rb +34 -0
  428. data/test/unit/transition_collection/transition_collection_with_skipped_actions_test.rb +69 -0
  429. data/test/unit/transition_collection/transition_collection_with_skipped_after_callbacks_and_around_callbacks_test.rb +53 -0
  430. data/test/unit/transition_collection/transition_collection_with_skipped_after_callbacks_test.rb +34 -0
  431. data/test/unit/transition_collection/transition_collection_with_transactions_test.rb +65 -0
  432. data/test/unit/transition_collection/transition_collection_without_transactions_test.rb +29 -0
  433. metadata +888 -101
  434. data/spec/models/auto_shop_spec.rb +0 -41
  435. data/spec/models/car_spec.rb +0 -90
  436. data/spec/models/motorcycle_spec.rb +0 -44
  437. data/spec/models/traffic_light_spec.rb +0 -56
  438. data/spec/models/vehicle_spec.rb +0 -580
  439. data/spec/spec_helper.rb +0 -7
  440. data/spec/state_machines/assertions_spec.rb +0 -31
  441. data/spec/state_machines/branch_spec.rb +0 -827
  442. data/spec/state_machines/callbacks_spec.rb +0 -706
  443. data/spec/state_machines/errors_spec.rb +0 -1
  444. data/spec/state_machines/event_collection_spec.rb +0 -401
  445. data/spec/state_machines/event_spec.rb +0 -1140
  446. data/spec/state_machines/helper_spec.rb +0 -14
  447. data/spec/state_machines/integration_base_spec.rb +0 -12
  448. data/spec/state_machines/integration_spec.rb +0 -132
  449. data/spec/state_machines/invalid_parallel_transition_spec.rb +0 -18
  450. data/spec/state_machines/invalid_transition_spec.rb +0 -114
  451. data/spec/state_machines/machine_collection_spec.rb +0 -606
  452. data/spec/state_machines/machine_spec.rb +0 -3176
  453. data/spec/state_machines/matcher_helpers_spec.rb +0 -39
  454. data/spec/state_machines/matcher_spec.rb +0 -157
  455. data/spec/state_machines/node_collection_spec.rb +0 -371
  456. data/spec/state_machines/path_collection_spec.rb +0 -271
  457. data/spec/state_machines/path_spec.rb +0 -488
  458. data/spec/state_machines/state_collection_spec.rb +0 -352
  459. data/spec/state_machines/state_context_spec.rb +0 -442
  460. data/spec/state_machines/state_machine_spec.rb +0 -29
  461. data/spec/state_machines/state_spec.rb +0 -970
  462. data/spec/state_machines/transition_collection_spec.rb +0 -2199
  463. data/spec/state_machines/transition_spec.rb +0 -1558
  464. data/spec/support/migration_helpers.rb +0 -59
  465. data/spec/support/models.rb +0 -6
@@ -0,0 +1,28 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class CallbackWithBoundMethodAndArgumentsTest < StateMachinesTest
4
+ def setup
5
+ @object = Object.new
6
+ end
7
+
8
+ def test_should_include_single_argument_if_specified
9
+ context = nil
10
+ callback = StateMachines::Callback.new(:before, do: lambda { |arg1| context = [arg1] }, bind_to_object: true)
11
+ callback.call(@object, {}, 1)
12
+ assert_equal [1], context
13
+ end
14
+
15
+ def test_should_include_multiple_arguments_if_specified
16
+ context = nil
17
+ callback = StateMachines::Callback.new(:before, do: lambda { |arg1, arg2, arg3| context = [arg1, arg2, arg3] }, bind_to_object: true)
18
+ callback.call(@object, {}, 1, 2, 3)
19
+ assert_equal [1, 2, 3], context
20
+ end
21
+
22
+ def test_should_include_arguments_if_splat_used
23
+ context = nil
24
+ callback = StateMachines::Callback.new(:before, do: lambda { |*args| context = args }, bind_to_object: true)
25
+ callback.call(@object, {}, 1, 2, 3)
26
+ assert_equal [1, 2, 3], context
27
+ end
28
+ end
@@ -0,0 +1,35 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class CallbackWithBoundMethodTest < StateMachinesTest
4
+ def setup
5
+ @object = Object.new
6
+ end
7
+
8
+ def test_should_call_method_within_the_context_of_the_object_for_block_methods
9
+ context = nil
10
+ callback = StateMachines::Callback.new(:before, do: lambda { |*args| context = [self] + args }, bind_to_object: true)
11
+ callback.call(@object, {}, 1, 2, 3)
12
+
13
+ assert_equal [@object, 1, 2, 3], context
14
+ end
15
+
16
+ def test_should_ignore_option_for_symbolic_methods
17
+ class << @object
18
+ attr_reader :context
19
+
20
+ def after_ignite(*args)
21
+ @context = args
22
+ end
23
+ end
24
+
25
+ callback = StateMachines::Callback.new(:before, do: :after_ignite, bind_to_object: true)
26
+ callback.call(@object)
27
+
28
+ assert_equal [], @object.context
29
+ end
30
+
31
+ def test_should_ignore_option_for_string_methods
32
+ callback = StateMachines::Callback.new(:before, do: '[1, 2, 3]', bind_to_object: true)
33
+ assert callback.call(@object)
34
+ end
35
+ end
@@ -0,0 +1,18 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class CallbackWithDoMethodTest < StateMachinesTest
4
+ def setup
5
+ @callback = StateMachines::Callback.new(:before, do: lambda { |*args| @args = args })
6
+
7
+ @object = Object.new
8
+ @result = @callback.call(@object)
9
+ end
10
+
11
+ def test_should_be_successful
12
+ assert @result
13
+ end
14
+
15
+ def test_should_call_with_empty_context
16
+ assert_equal [@object], @args
17
+ end
18
+ end
@@ -0,0 +1,32 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class CallbackWithExplicitRequirementsTest < StateMachinesTest
4
+ def setup
5
+ @object = Object.new
6
+ @callback = StateMachines::Callback.new(:before, from: :parked, to: :idling, on: :ignite, do: lambda {})
7
+ end
8
+
9
+ def test_should_call_with_empty_context
10
+ assert @callback.call(@object, {})
11
+ end
12
+
13
+ def test_should_not_call_if_from_not_included
14
+ refute @callback.call(@object, from: :idling)
15
+ end
16
+
17
+ def test_should_not_call_if_to_not_included
18
+ refute @callback.call(@object, to: :parked)
19
+ end
20
+
21
+ def test_should_not_call_if_on_not_included
22
+ refute @callback.call(@object, on: :park)
23
+ end
24
+
25
+ def test_should_call_if_all_requirements_met
26
+ assert @callback.call(@object, from: :parked, to: :idling, on: :ignite)
27
+ end
28
+
29
+ def test_should_include_in_known_states
30
+ assert_equal [:parked, :idling], @callback.known_states
31
+ end
32
+ end
@@ -0,0 +1,17 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class CallbackWithIfConditionTest < StateMachinesTest
4
+ def setup
5
+ @object = Object.new
6
+ end
7
+
8
+ def test_should_call_if_true
9
+ callback = StateMachines::Callback.new(:before, if: lambda { true }, do: lambda {})
10
+ assert callback.call(@object)
11
+ end
12
+
13
+ def test_should_not_call_if_false
14
+ callback = StateMachines::Callback.new(:before, if: lambda { false }, do: lambda {})
15
+ refute callback.call(@object)
16
+ end
17
+ end
@@ -0,0 +1,32 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class CallbackWithImplicitRequirementsTest < StateMachinesTest
4
+ def setup
5
+ @object = Object.new
6
+ @callback = StateMachines::Callback.new(:before, parked: :idling, on: :ignite, do: lambda {})
7
+ end
8
+
9
+ def test_should_call_with_empty_context
10
+ assert @callback.call(@object, {})
11
+ end
12
+
13
+ def test_should_not_call_if_from_not_included
14
+ refute @callback.call(@object, from: :idling)
15
+ end
16
+
17
+ def test_should_not_call_if_to_not_included
18
+ refute @callback.call(@object, to: :parked)
19
+ end
20
+
21
+ def test_should_not_call_if_on_not_included
22
+ refute @callback.call(@object, on: :park)
23
+ end
24
+
25
+ def test_should_call_if_all_requirements_met
26
+ assert @callback.call(@object, from: :parked, to: :idling, on: :ignite)
27
+ end
28
+
29
+ def test_should_include_in_known_states
30
+ assert_equal [:parked, :idling], @callback.known_states
31
+ end
32
+ end
@@ -0,0 +1,18 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class CallbackWithMethodArgumentTest < StateMachinesTest
4
+ def setup
5
+ @callback = StateMachines::Callback.new(:before, lambda { |*args| @args = args })
6
+
7
+ @object = Object.new
8
+ @result = @callback.call(@object)
9
+ end
10
+
11
+ def test_should_be_successful
12
+ assert @result
13
+ end
14
+
15
+ def test_should_call_with_empty_context
16
+ assert_equal [@object], @args
17
+ end
18
+ end
@@ -0,0 +1,31 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class CallbackWithMixedMethodsTest < StateMachinesTest
4
+ def setup
5
+ @callback = StateMachines::Callback.new(:before, :run_argument, do: :run_do) do |object|
6
+ object.callbacks << :block
7
+ end
8
+
9
+ class << @object = Object.new
10
+ attr_accessor :callbacks
11
+
12
+ def run_argument
13
+ (@callbacks ||= []) << :argument
14
+ end
15
+
16
+ def run_do
17
+ (@callbacks ||= []) << :do
18
+ end
19
+ end
20
+
21
+ @result = @callback.call(@object)
22
+ end
23
+
24
+ def test_should_be_successful
25
+ assert @result
26
+ end
27
+
28
+ def test_should_call_each_callback_in_order
29
+ assert_equal [:argument, :do, :block], @object.callbacks
30
+ end
31
+ end
@@ -0,0 +1,21 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class CallbackWithMultipleBoundMethodsTest < StateMachinesTest
4
+ def setup
5
+ @object = Object.new
6
+
7
+ first_context = nil
8
+ second_context = nil
9
+
10
+ @callback = StateMachines::Callback.new(:before, do: [lambda { first_context = self }, lambda { second_context = self }], bind_to_object: true)
11
+ @callback.call(@object)
12
+
13
+ @first_context = first_context
14
+ @second_context = second_context
15
+ end
16
+
17
+ def test_should_call_each_method_within_the_context_of_the_object
18
+ assert_equal @object, @first_context
19
+ assert_equal @object, @second_context
20
+ end
21
+ end
@@ -0,0 +1,29 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class CallbackWithMultipleDoMethodsTest < StateMachinesTest
4
+ def setup
5
+ @callback = StateMachines::Callback.new(:before, do: [:run_1, :run_2])
6
+
7
+ class << @object = Object.new
8
+ attr_accessor :callbacks
9
+
10
+ def run_1
11
+ (@callbacks ||= []) << :run_1
12
+ end
13
+
14
+ def run_2
15
+ (@callbacks ||= []) << :run_2
16
+ end
17
+ end
18
+
19
+ @result = @callback.call(@object)
20
+ end
21
+
22
+ def test_should_be_successful
23
+ assert @result
24
+ end
25
+
26
+ def test_should_call_each_callback_in_order
27
+ assert_equal [:run_1, :run_2], @object.callbacks
28
+ end
29
+ end
@@ -0,0 +1,29 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class CallbackWithMultipleMethodArgumentsTest < StateMachinesTest
4
+ def setup
5
+ @callback = StateMachines::Callback.new(:before, :run_1, :run_2)
6
+
7
+ class << @object = Object.new
8
+ attr_accessor :callbacks
9
+
10
+ def run_1
11
+ (@callbacks ||= []) << :run_1
12
+ end
13
+
14
+ def run_2
15
+ (@callbacks ||= []) << :run_2
16
+ end
17
+ end
18
+
19
+ @result = @callback.call(@object)
20
+ end
21
+
22
+ def test_should_be_successful
23
+ assert @result
24
+ end
25
+
26
+ def test_should_call_each_callback_in_order
27
+ assert_equal [:run_1, :run_2], @object.callbacks
28
+ end
29
+ end
@@ -0,0 +1,22 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class CallbackWithTerminatorTest < StateMachinesTest
4
+ def setup
5
+ @object = Object.new
6
+ end
7
+
8
+ def test_should_not_halt_if_terminator_does_not_match
9
+ callback = StateMachines::Callback.new(:before, do: lambda { false }, terminator: lambda { |result| result == true })
10
+ callback.call(@object)
11
+ end
12
+
13
+ def test_should_halt_if_terminator_matches
14
+ callback = StateMachines::Callback.new(:before, do: lambda { false }, terminator: lambda { |result| result == false })
15
+ assert_throws(:halt) { callback.call(@object) }
16
+ end
17
+
18
+ def test_should_halt_if_terminator_matches_any_method
19
+ callback = StateMachines::Callback.new(:before, do: [lambda { true }, lambda { false }], terminator: lambda { |result| result == false })
20
+ assert_throws(:halt) { callback.call(@object) }
21
+ end
22
+ end
@@ -0,0 +1,14 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class CallbackWithUnboundMethodTest < StateMachinesTest
4
+ def setup
5
+ @callback = StateMachines::Callback.new(:before, do: lambda { |*args| @context = args.unshift(self) })
6
+
7
+ @object = Object.new
8
+ @callback.call(@object, {}, 1, 2, 3)
9
+ end
10
+
11
+ def test_should_call_method_outside_the_context_of_the_object
12
+ assert_equal [self, @object, 1, 2, 3], @context
13
+ end
14
+ end
@@ -0,0 +1,17 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class CallbackWithUnlessConditionTest < StateMachinesTest
4
+ def setup
5
+ @object = Object.new
6
+ end
7
+
8
+ def test_should_call_if_false
9
+ callback = StateMachines::Callback.new(:before, unless: lambda { false }, do: lambda {})
10
+ assert callback.call(@object)
11
+ end
12
+
13
+ def test_should_not_call_if_true
14
+ callback = StateMachines::Callback.new(:before, unless: lambda { true }, do: lambda {})
15
+ refute callback.call(@object)
16
+ end
17
+ end
@@ -0,0 +1,14 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class CallbackWithoutArgumentsTest < StateMachinesTest
4
+ def setup
5
+ @callback = StateMachines::Callback.new(:before, do: lambda { |object| @arg = object })
6
+
7
+ @object = Object.new
8
+ @callback.call(@object, {}, 1, 2, 3)
9
+ end
10
+
11
+ def test_should_call_method_with_object_as_argument
12
+ assert_equal @object, @arg
13
+ end
14
+ end
@@ -0,0 +1,12 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class CallbackWithoutTerminatorTest < StateMachinesTest
4
+ def setup
5
+ @object = Object.new
6
+ end
7
+
8
+ def test_should_not_halt_if_result_is_false
9
+ callback = StateMachines::Callback.new(:before, do: lambda { false }, terminator: nil)
10
+ callback.call(@object)
11
+ end
12
+ end
@@ -0,0 +1,21 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class ErrorByDefaultTest < StateMachinesTest
4
+ def setup
5
+ @machine = StateMachines::Machine.new(Class.new)
6
+ @collection = StateMachines::NodeCollection.new(@machine)
7
+ end
8
+
9
+ def test_should_not_have_any_nodes
10
+ assert_equal 0, @collection.length
11
+ end
12
+
13
+ def test_should_have_a_machine
14
+ assert_equal @machine, @collection.machine
15
+ end
16
+
17
+ def test_should_index_by_name
18
+ @collection << object = Struct.new(:name).new(:parked)
19
+ assert_equal object, @collection[:parked]
20
+ end
21
+ end
@@ -0,0 +1,23 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class ErrorWithMessageTest < StateMachinesTest
4
+ def setup
5
+ @machine = StateMachines::Machine.new(Class.new)
6
+ @collection = StateMachines::NodeCollection.new(@machine)
7
+ end
8
+
9
+ def test_should_raise_exception_if_invalid_option_specified
10
+ exception = assert_raises(ArgumentError) { StateMachines::NodeCollection.new(@machine, invalid: true) }
11
+ assert_equal 'Unknown key: :invalid. Valid keys are: :index', exception.message
12
+ end
13
+
14
+ def test_should_raise_exception_on_lookup_if_invalid_index_specified
15
+ exception = assert_raises(ArgumentError) { @collection[:something, :invalid] }
16
+ assert_equal 'Invalid index: :invalid', exception.message
17
+ end
18
+
19
+ def test_should_raise_exception_on_fetch_if_invalid_index_specified
20
+ exception = assert_raises(ArgumentError) { @collection.fetch(:something, :invalid) }
21
+ assert_equal 'Invalid index: :invalid', exception.message
22
+ end
23
+ end
@@ -0,0 +1,8 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class EvalHelpersBaseTest < StateMachinesTest
4
+ include StateMachines::EvalHelpers
5
+
6
+ def default_test
7
+ end
8
+ end
@@ -0,0 +1,14 @@
1
+ require_relative '../../test_helper'
2
+ require_relative '../../unit/eval_helper/eval_helpers_base_test'
3
+
4
+ class EvalHelpersProcBlockAndExplicitArgumentsTest < EvalHelpersBaseTest
5
+ def setup
6
+ @object = Object.new
7
+ @proc = lambda { |object, arg1, arg2, arg3, block| [object, arg1, arg2, arg3, block] }
8
+ end
9
+
10
+ def test_should_call_method_on_object_with_all_arguments_and_block
11
+ block = lambda { true }
12
+ assert_equal [@object, 1, 2, 3, block], evaluate_method(@object, @proc, 1, 2, 3, &block)
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ require_relative '../../test_helper'
2
+ require_relative '../../unit/eval_helper/eval_helpers_base_test'
3
+
4
+ class EvalHelpersProcBlockAndImplicitArgumentsTest < EvalHelpersBaseTest
5
+ def setup
6
+ @object = Object.new
7
+ @proc = lambda { |*args| args }
8
+ end
9
+
10
+ def test_should_call_method_on_object_with_all_arguments_and_block
11
+ block = lambda { true }
12
+ assert_equal [@object, 1, 2, 3, block], evaluate_method(@object, @proc, 1, 2, 3, &block)
13
+ end
14
+ end
@@ -0,0 +1,13 @@
1
+ require_relative '../../test_helper'
2
+ require_relative '../../unit/eval_helper/eval_helpers_base_test'
3
+
4
+ class EvalHelpersProcTest < EvalHelpersBaseTest
5
+ def setup
6
+ @object = Object.new
7
+ @proc = ->(obj) { obj }
8
+ end
9
+
10
+ def test_should_call_proc_with_object_as_argument
11
+ assert_equal @object, evaluate_method(@object, @proc, 1, 2, 3)
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ require_relative '../../test_helper'
2
+ require_relative '../../unit/eval_helper/eval_helpers_base_test'
3
+
4
+ class EvalHelpersProcWithArgumentsTest < EvalHelpersBaseTest
5
+ def setup
6
+ @object = Object.new
7
+ @proc = lambda { |*args| args }
8
+ end
9
+
10
+ def test_should_call_method_with_all_arguments
11
+ assert_equal [@object, 1, 2, 3], evaluate_method(@object, @proc, 1, 2, 3)
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ require_relative '../../test_helper'
2
+ require_relative '../../unit/eval_helper/eval_helpers_base_test'
3
+
4
+ class EvalHelpersProcWithBlockTest < EvalHelpersBaseTest
5
+ def setup
6
+ @object = Object.new
7
+ @proc = lambda { |_obj, block| block.call }
8
+ end
9
+
10
+ def test_should_call_method_on_object_with_block
11
+ assert_equal true, evaluate_method(@object, @proc, 1, 2, 3) { true }
12
+ end
13
+ end
@@ -0,0 +1,18 @@
1
+ require_relative '../../test_helper'
2
+ require_relative '../../unit/eval_helper/eval_helpers_base_test'
3
+
4
+ class EvalHelpersProcWithoutArgumentsTest < EvalHelpersBaseTest
5
+ def setup
6
+ @object = Object.new
7
+ @proc = lambda { |*args| args }
8
+ class << @proc
9
+ def arity
10
+ 0
11
+ end
12
+ end
13
+ end
14
+
15
+ def test_should_call_proc_with_no_arguments
16
+ assert_equal [], evaluate_method(@object, @proc, 1, 2, 3)
17
+ end
18
+ end
@@ -0,0 +1,14 @@
1
+ require_relative '../../test_helper'
2
+ require_relative '../../unit/eval_helper/eval_helpers_base_test'
3
+
4
+ class EvalHelpersProcWithBlockWithoutObjectTest < EvalHelpersBaseTest
5
+ def setup
6
+ @object = Object.new
7
+ @proc = lambda { |block| [block] }
8
+ end
9
+
10
+ def test_should_call_proc_with_block_only
11
+ block = lambda { true }
12
+ assert_equal [block], evaluate_method(@object, @proc, 1, 2, 3, &block)
13
+ end
14
+ end
@@ -0,0 +1,19 @@
1
+ require_relative '../../test_helper'
2
+ require_relative '../../unit/eval_helper/eval_helpers_base_test'
3
+
4
+ class EvalHelpersProcWithBlockWithoutArgumentsTest < EvalHelpersBaseTest
5
+ def setup
6
+ @object = Object.new
7
+ @proc = lambda { |*args| args }
8
+ class << @proc
9
+ def arity
10
+ 0
11
+ end
12
+ end
13
+ end
14
+
15
+ def test_should_call_proc_without_arguments
16
+ block = lambda { true }
17
+ assert_equal [], evaluate_method(@object, @proc, 1, 2, 3, &block)
18
+ end
19
+ end
@@ -0,0 +1,25 @@
1
+ require_relative '../../test_helper'
2
+ require_relative '../../unit/eval_helper/eval_helpers_base_test.rb'
3
+
4
+ class EvalHelpersStringTest < EvalHelpersBaseTest
5
+ def setup
6
+ @object = Object.new
7
+ end
8
+
9
+ def test_should_evaluate_string
10
+ assert_equal 1, evaluate_method(@object, '1')
11
+ end
12
+
13
+ def test_should_evaluate_string_within_object_context
14
+ @object.instance_variable_set('@value', 1)
15
+ assert_equal 1, evaluate_method(@object, '@value')
16
+ end
17
+
18
+ def test_should_ignore_additional_arguments
19
+ assert_equal 1, evaluate_method(@object, '1', 2, 3, 4)
20
+ end
21
+ end
22
+
23
+
24
+
25
+
@@ -0,0 +1,12 @@
1
+ require_relative '../../test_helper'
2
+ require_relative '../../unit/eval_helper/eval_helpers_base_test'
3
+
4
+ class EvalHelpersStringWithBlockTest < EvalHelpersBaseTest
5
+ def setup
6
+ @object = Object.new
7
+ end
8
+
9
+ def test_should_call_method_on_object_with_block
10
+ assert_equal 1, evaluate_method(@object, 'yield') { 1 }
11
+ end
12
+ end
@@ -0,0 +1,20 @@
1
+ require_relative '../../test_helper'
2
+ require_relative '../../unit/eval_helper/eval_helpers_base_test'
3
+
4
+ class EvalHelpersSymbolMethodMissingTest < EvalHelpersBaseTest
5
+ def setup
6
+ class << (@object = Object.new)
7
+ def method_missing(symbol, *args)
8
+ send("method_missing_#{symbol}", *args)
9
+ end
10
+
11
+ def method_missing_callback(*args)
12
+ args
13
+ end
14
+ end
15
+ end
16
+
17
+ def test_should_call_dynamic_method_with_all_arguments
18
+ assert_equal [1, 2, 3], evaluate_method(@object, :callback, 1, 2, 3)
19
+ end
20
+ end
@@ -0,0 +1,17 @@
1
+ require_relative '../../test_helper'
2
+ require_relative '../../unit/eval_helper/eval_helpers_base_test'
3
+
4
+ class EvalHelpersSymbolPrivateTest < EvalHelpersBaseTest
5
+ def setup
6
+ class << (@object = Object.new)
7
+ private
8
+ def callback
9
+ true
10
+ end
11
+ end
12
+ end
13
+
14
+ def test_should_call_method_on_object_with_no_arguments
15
+ assert_equal true, evaluate_method(@object, :callback, 1, 2, 3)
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ require_relative '../../test_helper'
2
+ require_relative '../../unit/eval_helper/eval_helpers_base_test'
3
+
4
+ class EvalHelpersSymbolProtectedTest < EvalHelpersBaseTest
5
+ def setup
6
+ class << (@object = Object.new)
7
+ protected
8
+ def callback
9
+ true
10
+ end
11
+ end
12
+ end
13
+
14
+ def test_should_call_method_on_object_with_no_arguments
15
+ assert_equal true, evaluate_method(@object, :callback, 1, 2, 3)
16
+ end
17
+ end