127 lines
4.7 KiB
Python
127 lines
4.7 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
测试节点连接性修复
|
|
验证DCI File节点的输出可以正确连接到DCI Preview和Binary File Saver节点
|
|
"""
|
|
|
|
import unittest
|
|
import sys
|
|
import os
|
|
|
|
# 添加项目根目录到路径
|
|
current_dir = os.path.dirname(os.path.abspath(__file__))
|
|
project_root = os.path.dirname(current_dir)
|
|
sys.path.insert(0, project_root)
|
|
|
|
|
|
class TestNodeConnectivity(unittest.TestCase):
|
|
"""测试节点连接性"""
|
|
|
|
def test_node_type_definitions(self):
|
|
"""测试节点类型定义"""
|
|
# 模拟节点类型定义
|
|
class MockDCIFileNode:
|
|
RETURN_TYPES = ("BINARY_DATA",)
|
|
RETURN_NAMES = ("dci_binary_data",)
|
|
|
|
class MockDCIPreviewNode:
|
|
@classmethod
|
|
def INPUT_TYPES(cls):
|
|
return {
|
|
"required": {
|
|
"dci_binary_data": ("BINARY_DATA",),
|
|
},
|
|
"optional": {
|
|
"grid_columns": ("INT", {"default": 4, "min": 1, "max": 10, "step": 1}),
|
|
}
|
|
}
|
|
|
|
class MockBinaryFileSaver:
|
|
@classmethod
|
|
def INPUT_TYPES(cls):
|
|
return {
|
|
"required": {
|
|
"binary_data": ("BINARY_DATA",),
|
|
"file_name": ("STRING", {"default": "binary_file", "multiline": False}),
|
|
},
|
|
"optional": {
|
|
"output_directory": ("STRING", {"default": "", "multiline": False}),
|
|
}
|
|
}
|
|
|
|
# 创建节点实例
|
|
dci_file_node = MockDCIFileNode()
|
|
preview_node = MockDCIPreviewNode()
|
|
saver_node = MockBinaryFileSaver()
|
|
|
|
# 获取类型信息
|
|
dci_output_type = dci_file_node.RETURN_TYPES[0]
|
|
preview_input_type = preview_node.INPUT_TYPES()['required']['dci_binary_data'][0]
|
|
saver_input_type = saver_node.INPUT_TYPES()['required']['binary_data'][0]
|
|
|
|
# 验证类型匹配
|
|
self.assertEqual(dci_output_type, "BINARY_DATA", "DCIFileNode应该输出BINARY_DATA类型")
|
|
self.assertEqual(preview_input_type, "BINARY_DATA", "DCIPreviewNode应该接受BINARY_DATA类型")
|
|
self.assertEqual(saver_input_type, "BINARY_DATA", "BinaryFileSaver应该接受BINARY_DATA类型")
|
|
|
|
# 验证连接兼容性
|
|
self.assertEqual(dci_output_type, preview_input_type, "DCIFileNode输出应该与DCIPreviewNode输入兼容")
|
|
self.assertEqual(dci_output_type, saver_input_type, "DCIFileNode输出应该与BinaryFileSaver输入兼容")
|
|
|
|
def test_data_type_consistency(self):
|
|
"""测试数据类型一致性"""
|
|
# 验证所有相关节点都使用BINARY_DATA类型
|
|
expected_binary_type = "BINARY_DATA"
|
|
|
|
# 这些是应该使用BINARY_DATA类型的节点
|
|
binary_data_nodes = [
|
|
"DCIFileNode",
|
|
"DCIPreviewNode",
|
|
"BinaryFileLoader",
|
|
"BinaryFileSaver"
|
|
]
|
|
|
|
# 验证类型名称一致性
|
|
for node_name in binary_data_nodes:
|
|
with self.subTest(node=node_name):
|
|
self.assertEqual(expected_binary_type, "BINARY_DATA",
|
|
f"{node_name}应该使用BINARY_DATA类型")
|
|
|
|
def test_workflow_compatibility(self):
|
|
"""测试工作流兼容性"""
|
|
# 定义工作流连接
|
|
workflows = [
|
|
{
|
|
"name": "DCI创建和预览",
|
|
"flow": "DCIImage -> DCIFileNode -> DCIPreviewNode",
|
|
"types": ["DCI_IMAGE_DATA", "BINARY_DATA", "BINARY_DATA"]
|
|
},
|
|
{
|
|
"name": "DCI创建和保存",
|
|
"flow": "DCIImage -> DCIFileNode -> BinaryFileSaver",
|
|
"types": ["DCI_IMAGE_DATA", "BINARY_DATA", "BINARY_DATA"]
|
|
},
|
|
{
|
|
"name": "DCI加载和预览",
|
|
"flow": "BinaryFileLoader -> DCIPreviewNode",
|
|
"types": ["BINARY_DATA", "BINARY_DATA"]
|
|
}
|
|
]
|
|
|
|
for workflow in workflows:
|
|
with self.subTest(workflow=workflow["name"]):
|
|
# 验证工作流中的类型连接
|
|
types = workflow["types"]
|
|
for i in range(len(types) - 1):
|
|
current_output = types[i]
|
|
next_input = types[i + 1]
|
|
|
|
# 对于BINARY_DATA类型,应该完全匹配
|
|
if current_output == "BINARY_DATA" and next_input == "BINARY_DATA":
|
|
self.assertEqual(current_output, next_input,
|
|
f"工作流 {workflow['name']} 中类型不匹配")
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|