Allow signaling issues in label verification
This commit is contained in:
1 parent
3754c0c11a
commit
9925362352
21 files changed
+1347
-36
No files matched your search
@@ -0,0 +1,77 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
import tempfile
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
from unittest.mock import patch
|
||||
|
||||
from PIL import Image
|
||||
|
||||
from copienator import atomic_write_json
|
||||
from copienator.annotation_modifications import DRAFT, stage_baseline
|
||||
from copienator.filesystem import staged_files
|
||||
from copienator_gui.app import CopienatorApp
|
||||
|
||||
|
||||
@unittest.skipUnless(os.environ.get("DISPLAY"), "Tk tests require a display")
|
||||
class AnnotationModificationGuiTests(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.temp = tempfile.TemporaryDirectory()
|
||||
self.root = Path(self.temp.name)
|
||||
(self.root / "Copies/Copie43").mkdir(parents=True)
|
||||
(self.root / "labels").write_text("Ex 1\nEx 2\n")
|
||||
self.output = self.root / "Bnot/Copie43"
|
||||
images = {"Ex 1": Image.new("RGB", (100, 120), "blue")}
|
||||
scores = {"Ex 1": "3", "Ex 2": ""}
|
||||
info = {label: {"present": label == "Ex 1", "not_empty": label == "Ex 1",
|
||||
"touched": False, "score": score} for label, score in scores.items()}
|
||||
with staged_files(self.output) as staging:
|
||||
images["Ex 1"].save(staging / "Ex 1.jpg")
|
||||
atomic_write_json(staging / "score.json", scores)
|
||||
atomic_write_json(staging / "info.json", info)
|
||||
stage_baseline(self.root, "Bnot", self.output, staging, images, {"Ex 1": 20}, info, ["Ex 1"], scores)
|
||||
self.app = CopienatorApp(Path.cwd(), False, self.root)
|
||||
self.app.state_store.update_step("read_annotations", last_run_variant="standard")
|
||||
self.app.tree.selection_set("modify_annotations")
|
||||
self.app.update()
|
||||
self.panel = self.app.manual_panel
|
||||
|
||||
def tearDown(self):
|
||||
for callback in self.app.tk.splitlist(self.app.tk.call("after", "info")):
|
||||
self.app.after_cancel(callback)
|
||||
self.app.destroy()
|
||||
self.temp.cleanup()
|
||||
|
||||
def test_add_validate_edit_reload_and_cut_only_body(self):
|
||||
from copienator.annotation_modifications import read_instructions
|
||||
self.assertEqual(self.app.arg_vars["annotation_dir"].get(), "Bnot")
|
||||
self.assertEqual(self.app.run_button.cget("text"), "Make modifications")
|
||||
self.panel.copy_var.set("43")
|
||||
self.panel.source_var.set("Ex 1")
|
||||
self.panel.target_var.set("Ex 2")
|
||||
self.panel.add_instruction()
|
||||
path = self.root / DRAFT
|
||||
self.assertIn("Copie43 Ex 1 -> Ex 2|", path.read_text())
|
||||
item = read_instructions(path.read_text(), "Bnot")[0]
|
||||
with patch("copienator_gui.annotation_modifications.CutHelper") as helper:
|
||||
self.panel.open_cut(self.root, item)
|
||||
self.assertEqual(helper.call_args.args[1].size, (100, 100))
|
||||
helper.call_args.args[2]("c{40}2>")
|
||||
self.assertEqual(self.panel.cut_result.get(), "Copie43 Ex 1 c{40}2> Ex 2|")
|
||||
with patch("copienator_gui.annotation_modifications.messagebox.showerror") as error:
|
||||
self.panel.add_instruction() # duplicate source
|
||||
error.assert_called_once()
|
||||
path.write_text("bad instruction")
|
||||
self.panel.reload()
|
||||
with patch("copienator_gui.annotation_modifications.open_path") as editor:
|
||||
self.panel.open_editor() # malformed files must remain editable
|
||||
editor.assert_called_once_with(path)
|
||||
|
||||
def test_workflow_is_between_reader_and_publisher_and_builds_command(self):
|
||||
steps = list(self.app.step_by_id)
|
||||
self.assertLess(steps.index("read_annotations"), steps.index("modify_annotations"))
|
||||
self.assertLess(steps.index("modify_annotations"), steps.index("giving_names"))
|
||||
command = self.app._make_command()
|
||||
self.assertIn("modify-annotations", command)
|
||||
self.assertEqual(command[-2:], ["--annotation-dir", "Bnot"])
|
||||
Reference in new issue
Block a user