split node tests into standalone files
This commit is contained in:
60
tests/node_tests/test_markup.py
Normal file
60
tests/node_tests/test_markup.py
Normal file
@@ -0,0 +1,60 @@
|
||||
import json
|
||||
import numpy as np
|
||||
from backend.data_types import DataField, ImageData, render_datafield_preview
|
||||
from backend.execution_context import active_node, execution_callbacks
|
||||
from tests.node_tests._shared import make_field
|
||||
|
||||
|
||||
def test_markup():
|
||||
from backend.nodes.markup import Markup
|
||||
from backend.data_types import _preview_markup_stroke_width
|
||||
|
||||
node = Markup()
|
||||
field = make_field(data=np.linspace(0.0, 1.0, 48 * 48, dtype=np.float64).reshape(48, 48))
|
||||
base = render_datafield_preview(field, field.colormap)
|
||||
required_inputs = Markup.INPUT_TYPES()["required"]
|
||||
|
||||
assert _preview_markup_stroke_width(5, 128, 128) == 5
|
||||
assert _preview_markup_stroke_width(5, 2048, 2048) > 5
|
||||
assert required_inputs["input"][1]["accepted_types"] == ["DATA_FIELD", "IMAGE"]
|
||||
assert required_inputs["shape"][1]["default"] == "arrow"
|
||||
assert required_inputs["stroke_color"][1]["default"] == "#ff0000"
|
||||
|
||||
overlays = []
|
||||
with execution_callbacks(overlay=lambda nid, data: overlays.append(data)), active_node("test"):
|
||||
plain_field, = node.process(input=field, shape="line", stroke_color="#ffd54f", stroke_width=3, markup_shapes="[]")
|
||||
assert isinstance(plain_field, DataField)
|
||||
assert plain_field.overlays[-1]["kind"] == "markup"
|
||||
plain = render_datafield_preview(plain_field, plain_field.colormap)
|
||||
assert np.array_equal(plain, base)
|
||||
assert overlays[-1]["kind"] == "markup"
|
||||
assert overlays[-1]["shape"] == "line"
|
||||
assert overlays[-1]["stroke_color"] == "#ffd54f"
|
||||
assert overlays[-1]["stroke_width"] == 3
|
||||
assert overlays[-1]["image"].startswith("data:image/png;base64,")
|
||||
|
||||
shapes = json.dumps([
|
||||
{"kind": "line", "x1": 0.1, "y1": 0.1, "x2": 0.9, "y2": 0.9, "width": 3, "color": "#ff0000"},
|
||||
{"kind": "rectangle", "x1": 0.2, "y1": 0.2, "x2": 0.8, "y2": 0.5, "width": 2, "color": "#00ff00"},
|
||||
{"kind": "circle", "x1": 0.25, "y1": 0.55, "x2": 0.55, "y2": 0.85, "width": 2, "color": "#4fc3f7"},
|
||||
{"kind": "arrow", "x1": 0.15, "y1": 0.85, "x2": 0.85, "y2": 0.2, "width": 4, "color": "#ffffff"},
|
||||
])
|
||||
marked_field, = node.process(input=field, shape="arrow", stroke_color="#ffffff", stroke_width=4, markup_shapes=shapes)
|
||||
marked = render_datafield_preview(marked_field, marked_field.colormap)
|
||||
assert marked.shape == base.shape
|
||||
assert not np.array_equal(marked, base)
|
||||
assert overlays[-1]["shape"] == "arrow"
|
||||
assert overlays[-1]["stroke_color"] == "#ffffff"
|
||||
assert overlays[-1]["stroke_width"] == 4
|
||||
|
||||
viewport_image = ImageData(
|
||||
np.zeros((48, 48, 3), dtype=np.uint8),
|
||||
metadata={"annotation_context": {"xreal": 1e-6, "si_unit_xy": "m"}},
|
||||
)
|
||||
image_markup, = node.process(
|
||||
input=viewport_image, shape="line", stroke_color="#ff0000", stroke_width=4,
|
||||
markup_shapes=json.dumps([{"kind": "line", "x1": 0.1, "y1": 0.2, "x2": 0.9, "y2": 0.8, "width": 4, "color": "#ff0000"}]),
|
||||
)
|
||||
assert isinstance(image_markup, ImageData)
|
||||
assert image_markup.metadata["annotation_context"]["si_unit_xy"] == "m"
|
||||
assert not np.array_equal(np.asarray(image_markup), np.asarray(viewport_image))
|
||||
Reference in New Issue
Block a user