Beispiel #1
0
def test_document_view(qtbot: QtBot):
    from genial.views.documentview import DocumentView
    document_view = DocumentView()
    assert document_view is not None
    qtbot.add_widget(document_view)
    document_view.show()
    assert document_view.isVisible()
Beispiel #2
0
def test_properties_questions_view(qtbot: QtBot):
    from genial.views.propertiesquestiontypeview import PropertiesQuestionTypeView
    properties_questions_view = PropertiesQuestionTypeView()
    assert properties_questions_view is not None
    qtbot.add_widget(properties_questions_view)
    properties_questions_view.show()
    assert properties_questions_view.isVisible()
Beispiel #3
0
def test_main_view(qtbot: QtBot):
    from genial.views.mainview import MainView
    main_view = MainView()
    assert main_view is not None
    qtbot.add_widget(main_view)
    main_view.show()
    assert main_view.isVisible()
Beispiel #4
0
def test_questions_view(qtbot:QtBot):
    from genial.views.questionsview import QuestionsView
    questions_view = QuestionsView()
    assert questions_view is not None
    qtbot.add_widget(questions_view)
    questions_view.show()
    assert questions_view.isVisible()
Beispiel #5
0
def test_document_view(qtbot:QtBot):
    from genial.views.documentview import DocumentView
    document_view = DocumentView()
    assert document_view is not None
    qtbot.add_widget(document_view)
    document_view.show()
    assert document_view.isVisible()
Beispiel #6
0
def test_main_view(qtbot:QtBot):
    from genial.views.mainview import MainView
    main_view = MainView()
    assert main_view is not None
    qtbot.add_widget(main_view)
    main_view.show()
    assert main_view.isVisible()
Beispiel #7
0
def test_questions_view(qtbot: QtBot):
    from genial.views.questionsview import QuestionsView
    questions_view = QuestionsView()
    assert questions_view is not None
    qtbot.add_widget(questions_view)
    questions_view.show()
    assert questions_view.isVisible()
Beispiel #8
0
def test_properties_questions_view(qtbot:QtBot):
    from genial.views.propertiesquestiontypeview import PropertiesQuestionTypeView
    properties_questions_view = PropertiesQuestionTypeView()
    assert properties_questions_view is not None
    qtbot.add_widget(properties_questions_view)
    properties_questions_view.show()
    assert properties_questions_view.isVisible()
def window(model: Model, qtbot: QtBot, mocker: MockFixture):
    """the window."""
    message_box = 'usc_lr_timer.app.QtWidgets.QMessageBox.{}'
    mocker.patch(message_box.format('question'),
                 return_value=QtWidgets.QMessageBox.Yes)
    mocker.patch(message_box.format('information'))
    window = MainWindow(model)
    qtbot.add_widget(window)
    return window
Beispiel #10
0
def test_figure_registration(app: Mockautodidaqt, qtbot: QtBot):
    panel = Panel(FauxParent(), "test", app)
    qtbot.add_widget(panel)

    fig = panel.register_figure("plot")

    assert len(panel.canvases) == 1
    assert len(panel.figures) == 1
    assert isinstance(fig, Figure)
Beispiel #11
0
def test_dataclass_bindings(qtbot: QtBot):
    data = Data()
    gated = Data()
    ui = {}

    with CollectUI(ui):
        g = group(
            "Dataclass Binding",
            layout_dataclass(Data, prefix="data"),
            layout_dataclass(Data, prefix="gated", submit="Submit"),
        )

        bind_dataclass(data, prefix="data", ui=ui)
        bind_dataclass(gated, prefix="gated", ui=ui)

    qtbot.add_widget(g)

    # check keys are generated appropriately
    assert set(ui.keys()).issuperset({("data", k)
                                      for k in ["x", "y", "z", "choice"]})

    # this only gives one way binding
    assert data == Data()

    # directly plug into the observables
    ui[("data", "x")].on_next(5)
    assert data == Data(x=5)

    ui[("data", "choice")].on_next(AorB.B)
    assert data == Data(x=5, choice=AorB.B)

    # check that the gated option does not update until submitted
    ui[("gated", "x")].on_next(5)
    assert gated == Data()

    ui[("gated", "y")].on_next(-1)
    assert gated == Data()

    qtbot.mouseClick(ui[("gated", "submit!")], QtCore.Qt.LeftButton)
    assert gated == Data(x=5, y=-1)

    # check field types
    with pytest.raises(TypeError) as exc:
        ui[("data", "z")].on_next(10)

    assert "unexpected type 'int'" in str(exc.value)

    expected_classes = [
        DoubleSpinBox,
        SpinBox,
        LineEdit,
        ComboBox,
    ]

    for partial_id, cls in zip(["x", "y", "z", "choice"], expected_classes):
        assert isinstance(ui[("data", partial_id)], cls)
