Source code for ewoksorange.tests.test_tutorials
import pytest
from ewoksorange.bindings import ows_to_ewoks
from ewoksorange.orange_version import ORANGE_VERSION
from ewokscore import execute_graph
try:
from importlib.resources import files as resource_files
except ImportError:
from importlib_resources import files as resource_files
[docs]
def test_sumtask_tutorial_with_qt(ewoks_orange_canvas):
from orangecontrib.ewokstest import tutorials
filename = resource_files(tutorials).joinpath("sumtask_tutorial.ows")
assert_sumtask_tutorial_with_qt(ewoks_orange_canvas, filename)
[docs]
def test_sumtask_tutorial_without_qt(qtapp):
from orangecontrib.ewokstest import tutorials
filename = resource_files(tutorials).joinpath("sumtask_tutorial.ows")
assert_sumtask_tutorial_without_qt(filename)
[docs]
def test_list_operations_with_qt(ewoks_orange_canvas):
from orangecontrib.ewokstest import tutorials
filename = resource_files(tutorials).joinpath("sumlist_tutorial.ows")
assert_sumlist_tutorial_with_qt(ewoks_orange_canvas, filename)
[docs]
def test_list_operations_without_qt(qtapp):
from orangecontrib.ewokstest import tutorials
filename = resource_files(tutorials).joinpath("sumlist_tutorial.ows")
assert_sumlist_tutorial_without_qt(filename)
[docs]
@pytest.mark.skipif(
ORANGE_VERSION != ORANGE_VERSION.latest_orange, reason="Requires Orange3 widgets"
)
def test_mixed_tutorial_with_qt(ewoks_orange_canvas):
from orangecontrib.ewokstest import tutorials
filename = resource_files(tutorials).joinpath("mixed_tutorial.ows")
assert_mixed_tutorial_with_qt(ewoks_orange_canvas, filename)
[docs]
@pytest.mark.skipif(
ORANGE_VERSION != ORANGE_VERSION.latest_orange, reason="Requires Orange3 widgets"
)
def test_mixed_tutorial_without_qt(qtapp):
from orangecontrib.ewokstest import tutorials
filename = resource_files(tutorials).joinpath("mixed_tutorial.ows")
assert_mixed_tutorial_without_qt(filename)
[docs]
def assert_sumtask_tutorial_with_qt(ewoks_orange_canvas, filename):
"""Execute workflow using the Qt widgets and signals"""
ewoks_orange_canvas.load_ows(str(filename))
ewoks_orange_canvas.start_workflow()
ewoks_orange_canvas.wait_widgets(timeout=10)
widgets = list(ewoks_orange_canvas.widgets_from_name("task6"))
results = widgets[0].get_task_output_values()
assert results == {"result": 16}
ewoks_orange_canvas.load_ows(str(filename))
ewoks_orange_canvas.set_input_values(
[{"label": "task1", "name": "b", "value": "wrongtype"}]
)
ewoks_orange_canvas.start_workflow()
with pytest.raises(TypeError):
# Note: we get the original error, not "RuntimeError: Task 'task1' failed"
ewoks_orange_canvas.wait_widgets(timeout=10)
[docs]
def assert_sumtask_tutorial_without_qt(filename):
"""Execute workflow after converting it to an ewoks workflow"""
graph = ows_to_ewoks(filename)
results = execute_graph(graph, output_tasks=True)
assert results["5"].get_output_values() == {"result": 16}
[docs]
def assert_sumlist_tutorial_with_qt(ewoks_orange_canvas, filename):
"""Execute workflow using the Qt widgets and signals"""
ewoks_orange_canvas.load_ows(str(filename))
# Remove artificial delay for this test
for widget in ewoks_orange_canvas.iter_widgets():
if "delay" in widget.get_default_input_names():
widget.update_default_inputs(delay=0)
ewoks_orange_canvas.start_workflow()
ewoks_orange_canvas.wait_widgets(timeout=10)
wgenerator = list(ewoks_orange_canvas.widgets_from_name("List generator"))[0]
results = wgenerator.get_task_output_values()
listsum = sum(results["list"])
widgets = list(ewoks_orange_canvas.widgets_from_name("Print list sum"))
widgets += list(ewoks_orange_canvas.widgets_from_name("Print list sum (1)"))
widgets += list(ewoks_orange_canvas.widgets_from_name("Print list sum (2)"))
for w in widgets:
results = {name: var.value for name, var in w.get_task_inputs().items()}
assert results == {"sum": listsum}
[docs]
def assert_sumlist_tutorial_without_qt(filename):
"""Execute workflow after converting it to an ewoks workflow"""
graph = ows_to_ewoks(filename)
# Remove artificial delay for this test
for attrs in graph.graph.nodes.values():
for adict in attrs.get("default_inputs", list()):
if adict["name"] == "delay":
adict["value"] = 0
results = execute_graph(graph, output_tasks=True)
listsum = sum(results["0"].get_output_values()["list"])
for i in [4, 5, 6]:
assert results[str(i)].get_input_values() == {"sum": listsum}
[docs]
def assert_mixed_tutorial_with_qt(ewoks_orange_canvas, filename):
"""Execute workflow using the Qt widgets and signals"""
ewoks_orange_canvas.load_ows(str(filename))
ewoks_orange_canvas.start_workflow()
ewoks_orange_canvas.wait_widgets(timeout=10)
widget = ewoks_orange_canvas.widget_from_id("1")
results = widget.get_task_output_values()
assert results == {"result": 3}
[docs]
def assert_mixed_tutorial_without_qt(filename):
"""Execute workflow after converting it to an ewoks workflow"""
graph = ows_to_ewoks(filename)
tasks = execute_graph(graph, output_tasks=True)
results = tasks["1"].get_output_values()
assert results == {"result": 3}