""" 测试 utils 模块 """ import unittest import sys import os # 添加父目录到路径 sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from utils import ( parse_key_value_output, parse_table_output, extract_with_regex, safe_int, safe_float, format_bytes, sanitize_filename, merge_dicts, check_command_exists ) class TestParseFunctions(unittest.TestCase): """测试解析函数""" def test_parse_key_value_output(self): text = """ Key1: Value1 Key2: Value2 # Comment line Key3: Value with: colon """ result = parse_key_value_output(text) self.assertEqual(result["Key1"], "Value1") self.assertEqual(result["Key2"], "Value2") self.assertEqual(result["Key3"], "Value with: colon") def test_parse_table_output(self): text = """ NAME SIZE TYPE MODEL sda 1T disk Samsung SSD sdb 2T disk WD HDD """ result = parse_table_output(text, headers=["NAME", "SIZE", "TYPE", "MODEL"]) self.assertEqual(len(result), 2) self.assertEqual(result[0]["NAME"], "sda") self.assertEqual(result[1]["TYPE"], "disk") def test_extract_with_regex(self): text = "Temperature: 45.5 degrees" result = extract_with_regex(text, r'Temperature:\s*([\d.]+)') self.assertEqual(result, "45.5") def test_safe_int(self): self.assertEqual(safe_int("123"), 123) self.assertEqual(safe_int("123.5"), 123) self.assertEqual(safe_int("1,234"), 1234) self.assertEqual(safe_int("32 GB"), 32) self.assertEqual(safe_int("invalid"), 0) self.assertEqual(safe_int("invalid", -1), -1) def test_safe_float(self): self.assertEqual(safe_float("123.5"), 123.5) self.assertEqual(safe_float("2.5GHz"), 2.5) self.assertEqual(safe_float("invalid"), 0.0) def test_format_bytes(self): self.assertEqual(format_bytes(0), "0 B") self.assertEqual(format_bytes(1024), "1.00 KB") self.assertEqual(format_bytes(1024**2), "1.00 MB") self.assertEqual(format_bytes(1024**3), "1.00 GB") def test_sanitize_filename(self): self.assertEqual(sanitize_filename("file.txt"), "file_name_.txt") self.assertEqual(sanitize_filename("path/to/file"), "path/to/file") def test_merge_dicts(self): base = {"a": 1, "b": {"c": 2}} update = {"b": {"d": 3}, "e": 4} result = merge_dicts(base, update) self.assertEqual(result["a"], 1) self.assertEqual(result["b"]["c"], 2) self.assertEqual(result["b"]["d"], 3) self.assertEqual(result["e"], 4) class TestCommandFunctions(unittest.TestCase): """测试命令相关函数""" def test_check_command_exists(self): # ls 应该存在 self.assertTrue(check_command_exists("ls")) # 不存在的命令 self.assertFalse(check_command_exists("nonexistent_command_12345")) if __name__ == '__main__': unittest.main()