Beispiel #12
0
def test_reactive_button(qtbot: QtBot):
    b = button("My Button Text")
    events = []
    b.subscribe(events.append)

    qtbot.add_widget(b)
    qtbot.mouseClick(b, QtCore.Qt.LeftButton)
    qtbot.mouseClick(b, QtCore.Qt.LeftButton)
    assert events == [True, True]

    qtbot.mouseClick(b, QtCore.Qt.LeftButton)
    assert events == [True, True, True]
Beispiel #13
0
def test_reactive_slider(qtbot: QtBot):
    w = slider()
    qtbot.add_widget(w)

    events = []
    w.subscribe(events.append)

    w.setValue(5)
    w.setValue(-1)  # below minimum
    w.setValue(11)  # above maximum
    w.setValue(6.6)  # should be coerced to int and rounded down

    assert events == [0, 5, 0, 10, 6]
Beispiel #14
0
def test_reactive_line_edit(qtbot: QtBot):
    start_text = "Start."
    edit = line_edit(start_text)
    qtbot.add_widget(edit)

    events = []
    edit.subscribe(events.append)

    will_type = "Test."
    qtbot.keyClicks(edit, will_type)

    assert events == [
        start_text + will_type[:i] for i in range(len(will_type) + 1)
    ]
Beispiel #15
0
def test_reactive_combo_box(qtbot: QtBot):
    combo = combo_box(["A", "B", "C"])
    qtbot.add_widget(combo)

    events = []
    combo.subscribe(events.append)

    combo.setCurrentIndex(0)
    combo.setCurrentIndex(1)
    combo.setCurrentIndex(2)
    combo.setCurrentIndex(2)
    combo.setCurrentIndex(0)

    assert events == ["A", "B", "C", "A"]
Beispiel #16
0
def test_reactive_check_box(qtbot: QtBot):
    cb = check_box("Checkbox")

    events = []
    cb.subscribe(events.append)

    qtbot.add_widget(cb)
    cb.setCheckState(False)
    cb.setCheckState(False)
    cb.setCheckState(True)
    cb.setCheckState(False)
    cb.setCheckState(True)
    cb.setCheckState(True)

    assert events == [0, 1, 0, 1]
Beispiel #17
0
def test_submit_gating(qtbot: QtBot):
    ui = {}
    with CollectUI(ui):
        top_level = vertical(
            "Some reactive inputs",
            radio_button("Radio button", id="radio"),
            line_edit("!", id="edit"),
            button("Submit", id="submit"),
        )

    qtbot.add_widget(top_level)

    edit_events = []
    radio_events = []
    ui["radio"].subscribe(radio_events.append)
    ui["edit"].subscribe(edit_events.append)

    # collect into a small form
    form_events = []
    submit("submit", ["radio", "edit"], ui=ui).subscribe(form_events.append)

    ui["radio"].setChecked(True)
    ui["radio"].setChecked(True)
    ui["radio"].setChecked(False)
    qtbot.keyClicks(ui["edit"], "Text")

    qtbot.mouseClick(ui["submit"], QtCore.Qt.LeftButton)

    ui["radio"].setChecked(True)
    qtbot.keyClicks(ui["edit"], "B")

    qtbot.mouseClick(ui["submit"], QtCore.Qt.LeftButton)

    assert edit_events == [f"!{'TextB'[:i]}" for i in range(len("TextB") + 1)]
    assert radio_events == [False, True, False, True]

    assert form_events == [
        {
            "edit": "!Text",
            "radio": False
        },
        {
            "edit": "!TextB",
            "radio": True
        },
    ]
Beispiel #18
0
def test_reactive_spinbox(qtbot: QtBot):
    sb = spin_box()
    qtbot.add_widget(sb)

    # by default we get an integer spinbox
    events = []
    sb.subscribe(events.append)

    for v in [-1, 3, 3.5, 4, 9, 12]:
        sb.setValue(v)

    assert events == [0, 3, 4, 9, 10]

    # check floats
    dsb = spin_box(kind=float)
    qtbot.add_widget(dsb)
    events = []
    dsb.subscribe(events.append)

    for v in [-1, 3, 3.5, 4, 9, 12]:
        dsb.setValue(v)

    assert events == [0, 3, 3.5, 4, 9, 10]
Beispiel #19
0
def window(model: Model, qtbot: QtBot):
    window = MainWindow(model)
    qtbot.add_widget(window)
    return window
Beispiel #20
0
def test_panel_creation(app: Mockautodidaqt, qtbot: QtBot):
    panel = Panel(FauxParent(), "test", app)
    qtbot.add_widget(panel)

    assert panel
Beispiel #21
0
def the_window(dialog: LoginDialog, qtbot: QtBot):
    """The window."""
    qtbot.add_widget(dialog)