kotones-auto-assistant/tests/kaa/test_badge.py

84 lines
3.1 KiB
Python

from unittest import TestCase
from kotonebot.kaa.game_ui.badge import match, BadgeResult
from kotonebot.util import Rect
def rect_from_center(x: int, y: int) -> Rect:
w, h = 20, 20
return x - w // 2, y - h // 2, w, h
class TestBadge(TestCase):
def test_match(self):
# 测试数据
# https://www.desmos.com/calculator/dsynum9p4i
objects = [
rect_from_center(125, 125),
rect_from_center(230, 230),
rect_from_center(320, 120),
]
badges = [
# 左上角徽章
rect_from_center(90, 160), # 对应 objects[0] 的左上
# 右下角徽章
rect_from_center(260, 200), # 对应 objects[1] 的右下
# 右上角徽章
rect_from_center(340, 130), # 对应 objects[2] 的右上
# 不匹配任何对象的徽章
rect_from_center(410, 410),
]
# 测试左上角匹配
results = match(objects, badges, 'lt', 50)
self.assertEqual(len(results), 3)
self.assertEqual(results[0].object, objects[0])
self.assertEqual(results[0].badge, badges[0])
self.assertEqual(results[1].object, objects[1])
self.assertIsNone(results[1].badge)
self.assertEqual(results[2].object, objects[2])
self.assertIsNone(results[2].badge)
# 测试右下角匹配
results = match(objects, badges, 'rb', 50)
self.assertEqual(len(results), 3)
self.assertEqual(results[0].object, objects[0])
self.assertIsNone(results[0].badge)
self.assertEqual(results[1].object, objects[1])
self.assertEqual(results[1].badge, badges[1])
self.assertEqual(results[2].object, objects[2])
self.assertIsNone(results[2].badge)
# 测试右上角匹配
results = match(objects, badges, 'rt', 50)
self.assertEqual(len(results), 3)
self.assertEqual(results[0].object, objects[0])
self.assertIsNone(results[0].badge)
self.assertEqual(results[1].object, objects[1])
self.assertIsNone(results[1].badge)
self.assertEqual(results[2].object, objects[2])
self.assertEqual(results[2].badge, badges[2])
# 测试没有匹配的情况
results = match(objects, [], 'lt', 50)
self.assertEqual(len(results), 3)
for result in results:
self.assertIsNone(result.badge)
# 测试空对象列表
results = match([], badges, 'lt', 50)
self.assertEqual(len(results), 0)
# 测试当多个徽章符合条件时,选择最近的一个
def test_match_with_multiple_badges(self):
# 测试数据
# https://www.desmos.com/calculator/pytdqaju4w
objects = [rect_from_center(125, 125)]
badges = [
rect_from_center(90, 90),
rect_from_center(80, 80),
rect_from_center(70, 70),
]
results = match(objects, badges, 'lb')
self.assertEqual(len(results), 1)
self.assertEqual(results[0].object, objects[0])
self.assertEqual(results[0].badge, badges[0])