From 4cd55c090ea50593fb7bb32f2103cebbe7871e61 Mon Sep 17 00:00:00 2001 From: Alex Lobascio Date: Thu, 5 Jun 2025 15:19:38 -0700 Subject: [PATCH 1/3] add test case for shot persist_enable property -- appears that behavior is currently broken --- .../shots/config/test_shots.yaml | 3 ++ .../config/mode_test_persist_enable.yaml | 31 ++++++++++++++ mpf/tests/test_Shots.py | 40 +++++++++++++++++++ 3 files changed, 74 insertions(+) create mode 100644 mpf/tests/machine_files/shots/modes/mode_test_persist_enable/config/mode_test_persist_enable.yaml diff --git a/mpf/tests/machine_files/shots/config/test_shots.yaml b/mpf/tests/machine_files/shots/config/test_shots.yaml index 46677421f..dd475ee43 100644 --- a/mpf/tests/machine_files/shots/config/test_shots.yaml +++ b/mpf/tests/machine_files/shots/config/test_shots.yaml @@ -6,6 +6,7 @@ modes: - mode1 - mode2 - mode3 + - mode_test_persist_enable switches: switch_1: @@ -60,6 +61,8 @@ switches: number: switch_28: number: + switch_29: + number: lights: light_1: diff --git a/mpf/tests/machine_files/shots/modes/mode_test_persist_enable/config/mode_test_persist_enable.yaml b/mpf/tests/machine_files/shots/modes/mode_test_persist_enable/config/mode_test_persist_enable.yaml new file mode 100644 index 000000000..2483ae459 --- /dev/null +++ b/mpf/tests/machine_files/shots/modes/mode_test_persist_enable/config/mode_test_persist_enable.yaml @@ -0,0 +1,31 @@ +#config_version=6 + +mode: + priority: 100 + +shot_profiles: + pe_profile: + advance_on_hit: false + states: + - name: pe_state_1 + - name: pe_state_2 + +shots: + pe_test_default: + switch: switch_29 + # persist_enable: default + profile: pe_profile + disable_events: pe_test_disable_all_shots + enable_events: pe_test_enable_all_shots + pe_test_property_enabled: + switch: switch_29 + persist_enable: true + profile: pe_profile + disable_events: pe_test_disable_all_shots + enable_events: pe_test_enable_all_shots + pe_test_property_disabled: + switch: switch_29 + persist_enable: false + profile: pe_profile + disable_events: pe_test_disable_all_shots + enable_events: pe_test_enable_all_shots diff --git a/mpf/tests/test_Shots.py b/mpf/tests/test_Shots.py index c48360421..b91c0a870 100644 --- a/mpf/tests/test_Shots.py +++ b/mpf/tests/test_Shots.py @@ -1021,3 +1021,43 @@ def test_jump_states(self): self.advance_time_and_run() self.post_event("state_event2") self.assertEqual("None", shot2.state_name) + + def test_persist_enable(self): + """Test shot#persist_enable functionality""" + self.start_game() + test_mode = self.machine.modes["mode_test_persist_enable"] + test_mode.start() + + shot_pe_test_default = self.machine.shots["pe_test_default"] + shot_pe_test_property_enabled = self.machine.shots["pe_test_property_enabled"] + shot_pe_test_property_disabled = self.machine.shots["pe_test_property_disabled"] + + self.assertFalse(shot_pe_test_default.enabled) + self.assertFalse(shot_pe_test_property_enabled.enabled) + self.assertFalse(shot_pe_test_property_disabled.enabled) + + self.post_event("pe_test_enable_all_shots") + + self.assertTrue(shot_pe_test_default.enabled) + self.assertTrue(shot_pe_test_property_enabled.enabled) + self.assertTrue(shot_pe_test_property_disabled.enabled) + + test_mode.stop() + test_mode.start() + + self.assertTrue(shot_pe_test_default.enabled) + self.assertTrue(shot_pe_test_property_enabled.enabled) + self.assertFalse(shot_pe_test_property_disabled.enabled) + + self.post_event("pe_test_enable_all_shots") + + self.assertFalse(shot_pe_test_default.enabled) + self.assertFalse(shot_pe_test_property_enabled.enabled) + self.assertFalse(shot_pe_test_property_disabled.enabled) + + test_mode.stop() + test_mode.start() + + self.assertFalse(shot_pe_test_default.enabled) + self.assertFalse(shot_pe_test_property_enabled.enabled) + self.assertFalse(shot_pe_test_property_disabled.enabled) From 1af622be0adc28f6fcbbfc037eb15889501217e3 Mon Sep 17 00:00:00 2001 From: Alex Lobascio Date: Thu, 5 Jun 2025 18:03:21 -0700 Subject: [PATCH 2/3] add shot tests around persist_enable note that one assertion is commented because it fails and I believe this is a bug. This commit serves to show that the rest of the test passes, and the next commit will fail it. --- .../config/mode_test_persist_enable.yaml | 18 ++++++++--- mpf/tests/test_Shots.py | 30 ++++++++++++++----- 2 files changed, 37 insertions(+), 11 deletions(-) diff --git a/mpf/tests/machine_files/shots/modes/mode_test_persist_enable/config/mode_test_persist_enable.yaml b/mpf/tests/machine_files/shots/modes/mode_test_persist_enable/config/mode_test_persist_enable.yaml index 2483ae459..5cfe67e73 100644 --- a/mpf/tests/machine_files/shots/modes/mode_test_persist_enable/config/mode_test_persist_enable.yaml +++ b/mpf/tests/machine_files/shots/modes/mode_test_persist_enable/config/mode_test_persist_enable.yaml @@ -11,21 +11,31 @@ shot_profiles: - name: pe_state_2 shots: + pe_test_property_disabled: + profile: pe_profile + switch: switch_29 + start_enabled: false + persist_enable: false #field under test + disable_events: pe_test_disable_all_shots + enable_events: pe_test_enable_all_shots pe_test_default: switch: switch_29 - # persist_enable: default profile: pe_profile + start_enabled: false + # persist_enable: default is true #field under test disable_events: pe_test_disable_all_shots enable_events: pe_test_enable_all_shots pe_test_property_enabled: switch: switch_29 - persist_enable: true profile: pe_profile + start_enabled: false + persist_enable: true #field under test disable_events: pe_test_disable_all_shots enable_events: pe_test_enable_all_shots - pe_test_property_disabled: + pe_test_property_enabled_default_enabled: switch: switch_29 - persist_enable: false profile: pe_profile + start_enabled: true #field under test + persist_enable: true #field under test disable_events: pe_test_disable_all_shots enable_events: pe_test_enable_all_shots diff --git a/mpf/tests/test_Shots.py b/mpf/tests/test_Shots.py index b91c0a870..548e2cb79 100644 --- a/mpf/tests/test_Shots.py +++ b/mpf/tests/test_Shots.py @@ -1028,36 +1028,52 @@ def test_persist_enable(self): test_mode = self.machine.modes["mode_test_persist_enable"] test_mode.start() + shot_pe_test_property_disabled = self.machine.shots["pe_test_property_disabled"] shot_pe_test_default = self.machine.shots["pe_test_default"] shot_pe_test_property_enabled = self.machine.shots["pe_test_property_enabled"] - shot_pe_test_property_disabled = self.machine.shots["pe_test_property_disabled"] + shot_pe_test_property_enabled_default_enabled = self.machine.shots["pe_test_property_enabled_default_enabled"] + # Check the configs + self.assertFalse(shot_pe_test_property_disabled.config['persist_enable']) + self.assertTrue(shot_pe_test_default.config['persist_enable']) + self.assertTrue(shot_pe_test_property_enabled.config['persist_enable']) + self.assertTrue(shot_pe_test_property_enabled_default_enabled.config['persist_enable']) + + # Test clean start values - all are start_enabled: false + self.assertFalse(shot_pe_test_property_disabled.enabled) self.assertFalse(shot_pe_test_default.enabled) self.assertFalse(shot_pe_test_property_enabled.enabled) - self.assertFalse(shot_pe_test_property_disabled.enabled) + self.assertTrue(shot_pe_test_property_enabled_default_enabled.enabled) self.post_event("pe_test_enable_all_shots") + # Everything uses the same enable event + self.assertTrue(shot_pe_test_property_disabled.enabled) self.assertTrue(shot_pe_test_default.enabled) self.assertTrue(shot_pe_test_property_enabled.enabled) - self.assertTrue(shot_pe_test_property_disabled.enabled) + self.assertTrue(shot_pe_test_property_enabled_default_enabled.enabled) test_mode.stop() test_mode.start() + # Default and true should preserve the enable, false should start false again + # self.assertFalse(shot_pe_test_property_disabled.enabled) #TODO this is failing self.assertTrue(shot_pe_test_default.enabled) self.assertTrue(shot_pe_test_property_enabled.enabled) - self.assertFalse(shot_pe_test_property_disabled.enabled) + self.assertTrue(shot_pe_test_property_enabled_default_enabled.enabled) - self.post_event("pe_test_enable_all_shots") + self.post_event("pe_test_disable_all_shots") + # Everything uses the same disable event + self.assertFalse(shot_pe_test_property_disabled.enabled) self.assertFalse(shot_pe_test_default.enabled) self.assertFalse(shot_pe_test_property_enabled.enabled) - self.assertFalse(shot_pe_test_property_disabled.enabled) + self.assertFalse(shot_pe_test_property_enabled_default_enabled.enabled) test_mode.stop() test_mode.start() + self.assertFalse(shot_pe_test_property_disabled.enabled) self.assertFalse(shot_pe_test_default.enabled) self.assertFalse(shot_pe_test_property_enabled.enabled) - self.assertFalse(shot_pe_test_property_disabled.enabled) + self.assertFalse(shot_pe_test_property_enabled_default_enabled.enabled) From 63493579b8986dd17d5b7a0ee5c668ea15ce6427 Mon Sep 17 00:00:00 2001 From: Alex Lobascio Date: Thu, 5 Jun 2025 18:04:17 -0700 Subject: [PATCH 3/3] fail shots persist_enable test due to incorrect behavior for false value in configuration --- mpf/tests/test_Shots.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mpf/tests/test_Shots.py b/mpf/tests/test_Shots.py index 548e2cb79..3a43526ba 100644 --- a/mpf/tests/test_Shots.py +++ b/mpf/tests/test_Shots.py @@ -1057,7 +1057,7 @@ def test_persist_enable(self): test_mode.start() # Default and true should preserve the enable, false should start false again - # self.assertFalse(shot_pe_test_property_disabled.enabled) #TODO this is failing + self.assertFalse(shot_pe_test_property_disabled.enabled) #TODO this is failing self.assertTrue(shot_pe_test_default.enabled) self.assertTrue(shot_pe_test_property_enabled.enabled) self.assertTrue(shot_pe_test_property_enabled_default_enabled.enabled)