mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-05-06 20:42:43 +08:00
feat(utils): Refactor check_method to use ast
- 使用 AST 解析函数源码,相比基于字符串的方法更稳定,能够正确处理具有多行 def 语句的函数 - 为 check_method 添加了单元测试
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
import unittest
|
||||
|
||||
from tests.test_metainfo import MetaInfoTest
|
||||
from tests.test_object import ObjectUtilsTest
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
suite = unittest.TestSuite()
|
||||
@@ -8,6 +10,7 @@ if __name__ == '__main__':
|
||||
# 测试名称识别
|
||||
suite.addTest(MetaInfoTest('test_metainfo'))
|
||||
suite.addTest(MetaInfoTest('test_emby_format_ids'))
|
||||
suite.addTest(ObjectUtilsTest('test_check_method'))
|
||||
|
||||
# 运行测试
|
||||
runner = unittest.TextTestRunner()
|
||||
|
||||
41
tests/test_object.py
Normal file
41
tests/test_object.py
Normal file
@@ -0,0 +1,41 @@
|
||||
from unittest import TestCase
|
||||
|
||||
from app.utils.object import ObjectUtils
|
||||
|
||||
|
||||
class ObjectUtilsTest(TestCase):
|
||||
|
||||
def test_check_method(self):
|
||||
def implemented_function():
|
||||
return "Hello"
|
||||
|
||||
def pass_function():
|
||||
pass
|
||||
|
||||
def docstring_function():
|
||||
"""This is a docstring."""
|
||||
|
||||
def ellipsis_function():
|
||||
...
|
||||
|
||||
def not_implemented_function():
|
||||
raise NotImplementedError
|
||||
|
||||
def not_implemented_function_no_call():
|
||||
raise NotImplementedError()
|
||||
|
||||
async def multiple_lines_async_def(_param1: str,
|
||||
_param2: str):
|
||||
pass
|
||||
|
||||
def empty_function():
|
||||
return
|
||||
|
||||
self.assertTrue(ObjectUtils.check_method(implemented_function))
|
||||
self.assertFalse(ObjectUtils.check_method(pass_function))
|
||||
self.assertFalse(ObjectUtils.check_method(docstring_function))
|
||||
self.assertFalse(ObjectUtils.check_method(ellipsis_function))
|
||||
self.assertFalse(ObjectUtils.check_method(not_implemented_function))
|
||||
self.assertFalse(ObjectUtils.check_method(not_implemented_function_no_call))
|
||||
self.assertFalse(ObjectUtils.check_method(multiple_lines_async_def))
|
||||
self.assertTrue(ObjectUtils.check_method(empty_function))
|
||||
Reference in New Issue
Block a user