Hooked up port editor in the document tree
This commit is contained in:
115
tests/unit/test_port_editor.py
Normal file
115
tests/unit/test_port_editor.py
Normal file
@@ -0,0 +1,115 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from copy import deepcopy
|
||||
|
||||
import pytest
|
||||
from PySide6.QtWidgets import QApplication
|
||||
|
||||
from bedit_core import models
|
||||
from bedit_core.models import (
|
||||
BondPort,
|
||||
Component,
|
||||
Interface,
|
||||
PortID,
|
||||
SignalDirection,
|
||||
SignalPort,
|
||||
ValueType,
|
||||
)
|
||||
from bedit_gui.documents import Document
|
||||
from bedit_gui.views.port_editor_widget import PortEditorWidget
|
||||
|
||||
|
||||
@pytest.fixture(scope="module")
|
||||
def qt_app() -> QApplication:
|
||||
return QApplication.instance() or QApplication([])
|
||||
|
||||
|
||||
@pytest.mark.unit
|
||||
def test_port_editor_uses_a_detached_draft(qt_app: QApplication) -> None:
|
||||
port_id = PortID("input")
|
||||
original = {
|
||||
port_id: SignalPort(
|
||||
name="Input",
|
||||
direction=SignalDirection.INPUT,
|
||||
)
|
||||
}
|
||||
editor = PortEditorWidget()
|
||||
editor.set_ports(original)
|
||||
|
||||
editor.ui.nameEdit.setText("Changed")
|
||||
editor.ui.nameEdit.textEdited.emit("Changed")
|
||||
|
||||
assert original[port_id].name == "Input"
|
||||
assert editor.ports()[port_id].name == "Changed"
|
||||
|
||||
|
||||
@pytest.mark.unit
|
||||
def test_port_type_controls_option_visibility(qt_app: QApplication) -> None:
|
||||
editor = PortEditorWidget()
|
||||
editor.set_ports(
|
||||
{
|
||||
PortID("port"): SignalPort(
|
||||
name="Port",
|
||||
direction=SignalDirection.INPUT,
|
||||
value_type=ValueType.REAL,
|
||||
)
|
||||
}
|
||||
)
|
||||
|
||||
assert not editor.ui.signalTypeComboBox.isHidden()
|
||||
assert editor.ui.domainComboBox.isHidden()
|
||||
|
||||
editor.ui.typeBond.setChecked(True)
|
||||
|
||||
assert editor.ui.signalTypeComboBox.isHidden()
|
||||
assert not editor.ui.domainComboBox.isHidden()
|
||||
|
||||
|
||||
@pytest.mark.unit
|
||||
def test_bond_causality_is_loaded_and_changed(qt_app: QApplication) -> None:
|
||||
port_id = PortID("bond")
|
||||
editor = PortEditorWidget()
|
||||
editor.set_ports({port_id: BondPort("Bond", SignalDirection.INPUT, causality_preference=models.PortCausality.PREFERRED_FLOW_OUT)})
|
||||
|
||||
assert editor.ui.causalityComboBox.currentData() is models.PortCausality.PREFERRED_FLOW_OUT
|
||||
|
||||
index = editor.ui.causalityComboBox.findData(models.PortCausality.FIXED_EFFORT_OUT)
|
||||
editor.ui.causalityComboBox.setCurrentIndex(index)
|
||||
|
||||
assert editor.ports()[port_id].causality_preference is models.PortCausality.FIXED_EFFORT_OUT
|
||||
|
||||
|
||||
@pytest.mark.unit
|
||||
def test_port_changes_are_one_undoable_operation(
|
||||
qt_app: QApplication,
|
||||
minimal_document,
|
||||
) -> None:
|
||||
component: Component = next(iter(minimal_document.root.values()))
|
||||
removed_id = PortID("removed")
|
||||
changed_id = PortID("changed")
|
||||
added_id = PortID("added")
|
||||
component.interface = Interface(
|
||||
{
|
||||
removed_id: SignalPort("Remove", SignalDirection.INPUT),
|
||||
changed_id: SignalPort("Before", SignalDirection.INPUT),
|
||||
}
|
||||
)
|
||||
original = deepcopy(component.interface.ports)
|
||||
updated = {
|
||||
changed_id: BondPort(
|
||||
"After",
|
||||
SignalDirection.OUTPUT,
|
||||
domain="electrical",
|
||||
),
|
||||
added_id: SignalPort("Added", SignalDirection.INPUT),
|
||||
}
|
||||
document = Document(qt_app)
|
||||
|
||||
document.update_component_ports(component, updated)
|
||||
assert component.interface.ports == updated
|
||||
|
||||
document.undo_stack.undo()
|
||||
assert component.interface.ports == original
|
||||
|
||||
document.undo_stack.redo()
|
||||
assert component.interface.ports == updated
|
||||
Reference in New Issue
Block a user