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,22 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class AssertExclusiveKeysTest < StateMachinesTest
4
+ def test_should_not_raise_exception_if_no_keys_found
5
+ { on: :park }.assert_exclusive_keys(:only, :except)
6
+ end
7
+
8
+ def test_should_not_raise_exception_if_one_key_found
9
+ { only: :parked }.assert_exclusive_keys(:only, :except)
10
+ { except: :parked }.assert_exclusive_keys(:only, :except)
11
+ end
12
+
13
+ def test_should_raise_exception_if_two_keys_found
14
+ exception = assert_raises(ArgumentError) { { only: :parked, except: :parked }.assert_exclusive_keys(:only, :except) }
15
+ assert_equal 'Conflicting keys: only, except', exception.message
16
+ end
17
+
18
+ def test_should_raise_exception_if_multiple_keys_found
19
+ exception = assert_raises(ArgumentError) { { only: :parked, except: :parked, on: :park }.assert_exclusive_keys(:only, :except, :with) }
20
+ assert_equal 'Conflicting keys: only, except', exception.message
21
+ end
22
+ end
@@ -0,0 +1,12 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class AssertValidKeysTest < StateMachinesTest
4
+ def test_should_not_raise_exception_if_key_is_valid
5
+ { name: 'foo', value: 'bar' }.assert_valid_keys(:name, :value, :force)
6
+ end
7
+
8
+ def test_should_raise_exception_if_key_is_invalid
9
+ exception = assert_raises(ArgumentError) { { name: 'foo', value: 'bar', invalid: true }.assert_valid_keys(:name, :value, :force) }
10
+ assert_equal 'Unknown key: :invalid. Valid keys are: :name, :value, :force', exception.message
11
+ end
12
+ end
@@ -0,0 +1,28 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class BranchTest < StateMachinesTest
4
+ def setup
5
+ @branch = StateMachines::Branch.new(from: :parked, to: :idling)
6
+ end
7
+
8
+ def test_should_not_raise_exception_if_implicit_option_specified
9
+ StateMachines::Branch.new(invalid: :valid)
10
+ end
11
+
12
+ def test_should_not_have_an_if_condition
13
+ assert_nil @branch.if_condition
14
+ end
15
+
16
+ def test_should_not_have_an_unless_condition
17
+ assert_nil @branch.unless_condition
18
+ end
19
+
20
+ def test_should_have_a_state_requirement
21
+ assert_equal 1, @branch.state_requirements.length
22
+ end
23
+
24
+ def test_should_raise_an_exception_if_invalid_match_option_specified
25
+ exception = assert_raises(ArgumentError) { @branch.match(Object.new, invalid: true) }
26
+ assert_equal 'Unknown key: :invalid. Valid keys are: :from, :to, :on, :guard', exception.message
27
+ end
28
+ end
@@ -0,0 +1,27 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class BranchWithConflictingConditionalsTest < StateMachinesTest
4
+ def setup
5
+ @object = Object.new
6
+ end
7
+
8
+ def test_should_match_if_if_is_true_and_unless_is_false
9
+ branch = StateMachines::Branch.new(if: lambda { true }, unless: lambda { false })
10
+ assert branch.match(@object)
11
+ end
12
+
13
+ def test_should_not_match_if_if_is_false_and_unless_is_true
14
+ branch = StateMachines::Branch.new(if: lambda { false }, unless: lambda { true })
15
+ refute branch.match(@object)
16
+ end
17
+
18
+ def test_should_not_match_if_if_is_false_and_unless_is_false
19
+ branch = StateMachines::Branch.new(if: lambda { false }, unless: lambda { false })
20
+ refute branch.match(@object)
21
+ end
22
+
23
+ def test_should_not_match_if_if_is_true_and_unless_is_true
24
+ branch = StateMachines::Branch.new(if: lambda { true }, unless: lambda { true })
25
+ refute branch.match(@object)
26
+ end
27
+ end
@@ -0,0 +1,8 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class BranchWithConflictingFromRequirementsTest < StateMachinesTest
4
+ def test_should_raise_an_exception
5
+ exception = assert_raises(ArgumentError) { StateMachines::Branch.new(from: :parked, except_from: :parked) }
6
+ assert_equal 'Conflicting keys: from, except_from', exception.message
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class BranchWithConflictingOnRequirementsTest < StateMachinesTest
4
+ def test_should_raise_an_exception
5
+ exception = assert_raises(ArgumentError) { StateMachines::Branch.new(on: :ignite, except_on: :ignite) }
6
+ assert_equal 'Conflicting keys: on, except_on', exception.message
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class BranchWithConflictingToRequirementsTest < StateMachinesTest
4
+ def test_should_raise_an_exception
5
+ exception = assert_raises(ArgumentError) { StateMachines::Branch.new(to: :idling, except_to: :idling) }
6
+ assert_equal 'Conflicting keys: to, except_to', exception.message
7
+ end
8
+ end
@@ -0,0 +1,41 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class BranchWithDifferentRequirementsTest < StateMachinesTest
4
+ def setup
5
+ @object = Object.new
6
+ @branch = StateMachines::Branch.new(from: :parked, to: :idling, on: :ignite)
7
+ end
8
+
9
+ def test_should_match_empty_query
10
+ assert @branch.matches?(@object)
11
+ end
12
+
13
+ def test_should_match_if_all_requirements_match
14
+ assert @branch.matches?(@object, from: :parked, to: :idling, on: :ignite)
15
+ end
16
+
17
+ def test_should_not_match_if_from_not_included
18
+ refute @branch.matches?(@object, from: :idling)
19
+ end
20
+
21
+ def test_should_not_match_if_to_not_included
22
+ refute @branch.matches?(@object, to: :parked)
23
+ end
24
+
25
+ def test_should_not_match_if_on_not_included
26
+ refute @branch.matches?(@object, on: :park)
27
+ end
28
+
29
+ def test_should_be_nil_if_unmatched
30
+ assert_nil @branch.match(@object, from: :parked, to: :idling, on: :park)
31
+ end
32
+
33
+ def test_should_include_all_known_states
34
+ assert_equal [:parked, :idling], @branch.known_states
35
+ end
36
+
37
+ def test_should_not_duplicate_known_statse
38
+ branch = StateMachines::Branch.new(except_from: :idling, to: :idling, on: :ignite)
39
+ assert_equal [:idling], branch.known_states
40
+ end
41
+ end
@@ -0,0 +1,8 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class BranchWithExceptFromMatcherRequirementTest < StateMachinesTest
4
+ def test_should_raise_an_exception
5
+ exception = assert_raises(ArgumentError) { StateMachines::Branch.new(except_from: StateMachines::AllMatcher.instance) }
6
+ assert_equal ':except_from option cannot use matchers; use :from instead', exception.message
7
+ end
8
+ end
@@ -0,0 +1,36 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class BranchWithExceptFromRequirementTest < StateMachinesTest
4
+ def setup
5
+ @object = Object.new
6
+ @branch = StateMachines::Branch.new(except_from: :parked)
7
+ end
8
+
9
+ def test_should_use_a_blacklist_matcher
10
+ assert_instance_of StateMachines::BlacklistMatcher, @branch.state_requirements.first[:from]
11
+ end
12
+
13
+ def test_should_match_if_not_included
14
+ assert @branch.matches?(@object, from: :idling)
15
+ end
16
+
17
+ def test_should_not_match_if_included
18
+ refute @branch.matches?(@object, from: :parked)
19
+ end
20
+
21
+ def test_should_match_if_nil
22
+ assert @branch.matches?(@object, from: nil)
23
+ end
24
+
25
+ def test_should_ignore_to
26
+ assert @branch.matches?(@object, from: :idling, to: :parked)
27
+ end
28
+
29
+ def test_should_ignore_on
30
+ assert @branch.matches?(@object, from: :idling, on: :ignite)
31
+ end
32
+
33
+ def test_should_be_included_in_known_states
34
+ assert_equal [:parked], @branch.known_states
35
+ end
36
+ end
@@ -0,0 +1,8 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class BranchWithExceptOnMatcherRequirementTest < StateMachinesTest
4
+ def test_should_raise_an_exception
5
+ exception = assert_raises(ArgumentError) { StateMachines::Branch.new(except_on: StateMachines::AllMatcher.instance) }
6
+ assert_equal ':except_on option cannot use matchers; use :on instead', exception.message
7
+ end
8
+ end
@@ -0,0 +1,36 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class BranchWithExceptOnRequirementTest < StateMachinesTest
4
+ def setup
5
+ @object = Object.new
6
+ @branch = StateMachines::Branch.new(except_on: :ignite)
7
+ end
8
+
9
+ def test_should_use_a_blacklist_matcher
10
+ assert_instance_of StateMachines::BlacklistMatcher, @branch.event_requirement
11
+ end
12
+
13
+ def test_should_match_if_not_included
14
+ assert @branch.matches?(@object, on: :park)
15
+ end
16
+
17
+ def test_should_not_match_if_included
18
+ refute @branch.matches?(@object, on: :ignite)
19
+ end
20
+
21
+ def test_should_match_if_nil
22
+ assert @branch.matches?(@object, on: nil)
23
+ end
24
+
25
+ def test_should_ignore_to
26
+ assert @branch.matches?(@object, on: :park, to: :idling)
27
+ end
28
+
29
+ def test_should_ignore_from
30
+ assert @branch.matches?(@object, on: :park, from: :parked)
31
+ end
32
+
33
+ def test_should_not_be_included_in_known_states
34
+ assert_equal [], @branch.known_states
35
+ end
36
+ end
@@ -0,0 +1,8 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class BranchWithExceptToMatcherRequirementTest < StateMachinesTest
4
+ def test_should_raise_an_exception
5
+ exception = assert_raises(ArgumentError) { StateMachines::Branch.new(except_to: StateMachines::AllMatcher.instance) }
6
+ assert_equal ':except_to option cannot use matchers; use :to instead', exception.message
7
+ end
8
+ end
@@ -0,0 +1,36 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class BranchWithExceptToRequirementTest < StateMachinesTest
4
+ def setup
5
+ @object = Object.new
6
+ @branch = StateMachines::Branch.new(except_to: :idling)
7
+ end
8
+
9
+ def test_should_use_a_blacklist_matcher
10
+ assert_instance_of StateMachines::BlacklistMatcher, @branch.state_requirements.first[:to]
11
+ end
12
+
13
+ def test_should_match_if_not_included
14
+ assert @branch.matches?(@object, to: :parked)
15
+ end
16
+
17
+ def test_should_not_match_if_included
18
+ refute @branch.matches?(@object, to: :idling)
19
+ end
20
+
21
+ def test_should_match_if_nil
22
+ assert @branch.matches?(@object, to: nil)
23
+ end
24
+
25
+ def test_should_ignore_from
26
+ assert @branch.matches?(@object, to: :parked, from: :idling)
27
+ end
28
+
29
+ def test_should_ignore_on
30
+ assert @branch.matches?(@object, to: :parked, on: :ignite)
31
+ end
32
+
33
+ def test_should_be_included_in_known_states
34
+ assert_equal [:idling], @branch.known_states
35
+ end
36
+ end
@@ -0,0 +1,20 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class BranchWithFromMatcherRequirementTest < StateMachinesTest
4
+ def setup
5
+ @object = Object.new
6
+ @branch = StateMachines::Branch.new(from: StateMachines::BlacklistMatcher.new([:idling, :parked]))
7
+ end
8
+
9
+ def test_should_match_if_included
10
+ assert @branch.matches?(@object, from: :first_gear)
11
+ end
12
+
13
+ def test_should_not_match_if_not_included
14
+ refute @branch.matches?(@object, from: :idling)
15
+ end
16
+
17
+ def test_include_values_in_known_states
18
+ assert_equal [:idling, :parked], @branch.known_states
19
+ end
20
+ end
@@ -0,0 +1,45 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class BranchWithFromRequirementTest < StateMachinesTest
4
+ def setup
5
+ @object = Object.new
6
+ @branch = StateMachines::Branch.new(from: :parked)
7
+ end
8
+
9
+ def test_should_use_a_whitelist_matcher
10
+ assert_instance_of StateMachines::WhitelistMatcher, @branch.state_requirements.first[:from]
11
+ end
12
+
13
+ def test_should_match_if_not_specified
14
+ assert @branch.matches?(@object, to: :idling)
15
+ end
16
+
17
+ def test_should_match_if_included
18
+ assert @branch.matches?(@object, from: :parked)
19
+ end
20
+
21
+ def test_should_not_match_if_not_included
22
+ refute @branch.matches?(@object, from: :idling)
23
+ end
24
+
25
+ def test_should_not_match_if_nil
26
+ refute @branch.matches?(@object, from: nil)
27
+ end
28
+
29
+ def test_should_ignore_to
30
+ assert @branch.matches?(@object, from: :parked, to: :idling)
31
+ end
32
+
33
+ def test_should_ignore_on
34
+ assert @branch.matches?(@object, from: :parked, on: :ignite)
35
+ end
36
+
37
+ def test_should_be_included_in_known_states
38
+ assert_equal [:parked], @branch.known_states
39
+ end
40
+
41
+ def test_should_include_requirement_in_match
42
+ match = @branch.match(@object, from: :parked)
43
+ assert_equal @branch.state_requirements.first[:from], match[:from]
44
+ end
45
+ end
@@ -0,0 +1,27 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class BranchWithIfConditionalTest < StateMachinesTest
4
+ def setup
5
+ @object = Object.new
6
+ end
7
+
8
+ def test_should_have_an_if_condition
9
+ branch = StateMachines::Branch.new(if: lambda { true })
10
+ refute_nil branch.if_condition
11
+ end
12
+
13
+ def test_should_match_if_true
14
+ branch = StateMachines::Branch.new(if: lambda { true })
15
+ assert branch.matches?(@object)
16
+ end
17
+
18
+ def test_should_not_match_if_false
19
+ branch = StateMachines::Branch.new(if: lambda { false })
20
+ refute branch.matches?(@object)
21
+ end
22
+
23
+ def test_should_be_nil_if_unmatched
24
+ branch = StateMachines::Branch.new(if: lambda { false })
25
+ assert_nil branch.match(@object)
26
+ end
27
+ end
@@ -0,0 +1,23 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class BranchWithImplicitAndExplicitRequirementsTest < StateMachinesTest
4
+ def setup
5
+ @branch = StateMachines::Branch.new(parked: :idling, from: :parked)
6
+ end
7
+
8
+ def test_should_create_multiple_requirements
9
+ assert_equal 2, @branch.state_requirements.length
10
+ end
11
+
12
+ def test_should_create_implicit_requirements_for_implicit_options
13
+ assert(@branch.state_requirements.any? do |state_requirement|
14
+ state_requirement[:from].values == [:parked] && state_requirement[:to].values == [:idling]
15
+ end)
16
+ end
17
+
18
+ def test_should_create_implicit_requirements_for_explicit_options
19
+ assert(@branch.state_requirements.any? do |state_requirement|
20
+ state_requirement[:from].values == [:from] && state_requirement[:to].values == [:parked]
21
+ end)
22
+ end
23
+ end
@@ -0,0 +1,20 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class BranchWithMultipleFromRequirementsTest < StateMachinesTest
4
+ def setup
5
+ @object = Object.new
6
+ @branch = StateMachines::Branch.new(from: [:idling, :parked])
7
+ end
8
+
9
+ def test_should_match_if_included
10
+ assert @branch.matches?(@object, from: :idling)
11
+ end
12
+
13
+ def test_should_not_match_if_not_included
14
+ refute @branch.matches?(@object, from: :first_gear)
15
+ end
16
+
17
+ def test_should_be_included_in_known_states
18
+ assert_equal [:idling, :parked], @branch.known_states
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class BranchWithImplicitRequirementTest < StateMachinesTest
4
+ def setup
5
+ @branch = StateMachines::Branch.new(parked: :idling, on: :ignite)
6
+ end
7
+
8
+ def test_should_create_an_event_requirement
9
+ assert_instance_of StateMachines::WhitelistMatcher, @branch.event_requirement
10
+ assert_equal [:ignite], @branch.event_requirement.values
11
+ end
12
+
13
+ def test_should_use_a_whitelist_from_matcher
14
+ assert_instance_of StateMachines::WhitelistMatcher, @branch.state_requirements.first[:from]
15
+ end
16
+
17
+ def test_should_use_a_whitelist_to_matcher
18
+ assert_instance_of StateMachines::WhitelistMatcher, @branch.state_requirements.first[:to]
19
+ end
20
+ end
@@ -0,0 +1,16 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class BranchWithImplicitToRequirementMatcherTest < StateMachinesTest
4
+ def setup
5
+ @matcher = StateMachines::BlacklistMatcher.new(:idling)
6
+ @branch = StateMachines::Branch.new(parked: @matcher)
7
+ end
8
+
9
+ def test_should_convert_from_to_whitelist_matcher
10
+ assert_instance_of StateMachines::WhitelistMatcher, @branch.state_requirements.first[:from]
11
+ end
12
+
13
+ def test_should_not_convert_to_to_whitelist_matcher
14
+ assert_equal @matcher, @branch.state_requirements.first[:to]
15
+ end
16
+ end
@@ -0,0 +1,20 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class BranchWithMultipleExceptFromRequirementsTest < StateMachinesTest
4
+ def setup
5
+ @object = Object.new
6
+ @branch = StateMachines::Branch.new(except_from: [:idling, :parked])
7
+ end
8
+
9
+ def test_should_match_if_not_included
10
+ assert @branch.matches?(@object, from: :first_gear)
11
+ end
12
+
13
+ def test_should_not_match_if_included
14
+ refute @branch.matches?(@object, from: :idling)
15
+ end
16
+
17
+ def test_should_be_included_in_known_states
18
+ assert_equal [:idling, :parked], @branch.known_states
19
+ end
20
+ end
@@ -0,0 +1,16 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class BranchWithMultipleExceptOnRequirementsTest < StateMachinesTest
4
+ def setup
5
+ @object = Object.new
6
+ @branch = StateMachines::Branch.new(except_on: [:ignite, :park])
7
+ end
8
+
9
+ def test_should_match_if_not_included
10
+ assert @branch.matches?(@object, on: :shift_up)
11
+ end
12
+
13
+ def test_should_not_match_if_included
14
+ refute @branch.matches?(@object, on: :ignite)
15
+ end
16
+ end
@@ -0,0 +1,20 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class BranchWithMultipleExceptToRequirementsTest < StateMachinesTest
4
+ def setup
5
+ @object = Object.new
6
+ @branch = StateMachines::Branch.new(except_to: [:idling, :parked])
7
+ end
8
+
9
+ def test_should_match_if_not_included
10
+ assert @branch.matches?(@object, to: :first_gear)
11
+ end
12
+
13
+ def test_should_not_match_if_included
14
+ refute @branch.matches?(@object, to: :idling)
15
+ end
16
+
17
+ def test_should_be_included_in_known_states
18
+ assert_equal [:idling, :parked], @branch.known_states
19
+ end
20
+ end
@@ -0,0 +1,16 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class BranchWithImplicitFromRequirementMatcherTest < StateMachinesTest
4
+ def setup
5
+ @matcher = StateMachines::BlacklistMatcher.new(:parked)
6
+ @branch = StateMachines::Branch.new(@matcher => :idling)
7
+ end
8
+
9
+ def test_should_not_convert_from_to_whitelist_matcher
10
+ assert_equal @matcher, @branch.state_requirements.first[:from]
11
+ end
12
+
13
+ def test_should_convert_to_to_whitelist_matcher
14
+ assert_instance_of StateMachines::WhitelistMatcher, @branch.state_requirements.first[:to]
15
+ end
16
+ end
@@ -0,0 +1,20 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class BranchWithMultipleIfConditionalsTest < StateMachinesTest
4
+ def setup
5
+ @object = Object.new
6
+ end
7
+
8
+ def test_should_match_if_all_are_true
9
+ branch = StateMachines::Branch.new(if: [lambda { true }, lambda { true }])
10
+ assert branch.match(@object)
11
+ end
12
+
13
+ def test_should_not_match_if_any_are_false
14
+ branch = StateMachines::Branch.new(if: [lambda { true }, lambda { false }])
15
+ refute branch.match(@object)
16
+
17
+ branch = StateMachines::Branch.new(if: [lambda { false }, lambda { true }])
18
+ refute branch.match(@object)
19
+ end
20
+ end
@@ -0,0 +1,53 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class BranchWithMultipleImplicitRequirementsTest < StateMachinesTest
4
+ def setup
5
+ @object = Object.new
6
+ @branch = StateMachines::Branch.new(parked: :idling, idling: :first_gear, on: :ignite)
7
+ end
8
+
9
+ def test_should_create_multiple_state_requirements
10
+ assert_equal 2, @branch.state_requirements.length
11
+ end
12
+
13
+ def test_should_not_match_event_as_state_requirement
14
+ refute @branch.matches?(@object, from: :on, to: :ignite)
15
+ end
16
+
17
+ def test_should_match_if_from_included_in_any
18
+ assert @branch.matches?(@object, from: :parked)
19
+ assert @branch.matches?(@object, from: :idling)
20
+ end
21
+
22
+ def test_should_not_match_if_from_not_included_in_any
23
+ refute @branch.matches?(@object, from: :first_gear)
24
+ end
25
+
26
+ def test_should_match_if_to_included_in_any
27
+ assert @branch.matches?(@object, to: :idling)
28
+ assert @branch.matches?(@object, to: :first_gear)
29
+ end
30
+
31
+ def test_should_not_match_if_to_not_included_in_any
32
+ refute @branch.matches?(@object, to: :parked)
33
+ end
34
+
35
+ def test_should_match_if_all_options_match
36
+ assert @branch.matches?(@object, from: :parked, to: :idling, on: :ignite)
37
+ assert @branch.matches?(@object, from: :idling, to: :first_gear, on: :ignite)
38
+ end
39
+
40
+ def test_should_not_match_if_any_options_do_not_match
41
+ refute @branch.matches?(@object, from: :parked, to: :idling, on: :park)
42
+ refute @branch.matches?(@object, from: :parked, to: :first_gear, on: :park)
43
+ end
44
+
45
+ def test_should_include_all_known_states
46
+ assert_equal [:first_gear, :idling, :parked], @branch.known_states.sort_by { |state| state.to_s }
47
+ end
48
+
49
+ def test_should_not_duplicate_known_statse
50
+ branch = StateMachines::Branch.new(parked: :idling, first_gear: :idling)
51
+ assert_equal [:first_gear, :idling, :parked], branch.known_states.sort_by { |state| state.to_s }
52
+ end
53
+ end
@@ -0,0 +1,20 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class BranchWithMultipleExceptToRequirementsTest < StateMachinesTest
4
+ def setup
5
+ @object = Object.new
6
+ @branch = StateMachines::Branch.new(except_to: [:idling, :parked])
7
+ end
8
+
9
+ def test_should_match_if_not_included
10
+ assert @branch.matches?(@object, to: :first_gear)
11
+ end
12
+
13
+ def test_should_not_match_if_included
14
+ refute @branch.matches?(@object, to: :idling)
15
+ end
16
+
17
+ def test_should_be_included_in_known_states
18
+ assert_equal [:idling, :parked], @branch.known_states
19
+ end
20
+ end