Fix #142828: broken socket usage inference for some nodes
The issue was an oversight in f7f18cd0c7.
This patch also adds some unit tests that would have caught this error.
Pull Request: https://projects.blender.org/blender/blender/pulls/143026
This commit is contained in:
@@ -438,7 +438,8 @@ struct SocketUsageInferencer {
|
||||
return;
|
||||
}
|
||||
if (!socket_decl->usage_inference_fn) {
|
||||
all_socket_usages_.add_new(socket, true);
|
||||
this->usage_task__with_dependent_sockets(
|
||||
socket, socket->owner_node().output_sockets(), {}, socket.context);
|
||||
return;
|
||||
}
|
||||
InputSocketUsageParams params{
|
||||
|
||||
BIN
tests/files/node_group/socket_usage_inference.blend
(Stored with Git LFS)
Normal file
BIN
tests/files/node_group/socket_usage_inference.blend
(Stored with Git LFS)
Normal file
Binary file not shown.
@@ -606,6 +606,13 @@ if(TEST_SRC_DIR_EXISTS)
|
||||
--testdir "${TEST_SRC_DIR}/node_group"
|
||||
)
|
||||
|
||||
add_blender_test(
|
||||
bl_node_socket_usage_inference
|
||||
--python ${CMAKE_CURRENT_LIST_DIR}/bl_node_socket_usage_inference.py
|
||||
--
|
||||
--testdir "${TEST_SRC_DIR}/node_group"
|
||||
)
|
||||
|
||||
add_blender_test(
|
||||
bl_node_group_compat
|
||||
--python ${CMAKE_CURRENT_LIST_DIR}/bl_node_group_compat.py
|
||||
|
||||
84
tests/python/bl_node_socket_usage_inference.py
Normal file
84
tests/python/bl_node_socket_usage_inference.py
Normal file
@@ -0,0 +1,84 @@
|
||||
# SPDX-FileCopyrightText: 2025 Blender Authors
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
import pathlib
|
||||
import sys
|
||||
import tempfile
|
||||
import bpy
|
||||
import unittest
|
||||
|
||||
args = None
|
||||
|
||||
|
||||
class StructureTypeInferenceTest(unittest.TestCase):
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
cls.testdir = args.testdir
|
||||
|
||||
def setUp(self):
|
||||
self.assertTrue(self.testdir.exists(),
|
||||
"Test dir {0} should exist".format(self.testdir))
|
||||
|
||||
def load_testfile(self):
|
||||
bpy.ops.wm.open_mainfile(filepath=str(self.testdir / "socket_usage_inference.blend"))
|
||||
|
||||
def assertUsed(self, socket):
|
||||
self.assertTrue(socket.is_icon_visible)
|
||||
self.assertFalse(socket.is_inactive)
|
||||
|
||||
def assertGrayedOut(self, socket):
|
||||
self.assertTrue(socket.is_icon_visible)
|
||||
self.assertTrue(socket.is_inactive)
|
||||
|
||||
def assertHidden(self, socket):
|
||||
self.assertFalse(socket.is_icon_visible)
|
||||
|
||||
def test_geometry_nodes(self):
|
||||
self.load_testfile()
|
||||
tree = bpy.data.node_groups["Geometry Nodes"]
|
||||
|
||||
node = tree.nodes["Math Group"]
|
||||
self.assertUsed(node.inputs["A"])
|
||||
self.assertUsed(node.inputs["B"])
|
||||
|
||||
node = tree.nodes["Menu Switch Group"]
|
||||
self.assertUsed(node.inputs["Menu"])
|
||||
self.assertUsed(node.inputs["A"])
|
||||
self.assertHidden(node.inputs["B"])
|
||||
|
||||
node = tree.nodes["Transform Matrix"]
|
||||
self.assertUsed(node.inputs["Mode"])
|
||||
self.assertUsed(node.inputs["Geometry"])
|
||||
self.assertUsed(node.inputs["Transform"])
|
||||
self.assertHidden(node.inputs["Translation"])
|
||||
self.assertHidden(node.inputs["Rotation"])
|
||||
self.assertHidden(node.inputs["Scale"])
|
||||
|
||||
node = tree.nodes["Transform Components"]
|
||||
self.assertUsed(node.inputs["Mode"])
|
||||
self.assertUsed(node.inputs["Geometry"])
|
||||
self.assertUsed(node.inputs["Translation"])
|
||||
self.assertUsed(node.inputs["Rotation"])
|
||||
self.assertUsed(node.inputs["Scale"])
|
||||
self.assertHidden(node.inputs["Transform"])
|
||||
|
||||
|
||||
def main():
|
||||
global args
|
||||
import argparse
|
||||
|
||||
if '--' in sys.argv:
|
||||
argv = [sys.argv[0]] + sys.argv[sys.argv.index('--') + 1:]
|
||||
else:
|
||||
argv = sys.argv
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--testdir', required=True, type=pathlib.Path)
|
||||
args, remaining = parser.parse_known_args(argv)
|
||||
|
||||
unittest.main(argv=remaining)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user