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,27 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class LoopbackMatcherTest < StateMachinesTest
4
+ def setup
5
+ @matcher = StateMachines::LoopbackMatcher.instance
6
+ end
7
+
8
+ def test_should_have_no_values
9
+ assert_equal [], @matcher.values
10
+ end
11
+
12
+ def test_should_filter_all_values
13
+ assert_equal [], @matcher.filter([:parked, :idling])
14
+ end
15
+
16
+ def test_should_match_if_from_context_is_same
17
+ assert @matcher.matches?(:parked, from: :parked)
18
+ end
19
+
20
+ def test_should_not_match_if_from_context_is_different
21
+ refute @matcher.matches?(:parked, from: :idling)
22
+ end
23
+
24
+ def test_should_have_a_description
25
+ assert_equal 'same', @matcher.description
26
+ end
27
+ end
@@ -0,0 +1,15 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class MatcherByDefaultTest < StateMachinesTest
4
+ def setup
5
+ @matcher = StateMachines::Matcher.new
6
+ end
7
+
8
+ def test_should_have_no_values
9
+ assert_equal [], @matcher.values
10
+ end
11
+
12
+ def test_should_filter_all_values
13
+ assert_equal [], @matcher.filter([:parked, :idling])
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class MatcherWithMultipleValuesTest < StateMachinesTest
4
+ def setup
5
+ @matcher = StateMachines::Matcher.new([:parked, :idling])
6
+ end
7
+
8
+ def test_should_have_values
9
+ assert_equal [:parked, :idling], @matcher.values
10
+ end
11
+
12
+ def test_should_filter_unknown_values
13
+ assert_equal [:parked], @matcher.filter([:parked, :first_gear])
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class MatcherWithValueTest < StateMachinesTest
4
+ def setup
5
+ @matcher = StateMachines::Matcher.new(nil)
6
+ end
7
+
8
+ def test_should_have_values
9
+ assert_equal [nil], @matcher.values
10
+ end
11
+
12
+ def test_should_filter_unknown_values
13
+ assert_equal [nil], @matcher.filter([nil, :parked])
14
+ end
15
+ end
@@ -0,0 +1,30 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class WhitelistMatcherTest < StateMachinesTest
4
+ def setup
5
+ @matcher = StateMachines::WhitelistMatcher.new([:parked, :idling])
6
+ end
7
+
8
+ def test_should_have_values
9
+ assert_equal [:parked, :idling], @matcher.values
10
+ end
11
+
12
+ def test_should_filter_unknown_values
13
+ assert_equal [:parked, :idling], @matcher.filter([:parked, :idling, :first_gear])
14
+ end
15
+
16
+ def test_should_match_known_values
17
+ assert @matcher.matches?(:parked)
18
+ end
19
+
20
+ def test_should_not_match_unknown_values
21
+ refute @matcher.matches?(:first_gear)
22
+ end
23
+
24
+ def test_should_have_a_description
25
+ assert_equal '[:parked, :idling]', @matcher.description
26
+
27
+ matcher = StateMachines::WhitelistMatcher.new([:parked])
28
+ assert_equal ':parked', matcher.description
29
+ end
30
+ end
@@ -0,0 +1,14 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class MatcherHelpersAllTest < StateMachinesTest
4
+ include StateMachines::MatcherHelpers
5
+
6
+ def setup
7
+ @matcher = all
8
+ end
9
+
10
+ def test_should_build_an_all_matcher
11
+ assert_equal StateMachines::AllMatcher.instance, @matcher
12
+ end
13
+ end
14
+
@@ -0,0 +1,14 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class MatcherHelpersAnyTest < StateMachinesTest
4
+ include StateMachines::MatcherHelpers
5
+
6
+ def setup
7
+ @matcher = any
8
+ end
9
+
10
+ def test_should_build_an_all_matcher
11
+ assert_equal StateMachines::AllMatcher.instance, @matcher
12
+ end
13
+ end
14
+
@@ -0,0 +1,13 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class MatcherHelpersSameTest < StateMachinesTest
4
+ include StateMachines::MatcherHelpers
5
+
6
+ def setup
7
+ @matcher = same
8
+ end
9
+
10
+ def test_should_build_a_loopback_matcher
11
+ assert_equal StateMachines::LoopbackMatcher.instance, @matcher
12
+ end
13
+ end
@@ -0,0 +1,46 @@
1
+ require_relative '../../test_helper'
2
+ require_relative '../../files/node'
3
+
4
+ class NodeCollectionAfterBeingCopiedTest < StateMachinesTest
5
+ def setup
6
+ machine = StateMachines::Machine.new(Class.new)
7
+ @collection = StateMachines::NodeCollection.new(machine)
8
+ @collection << @parked = Node.new(:parked)
9
+
10
+ @contexts_run = contexts_run = []
11
+ @collection.context([:parked]) { contexts_run << :parked }
12
+ @contexts_run.clear
13
+
14
+ @copied_collection = @collection.dup
15
+ @copied_collection << @idling = Node.new(:idling)
16
+ @copied_collection.context([:first_gear]) { contexts_run << :first_gear }
17
+ end
18
+
19
+ def test_should_not_modify_the_original_list
20
+ assert_equal 1, @collection.length
21
+ assert_equal 2, @copied_collection.length
22
+ end
23
+
24
+ def test_should_not_modify_the_indices
25
+ assert_nil @collection[:idling]
26
+ assert_equal @idling, @copied_collection[:idling]
27
+ end
28
+
29
+ def test_should_copy_each_node
30
+ refute_same @parked, @copied_collection[:parked]
31
+ end
32
+
33
+ def test_should_not_run_contexts
34
+ assert_equal [], @contexts_run
35
+ end
36
+
37
+ def test_should_not_modify_contexts
38
+ @collection << Node.new(:first_gear)
39
+ assert_equal [], @contexts_run
40
+ end
41
+
42
+ def test_should_copy_contexts
43
+ @copied_collection << Node.new(:parked)
44
+ refute @contexts_run.empty?
45
+ end
46
+ end
@@ -0,0 +1,36 @@
1
+ require_relative '../../test_helper'
2
+ require_relative '../../files/node'
3
+
4
+ class NodeCollectionAfterUpdateTest < StateMachinesTest
5
+ def setup
6
+ machine = StateMachines::Machine.new(Class.new)
7
+ @collection = StateMachines::NodeCollection.new(machine, index: [:name, :value])
8
+
9
+ @parked = Node.new(:parked, 1)
10
+ @idling = Node.new(:idling, 2)
11
+
12
+ @collection << @parked << @idling
13
+
14
+ @parked.name = :parking
15
+ @parked.value = 0
16
+ @collection.update(@parked)
17
+ end
18
+
19
+ def test_should_not_change_the_index
20
+ assert_equal @parked, @collection.at(0)
21
+ end
22
+
23
+ def test_should_not_duplicate_in_the_collection
24
+ assert_equal 2, @collection.length
25
+ end
26
+
27
+ def test_should_add_each_indexed_key
28
+ assert_equal @parked, @collection[:parking]
29
+ assert_equal @parked, @collection[0, :value]
30
+ end
31
+
32
+ def test_should_remove_each_old_indexed_key
33
+ assert_nil @collection[:parked]
34
+ assert_nil @collection[1, :value]
35
+ end
36
+ end
@@ -0,0 +1,22 @@
1
+ require_relative '../../test_helper'
2
+ require_relative '../../files/node'
3
+
4
+ class NodeCollectionByDefaultTest < StateMachinesTest
5
+ def setup
6
+ @machine = StateMachines::Machine.new(Class.new)
7
+ @collection = StateMachines::NodeCollection.new(@machine)
8
+ end
9
+
10
+ def test_should_not_have_any_nodes
11
+ assert_equal 0, @collection.length
12
+ end
13
+
14
+ def test_should_have_a_machine
15
+ assert_equal @machine, @collection.machine
16
+ end
17
+
18
+ def test_should_index_by_name
19
+ @collection << object = Node.new(:parked)
20
+ assert_equal object, @collection[:parked]
21
+ end
22
+ end
@@ -0,0 +1,23 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class NodeCollectionTest < 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,42 @@
1
+ require_relative '../../test_helper'
2
+ require_relative '../../files/node'
3
+
4
+ class NodeCollectionWithIndicesTest < StateMachinesTest
5
+ def setup
6
+ machine = StateMachines::Machine.new(Class.new)
7
+ @collection = StateMachines::NodeCollection.new(machine, index: [:name, :value])
8
+
9
+ @object = Node.new(:parked, 1)
10
+ @collection << @object
11
+ end
12
+
13
+ def test_should_use_first_index_by_default_on_key_retrieval
14
+ assert_equal [:parked], @collection.keys
15
+ end
16
+
17
+ def test_should_allow_customizing_index_for_key_retrieval
18
+ assert_equal [1], @collection.keys(:value)
19
+ end
20
+
21
+ def test_should_use_first_index_by_default_on_lookup
22
+ assert_equal @object, @collection[:parked]
23
+ assert_nil @collection[1]
24
+ end
25
+
26
+ def test_should_allow_customizing_index_on_lookup
27
+ assert_equal @object, @collection[1, :value]
28
+ assert_nil @collection[:parked, :value]
29
+ end
30
+
31
+ def test_should_use_first_index_by_default_on_fetch
32
+ assert_equal @object, @collection.fetch(:parked)
33
+ exception = assert_raises(IndexError) { @collection.fetch(1) }
34
+ assert_equal '1 is an invalid name', exception.message
35
+ end
36
+
37
+ def test_should_allow_customizing_index_on_fetch
38
+ assert_equal @object, @collection.fetch(1, :value)
39
+ exception = assert_raises(IndexError) { @collection.fetch(:parked, :value) }
40
+ assert_equal ':parked is an invalid value', exception.message
41
+ end
42
+ end
@@ -0,0 +1,25 @@
1
+ require_relative '../../test_helper'
2
+ require_relative '../../files/node'
3
+
4
+ class NodeCollectionWithMatcherContextsTest < StateMachinesTest
5
+ def setup
6
+ machine = StateMachines::Machine.new(Class.new)
7
+ @collection = StateMachines::NodeCollection.new(machine)
8
+ @collection << Node.new(:parked)
9
+ end
10
+
11
+ def test_should_always_run_all_matcher_context
12
+ contexts_run = []
13
+ @collection.context([StateMachines::AllMatcher.instance]) { contexts_run << :all }
14
+ assert_equal [:all], contexts_run
15
+ end
16
+
17
+ def test_should_only_run_blacklist_matcher_if_not_matched
18
+ contexts_run = []
19
+ @collection.context([StateMachines::BlacklistMatcher.new([:parked])]) { contexts_run << :blacklist }
20
+ assert_equal [], contexts_run
21
+
22
+ @collection << Node.new(:idling)
23
+ assert_equal [:blacklist], contexts_run
24
+ end
25
+ end
@@ -0,0 +1,46 @@
1
+ require_relative '../../test_helper'
2
+ require_relative '../../files/node'
3
+
4
+ class NodeCollectionWithNodesTest < StateMachinesTest
5
+ def setup
6
+ @machine = StateMachines::Machine.new(Class.new)
7
+ @collection = StateMachines::NodeCollection.new(@machine)
8
+
9
+ @parked = Node.new(:parked, nil, @machine)
10
+ @idling = Node.new(:idling, nil, @machine)
11
+
12
+ @collection << @parked
13
+ @collection << @idling
14
+ end
15
+
16
+ def test_should_be_able_to_enumerate
17
+ order = []
18
+ @collection.each { |object| order << object }
19
+
20
+ assert_equal [@parked, @idling], order
21
+ end
22
+
23
+ def test_should_be_able_to_concatenate_multiple_nodes
24
+ @first_gear = Node.new(:first_gear, nil, @machine)
25
+ @second_gear = Node.new(:second_gear, nil, @machine)
26
+ @collection.concat([@first_gear, @second_gear])
27
+
28
+ order = []
29
+ @collection.each { |object| order << object }
30
+ assert_equal [@parked, @idling, @first_gear, @second_gear], order
31
+ end
32
+
33
+ def test_should_be_able_to_access_by_index
34
+ assert_equal @parked, @collection.at(0)
35
+ assert_equal @idling, @collection.at(1)
36
+ end
37
+
38
+ def test_should_deep_copy_machine_changes
39
+ new_machine = StateMachines::Machine.new(Class.new)
40
+ @collection.machine = new_machine
41
+
42
+ assert_equal new_machine, @collection.machine
43
+ assert_equal new_machine, @parked.machine
44
+ assert_equal new_machine, @idling.machine
45
+ end
46
+ end
@@ -0,0 +1,24 @@
1
+ require_relative '../../test_helper'
2
+ require_relative '../../files/node'
3
+
4
+ class NodeCollectionWithNumericIndexTest < StateMachinesTest
5
+ def setup
6
+ machine = StateMachines::Machine.new(Class.new)
7
+ @collection = StateMachines::NodeCollection.new(machine, index: [:name, :value])
8
+
9
+ @parked = Node.new(10, 1)
10
+ @collection << @parked
11
+ end
12
+
13
+ def test_should_index_by_name
14
+ assert_equal @parked, @collection[10]
15
+ end
16
+
17
+ def test_should_index_by_string_name
18
+ assert_equal @parked, @collection['10']
19
+ end
20
+
21
+ def test_should_index_by_symbol_name
22
+ assert_equal @parked, @collection[:'10']
23
+ end
24
+ end
@@ -0,0 +1,22 @@
1
+ require_relative '../../test_helper'
2
+ require_relative '../../files/node'
3
+
4
+ class NodeCollectionWithPostdefinedContextsTest < StateMachinesTest
5
+ def setup
6
+ machine = StateMachines::Machine.new(Class.new)
7
+ @collection = StateMachines::NodeCollection.new(machine)
8
+ @collection << Node.new(:parked)
9
+ end
10
+
11
+ def test_should_run_context_if_matched
12
+ contexts_run = []
13
+ @collection.context([:parked]) { contexts_run << :parked }
14
+ assert_equal [:parked], contexts_run
15
+ end
16
+
17
+ def test_should_not_run_contexts_if_not_matched
18
+ contexts_run = []
19
+ @collection.context([:idling]) { contexts_run << :idling }
20
+ assert_equal [], contexts_run
21
+ end
22
+ end
@@ -0,0 +1,23 @@
1
+ require_relative '../../test_helper'
2
+ require_relative '../../files/node'
3
+
4
+ class NodeCollectionWithPredefinedContextsTest < StateMachinesTest
5
+ def setup
6
+ machine = StateMachines::Machine.new(Class.new)
7
+ @collection = StateMachines::NodeCollection.new(machine)
8
+
9
+ @contexts_run = contexts_run = []
10
+ @collection.context([:parked]) { contexts_run << :parked }
11
+ @collection.context([:parked]) { contexts_run << :second_parked }
12
+ end
13
+
14
+ def test_should_run_contexts_in_the_order_defined
15
+ @collection << Node.new(:parked)
16
+ assert_equal [:parked, :second_parked], @contexts_run
17
+ end
18
+
19
+ def test_should_not_run_contexts_if_not_matched
20
+ @collection << Node.new(:idling)
21
+ assert_equal [], @contexts_run
22
+ end
23
+ end
@@ -0,0 +1,20 @@
1
+ require_relative '../../test_helper'
2
+ require_relative '../../files/node'
3
+
4
+ class NodeCollectionWithStringIndexTest < StateMachinesTest
5
+ def setup
6
+ machine = StateMachines::Machine.new(Class.new)
7
+ @collection = StateMachines::NodeCollection.new(machine, index: [:name, :value])
8
+
9
+ @parked = Node.new(:parked, 1)
10
+ @collection << @parked
11
+ end
12
+
13
+ def test_should_index_by_name
14
+ assert_equal @parked, @collection[:parked]
15
+ end
16
+
17
+ def test_should_index_by_string_name
18
+ assert_equal @parked, @collection['parked']
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ require_relative '../../test_helper'
2
+ require_relative '../../files/node'
3
+
4
+ class NodeCollectionWithSymbolIndexTest < StateMachinesTest
5
+ def setup
6
+ machine = StateMachines::Machine.new(Class.new)
7
+ @collection = StateMachines::NodeCollection.new(machine, index: [:name, :value])
8
+
9
+ @parked = Node.new('parked', 1)
10
+ @collection << @parked
11
+ end
12
+
13
+ def test_should_index_by_name
14
+ assert_equal @parked, @collection['parked']
15
+ end
16
+
17
+ def test_should_index_by_symbol_name
18
+ assert_equal @parked, @collection[:parked]
19
+ end
20
+ end
@@ -0,0 +1,30 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class NodeCollectionWithoutIndicesTest < StateMachinesTest
4
+ def setup
5
+ machine = StateMachines::Machine.new(Class.new)
6
+ @collection = StateMachines::NodeCollection.new(machine, index: {})
7
+ end
8
+
9
+ def test_should_allow_adding_node
10
+ @collection << Object.new
11
+ assert_equal 1, @collection.length
12
+ end
13
+
14
+ def test_should_not_allow_keys_retrieval
15
+ exception = assert_raises(ArgumentError) { @collection.keys }
16
+ assert_equal 'No indices configured', exception.message
17
+ end
18
+
19
+ def test_should_not_allow_lookup
20
+ @collection << Object.new
21
+ exception = assert_raises(ArgumentError) { @collection[0] }
22
+ assert_equal 'No indices configured', exception.message
23
+ end
24
+
25
+ def test_should_not_allow_fetching
26
+ @collection << Object.new
27
+ exception = assert_raises(ArgumentError) { @collection.fetch(0) }
28
+ assert_equal 'No indices configured', exception.message
29
+ end
30
+ end
@@ -0,0 +1,54 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class PathByDefaultTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new
6
+ @machine = StateMachines::Machine.new(@klass)
7
+ @object = @klass.new
8
+
9
+ @path = StateMachines::Path.new(@object, @machine)
10
+ end
11
+
12
+ def test_should_have_an_object
13
+ assert_equal @object, @path.object
14
+ end
15
+
16
+ def test_should_have_a_machine
17
+ assert_equal @machine, @path.machine
18
+ end
19
+
20
+ def test_should_not_have_walked_anywhere
21
+ assert_equal [], @path
22
+ end
23
+
24
+ def test_should_not_have_a_from_name
25
+ assert_nil @path.from_name
26
+ end
27
+
28
+ def test_should_have_no_from_states
29
+ assert_equal [], @path.from_states
30
+ end
31
+
32
+ def test_should_not_have_a_to_name
33
+ assert_nil @path.to_name
34
+ end
35
+
36
+ def test_should_have_no_to_states
37
+ assert_equal [], @path.to_states
38
+ end
39
+
40
+ def test_should_have_no_events
41
+ assert_equal [], @path.events
42
+ end
43
+
44
+ def test_should_not_be_able_to_walk_anywhere
45
+ walked = false
46
+ @path.walk { walked = true }
47
+ assert_equal false, walked
48
+ end
49
+
50
+ def test_should_not_be_complete
51
+ assert_equal false, @path.complete?
52
+ end
53
+ end
54
+
@@ -0,0 +1,14 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class PathTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new
6
+ @machine = StateMachines::Machine.new(@klass)
7
+ @object = @klass.new
8
+ end
9
+
10
+ def test_should_raise_exception_if_invalid_option_specified
11
+ exception = assert_raises(ArgumentError) { StateMachines::Path.new(@object, @machine, invalid: true) }
12
+ assert_equal 'Unknown key: :invalid. Valid keys are: :target, :guard', exception.message
13
+ end
14
+ end
@@ -0,0 +1,40 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class PathWithAvailableTransitionsAfterReachingTargetTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new
6
+ @machine = StateMachines::Machine.new(@klass)
7
+ @machine.state :parked, :idling
8
+ @machine.event :ignite do
9
+ transition parked: :idling
10
+ end
11
+ @machine.event :shift_up do
12
+ transition parked: :first_gear
13
+ end
14
+ @machine.event :park do
15
+ transition [:idling, :first_gear] => :parked
16
+ end
17
+
18
+ @object = @klass.new
19
+ @object.state = 'parked'
20
+
21
+ @path = StateMachines::Path.new(@object, @machine, target: :parked)
22
+ @path.concat([
23
+ @ignite_transition = StateMachines::Transition.new(@object, @machine, :ignite, :parked, :idling),
24
+ @park_transition = StateMachines::Transition.new(@object, @machine, :park, :idling, :parked)
25
+ ])
26
+ end
27
+
28
+ def test_should_be_complete
29
+ assert_equal true, @path.complete?
30
+ end
31
+
32
+ def test_should_be_able_to_walk
33
+ paths = []
34
+ @path.walk { |path| paths << path }
35
+ assert_equal [
36
+ [@ignite_transition, @park_transition, StateMachines::Transition.new(@object, @machine, :shift_up, :parked, :first_gear)]
37
+ ], paths
38
+ end
39
+ end
40
+