Files
HeurAMS/tests/kernel/particles/test_nucleon.py
2025-12-16 03:28:29 +08:00

99 lines
3.8 KiB
Python

import unittest
from unittest.mock import patch, MagicMock
from heurams.kernel.particles.nucleon import Nucleon
class TestNucleon(unittest.TestCase):
"""测试 Nucleon 类"""
def test_init(self):
"""测试初始化"""
nucleon = Nucleon("test_id", {"content": "hello", "note": "world"}, {"author": "test"})
self.assertEqual(nucleon.ident, "test_id")
self.assertEqual(nucleon.payload, {"content": "hello", "note": "world"})
self.assertEqual(nucleon.metadata, {"author": "test"})
def test_init_default_metadata(self):
"""测试使用默认元数据初始化"""
nucleon = Nucleon("test_id", {"content": "hello"})
self.assertEqual(nucleon.ident, "test_id")
self.assertEqual(nucleon.payload, {"content": "hello"})
self.assertEqual(nucleon.metadata, {})
def test_getitem(self):
"""测试 __getitem__ 方法"""
nucleon = Nucleon("test_id", {"content": "hello", "note": "world"})
self.assertEqual(nucleon["ident"], "test_id")
self.assertEqual(nucleon["content"], "hello")
self.assertEqual(nucleon["note"], "world")
with self.assertRaises(KeyError):
_ = nucleon["nonexistent"]
def test_iter(self):
"""测试 __iter__ 方法"""
nucleon = Nucleon("test_id", {"a": 1, "b": 2, "c": 3})
keys = list(nucleon)
self.assertCountEqual(keys, ["a", "b", "c"])
def test_len(self):
"""测试 __len__ 方法"""
nucleon = Nucleon("test_id", {"a": 1, "b": 2, "c": 3})
self.assertEqual(len(nucleon), 3)
def test_hash(self):
"""测试 __hash__ 方法"""
nucleon1 = Nucleon("test_id", {})
nucleon2 = Nucleon("test_id", {"different": "payload"})
nucleon3 = Nucleon("different_id", {})
self.assertEqual(hash(nucleon1), hash(nucleon2)) # 相同 ident
self.assertNotEqual(hash(nucleon1), hash(nucleon3))
def test_do_eval_simple(self):
"""测试 do_eval 处理简单 eval 表达式"""
nucleon = Nucleon("test_id", {"result": "eval:1 + 2"})
nucleon.do_eval()
self.assertEqual(nucleon.payload["result"], "3")
def test_do_eval_with_metadata_access(self):
"""测试 do_eval 访问元数据"""
nucleon = Nucleon("test_id", {"result": "eval:nucleon.metadata.get('value', 0)"}, {"value": 42})
nucleon.do_eval()
self.assertEqual(nucleon.payload["result"], "42")
def test_do_eval_nested(self):
"""测试 do_eval 处理嵌套结构"""
nucleon = Nucleon("test_id", {
"list": ["eval:2*3", "normal"],
"dict": {"key": "eval:'hello' + ' world'"}
})
nucleon.do_eval()
self.assertEqual(nucleon.payload["list"][0], "6")
self.assertEqual(nucleon.payload["list"][1], "normal")
self.assertEqual(nucleon.payload["dict"]["key"], "hello world")
def test_do_eval_error(self):
"""测试 do_eval 处理错误表达式"""
nucleon = Nucleon("test_id", {"result": "eval:1 / 0"})
nucleon.do_eval()
self.assertIn("此 eval 实例发生错误", nucleon.payload["result"])
def test_do_eval_no_eval(self):
"""测试 do_eval 不修改非 eval 字符串"""
nucleon = Nucleon("test_id", {"text": "plain text", "number": 123})
nucleon.do_eval()
self.assertEqual(nucleon.payload["text"], "plain text")
self.assertEqual(nucleon.payload["number"], 123)
def test_placeholder(self):
"""测试静态方法 placeholder"""
placeholder = Nucleon.placeholder()
self.assertIsInstance(placeholder, Nucleon)
self.assertEqual(placeholder.ident, "核子对象样例内容")
self.assertEqual(placeholder.payload, {})
self.assertEqual(placeholder.metadata, {})
if __name__ == '__main__':
unittest.main()