95 lines
3.0 KiB
Python
95 lines
3.0 KiB
Python
"""
|
|
测试 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<name>.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()
|