Files
zccrs-comfyui-dci/tests/test_node_connectivity.py

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()