diff --git a/gp2040ce_bintools/gui.py b/gp2040ce_bintools/gui.py index 4c95ff5..a6ddaff 100644 --- a/gp2040ce_bintools/gui.py +++ b/gp2040ce_bintools/gui.py @@ -54,9 +54,7 @@ class EditScreen(ModalScreen): self.input_field = Input(value=repr(self.field_value), validators=[Number()], id='field-input') elif self.field_descriptor.type == descriptor.FieldDescriptor.TYPE_STRING: self.input_field = Input(value=self.field_value, id='field-input') - else: - # we don't handle whatever these are yet - self.input_field = Label(repr(self.field_value), id='field-input') + yield Grid( Container(Label(self.field_descriptor.full_name, id='field-name'), id='field-name-container'), Container(self.input_field, id='input-field-container'), @@ -91,17 +89,16 @@ class EditScreen(ModalScreen): def _save(self): """Save the field value to the retained config item.""" - if not isinstance(self.input_field, Label): - if self.field_descriptor.type in (descriptor.FieldDescriptor.TYPE_INT32, - descriptor.FieldDescriptor.TYPE_INT64, - descriptor.FieldDescriptor.TYPE_UINT32, - descriptor.FieldDescriptor.TYPE_UINT64): - field_value = int(self.input_field.value) - else: - field_value = self.input_field.value - setattr(self.parent_config, self.field_descriptor.name, field_value) - logger.debug("parent config post-change: %s", self.parent_config) - self.node.set_label(pb_field_to_node_label(self.field_descriptor, field_value)) + if self.field_descriptor.type in (descriptor.FieldDescriptor.TYPE_INT32, + descriptor.FieldDescriptor.TYPE_INT64, + descriptor.FieldDescriptor.TYPE_UINT32, + descriptor.FieldDescriptor.TYPE_UINT64): + field_value = int(self.input_field.value) + else: + field_value = self.input_field.value + setattr(self.parent_config, self.field_descriptor.name, field_value) + logger.debug("parent config post-change: %s", self.parent_config) + self.node.set_label(pb_field_to_node_label(self.field_descriptor, field_value)) class MessageScreen(ModalScreen): diff --git a/tests/test_gui.py b/tests/test_gui.py index 90b0710..3edde04 100644 --- a/tests/test_gui.py +++ b/tests/test_gui.py @@ -125,6 +125,41 @@ async def test_simple_edit_via_input_field(): assert pilot.app.config.displayOptions.deprecatedI2cSpeed == 5 +@pytest.mark.asyncio +@with_pb2s +async def test_cancel_simple_edit_via_input_field(): + """Test that we can cancel out of saving an int via UI and see it reflected in the config.""" + app = ConfigEditor(config_filename=os.path.join(HERE, 'test-files/test-config.bin')) + async with app.run_test() as pilot: + tree = pilot.app.query_one(Tree) + display_node = tree.root.children[5] + i2cspeed_node = display_node.children[4] + assert pilot.app.config.displayOptions.deprecatedI2cSpeed == 400000 + + tree.root.expand_all() + await pilot.wait_for_scheduled_animations() + tree.select_node(i2cspeed_node) + tree.action_select_cursor() + await pilot.wait_for_scheduled_animations() + await pilot.click('Input#field-input') + await pilot.wait_for_scheduled_animations() + await pilot.press('backspace', 'backspace', 'backspace', 'backspace', 'backspace', 'backspace', '5') + await pilot.wait_for_scheduled_animations() + await pilot.click('Button#cancel-button') + assert pilot.app.config.displayOptions.deprecatedI2cSpeed == 400000 + + +@pytest.mark.asyncio +@with_pb2s +async def test_about(): + """Test that we can bring up the about box.""" + app = ConfigEditor(config_filename=os.path.join(HERE, 'test-files/test-config.bin')) + async with app.run_test() as pilot: + await pilot.press('?') + await pilot.wait_for_scheduled_animations() + await pilot.click('Button#ok-button') + + @pytest.mark.asyncio @with_pb2s async def test_simple_edit_via_input_field_enum():