@@ -867,9 +867,9 @@ class LedgerAndApplicationTests(unittest.TestCase):
|
||||
self.assertEqual(version["route"], "local")
|
||||
self.assertIn("JWeBot 版本", version["text"])
|
||||
self.assertIn("kernel", version["text"])
|
||||
self.assertIn("最新版本:beta 1.0.1.1016", version["text"])
|
||||
self.assertIn("最新版本:beta 1.0.2.1016", version["text"])
|
||||
self.assertIn("更新时间:2026-10-16", version["text"])
|
||||
self.assertIn("更新摘要:Limit RapidOCR", version["text"])
|
||||
self.assertIn("更新摘要:Cache OCR-negative", version["text"])
|
||||
self.assertEqual(debug["route"], "local")
|
||||
self.assertIn("调试埋点", debug["text"])
|
||||
self.assertEqual(balance["route"], "local")
|
||||
|
||||
@@ -689,6 +689,46 @@ class OcrCacheTests(unittest.TestCase):
|
||||
self.assertEqual(engine.last_cache_hits, 0)
|
||||
self.assertEqual(engine.last_cache_misses, 1)
|
||||
|
||||
def test_antialias_drift_reuses_visual_signature_cache(self):
|
||||
engine = MODULE.OcrEngine.__new__(MODULE.OcrEngine)
|
||||
bubble = MODULE.Bubble(50, 60, 132, 40, 5000)
|
||||
first = MODULE.Image.new("RGB", (300, 180), (238, 238, 240))
|
||||
second = MODULE.Image.new("RGB", (300, 180), (242, 242, 244))
|
||||
first.putpixel((70, 75), (20, 20, 20))
|
||||
second.putpixel((70, 75), (35, 35, 35))
|
||||
|
||||
with mock.patch.object(
|
||||
engine,
|
||||
"_recognize_bubble",
|
||||
return_value=self.message(60),
|
||||
) as recognize:
|
||||
engine.recognize_messages(first, [bubble])
|
||||
messages, _ = engine.recognize_messages(second, [bubble])
|
||||
|
||||
self.assertEqual(recognize.call_count, 1)
|
||||
self.assertEqual(len(messages), 1)
|
||||
self.assertEqual(engine.last_cache_hits, 1)
|
||||
self.assertEqual(engine.last_cache_misses, 0)
|
||||
|
||||
def test_unrecognized_bubble_reuses_negative_cache(self):
|
||||
engine = MODULE.OcrEngine.__new__(MODULE.OcrEngine)
|
||||
image = MODULE.Image.new("RGB", (300, 180), "white")
|
||||
bubble = MODULE.Bubble(50, 60, 132, 40, 5000)
|
||||
|
||||
with mock.patch.object(
|
||||
engine,
|
||||
"_recognize_bubble",
|
||||
return_value=None,
|
||||
) as recognize:
|
||||
first_messages, _ = engine.recognize_messages(image, [bubble])
|
||||
second_messages, _ = engine.recognize_messages(image, [bubble])
|
||||
|
||||
self.assertEqual(first_messages, [])
|
||||
self.assertEqual(second_messages, [])
|
||||
self.assertEqual(recognize.call_count, 1)
|
||||
self.assertEqual(engine.last_cache_hits, 1)
|
||||
self.assertEqual(engine.last_cache_misses, 0)
|
||||
|
||||
def test_periodic_refresh_revalidates_cached_bubbles(self):
|
||||
engine = MODULE.OcrEngine.__new__(MODULE.OcrEngine)
|
||||
image = MODULE.Image.new("RGB", (300, 180), "white")
|
||||
|
||||
Reference in New Issue
Block a user