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.
- checksums.yaml +4 -4
- data/.travis.yml +10 -4
- data/Changelog.md +0 -0
- data/Gemfile +6 -0
- data/LICENSE.txt +1 -1
- data/README.md +6 -8
- data/Rakefile +9 -6
- data/Testing.md +0 -0
- data/lib/state_machines/assertions.rb +5 -5
- data/lib/state_machines/error.rb +2 -1
- data/lib/state_machines/integrations.rb +18 -11
- data/lib/state_machines/machine.rb +8 -12
- data/lib/state_machines/version.rb +1 -1
- data/state_machines.gemspec +6 -8
- data/test/files/integrations/event_on_failure_integration.rb +10 -0
- data/test/files/integrations/vehicle.rb +7 -0
- data/{spec/internal/app → test/files}/models/auto_shop.rb +0 -0
- data/{spec/internal/app → test/files}/models/car.rb +2 -0
- data/{spec/internal/app → test/files}/models/model_base.rb +0 -0
- data/{spec/internal/app → test/files}/models/motorcycle.rb +2 -0
- data/{spec/internal/app → test/files}/models/traffic_light.rb +2 -2
- data/{spec/internal/app → test/files}/models/vehicle.rb +9 -5
- data/test/files/node.rb +5 -0
- data/test/files/switch.rb +15 -0
- data/test/functional/auto_shop_available_test.rb +20 -0
- data/test/functional/auto_shop_busy_test.rb +25 -0
- data/test/functional/car_backing_up_test.rb +45 -0
- data/test/functional/car_test.rb +49 -0
- data/test/functional/motorcycle_test.rb +46 -0
- data/test/functional/traffic_light_caution_test.rb +17 -0
- data/test/functional/traffic_light_proceed_test.rb +17 -0
- data/test/functional/traffic_light_stop_test.rb +26 -0
- data/test/functional/vehicle_first_gear_test.rb +42 -0
- data/test/functional/vehicle_idling_test.rb +59 -0
- data/test/functional/vehicle_locked_test.rb +29 -0
- data/test/functional/vehicle_parked_test.rb +53 -0
- data/test/functional/vehicle_repaired_test.rb +20 -0
- data/test/functional/vehicle_second_gear_test.rb +42 -0
- data/test/functional/vehicle_stalled_test.rb +65 -0
- data/test/functional/vehicle_test.rb +20 -0
- data/test/functional/vehicle_third_gear_test.rb +42 -0
- data/test/functional/vehicle_unsaved_test.rb +181 -0
- data/test/functional/vehicle_with_event_attributes_test.rb +30 -0
- data/test/functional/vehicle_with_parallel_events_test.rb +36 -0
- data/test/test_helper.rb +15 -0
- data/test/unit/assertions/assert_exclusive_keys_test.rb +22 -0
- data/test/unit/assertions/assert_valid_key_test.rb +12 -0
- data/test/unit/branch/branch_test.rb +28 -0
- data/test/unit/branch/branch_with_conflicting_conditionals_test.rb +27 -0
- data/test/unit/branch/branch_with_conflicting_from_requirements_test.rb +8 -0
- data/test/unit/branch/branch_with_conflicting_on_requirements_test.rb +8 -0
- data/test/unit/branch/branch_with_conflicting_to_requirements_test.rb +8 -0
- data/test/unit/branch/branch_with_different_requirements_test.rb +41 -0
- data/test/unit/branch/branch_with_except_from_matcher_requirement_test.rb +8 -0
- data/test/unit/branch/branch_with_except_from_requirement_test.rb +36 -0
- data/test/unit/branch/branch_with_except_on_matcher_requirement_test.rb +8 -0
- data/test/unit/branch/branch_with_except_on_requirement_test.rb +36 -0
- data/test/unit/branch/branch_with_except_to_matcher_requirement_test.rb +8 -0
- data/test/unit/branch/branch_with_except_to_requirement_test.rb +36 -0
- data/test/unit/branch/branch_with_from_matcher_requirement_test.rb +20 -0
- data/test/unit/branch/branch_with_from_requirement_test.rb +45 -0
- data/test/unit/branch/branch_with_if_conditional_test.rb +27 -0
- data/test/unit/branch/branch_with_implicit_and_explicit_requirements_test.rb +23 -0
- data/test/unit/branch/branch_with_implicit_from_requirement_matcher_test.rb +20 -0
- data/test/unit/branch/branch_with_implicit_requirement_test.rb +20 -0
- data/test/unit/branch/branch_with_implicit_to_requirement_matcher_test.rb +16 -0
- data/test/unit/branch/branch_with_multiple_except_from_requirements_test.rb +20 -0
- data/test/unit/branch/branch_with_multiple_except_on_requirements_test.rb +16 -0
- data/test/unit/branch/branch_with_multiple_except_to_requirements_test.rb +20 -0
- data/test/unit/branch/branch_with_multiple_from_requirements_test.rb +16 -0
- data/test/unit/branch/branch_with_multiple_if_conditionals_test.rb +20 -0
- data/test/unit/branch/branch_with_multiple_implicit_requirements_test.rb +53 -0
- data/test/unit/branch/branch_with_multiple_on_requirements_test.rb +20 -0
- data/test/unit/branch/branch_with_multiple_to_requirements_test.rb +20 -0
- data/test/unit/branch/branch_with_multiple_unless_conditionals_test.rb +20 -0
- data/test/unit/branch/branch_with_nil_requirements_test.rb +28 -0
- data/test/unit/branch/branch_with_no_requirements_test.rb +36 -0
- data/test/unit/branch/branch_with_on_matcher_requirement_test.rb +16 -0
- data/test/unit/branch/branch_with_on_requirement_test.rb +45 -0
- data/test/unit/branch/branch_with_to_matcher_requirement_test.rb +20 -0
- data/test/unit/branch/branch_with_to_requirement_test.rb +45 -0
- data/test/unit/branch/branch_with_unless_conditional_test.rb +27 -0
- data/test/unit/branch/branch_without_guards_test.rb +27 -0
- data/test/unit/callback/callback_by_default_test.rb +25 -0
- data/test/unit/callback/callback_test.rb +53 -0
- data/test/unit/callback/callback_with_application_bound_object_test.rb +23 -0
- data/test/unit/callback/callback_with_application_terminator_test.rb +24 -0
- data/test/unit/callback/callback_with_arguments_test.rb +14 -0
- data/test/unit/callback/callback_with_around_type_and_arguments_test.rb +25 -0
- data/test/unit/callback/callback_with_around_type_and_block_test.rb +44 -0
- data/test/unit/callback/callback_with_around_type_and_bound_method_test.rb +23 -0
- data/test/unit/callback/callback_with_around_type_and_multiple_methods_test.rb +93 -0
- data/test/unit/callback/callback_with_around_type_and_terminator_test.rb +17 -0
- data/test/unit/callback/callback_with_block_test.rb +20 -0
- data/test/unit/callback/callback_with_bound_method_and_arguments_test.rb +28 -0
- data/test/unit/callback/callback_with_bound_method_test.rb +35 -0
- data/test/unit/callback/callback_with_do_method_test.rb +18 -0
- data/test/unit/callback/callback_with_explicit_requirements_test.rb +32 -0
- data/test/unit/callback/callback_with_if_condition_test.rb +17 -0
- data/test/unit/callback/callback_with_implicit_requirements_test.rb +32 -0
- data/test/unit/callback/callback_with_method_argument_test.rb +18 -0
- data/test/unit/callback/callback_with_mixed_methods_test.rb +31 -0
- data/test/unit/callback/callback_with_multiple_bound_methods_test.rb +21 -0
- data/test/unit/callback/callback_with_multiple_do_methods_test.rb +29 -0
- data/test/unit/callback/callback_with_multiple_method_arguments_test.rb +29 -0
- data/test/unit/callback/callback_with_terminator_test.rb +22 -0
- data/test/unit/callback/callback_with_unbound_method_test.rb +14 -0
- data/test/unit/callback/callback_with_unless_condition_test.rb +17 -0
- data/test/unit/callback/callback_without_arguments_test.rb +14 -0
- data/test/unit/callback/callback_without_terminator_test.rb +12 -0
- data/test/unit/error/error_by_default_test.rb +21 -0
- data/test/unit/error/error_with_message_test.rb +23 -0
- data/test/unit/eval_helper/eval_helpers_base_test.rb +8 -0
- data/test/unit/eval_helper/eval_helpers_proc_block_and_explicit_arguments_test.rb +14 -0
- data/test/unit/eval_helper/eval_helpers_proc_block_and_implicit_arguments_test.rb +14 -0
- data/test/unit/eval_helper/eval_helpers_proc_test.rb +13 -0
- data/test/unit/eval_helper/eval_helpers_proc_with_arguments_test.rb +13 -0
- data/test/unit/eval_helper/eval_helpers_proc_with_block_test.rb +13 -0
- data/test/unit/eval_helper/eval_helpers_proc_with_block_without_arguments_test.rb +18 -0
- data/test/unit/eval_helper/eval_helpers_proc_with_block_without_object_test.rb +14 -0
- data/test/unit/eval_helper/eval_helpers_proc_without_arguments_test.rb +19 -0
- data/test/unit/eval_helper/eval_helpers_string_test.rb +25 -0
- data/test/unit/eval_helper/eval_helpers_string_with_block_test.rb +12 -0
- data/test/unit/eval_helper/eval_helpers_symbol_method_missing_test.rb +20 -0
- data/test/unit/eval_helper/eval_helpers_symbol_private_test.rb +17 -0
- data/test/unit/eval_helper/eval_helpers_symbol_protected_test.rb +17 -0
- data/test/unit/eval_helper/eval_helpers_symbol_tainted_method_test.rb +18 -0
- data/test/unit/eval_helper/eval_helpers_symbol_test.rb +16 -0
- data/test/unit/eval_helper/eval_helpers_symbol_with_arguments_and_block_test.rb +16 -0
- data/test/unit/eval_helper/eval_helpers_symbol_with_arguments_test.rb +16 -0
- data/test/unit/eval_helper/eval_helpers_symbol_with_block_test.rb +16 -0
- data/test/unit/eval_helper/eval_helpers_test.rb +13 -0
- data/test/unit/event/event_after_being_copied_test.rb +17 -0
- data/test/unit/event/event_by_default_test.rb +60 -0
- data/test/unit/event/event_context_test.rb +16 -0
- data/test/unit/event/event_on_failure_test.rb +44 -0
- data/test/unit/event/event_test.rb +34 -0
- data/test/unit/event/event_transitions_test.rb +62 -0
- data/test/unit/event/event_with_conflicting_helpers_after_definition_test.rb +79 -0
- data/test/unit/event/event_with_conflicting_helpers_before_definition_test.rb +58 -0
- data/test/unit/event/event_with_conflicting_machine_test.rb +48 -0
- data/test/unit/event/event_with_dynamic_human_name_test.rb +26 -0
- data/test/unit/event/event_with_human_name_test.rb +13 -0
- data/test/unit/event/event_with_invalid_current_state_test.rb +30 -0
- data/test/unit/event/event_with_machine_action_test.rb +33 -0
- data/test/unit/event/event_with_marshalling_test.rb +47 -0
- data/test/unit/event/event_with_matching_disabled_transitions_test.rb +115 -0
- data/test/unit/event/event_with_matching_enabled_transitions_test.rb +75 -0
- data/test/unit/event/event_with_multiple_transitions_test.rb +61 -0
- data/test/unit/event/event_with_namespace_test.rb +34 -0
- data/test/unit/event/event_with_transition_with_blacklisted_to_state_test.rb +60 -0
- data/test/unit/event/event_with_transition_with_loopback_state_test.rb +36 -0
- data/test/unit/event/event_with_transition_with_nil_to_state_test.rb +36 -0
- data/test/unit/event/event_with_transition_with_whitelisted_to_state_test.rb +51 -0
- data/test/unit/event/event_with_transition_without_to_state_test.rb +36 -0
- data/test/unit/event/event_with_transitions_test.rb +32 -0
- data/test/unit/event/event_without_matching_transitions_test.rb +41 -0
- data/test/unit/event/event_without_transitions_test.rb +28 -0
- data/{spec/state_machines/invalid_event_spec.rb → test/unit/event/invalid_event_test.rb} +8 -7
- data/test/unit/event_collection/event_collection_attribute_with_machine_action_test.rb +62 -0
- data/test/unit/event_collection/event_collection_attribute_with_namespaced_machine_test.rb +36 -0
- data/test/unit/event_collection/event_collection_by_default_test.rb +26 -0
- data/test/unit/event_collection/event_collection_test.rb +39 -0
- data/test/unit/event_collection/event_collection_with_custom_machine_attribute_test.rb +31 -0
- data/test/unit/event_collection/event_collection_with_events_with_transitions_test.rb +76 -0
- data/test/unit/event_collection/event_collection_with_multiple_events_test.rb +27 -0
- data/test/unit/event_collection/event_collection_with_validations_test.rb +75 -0
- data/test/unit/event_collection/event_collection_without_machine_action_test.rb +18 -0
- data/test/unit/event_collection/event_string_collection_test.rb +31 -0
- data/test/unit/helper_module_test.rb +17 -0
- data/test/unit/integrations/integration_finder_test.rb +16 -0
- data/test/unit/integrations/integration_matcher_test.rb +27 -0
- data/test/unit/invalid_transition/invalid_parallel_transition_test.rb +18 -0
- data/test/unit/invalid_transition/invalid_transition_test.rb +47 -0
- data/test/unit/invalid_transition/invalid_transition_with_integration_test.rb +47 -0
- data/test/unit/invalid_transition/invalid_transition_with_namespace_test.rb +32 -0
- data/test/unit/machine/machine_after_being_copied_test.rb +62 -0
- data/test/unit/machine/machine_after_changing_initial_state.rb +28 -0
- data/test/unit/machine/machine_after_changing_owner_class_test.rb +31 -0
- data/test/unit/machine/machine_by_default_test.rb +160 -0
- data/test/unit/machine/machine_finder_custom_options_test.rb +17 -0
- data/test/unit/machine/machine_finder_with_existing_machine_on_superclass_test.rb +86 -0
- data/test/unit/machine/machine_finder_with_existing_on_same_class_test.rb +23 -0
- data/test/unit/machine/machine_finder_without_existing_machine_test.rb +25 -0
- data/test/unit/machine/machine_persistence_test.rb +52 -0
- data/test/unit/machine/machine_state_initialization_test.rb +56 -0
- data/test/unit/machine/machine_test.rb +30 -0
- data/test/unit/machine/machine_with_action_already_overridden_test.rb +23 -0
- data/test/unit/machine/machine_with_action_defined_in_class_test.rb +37 -0
- data/test/unit/machine/machine_with_action_defined_in_included_module_test.rb +46 -0
- data/test/unit/machine/machine_with_action_defined_in_superclass_test.rb +43 -0
- data/test/unit/machine/machine_with_action_undefined_test.rb +33 -0
- data/test/unit/machine/machine_with_cached_state_test.rb +20 -0
- data/test/unit/machine/machine_with_class_helpers_test.rb +179 -0
- data/test/unit/machine/machine_with_conflicting_helpers_after_definition_test.rb +243 -0
- data/test/unit/machine/machine_with_conflicting_helpers_before_definition_test.rb +175 -0
- data/test/unit/machine/machine_with_custom_action_test.rb +11 -0
- data/test/unit/machine/machine_with_custom_attribute_test.rb +103 -0
- data/test/unit/machine/machine_with_custom_initialize_test.rb +24 -0
- data/test/unit/machine/machine_with_custom_integration_test.rb +69 -0
- data/test/unit/machine/machine_with_custom_invalidation_test.rb +40 -0
- data/test/unit/machine/machine_with_custom_name_test.rb +57 -0
- data/test/unit/machine/machine_with_custom_plural_test.rb +53 -0
- data/test/unit/machine/machine_with_dynamic_initial_state_test.rb +65 -0
- data/test/unit/machine/machine_with_event_matchers_test.rb +41 -0
- data/test/unit/machine/machine_with_events_test.rb +52 -0
- data/test/unit/machine/machine_with_events_with_custom_human_names_test.rb +18 -0
- data/test/unit/machine/machine_with_events_with_transitions_test.rb +37 -0
- data/test/unit/machine/machine_with_existing_event_test.rb +17 -0
- data/test/unit/machine/machine_with_existing_machines_on_owner_class_test.rb +20 -0
- data/test/unit/machine/machine_with_existing_machines_with_same_attributes_on_owner_class_test.rb +71 -0
- data/test/unit/machine/machine_with_existing_machines_with_same_attributes_on_owner_subclass_test.rb +31 -0
- data/test/unit/machine/machine_with_existing_state_test.rb +27 -0
- data/test/unit/machine/machine_with_failure_callbacks_test.rb +48 -0
- data/test/unit/machine/machine_with_helpers_test.rb +14 -0
- data/test/unit/machine/machine_with_initial_state_with_value_and_owner_default.rb +25 -0
- data/test/unit/machine/machine_with_initialize_and_super_test.rb +17 -0
- data/test/unit/machine/machine_with_initialize_arguments_and_block_test.rb +31 -0
- data/test/unit/machine/machine_with_initialize_without_super_test.rb +17 -0
- data/test/unit/machine/machine_with_instance_helpers_test.rb +179 -0
- data/test/unit/machine/machine_with_integration_test.rb +71 -0
- data/test/unit/machine/machine_with_multiple_events_test.rb +32 -0
- data/test/unit/machine/machine_with_namespace_test.rb +48 -0
- data/test/unit/machine/machine_with_nil_action_test.rb +24 -0
- data/test/unit/machine/machine_with_other_states.rb +22 -0
- data/test/unit/machine/machine_with_owner_subclass_test.rb +18 -0
- data/test/unit/machine/machine_with_paths_test.rb +25 -0
- data/test/unit/machine/machine_with_private_action_test.rb +43 -0
- data/test/unit/machine/machine_with_state_matchers_test.rb +41 -0
- data/test/unit/machine/machine_with_state_with_matchers_test.rb +19 -0
- data/test/unit/machine/machine_with_states_test.rb +55 -0
- data/test/unit/machine/machine_with_states_with_behaviors_test.rb +23 -0
- data/test/unit/machine/machine_with_states_with_custom_human_names_test.rb +18 -0
- data/test/unit/machine/machine_with_states_with_custom_values_test.rb +21 -0
- data/test/unit/machine/machine_with_states_with_runtime_dependencies_test.rb +19 -0
- data/test/unit/machine/machine_with_static_initial_state_test.rb +60 -0
- data/test/unit/machine/machine_with_superclass_conflicting_helpers_after_definition_test.rb +36 -0
- data/test/unit/machine/machine_with_transition_callbacks_test.rb +144 -0
- data/test/unit/machine/machine_with_transitions_test.rb +87 -0
- data/test/unit/machine/machine_without_initialization_test.rb +31 -0
- data/test/unit/machine/machine_without_initialize_test.rb +14 -0
- data/test/unit/machine/machine_without_integration_test.rb +31 -0
- data/test/unit/machine_collection/machine_collection_by_default_test.rb +11 -0
- data/test/unit/machine_collection/machine_collection_fire_attributes_with_validations_test.rb +72 -0
- data/test/unit/machine_collection/machine_collection_fire_test.rb +80 -0
- data/test/unit/machine_collection/machine_collection_fire_with_transactions_test.rb +54 -0
- data/test/unit/machine_collection/machine_collection_fire_with_validations_test.rb +76 -0
- data/test/unit/machine_collection/machine_collection_state_initialization_test.rb +101 -0
- data/test/unit/machine_collection/machine_collection_transitions_with_blank_events_test.rb +25 -0
- data/test/unit/machine_collection/machine_collection_transitions_with_custom_options_test.rb +20 -0
- data/test/unit/machine_collection/machine_collection_transitions_with_different_actions_test.rb +26 -0
- data/test/unit/machine_collection/machine_collection_transitions_with_exisiting_transitions_test.rb +25 -0
- data/test/unit/machine_collection/machine_collection_transitions_with_invalid_events_test.rb +25 -0
- data/test/unit/machine_collection/machine_collection_transitions_with_same_actions_test.rb +31 -0
- data/test/unit/machine_collection/machine_collection_transitions_with_transition_test.rb +26 -0
- data/test/unit/machine_collection/machine_collection_transitions_without_events_test.rb +25 -0
- data/test/unit/machine_collection/machine_collection_transitions_without_transition_test.rb +27 -0
- data/test/unit/matcher/all_matcher_test.rb +29 -0
- data/test/unit/matcher/blacklist_matcher_test.rb +30 -0
- data/test/unit/matcher/loopback_matcher_test.rb +27 -0
- data/test/unit/matcher/matcher_by_default_test.rb +15 -0
- data/test/unit/matcher/matcher_with_multiple_values_test.rb +15 -0
- data/test/unit/matcher/matcher_with_value_test.rb +15 -0
- data/test/unit/matcher/whitelist_matcher_test.rb +30 -0
- data/test/unit/matcher_helpers/matcher_helpers_all_test.rb +14 -0
- data/test/unit/matcher_helpers/matcher_helpers_any_test.rb +14 -0
- data/test/unit/matcher_helpers/matcher_helpers_same_test.rb +13 -0
- data/test/unit/node_collection/node_collection_after_being_copied_test/n.rb +46 -0
- data/test/unit/node_collection/node_collection_after_update_test/n.rb +36 -0
- data/test/unit/node_collection/node_collection_by_default_test.rb +22 -0
- data/test/unit/node_collection/node_collection_test.rb +23 -0
- data/test/unit/node_collection/node_collection_with_indices_test/n.rb +42 -0
- data/test/unit/node_collection/node_collection_with_matcher_contexts_test.rb +25 -0
- data/test/unit/node_collection/node_collection_with_nodes_test/n.rb +46 -0
- data/test/unit/node_collection/node_collection_with_numeric_index_test/n.rb +24 -0
- data/test/unit/node_collection/node_collection_with_postdefined_contexts_test/n.rb +22 -0
- data/test/unit/node_collection/node_collection_with_predefined_contexts_test/n.rb +23 -0
- data/test/unit/node_collection/node_collection_with_string_index_test/n.rb +20 -0
- data/test/unit/node_collection/node_collection_with_symbol_index_test/n.rb +20 -0
- data/test/unit/node_collection/node_collection_without_indices_test/n.rb +30 -0
- data/test/unit/path/path_by_default_test.rb +54 -0
- data/test/unit/path/path_test.rb +14 -0
- data/test/unit/path/path_with_available_transitions_after_reaching_target_test.rb +40 -0
- data/test/unit/path/path_with_available_transitions_test.rb +54 -0
- data/test/unit/path/path_with_deep_target_reached_test.rb +50 -0
- data/test/unit/path/path_with_deep_target_test.rb +40 -0
- data/test/unit/path/path_with_duplicates_test.rb +32 -0
- data/test/unit/path/path_with_encountered_transitions_test.rb +34 -0
- data/test/unit/path/path_with_guarded_transitions_test.rb +42 -0
- data/test/unit/path/path_with_reached_target_test.rb +35 -0
- data/test/unit/path/path_with_transitions_test.rb +54 -0
- data/test/unit/path/path_with_unreached_target_test.rb +31 -0
- data/test/unit/path/path_without_transitions_test.rb +24 -0
- data/test/unit/path_collection/path_collection_by_default_test.rb +46 -0
- data/test/unit/path_collection/path_collection_test.rb +24 -0
- data/test/unit/path_collection/path_collection_with_deep_paths_test.rb +43 -0
- data/test/unit/path_collection/path_collection_with_duplicate_nodes_test.rb +31 -0
- data/test/unit/path_collection/path_collection_with_from_state_test.rb +27 -0
- data/test/unit/path_collection/path_collection_with_paths_test.rb +47 -0
- data/test/unit/path_collection/path_collection_with_to_state_test.rb +29 -0
- data/test/unit/path_collection/path_with_guarded_paths_test.rb +25 -0
- data/test/unit/state/state_after_being_copied_test.rb +19 -0
- data/test/unit/state/state_by_default_test.rb +41 -0
- data/test/unit/state/state_final_test.rb +28 -0
- data/test/unit/state/state_initial_test.rb +13 -0
- data/test/unit/state/state_not_final_test.rb +32 -0
- data/test/unit/state/state_not_initial_test.rb +13 -0
- data/test/unit/state/state_test.rb +44 -0
- data/test/unit/state/state_with_cached_lambda_value_test.rb +29 -0
- data/test/unit/state/state_with_conflicting_helpers_after_definition_test.rb +38 -0
- data/test/unit/state/state_with_conflicting_helpers_before_definition_test.rb +29 -0
- data/test/unit/state/state_with_conflicting_machine_name_test.rb +20 -0
- data/test/unit/state/state_with_conflicting_machine_test.rb +37 -0
- data/test/unit/state/state_with_context_test.rb +60 -0
- data/test/unit/state/state_with_dynamic_human_name_test.rb +25 -0
- data/test/unit/state/state_with_existing_context_method_test.rb +24 -0
- data/test/unit/state/state_with_human_name_test.rb +13 -0
- data/test/unit/state/state_with_integer_value_test.rb +32 -0
- data/test/unit/state/state_with_invalid_method_call_test.rb +21 -0
- data/test/unit/state/state_with_lambda_value_test.rb +37 -0
- data/test/unit/state/state_with_matcher_test.rb +18 -0
- data/test/unit/state/state_with_multiple_contexts_test.rb +57 -0
- data/test/unit/state/state_with_name_test.rb +43 -0
- data/test/unit/state/state_with_namespace_test.rb +22 -0
- data/test/unit/state/state_with_nil_value_test.rb +35 -0
- data/test/unit/state/state_with_redefined_context_method_test.rb +45 -0
- data/test/unit/state/state_with_symbolic_value_test.rb +32 -0
- data/test/unit/state/state_with_valid_inherited_method_call_for_current_state_test.rb +40 -0
- data/test/unit/state/state_with_valid_method_call_for_current_state_test.rb +33 -0
- data/test/unit/state/state_with_valid_method_call_for_different_state_test.rb +41 -0
- data/test/unit/state/state_without_cached_lambda_value_test.rb +25 -0
- data/test/unit/state/state_without_name_test.rb +39 -0
- data/test/unit/state_collection/state_collection_by_default_test.rb +21 -0
- data/test/unit/state_collection/state_collection_string_test.rb +35 -0
- data/test/unit/state_collection/state_collection_test.rb +74 -0
- data/test/unit/state_collection/state_collection_with_custom_state_values_test.rb +29 -0
- data/test/unit/state_collection/state_collection_with_event_transitions_test.rb +39 -0
- data/test/unit/state_collection/state_collection_with_initial_state_test.rb +40 -0
- data/test/unit/state_collection/state_collection_with_namespace_test.rb +21 -0
- data/test/unit/state_collection/state_collection_with_state_behaviors_test.rb +40 -0
- data/test/unit/state_collection/state_collection_with_state_matchers_test.rb +29 -0
- data/test/unit/state_collection/state_collection_with_transition_callbacks_test.rb +40 -0
- data/test/unit/state_context/state_context_proxy_test.rb +26 -0
- data/test/unit/state_context/state_context_proxy_with_if_and_unless_conditions_test.rb +42 -0
- data/test/unit/state_context/state_context_proxy_with_if_condition_test.rb +64 -0
- data/test/unit/state_context/state_context_proxy_with_multiple_if_conditions_test.rb +32 -0
- data/test/unit/state_context/state_context_proxy_with_multiple_unless_conditions_test.rb +32 -0
- data/test/unit/state_context/state_context_proxy_with_unless_condition_test.rb +64 -0
- data/test/unit/state_context/state_context_proxy_without_conditions_test.rb +31 -0
- data/test/unit/state_context/state_context_test.rb +28 -0
- data/test/unit/state_context/state_context_transition_test.rb +104 -0
- data/test/unit/state_context/state_context_with_matching_transition_test.rb +27 -0
- data/test/unit/state_machine/state_machine_by_default_test.rb +12 -0
- data/test/unit/state_machine/state_machine_test.rb +20 -0
- data/test/unit/transition/transition_after_being_performed_test.rb +48 -0
- data/test/unit/transition/transition_after_being_persisted_test.rb +46 -0
- data/test/unit/transition/transition_after_being_rolled_back_test.rb +35 -0
- data/test/unit/transition/transition_equality_test.rb +52 -0
- data/test/unit/transition/transition_loopback_test.rb +18 -0
- data/test/unit/transition/transition_test.rb +96 -0
- data/test/unit/transition/transition_transient_test.rb +20 -0
- data/test/unit/transition/transition_with_action_test.rb +27 -0
- data/test/unit/transition/transition_with_after_callbacks_skipped_test.rb +127 -0
- data/test/unit/transition/transition_with_after_callbacks_test.rb +93 -0
- data/test/unit/transition/transition_with_around_callbacks_test.rb +141 -0
- data/test/unit/transition/transition_with_before_callbacks_skipped_test.rb +30 -0
- data/test/unit/transition/transition_with_before_callbacks_test.rb +104 -0
- data/test/unit/transition/transition_with_custom_machine_attribute_test.rb +28 -0
- data/test/unit/transition/transition_with_different_states_test.rb +18 -0
- data/test/unit/transition/transition_with_dynamic_to_value_test.rb +19 -0
- data/test/unit/transition/transition_with_failure_callbacks_test.rb +84 -0
- data/test/unit/transition/transition_with_invalid_nodes_test.rb +29 -0
- data/test/unit/transition/transition_with_mixed_callbacks_test.rb +105 -0
- data/test/unit/transition/transition_with_multiple_after_callbacks_test.rb +40 -0
- data/test/unit/transition/transition_with_multiple_around_callbacks_test.rb +114 -0
- data/test/unit/transition/transition_with_multiple_before_callbacks_test.rb +40 -0
- data/test/unit/transition/transition_with_multiple_failure_callbacks_test.rb +40 -0
- data/test/unit/transition/transition_with_namespace_test.rb +47 -0
- data/test/unit/transition/transition_with_perform_arguments_test.rb +35 -0
- data/test/unit/transition/transition_with_transactions_test.rb +42 -0
- data/test/unit/transition/transition_without_callbacks_test.rb +33 -0
- data/test/unit/transition/transition_without_reading_state_test.rb +22 -0
- data/test/unit/transition/transition_without_running_action_test.rb +47 -0
- data/test/unit/transition_collection/attribute_transition_collection_by_default_test.rb +23 -0
- data/test/unit/transition_collection/attribute_transition_collection_marshalling_test.rb +64 -0
- data/test/unit/transition_collection/attribute_transition_collection_with_action_error_test.rb +44 -0
- data/test/unit/transition_collection/attribute_transition_collection_with_action_failed_test.rb +44 -0
- data/test/unit/transition_collection/attribute_transition_collection_with_after_callback_error_test.rb +32 -0
- data/test/unit/transition_collection/attribute_transition_collection_with_after_callback_halt_test.rb +33 -0
- data/test/unit/transition_collection/attribute_transition_collection_with_around_after_yield_callback_error_test.rb +32 -0
- data/test/unit/transition_collection/attribute_transition_collection_with_around_callback_after_yield_error_test.rb +32 -0
- data/test/unit/transition_collection/attribute_transition_collection_with_around_callback_after_yield_halt_test.rb +33 -0
- data/test/unit/transition_collection/attribute_transition_collection_with_around_callback_before_yield_halt_test.rb +33 -0
- data/test/unit/transition_collection/attribute_transition_collection_with_before_callback_error_test.rb +32 -0
- data/test/unit/transition_collection/attribute_transition_collection_with_before_callback_halt_test.rb +33 -0
- data/test/unit/transition_collection/attribute_transition_collection_with_callbacks_test.rb +68 -0
- data/test/unit/transition_collection/attribute_transition_collection_with_event_transitions_test.rb +41 -0
- data/test/unit/transition_collection/attribute_transition_collection_with_events_test.rb +44 -0
- data/test/unit/transition_collection/attribute_transition_collection_with_skipped_after_callbacks_test.rb +42 -0
- data/test/unit/transition_collection/transition_collection_by_default_test.rb +23 -0
- data/test/unit/transition_collection/transition_collection_empty_with_block_test.rb +23 -0
- data/test/unit/transition_collection/transition_collection_empty_without_block_test.rb +12 -0
- data/test/unit/transition_collection/transition_collection_invalid_test.rb +21 -0
- data/test/unit/transition_collection/transition_collection_partial_invalid_test.rb +69 -0
- data/test/unit/transition_collection/transition_collection_test.rb +26 -0
- data/test/unit/transition_collection/transition_collection_valid_test.rb +57 -0
- data/test/unit/transition_collection/transition_collection_with_action_error_test.rb +66 -0
- data/test/unit/transition_collection/transition_collection_with_action_failed_test.rb +60 -0
- data/test/unit/transition_collection/transition_collection_with_action_hook_and_block_test.rb +17 -0
- data/test/unit/transition_collection/transition_collection_with_action_hook_and_skipped_action_test.rb +17 -0
- data/test/unit/transition_collection/transition_collection_with_action_hook_and_skipped_after_callbacks_test.rb +37 -0
- data/test/unit/transition_collection/transition_collection_with_action_hook_base_test.rb +34 -0
- data/test/unit/transition_collection/transition_collection_with_action_hook_error_test.rb +29 -0
- data/test/unit/transition_collection/transition_collection_with_action_hook_invalid_test.rb +17 -0
- data/test/unit/transition_collection/transition_collection_with_action_hook_multiple_test.rb +79 -0
- data/test/unit/transition_collection/transition_collection_with_action_hook_test.rb +45 -0
- data/test/unit/transition_collection/transition_collection_with_action_hook_with_different_actions_test.rb +48 -0
- data/test/unit/transition_collection/transition_collection_with_action_hook_with_nil_action_test.rb +42 -0
- data/test/unit/transition_collection/transition_collection_with_after_callback_halt_test.rb +51 -0
- data/test/unit/transition_collection/transition_collection_with_before_callback_halt_test.rb +47 -0
- data/test/unit/transition_collection/transition_collection_with_block_test.rb +46 -0
- data/test/unit/transition_collection/transition_collection_with_callbacks_test.rb +135 -0
- data/test/unit/transition_collection/transition_collection_with_different_actions_test.rb +189 -0
- data/test/unit/transition_collection/transition_collection_with_duplicate_actions_test.rb +48 -0
- data/test/unit/transition_collection/transition_collection_with_empty_actions_test.rb +41 -0
- data/test/unit/transition_collection/transition_collection_with_mixed_actions_test.rb +41 -0
- data/test/unit/transition_collection/transition_collection_with_skipped_actions_and_block_test.rb +34 -0
- data/test/unit/transition_collection/transition_collection_with_skipped_actions_test.rb +69 -0
- data/test/unit/transition_collection/transition_collection_with_skipped_after_callbacks_and_around_callbacks_test.rb +53 -0
- data/test/unit/transition_collection/transition_collection_with_skipped_after_callbacks_test.rb +34 -0
- data/test/unit/transition_collection/transition_collection_with_transactions_test.rb +65 -0
- data/test/unit/transition_collection/transition_collection_without_transactions_test.rb +29 -0
- metadata +888 -101
- data/spec/models/auto_shop_spec.rb +0 -41
- data/spec/models/car_spec.rb +0 -90
- data/spec/models/motorcycle_spec.rb +0 -44
- data/spec/models/traffic_light_spec.rb +0 -56
- data/spec/models/vehicle_spec.rb +0 -580
- data/spec/spec_helper.rb +0 -7
- data/spec/state_machines/assertions_spec.rb +0 -31
- data/spec/state_machines/branch_spec.rb +0 -827
- data/spec/state_machines/callbacks_spec.rb +0 -706
- data/spec/state_machines/errors_spec.rb +0 -1
- data/spec/state_machines/event_collection_spec.rb +0 -401
- data/spec/state_machines/event_spec.rb +0 -1140
- data/spec/state_machines/helper_spec.rb +0 -14
- data/spec/state_machines/integration_base_spec.rb +0 -12
- data/spec/state_machines/integration_spec.rb +0 -132
- data/spec/state_machines/invalid_parallel_transition_spec.rb +0 -18
- data/spec/state_machines/invalid_transition_spec.rb +0 -114
- data/spec/state_machines/machine_collection_spec.rb +0 -606
- data/spec/state_machines/machine_spec.rb +0 -3176
- data/spec/state_machines/matcher_helpers_spec.rb +0 -39
- data/spec/state_machines/matcher_spec.rb +0 -157
- data/spec/state_machines/node_collection_spec.rb +0 -371
- data/spec/state_machines/path_collection_spec.rb +0 -271
- data/spec/state_machines/path_spec.rb +0 -488
- data/spec/state_machines/state_collection_spec.rb +0 -352
- data/spec/state_machines/state_context_spec.rb +0 -442
- data/spec/state_machines/state_machine_spec.rb +0 -29
- data/spec/state_machines/state_spec.rb +0 -970
- data/spec/state_machines/transition_collection_spec.rb +0 -2199
- data/spec/state_machines/transition_spec.rb +0 -1558
- data/spec/support/migration_helpers.rb +0 -59
- data/spec/support/models.rb +0 -6
@@ -0,0 +1,20 @@
|
|
1
|
+
require_relative '../../test_helper'
|
2
|
+
|
3
|
+
class BranchWithMultipleToRequirementsTest < StateMachinesTest
|
4
|
+
def setup
|
5
|
+
@object = Object.new
|
6
|
+
@branch = StateMachines::Branch.new(to: [:idling, :parked])
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_should_match_if_included
|
10
|
+
assert @branch.matches?(@object, to: :idling)
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_should_not_match_if_not_included
|
14
|
+
refute @branch.matches?(@object, to: :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 BranchWithMultipleUnlessConditionalsTest < StateMachinesTest
|
4
|
+
def setup
|
5
|
+
@object = Object.new
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_should_match_if_all_are_false
|
9
|
+
branch = StateMachines::Branch.new(unless: [lambda { false }, lambda { false }])
|
10
|
+
assert branch.match(@object)
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_should_not_match_if_any_are_true
|
14
|
+
branch = StateMachines::Branch.new(unless: [lambda { true }, lambda { false }])
|
15
|
+
refute branch.match(@object)
|
16
|
+
|
17
|
+
branch = StateMachines::Branch.new(unless: [lambda { false }, lambda { true }])
|
18
|
+
refute branch.match(@object)
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require_relative '../../test_helper'
|
2
|
+
|
3
|
+
class BranchWithNilRequirementsTest < StateMachinesTest
|
4
|
+
def setup
|
5
|
+
@object = Object.new
|
6
|
+
@branch = StateMachines::Branch.new(from: nil, to: nil)
|
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: nil, to: nil)
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_should_not_match_if_from_not_included
|
18
|
+
refute @branch.matches?(@object, from: :parked)
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_should_not_match_if_to_not_included
|
22
|
+
refute @branch.matches?(@object, to: :idling)
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_should_include_all_known_states
|
26
|
+
assert_equal [nil], @branch.known_states
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require_relative '../../test_helper'
|
2
|
+
|
3
|
+
class BranchWithNoRequirementsTest < StateMachinesTest
|
4
|
+
def setup
|
5
|
+
@object = Object.new
|
6
|
+
@branch = StateMachines::Branch.new
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_should_use_all_matcher_for_event_requirement
|
10
|
+
assert_equal StateMachines::AllMatcher.instance, @branch.event_requirement
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_should_use_all_matcher_for_from_state_requirement
|
14
|
+
assert_equal StateMachines::AllMatcher.instance, @branch.state_requirements.first[:from]
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_should_use_all_matcher_for_to_state_requirement
|
18
|
+
assert_equal StateMachines::AllMatcher.instance, @branch.state_requirements.first[:to]
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_should_match_empty_query
|
22
|
+
assert @branch.matches?(@object, {})
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_should_match_non_empty_query
|
26
|
+
assert @branch.matches?(@object, to: :idling, from: :parked, on: :ignite)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_should_include_all_requirements_in_match
|
30
|
+
match = @branch.match(@object, {})
|
31
|
+
|
32
|
+
assert_equal @branch.state_requirements.first[:from], match[:from]
|
33
|
+
assert_equal @branch.state_requirements.first[:to], match[:to]
|
34
|
+
assert_equal @branch.event_requirement, match[:on]
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require_relative '../../test_helper'
|
2
|
+
|
3
|
+
class BranchWithOnMatcherRequirementTest < StateMachinesTest
|
4
|
+
def setup
|
5
|
+
@object = Object.new
|
6
|
+
@branch = StateMachines::Branch.new(on: StateMachines::BlacklistMatcher.new([:ignite, :park]))
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_should_match_if_included
|
10
|
+
assert @branch.matches?(@object, on: :shift_up)
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_should_not_match_if_not_included
|
14
|
+
refute @branch.matches?(@object, on: :ignite)
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require_relative '../../test_helper'
|
2
|
+
|
3
|
+
class BranchWithOnRequirementTest < StateMachinesTest
|
4
|
+
def setup
|
5
|
+
@object = Object.new
|
6
|
+
@branch = StateMachines::Branch.new(on: :ignite)
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_should_use_a_whitelist_matcher
|
10
|
+
assert_instance_of StateMachines::WhitelistMatcher, @branch.event_requirement
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_should_match_if_not_specified
|
14
|
+
assert @branch.matches?(@object, from: :parked)
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_should_match_if_included
|
18
|
+
assert @branch.matches?(@object, on: :ignite)
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_should_not_match_if_not_included
|
22
|
+
refute @branch.matches?(@object, on: :park)
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_should_not_match_if_nil
|
26
|
+
refute @branch.matches?(@object, on: nil)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_should_ignore_to
|
30
|
+
assert @branch.matches?(@object, on: :ignite, to: :parked)
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_should_ignore_from
|
34
|
+
assert @branch.matches?(@object, on: :ignite, from: :parked)
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_should_not_be_included_in_known_states
|
38
|
+
assert_equal [], @branch.known_states
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_should_include_requirement_in_match
|
42
|
+
match = @branch.match(@object, on: :ignite)
|
43
|
+
assert_equal @branch.event_requirement, match[:on]
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require_relative '../../test_helper'
|
2
|
+
|
3
|
+
class BranchWithToMatcherRequirementTest < StateMachinesTest
|
4
|
+
def setup
|
5
|
+
@object = Object.new
|
6
|
+
@branch = StateMachines::Branch.new(to: StateMachines::BlacklistMatcher.new([:idling, :parked]))
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_should_match_if_included
|
10
|
+
assert @branch.matches?(@object, to: :first_gear)
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_should_not_match_if_not_included
|
14
|
+
refute @branch.matches?(@object, to: :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 BranchWithToRequirementTest < StateMachinesTest
|
4
|
+
def setup
|
5
|
+
@object = Object.new
|
6
|
+
@branch = StateMachines::Branch.new(to: :idling)
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_should_use_a_whitelist_matcher
|
10
|
+
assert_instance_of StateMachines::WhitelistMatcher, @branch.state_requirements.first[:to]
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_should_match_if_not_specified
|
14
|
+
assert @branch.matches?(@object, from: :parked)
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_should_match_if_included
|
18
|
+
assert @branch.matches?(@object, to: :idling)
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_should_not_match_if_not_included
|
22
|
+
refute @branch.matches?(@object, to: :parked)
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_should_not_match_if_nil
|
26
|
+
refute @branch.matches?(@object, to: nil)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_should_ignore_from
|
30
|
+
assert @branch.matches?(@object, to: :idling, from: :parked)
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_should_ignore_on
|
34
|
+
assert @branch.matches?(@object, to: :idling, on: :ignite)
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_should_be_included_in_known_states
|
38
|
+
assert_equal [:idling], @branch.known_states
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_should_include_requirement_in_match
|
42
|
+
match = @branch.match(@object, to: :idling)
|
43
|
+
assert_equal @branch.state_requirements.first[:to], match[:to]
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require_relative '../../test_helper'
|
2
|
+
|
3
|
+
class BranchWithUnlessConditionalTest < StateMachinesTest
|
4
|
+
def setup
|
5
|
+
@object = Object.new
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_should_have_an_unless_condition
|
9
|
+
branch = StateMachines::Branch.new(unless: lambda { true })
|
10
|
+
refute_nil branch.unless_condition
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_should_match_if_false
|
14
|
+
branch = StateMachines::Branch.new(unless: lambda { false })
|
15
|
+
assert branch.matches?(@object)
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_should_not_match_if_true
|
19
|
+
branch = StateMachines::Branch.new(unless: lambda { true })
|
20
|
+
refute branch.matches?(@object)
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_should_be_nil_if_unmatched
|
24
|
+
branch = StateMachines::Branch.new(unless: lambda { true })
|
25
|
+
assert_nil branch.match(@object)
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require_relative '../../test_helper'
|
2
|
+
|
3
|
+
class BranchWithoutGuardsTest < StateMachinesTest
|
4
|
+
def setup
|
5
|
+
@object = Object.new
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_should_match_if_if_is_false
|
9
|
+
branch = StateMachines::Branch.new(if: lambda { false })
|
10
|
+
assert branch.matches?(@object, guard: false)
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_should_match_if_if_is_true
|
14
|
+
branch = StateMachines::Branch.new(if: lambda { true })
|
15
|
+
assert branch.matches?(@object, guard: false)
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_should_match_if_unless_is_false
|
19
|
+
branch = StateMachines::Branch.new(unless: lambda { false })
|
20
|
+
assert branch.matches?(@object, guard: false)
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_should_match_if_unless_is_true
|
24
|
+
branch = StateMachines::Branch.new(unless: lambda { true })
|
25
|
+
assert branch.matches?(@object, guard: false)
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require_relative '../../test_helper'
|
2
|
+
|
3
|
+
class CallbackByDefaultTest < StateMachinesTest
|
4
|
+
def setup
|
5
|
+
@callback = StateMachines::Callback.new(:before) {}
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_should_have_type
|
9
|
+
assert_equal :before, @callback.type
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_should_not_have_a_terminator
|
13
|
+
assert_nil @callback.terminator
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_should_have_a_branch_with_all_matcher_requirements
|
17
|
+
assert_equal StateMachines::AllMatcher.instance, @callback.branch.event_requirement
|
18
|
+
assert_equal StateMachines::AllMatcher.instance, @callback.branch.state_requirements.first[:from]
|
19
|
+
assert_equal StateMachines::AllMatcher.instance, @callback.branch.state_requirements.first[:to]
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_should_not_have_any_known_states
|
23
|
+
assert_equal [], @callback.known_states
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require_relative '../../test_helper'
|
2
|
+
|
3
|
+
class CallbackTest < StateMachinesTest
|
4
|
+
def test_should_raise_exception_if_invalid_type_specified
|
5
|
+
exception = assert_raises(ArgumentError) { StateMachines::Callback.new(:invalid) {} }
|
6
|
+
assert_equal 'Type must be :before, :after, :around, or :failure', exception.message
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_should_not_raise_exception_if_using_before_type
|
10
|
+
StateMachines::Callback.new(:before) {}
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_should_not_raise_exception_if_using_after_type
|
14
|
+
StateMachines::Callback.new(:after) {}
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_should_not_raise_exception_if_using_around_type
|
18
|
+
StateMachines::Callback.new(:around) {}
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_should_not_raise_exception_if_using_failure_type
|
22
|
+
StateMachines::Callback.new(:failure) {}
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_should_raise_exception_if_no_methods_specified
|
26
|
+
exception = assert_raises(ArgumentError) { StateMachines::Callback.new(:before) }
|
27
|
+
assert_equal 'Method(s) for callback must be specified', exception.message
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_should_not_raise_exception_if_method_specified_in_do_option
|
31
|
+
StateMachines::Callback.new(:before, do: :run)
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_should_not_raise_exception_if_method_specified_as_argument
|
35
|
+
StateMachines::Callback.new(:before, :run)
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_should_not_raise_exception_if_method_specified_as_block
|
39
|
+
StateMachines::Callback.new(:before, :run) {}
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_should_not_raise_exception_if_implicit_option_specified
|
43
|
+
StateMachines::Callback.new(:before, do: :run, invalid: :valid)
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_should_not_bind_to_objects
|
47
|
+
refute StateMachines::Callback.bind_to_object
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_should_not_have_a_terminator
|
51
|
+
assert_nil StateMachines::Callback.terminator
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require_relative '../../test_helper'
|
2
|
+
|
3
|
+
class CallbackWithApplicationBoundObjectTest < StateMachinesTest
|
4
|
+
def setup
|
5
|
+
@original_bind_to_object = StateMachines::Callback.bind_to_object
|
6
|
+
StateMachines::Callback.bind_to_object = true
|
7
|
+
|
8
|
+
context = nil
|
9
|
+
@callback = StateMachines::Callback.new(:before, do: lambda { |*_args| context = self })
|
10
|
+
|
11
|
+
@object = Object.new
|
12
|
+
@callback.call(@object)
|
13
|
+
@context = context
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_should_call_method_within_the_context_of_the_object
|
17
|
+
assert_equal @object, @context
|
18
|
+
end
|
19
|
+
|
20
|
+
def teardown
|
21
|
+
StateMachines::Callback.bind_to_object = @original_bind_to_object
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require_relative '../../test_helper'
|
2
|
+
|
3
|
+
class CallbackWithApplicationTerminatorTest < StateMachinesTest
|
4
|
+
def setup
|
5
|
+
@original_terminator = StateMachines::Callback.terminator
|
6
|
+
StateMachines::Callback.terminator = lambda { |result| result == false }
|
7
|
+
|
8
|
+
@object = Object.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_should_not_halt_if_terminator_does_not_match
|
12
|
+
callback = StateMachines::Callback.new(:before, do: lambda { true })
|
13
|
+
callback.call(@object)
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_should_halt_if_terminator_matches
|
17
|
+
callback = StateMachines::Callback.new(:before, do: lambda { false })
|
18
|
+
assert_throws(:halt) { callback.call(@object) }
|
19
|
+
end
|
20
|
+
|
21
|
+
def teardown
|
22
|
+
StateMachines::Callback.terminator = @original_terminator
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require_relative '../../test_helper'
|
2
|
+
|
3
|
+
class CallbackWithArgumentsTest < StateMachinesTest
|
4
|
+
def setup
|
5
|
+
@callback = StateMachines::Callback.new(:before, do: lambda { |*args| @args = args })
|
6
|
+
|
7
|
+
@object = Object.new
|
8
|
+
@callback.call(@object, {}, 1, 2, 3)
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_should_call_method_with_all_arguments
|
12
|
+
assert_equal [@object, 1, 2, 3], @args
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require_relative '../../test_helper'
|
2
|
+
|
3
|
+
class CallbackWithAroundTypeAndArgumentsTest < StateMachinesTest
|
4
|
+
def setup
|
5
|
+
@object = Object.new
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_should_include_object_if_specified
|
9
|
+
callback = StateMachines::Callback.new(:around, lambda { |object, block| @args = [object]; block.call })
|
10
|
+
callback.call(@object)
|
11
|
+
assert_equal [@object], @args
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_should_include_arguments_if_specified
|
15
|
+
callback = StateMachines::Callback.new(:around, lambda { |object, arg1, arg2, arg3, block| @args = [object, arg1, arg2, arg3]; block.call })
|
16
|
+
callback.call(@object, {}, 1, 2, 3)
|
17
|
+
assert_equal [@object, 1, 2, 3], @args
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_should_include_arguments_if_splat_used
|
21
|
+
callback = StateMachines::Callback.new(:around, lambda { |*args| block = args.pop; @args = args; block.call })
|
22
|
+
callback.call(@object, {}, 1, 2, 3)
|
23
|
+
assert_equal [@object, 1, 2, 3], @args
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require_relative '../../test_helper'
|
2
|
+
|
3
|
+
class CallbackWithAroundTypeAndBlockTest < StateMachinesTest
|
4
|
+
def setup
|
5
|
+
@object = Object.new
|
6
|
+
@callbacks = []
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_should_evaluate_before_without_after
|
10
|
+
callback = StateMachines::Callback.new(:around, lambda { |*args| block = args.pop; @args = args; block.call })
|
11
|
+
assert callback.call(@object)
|
12
|
+
assert_equal [@object], @args
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_should_evaluate_after_without_before
|
16
|
+
callback = StateMachines::Callback.new(:around, lambda { |*args| block = args.pop; block.call; @args = args })
|
17
|
+
assert callback.call(@object)
|
18
|
+
assert_equal [@object], @args
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_should_halt_if_not_yielded
|
22
|
+
callback = StateMachines::Callback.new(:around, lambda { |_block| })
|
23
|
+
assert_throws(:halt) { callback.call(@object) }
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_should_call_block_after_before
|
27
|
+
callback = StateMachines::Callback.new(:around, lambda { |block| @callbacks << :before; block.call })
|
28
|
+
assert callback.call(@object) { @callbacks << :block }
|
29
|
+
assert_equal [:before, :block], @callbacks
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_should_call_block_before_after
|
33
|
+
@callbacks = []
|
34
|
+
callback = StateMachines::Callback.new(:around, lambda { |block| block.call; @callbacks << :after })
|
35
|
+
assert callback.call(@object) { @callbacks << :block }
|
36
|
+
assert_equal [:block, :after], @callbacks
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_should_halt_if_block_halts
|
40
|
+
callback = StateMachines::Callback.new(:around, lambda { |block| block.call; @callbacks << :after })
|
41
|
+
assert_throws(:halt) { callback.call(@object) { throw :halt } }
|
42
|
+
assert_equal [], @callbacks
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require_relative '../../test_helper'
|
2
|
+
|
3
|
+
class CallbackWithAroundTypeAndBoundMethodTest < StateMachinesTest
|
4
|
+
def setup
|
5
|
+
@object = Object.new
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_should_call_method_within_the_context_of_the_object
|
9
|
+
context = nil
|
10
|
+
callback = StateMachines::Callback.new(:around, do: lambda { |block| context = self; block.call }, bind_to_object: true)
|
11
|
+
callback.call(@object, {}, 1, 2, 3)
|
12
|
+
|
13
|
+
assert_equal @object, context
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_should_include_arguments_if_specified
|
17
|
+
context = nil
|
18
|
+
callback = StateMachines::Callback.new(:around, do: lambda { |*args| block = args.pop; context = args; block.call }, bind_to_object: true)
|
19
|
+
callback.call(@object, {}, 1, 2, 3)
|
20
|
+
|
21
|
+
assert_equal [1, 2, 3], context
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
require_relative '../../test_helper'
|
2
|
+
|
3
|
+
class CallbackWithAroundTypeAndMultipleMethodsTest < StateMachinesTest
|
4
|
+
def setup
|
5
|
+
@callback = StateMachines::Callback.new(:around, :run_1, :run_2)
|
6
|
+
|
7
|
+
class << @object = Object.new
|
8
|
+
attr_accessor :before_callbacks
|
9
|
+
attr_accessor :after_callbacks
|
10
|
+
|
11
|
+
def run_1
|
12
|
+
(@before_callbacks ||= []) << :run_1
|
13
|
+
yield
|
14
|
+
(@after_callbacks ||= []) << :run_1
|
15
|
+
end
|
16
|
+
|
17
|
+
def run_2
|
18
|
+
(@before_callbacks ||= []) << :run_2
|
19
|
+
yield
|
20
|
+
(@after_callbacks ||= []) << :run_2
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_should_succeed
|
26
|
+
assert @callback.call(@object)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_should_evaluate_before_callbacks_in_order
|
30
|
+
@callback.call(@object)
|
31
|
+
assert_equal [:run_1, :run_2], @object.before_callbacks
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_should_evaluate_after_callbacks_in_reverse_order
|
35
|
+
@callback.call(@object)
|
36
|
+
assert_equal [:run_2, :run_1], @object.after_callbacks
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_should_call_block_after_before_callbacks
|
40
|
+
@callback.call(@object) { (@object.before_callbacks ||= []) << :block }
|
41
|
+
assert_equal [:run_1, :run_2, :block], @object.before_callbacks
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_should_call_block_before_after_callbacks
|
45
|
+
@callback.call(@object) { (@object.after_callbacks ||= []) << :block }
|
46
|
+
assert_equal [:block, :run_2, :run_1], @object.after_callbacks
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_should_halt_if_first_doesnt_yield
|
50
|
+
class << @object
|
51
|
+
remove_method :run_1
|
52
|
+
def run_1
|
53
|
+
(@before_callbacks ||= []) << :run_1
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
catch(:halt) do
|
58
|
+
@callback.call(@object) { (@object.before_callbacks ||= []) << :block }
|
59
|
+
end
|
60
|
+
|
61
|
+
assert_equal [:run_1], @object.before_callbacks
|
62
|
+
assert_nil @object.after_callbacks
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_should_halt_if_last_doesnt_yield
|
66
|
+
class << @object
|
67
|
+
remove_method :run_2
|
68
|
+
def run_2
|
69
|
+
(@before_callbacks ||= []) << :run_2
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
catch(:halt) { @callback.call(@object) }
|
74
|
+
assert_equal [:run_1, :run_2], @object.before_callbacks
|
75
|
+
assert_nil @object.after_callbacks
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_should_not_evaluate_further_methods_if_after_halts
|
79
|
+
class << @object
|
80
|
+
remove_method :run_2
|
81
|
+
def run_2
|
82
|
+
(@before_callbacks ||= []) << :run_2
|
83
|
+
yield
|
84
|
+
(@after_callbacks ||= []) << :run_2
|
85
|
+
throw :halt
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
catch(:halt) { @callback.call(@object) }
|
90
|
+
assert_equal [:run_1, :run_2], @object.before_callbacks
|
91
|
+
assert_equal [:run_2], @object.after_callbacks
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require_relative '../../test_helper'
|
2
|
+
|
3
|
+
class CallbackWithAroundTypeAndTerminatorTest < StateMachinesTest
|
4
|
+
def setup
|
5
|
+
@object = Object.new
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_should_not_halt_if_terminator_does_not_match
|
9
|
+
callback = StateMachines::Callback.new(:around, do: lambda { |block| block.call(false); false }, terminator: lambda { |result| result == true })
|
10
|
+
callback.call(@object)
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_should_not_halt_if_terminator_matches
|
14
|
+
callback = StateMachines::Callback.new(:around, do: lambda { |block| block.call(false); false }, terminator: lambda { |result| result == false })
|
15
|
+
callback.call(@object)
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require_relative '../../test_helper'
|
2
|
+
|
3
|
+
class CallbackWithBlockTest < StateMachinesTest
|
4
|
+
def setup
|
5
|
+
@callback = StateMachines::Callback.new(:before) do |*args|
|
6
|
+
@args = args
|
7
|
+
end
|
8
|
+
|
9
|
+
@object = Object.new
|
10
|
+
@result = @callback.call(@object)
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_should_be_successful
|
14
|
+
assert @result
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_should_call_with_empty_context
|
18
|
+
assert_equal [@object], @args
|
19
|
+
end
|
20
|
+
end
|