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,43 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class StateWithNameTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new
6
+ @machine = StateMachines::Machine.new(@klass)
7
+ @machine.states << @state = StateMachines::State.new(@machine, :parked)
8
+ end
9
+
10
+ def test_should_have_a_name
11
+ assert_equal :parked, @state.name
12
+ end
13
+
14
+ def test_should_have_a_qualified_name
15
+ assert_equal :parked, @state.name
16
+ end
17
+
18
+ def test_should_have_a_human_name
19
+ assert_equal 'parked', @state.human_name
20
+ end
21
+
22
+ def test_should_use_stringify_the_name_as_the_value
23
+ assert_equal 'parked', @state.value
24
+ end
25
+
26
+ def test_should_match_stringified_name
27
+ assert @state.matches?('parked')
28
+ refute @state.matches?('idling')
29
+ end
30
+
31
+ def test_should_not_include_value_in_description
32
+ assert_equal 'parked', @state.description
33
+ end
34
+
35
+ def test_should_allow_using_human_name_in_description
36
+ @state.human_name = 'Parked'
37
+ assert_equal 'Parked', @state.description(human_name: true)
38
+ end
39
+
40
+ def test_should_define_predicate
41
+ assert @klass.new.respond_to?(:parked?)
42
+ end
43
+ end
@@ -0,0 +1,22 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class StateWithNamespaceTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new
6
+ @machine = StateMachines::Machine.new(@klass, namespace: 'alarm')
7
+ @machine.states << @state = StateMachines::State.new(@machine, :active)
8
+ @object = @klass.new
9
+ end
10
+
11
+ def test_should_have_a_name
12
+ assert_equal :active, @state.name
13
+ end
14
+
15
+ def test_should_have_a_qualified_name
16
+ assert_equal :alarm_active, @state.qualified_name
17
+ end
18
+
19
+ def test_should_namespace_predicate
20
+ assert @object.respond_to?(:alarm_active?)
21
+ end
22
+ end
@@ -0,0 +1,35 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class StateWithNilValueTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new
6
+ @machine = StateMachines::Machine.new(@klass)
7
+ @machine.states << @state = StateMachines::State.new(@machine, :parked, value: nil)
8
+ end
9
+
10
+ def test_should_have_a_name
11
+ assert_equal :parked, @state.name
12
+ end
13
+
14
+ def test_should_have_a_nil_value
15
+ assert_nil @state.value
16
+ end
17
+
18
+ def test_should_match_nil_values
19
+ assert @state.matches?(nil)
20
+ end
21
+
22
+ def test_should_have_a_description
23
+ assert_equal 'parked (nil)', @state.description
24
+ end
25
+
26
+ def test_should_have_a_description_with_human_name
27
+ @state.human_name = 'Parked'
28
+ assert_equal 'Parked (nil)', @state.description(human_name: true)
29
+ end
30
+
31
+ def test_should_define_predicate
32
+ object = @klass.new
33
+ assert object.respond_to?(:parked?)
34
+ end
35
+ end
@@ -0,0 +1,45 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class StateWithRedefinedContextMethodTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new
6
+ @machine = StateMachines::Machine.new(@klass)
7
+ @machine.states << @state = StateMachines::State.new(@machine, 'on')
8
+
9
+ old_context = nil
10
+ old_speed_method = nil
11
+ @state.context do
12
+ old_context = self
13
+
14
+ def speed
15
+ 0
16
+ end
17
+
18
+ old_speed_method = instance_method(:speed)
19
+ end
20
+ @old_context = old_context
21
+ @old_speed_method = old_speed_method
22
+
23
+ current_context = nil
24
+ current_speed_method = nil
25
+ @state.context do
26
+ current_context = self
27
+
28
+ def speed
29
+ 'green'
30
+ end
31
+
32
+ current_speed_method = instance_method(:speed)
33
+ end
34
+ @current_context = current_context
35
+ @current_speed_method = current_speed_method
36
+ end
37
+
38
+ def test_should_track_latest_defined_method
39
+ assert_equal @current_speed_method, @state.context_methods[:"__state_on_speed_#{@current_context.object_id}__"]
40
+ end
41
+
42
+ def test_should_have_the_same_context
43
+ assert_equal @current_context, @old_context
44
+ end
45
+ end
@@ -0,0 +1,32 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class StateWithSymbolicValueTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new
6
+ @machine = StateMachines::Machine.new(@klass)
7
+ @machine.states << @state = StateMachines::State.new(@machine, :parked, value: :parked)
8
+ end
9
+
10
+ def test_should_use_custom_value
11
+ assert_equal :parked, @state.value
12
+ end
13
+
14
+ def test_should_not_include_value_in_description
15
+ assert_equal 'parked', @state.description
16
+ end
17
+
18
+ def test_should_allow_human_name_in_description
19
+ @state.human_name = 'Parked'
20
+ assert_equal 'Parked', @state.description(human_name: true)
21
+ end
22
+
23
+ def test_should_match_symbolic_value
24
+ assert @state.matches?(:parked)
25
+ refute @state.matches?('parked')
26
+ end
27
+
28
+ def test_should_define_predicate
29
+ object = @klass.new
30
+ assert object.respond_to?(:parked?)
31
+ end
32
+ end
@@ -0,0 +1,40 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class StateWithValidInheritedMethodCallForCurrentStateTest < StateMachinesTest
4
+ def setup
5
+ @superclass = Class.new do
6
+ def speed(arg = nil)
7
+ [arg]
8
+ end
9
+ end
10
+ @klass = Class.new(@superclass)
11
+ @machine = StateMachines::Machine.new(@klass, initial: :idling)
12
+ @ancestors = @klass.ancestors
13
+ @state = @machine.state(:idling)
14
+ @state.context do
15
+ def speed(arg = nil)
16
+ [arg] + super(2)
17
+ end
18
+ end
19
+
20
+ @object = @klass.new
21
+ end
22
+
23
+ def test_should_not_raise_an_exception
24
+ @state.call(@object, :speed, method_missing: lambda { fail })
25
+ end
26
+
27
+ def test_should_be_able_to_call_super
28
+ assert_equal [1, 2], @state.call(@object, :speed, 1)
29
+ end
30
+
31
+ def test_should_allow_redefinition
32
+ @state.context do
33
+ def speed(arg = nil)
34
+ [arg] + super(3)
35
+ end
36
+ end
37
+
38
+ assert_equal [1, 3], @state.call(@object, :speed, 1)
39
+ end
40
+ end
@@ -0,0 +1,33 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class StateWithValidMethodCallForCurrentStateTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new
6
+ @machine = StateMachines::Machine.new(@klass, initial: :idling)
7
+ @ancestors = @klass.ancestors
8
+ @state = @machine.state(:idling)
9
+ @state.context do
10
+ def speed(arg = nil)
11
+ block_given? ? [arg, yield] : arg
12
+ end
13
+ end
14
+
15
+ @object = @klass.new
16
+ end
17
+
18
+ def test_should_not_raise_an_exception
19
+ @state.call(@object, :speed, method_missing: lambda { fail })
20
+ end
21
+
22
+ def test_should_pass_arguments_through
23
+ assert_equal 1, @state.call(@object, :speed, 1, method_missing: lambda {})
24
+ end
25
+
26
+ def test_should_pass_blocks_through
27
+ assert_equal [nil, 1], @state.call(@object, :speed) { 1 }
28
+ end
29
+
30
+ def test_should_pass_both_arguments_and_blocks_through
31
+ assert_equal [1, 2], @state.call(@object, :speed, 1, method_missing: lambda {}) { 2 }
32
+ end
33
+ end
@@ -0,0 +1,41 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class StateWithValidMethodCallForDifferentStateTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new
6
+ @machine = StateMachines::Machine.new(@klass)
7
+ @ancestors = @klass.ancestors
8
+ @machine.states << @state = StateMachines::State.new(@machine, :idling)
9
+ @state.context do
10
+ def speed
11
+ 0
12
+ end
13
+ end
14
+
15
+ @object = @klass.new
16
+ end
17
+
18
+ def test_should_call_method_missing_arg
19
+ assert_equal 1, @state.call(@object, :speed, method_missing: lambda { 1 })
20
+ end
21
+
22
+ def test_should_raise_invalid_context_on_no_method_error
23
+ exception = assert_raises(StateMachines::InvalidContext) do
24
+ @state.call(@object, :speed, method_missing: lambda { fail NoMethodError.new('Invalid', :speed, []) })
25
+ end
26
+ assert_equal @object, exception.object
27
+ assert_equal 'State nil for :state is not a valid context for calling #speed', exception.message
28
+ end
29
+
30
+ def test_should_raise_original_error_on_no_method_error_with_different_arguments
31
+ assert_raises(NoMethodError) do
32
+ @state.call(@object, :speed, method_missing: lambda { fail NoMethodError.new('Invalid', :speed, [1]) })
33
+ end
34
+ end
35
+
36
+ def test_should_raise_original_error_on_no_method_error_for_different_method
37
+ assert_raises(NoMethodError) do
38
+ @state.call(@object, :speed, method_missing: lambda { fail NoMethodError.new('Invalid', :rpm, []) })
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,25 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class StateWithoutCachedLambdaValueTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new
6
+ @machine = StateMachines::Machine.new(@klass)
7
+ @dynamic_value = -> { 'value' }
8
+ @machine.states << @state = StateMachines::State.new(@machine, :parked, value: @dynamic_value)
9
+ end
10
+
11
+ def test_should_not_be_caching
12
+ refute @state.cache
13
+ end
14
+
15
+ def test_should_evaluate_value_each_time
16
+ value = @state.value
17
+ refute_same value, @state.value
18
+ end
19
+
20
+ def test_should_not_update_value_index_for_state_collection
21
+ @state.value
22
+ assert_nil @machine.states['value', :value]
23
+ assert_equal @state, @machine.states[@dynamic_value, :value]
24
+ end
25
+ end
@@ -0,0 +1,39 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class StateWithoutNameTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new
6
+ @machine = StateMachines::Machine.new(@klass)
7
+ @machine.states << @state = StateMachines::State.new(@machine, nil)
8
+ end
9
+
10
+ def test_should_have_a_nil_name
11
+ assert_nil @state.name
12
+ end
13
+
14
+ def test_should_have_a_nil_qualified_name
15
+ assert_nil @state.qualified_name
16
+ end
17
+
18
+ def test_should_have_an_empty_human_name
19
+ assert_equal 'nil', @state.human_name
20
+ end
21
+
22
+ def test_should_have_a_nil_value
23
+ assert_nil @state.value
24
+ end
25
+
26
+ def test_should_not_redefine_nil_predicate
27
+ object = @klass.new
28
+ refute object.nil?
29
+ refute object.respond_to?('?')
30
+ end
31
+
32
+ def test_should_have_a_description
33
+ assert_equal 'nil', @state.description
34
+ end
35
+
36
+ def test_should_have_a_description_using_human_name
37
+ assert_equal 'nil', @state.description(human_name: true)
38
+ end
39
+ end
@@ -0,0 +1,21 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class StateCollectionByDefaultTest < StateMachinesTest
4
+ def setup
5
+ @machine = StateMachines::Machine.new(Class.new)
6
+ @states = StateMachines::StateCollection.new(@machine)
7
+ end
8
+
9
+ def test_should_not_have_any_nodes
10
+ assert_equal 0, @states.length
11
+ end
12
+
13
+ def test_should_have_a_machine
14
+ assert_equal @machine, @states.machine
15
+ end
16
+
17
+ def test_should_be_empty_by_priority
18
+ assert_equal [], @states.by_priority
19
+ end
20
+ end
21
+
@@ -0,0 +1,35 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class StateCollectionStringTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new
6
+ @machine = StateMachines::Machine.new(@klass)
7
+ @states = StateMachines::StateCollection.new(@machine)
8
+
9
+ @states << @nil = StateMachines::State.new(@machine, nil)
10
+ @states << @parked = StateMachines::State.new(@machine, 'parked')
11
+ @machine.states.concat(@states)
12
+
13
+ @object = @klass.new
14
+ end
15
+
16
+ def test_should_index_by_name
17
+ assert_equal @parked, @states['parked', :name]
18
+ end
19
+
20
+ def test_should_index_by_name_by_default
21
+ assert_equal @parked, @states['parked']
22
+ end
23
+
24
+ def test_should_index_by_symbol_name
25
+ assert_equal @parked, @states[:parked]
26
+ end
27
+
28
+ def test_should_index_by_qualified_name
29
+ assert_equal @parked, @states['parked', :qualified_name]
30
+ end
31
+
32
+ def test_should_index_by_symbol_qualified_name
33
+ assert_equal @parked, @states[:parked, :qualified_name]
34
+ end
35
+ end
@@ -0,0 +1,74 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class StateCollectionTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new
6
+ @machine = StateMachines::Machine.new(@klass)
7
+ @states = StateMachines::StateCollection.new(@machine)
8
+
9
+ @states << @nil = StateMachines::State.new(@machine, nil)
10
+ @states << @parked = StateMachines::State.new(@machine, :parked)
11
+ @states << @idling = StateMachines::State.new(@machine, :idling)
12
+ @machine.states.concat(@states)
13
+
14
+ @object = @klass.new
15
+ end
16
+
17
+ def test_should_index_by_name
18
+ assert_equal @parked, @states[:parked, :name]
19
+ end
20
+
21
+ def test_should_index_by_name_by_default
22
+ assert_equal @parked, @states[:parked]
23
+ end
24
+
25
+ def test_should_index_by_string_name
26
+ assert_equal @parked, @states['parked']
27
+ end
28
+
29
+ def test_should_index_by_qualified_name
30
+ assert_equal @parked, @states[:parked, :qualified_name]
31
+ end
32
+
33
+ def test_should_index_by_string_qualified_name
34
+ assert_equal @parked, @states['parked', :qualified_name]
35
+ end
36
+
37
+ def test_should_index_by_value
38
+ assert_equal @parked, @states['parked', :value]
39
+ end
40
+
41
+ def test_should_not_match_if_value_does_not_match
42
+ refute @states.matches?(@object, :parked)
43
+ refute @states.matches?(@object, :idling)
44
+ end
45
+
46
+ def test_should_match_if_value_matches
47
+ assert @states.matches?(@object, nil)
48
+ end
49
+
50
+ def test_raise_exception_if_matching_invalid_state
51
+ assert_raises(IndexError) { @states.matches?(@object, :invalid) }
52
+ end
53
+
54
+ def test_should_find_state_for_object_if_value_is_known
55
+ @object.state = 'parked'
56
+ assert_equal @parked, @states.match(@object)
57
+ end
58
+
59
+ def test_should_find_bang_state_for_object_if_value_is_known
60
+ @object.state = 'parked'
61
+ assert_equal @parked, @states.match!(@object)
62
+ end
63
+
64
+ def test_should_not_find_state_for_object_with_unknown_value
65
+ @object.state = 'invalid'
66
+ assert_nil @states.match(@object)
67
+ end
68
+
69
+ def test_should_raise_exception_if_finding_bang_state_for_object_with_unknown_value
70
+ @object.state = 'invalid'
71
+ exception = assert_raises(ArgumentError) { @states.match!(@object) }
72
+ assert_equal '"invalid" is not a known state value', exception.message
73
+ end
74
+ end
@@ -0,0 +1,29 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class StateCollectionWithCustomStateValuesTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new
6
+ @machine = StateMachines::Machine.new(@klass)
7
+ @states = StateMachines::StateCollection.new(@machine)
8
+
9
+ @states << @state = StateMachines::State.new(@machine, :parked, value: 1)
10
+ @machine.states.concat(@states)
11
+
12
+ @object = @klass.new
13
+ @object.state = 1
14
+ end
15
+
16
+ def test_should_match_if_value_matches
17
+ assert @states.matches?(@object, :parked)
18
+ end
19
+
20
+ def test_should_not_match_if_value_does_not_match
21
+ @object.state = 2
22
+ refute @states.matches?(@object, :parked)
23
+ end
24
+
25
+ def test_should_find_state_for_object_if_value_is_known
26
+ assert_equal @state, @states.match(@object)
27
+ end
28
+ end
29
+
@@ -0,0 +1,39 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class StateCollectionWithEventTransitionsTest < StateMachinesTest
4
+ def setup
5
+ @machine = StateMachines::Machine.new(Class.new)
6
+ @states = StateMachines::StateCollection.new(@machine)
7
+
8
+ @states << @parked = StateMachines::State.new(@machine, :parked)
9
+ @states << @idling = StateMachines::State.new(@machine, :idling)
10
+ @machine.states.concat(@states)
11
+
12
+ @machine.event :ignite do
13
+ transition to: :idling
14
+ end
15
+ end
16
+
17
+ def test_should_order_states_after_initial_state
18
+ @parked.initial = true
19
+ assert_equal [@parked, @idling], @states.by_priority
20
+ end
21
+
22
+ def test_should_order_states_before_states_with_behaviors
23
+ @parked.context do
24
+ def speed
25
+ 0
26
+ end
27
+ end
28
+ assert_equal [@idling, @parked], @states.by_priority
29
+ end
30
+
31
+ def test_should_order_states_before_other_states
32
+ assert_equal [@idling, @parked], @states.by_priority
33
+ end
34
+
35
+ def test_should_order_state_before_callback_states
36
+ @machine.before_transition from: :parked, do: lambda {}
37
+ assert_equal [@idling, @parked], @states.by_priority
38
+ end
39
+ end
@@ -0,0 +1,40 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class StateCollectionWithInitialStateTest < StateMachinesTest
4
+ def setup
5
+ @machine = StateMachines::Machine.new(Class.new)
6
+ @states = StateMachines::StateCollection.new(@machine)
7
+
8
+ @states << @parked = StateMachines::State.new(@machine, :parked)
9
+ @states << @idling = StateMachines::State.new(@machine, :idling)
10
+ @machine.states.concat(@states)
11
+
12
+ @parked.initial = true
13
+ end
14
+
15
+ def test_should_order_state_before_transition_states
16
+ @machine.event :ignite do
17
+ transition to: :idling
18
+ end
19
+ assert_equal [@parked, @idling], @states.by_priority
20
+ end
21
+
22
+ def test_should_order_state_before_states_with_behaviors
23
+ @idling.context do
24
+ def speed
25
+ 0
26
+ end
27
+ end
28
+ assert_equal [@parked, @idling], @states.by_priority
29
+ end
30
+
31
+ def test_should_order_state_before_other_states
32
+ assert_equal [@parked, @idling], @states.by_priority
33
+ end
34
+
35
+ def test_should_order_state_before_callback_states
36
+ @machine.before_transition from: :idling, do: lambda {}
37
+ assert_equal [@parked, @idling], @states.by_priority
38
+ end
39
+ end
40
+
@@ -0,0 +1,21 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class StateCollectionWithNamespaceTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new
6
+ @machine = StateMachines::Machine.new(@klass, namespace: 'vehicle')
7
+ @states = StateMachines::StateCollection.new(@machine)
8
+
9
+ @states << @state = StateMachines::State.new(@machine, :parked)
10
+ @machine.states.concat(@states)
11
+ end
12
+
13
+ def test_should_index_by_name
14
+ assert_equal @state, @states[:parked, :name]
15
+ end
16
+
17
+ def test_should_index_by_qualified_name
18
+ assert_equal @state, @states[:vehicle_parked, :qualified_name]
19
+ end
20
+ end
21
+
@@ -0,0 +1,40 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class StateCollectionWithStateBehaviorsTest < StateMachinesTest
4
+ def setup
5
+ @machine = StateMachines::Machine.new(Class.new)
6
+ @states = StateMachines::StateCollection.new(@machine)
7
+
8
+ @states << @parked = StateMachines::State.new(@machine, :parked)
9
+ @states << @idling = StateMachines::State.new(@machine, :idling)
10
+ @machine.states.concat(@states)
11
+
12
+ @idling.context do
13
+ def speed
14
+ 0
15
+ end
16
+ end
17
+ end
18
+
19
+ def test_should_order_states_after_initial_state
20
+ @parked.initial = true
21
+ assert_equal [@parked, @idling], @states.by_priority
22
+ end
23
+
24
+ def test_should_order_states_after_transition_states
25
+ @machine.event :ignite do
26
+ transition from: :parked
27
+ end
28
+ assert_equal [@parked, @idling], @states.by_priority
29
+ end
30
+
31
+ def test_should_order_states_before_other_states
32
+ assert_equal [@idling, @parked], @states.by_priority
33
+ end
34
+
35
+ def test_should_order_state_before_callback_states
36
+ @machine.before_transition from: :parked, do: lambda {}
37
+ assert_equal [@idling, @parked], @states.by_priority
38
+ end
39
+ end
40
+