Add the photo-anchored variant pass with night and overcast facade frames
This commit is contained in:
1 parent
6e04c59589
commit
ad91e71eeb
9 files changed
+183
-2
No files matched your search
@@ -1,4 +1,5 @@
|
||||
import json
|
||||
import re
|
||||
import tempfile
|
||||
import unittest
|
||||
from unittest import mock
|
||||
@@ -245,3 +246,59 @@ class RealismTests(unittest.TestCase):
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
|
||||
class AnchorTests(unittest.TestCase):
|
||||
ROOT = Path(sc.__file__).resolve().parent.parent
|
||||
|
||||
def test_treatment_prompt_carries_context_suffix_and_clause(self):
|
||||
prompt = sc._anchor_treatment_prompt("A 1920s masonic facade.", "night")
|
||||
self.assertTrue(prompt.startswith("A 1920s masonic facade."))
|
||||
self.assertIn("keep the building", prompt.lower())
|
||||
self.assertIn("Restage the scene:", prompt)
|
||||
self.assertIn("practical lights", prompt)
|
||||
|
||||
def test_unknown_treatment_names_are_rejected(self):
|
||||
with self.assertRaises(SystemExit):
|
||||
sc._anchor_treatment_prompt("c", "underwater")
|
||||
|
||||
def test_name_derivation_strips_the_capture_date(self):
|
||||
reference = {"path": self.ROOT / "x" / "some-facade-2009-10-27",
|
||||
"licence": "CC0", "page": "", "checked": True}
|
||||
# exercised through cmd_anchor's stem logic via a tiny local copy
|
||||
import re as _re
|
||||
stem = _re.sub(r"-[0-9]{4}-[0-9]{2}-[0-9]{2}$", "",
|
||||
"el-capitan-facade-day-wikimedia-2009-10-27")
|
||||
self.assertEqual(stem, "el-capitan-facade-day-wikimedia")
|
||||
|
||||
def test_cmd_anchor_generates_each_treatment_with_provenance(self):
|
||||
reference = {"path": self.ROOT / "docs/screens/refs/hollywood/"
|
||||
"el-capitan-facade-day-wikimedia-2009-10-27.jpg",
|
||||
"licence": "CC BY 2.0", "page": "https://commons/x",
|
||||
"checked": True}
|
||||
class FakeImage:
|
||||
def convert(self, mode):
|
||||
return Image.new("RGB", (1600, 900))
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
out_dir = Path(tmp) / "frames"
|
||||
with mock.patch.object(sc, "_reference_source", return_value=reference), \
|
||||
mock.patch.object(sc.generate_textures, "generate_image",
|
||||
return_value=FakeImage()) as mocked, \
|
||||
mock.patch.object(sc, "next_free_path",
|
||||
side_effect=lambda p: p), \
|
||||
mock.patch.object(sc, "_rel", side_effect=str):
|
||||
args = mock.Mock(reference="r", reference_unchecked=False,
|
||||
context="A facade.", treatments="day,night",
|
||||
out_dir=str(out_dir), model="m",
|
||||
request_size=1536)
|
||||
args.name = "" # `name` is reserved on Mock; set it explicitly
|
||||
self.assertEqual(sc.cmd_anchor(args), 0)
|
||||
stems = [c.args[0] for c in mocked.call_args_list]
|
||||
self.assertEqual(len(stems), 2)
|
||||
for treatment, call in zip(("day", "night"), mocked.call_args_list):
|
||||
self.assertIn("Restage the scene:", call.args[0])
|
||||
self.assertEqual(call.kwargs["reference_path"],
|
||||
reference["path"])
|
||||
self.assertTrue((out_dir /
|
||||
f"el_capitan_facade_day_wikimedia_{treatment}.png")
|
||||
.exists())
|
||||
Reference in new issue
Block a user