예제 #1
0
    def test__get_manager_generator_style__generator_all(
            self, mock_rules, mock_resolve):
        """Test getting a style for a generator where a generic 'all' style exists."""
        mock_rule = MagicMock()

        mock_rules.return_value = {
            consts.ALL_CATEGORY_KEY: {
                consts.GENERATOR_TYPE_KEY: mock_rule
            }
        }

        mock_category = MagicMock(spec=hou.NodeTypeCategory)
        mock_category.name.return_value = "Sop"

        mock_type = MagicMock(spec=hou.NodeType)
        mock_type.category.return_value = mock_category
        mock_type.isGenerator.return_value = True
        mock_type.isManager.return_value = False

        mgr = manager.StyleManager()

        result = mgr._get_manager_generator_style(mock_type)

        self.assertEqual(result, mock_resolve.return_value)

        mock_resolve.assert_called_with(mock_rule)
예제 #2
0
    def test_style_node__by_manager(self, mock_get_type, mock_get_tool,
                                    mock_get_manager):
        """Style a node because it is a manager."""
        mock_style = MagicMock(spec=manager.StyleRule)
        mock_get_manager.return_value = mock_style

        mock_type = MagicMock(spec=hou.NodeType)
        mock_type.isGenerator.return_value = False
        mock_type.isManager.return_value = True

        mock_node = MagicMock(spec=hou.Node)
        mock_node.type.return_value = mock_type

        mgr = manager.StyleManager()

        mgr.style_node(mock_node)

        mock_style.apply_to_node.assert_called_with(mock_node)

        mock_get_type.assert_called_with(mock_type)
        mock_get_tool.assert_called_with(mock_type)

        mock_type.isGenerator.assert_not_called()

        mock_get_manager.assert_called_with(mock_type)
예제 #3
0
    def test__get_node_type_style__category(self, mock_node_type_rules,
                                            mock_match, mock_resolve):
        """Test getting a node type style which matches a specific category."""
        style_name = MagicMock(spec=str)

        node_type_name = MagicMock(spec=str)

        mock_rule = MagicMock(spec=manager.StyleRule)
        type(mock_rule).name = PropertyMock(return_value=style_name)

        mock_node_type_rules.return_value = {
            "Sop": {
                node_type_name: mock_rule
            }
        }

        mock_category = MagicMock(spec=hou.NodeTypeCategory)
        mock_category.name.return_value = "Sop"

        mock_type = MagicMock(spec=hou.NodeType)
        mock_type.category.return_value = mock_category
        mock_type.nameComponents.return_value = ("", "", node_type_name, "1")

        mgr = manager.StyleManager()

        result = mgr._get_node_type_style(mock_type)

        self.assertEqual(result, mock_resolve.return_value)
        mock_match.assert_called_with(style_name, node_type_name)

        mock_resolve.assert_called_with(mock_rule)
예제 #4
0
    def test_constants(self):
        """Test the 'constants' property."""
        data = MagicMock(spec=dict)
        mgr = manager.StyleManager()

        mgr._constants = data
        self.assertEqual(mgr.constants, data)
예제 #5
0
    def test__get_name_style__all(self, mock_name_rules, mock_match,
                                  mock_resolve):
        """Test getting a node name style which matches the generic 'all' category."""
        style_name = MagicMock(spec=str)

        node_name = MagicMock(spec=str)

        mock_rule = MagicMock(spec=manager.StyleRule)
        type(mock_rule).name = PropertyMock(return_value=style_name)

        mock_name_rules.return_value = {
            consts.ALL_CATEGORY_KEY: {
                node_name: mock_rule
            }
        }

        mock_category = MagicMock(spec=hou.NodeTypeCategory)
        mock_category.name.return_value = "Sop"

        mock_type = MagicMock(spec=hou.NodeType)
        mock_type.category.return_value = mock_category

        mock_node = MagicMock(spec=hou.Node)
        mock_node.name.return_value = node_name
        mock_node.type.return_value = mock_type

        mgr = manager.StyleManager()

        result = mgr._get_name_style(mock_node)

        self.assertEqual(result, mock_resolve.return_value)
        mock_match.assert_called_with(style_name, node_name)

        mock_resolve.assert_called_with(mock_rule)
예제 #6
0
    def test__build_constants_from_data(self, mock_build_color,
                                        mock_build_shape, mock_constant,
                                        mock_constants):
        """Test building StyleConstants from data."""
        constants = {}
        mock_constants.return_value = constants

        mock_rule1 = MagicMock(spec=dict)
        mock_rule2 = MagicMock(spec=dict)

        mock_color1 = MagicMock(spec=hou.Color)
        mock_color2 = MagicMock(spec=hou.Color)

        color_type1 = MagicMock(spec=str)
        color_type2 = MagicMock(spec=str)

        colors = {
            mock_rule1: (mock_color1, color_type1),
            mock_rule2: (mock_color2, color_type2)
        }

        mock_build_color.side_effect = lambda e: colors[e]

        shape1 = MagicMock(spec=str)
        shape2 = MagicMock(spec=str)

        shapes = {mock_rule1: shape1, mock_rule2: shape2}

        mock_build_shape.side_effect = lambda e: shapes[e]

        path = MagicMock(spec=str)
        name1 = MagicMock(spec=str)
        name2 = MagicMock(spec=str)

        all_data = [{
            consts.PATH_KEY: path,
            consts.CONSTANT_DEFINITION_KEY: {
                name1: mock_rule1,
                name2: mock_rule2,
            }
        }]

        mgr = manager.StyleManager()

        mgr._build_constants_from_data(all_data)

        mock_build_color.assert_has_calls(
            [call(mock_rule1), call(mock_rule2)], any_order=True)
        mock_build_shape.assert_has_calls(
            [call(mock_rule1), call(mock_rule2)], any_order=True)

        calls = [
            call(name1, mock_color1, color_type1, shape1, path),
            call(name2, mock_color2, color_type2, shape2, path),
        ]

        mock_constant.assert_has_calls(calls, any_order=True)

        self.assertEqual(constants[name1], mock_constant.return_value)
        self.assertEqual(constants[name2], mock_constant.return_value)
예제 #7
0
    def test__get_node_type_style__no_match(self, mock_node_type_rules,
                                            mock_match, mock_resolve):
        """Test getting a node type style that does not match any rules."""
        style_name = MagicMock(spec=str)

        node_type_name = MagicMock(spec=str)

        mock_rule = MagicMock(spec=manager.StyleRule)
        type(mock_rule).name = PropertyMock(return_value=style_name)

        mock_node_type_rules.return_value = {
            consts.ALL_CATEGORY_KEY: {
                node_type_name: mock_rule
            }
        }

        mock_category = MagicMock(spec=hou.NodeTypeCategory)
        mock_category.name.return_value = "Sop"

        mock_type = MagicMock(spec=hou.NodeType)
        mock_type.category.return_value = mock_category
        mock_type.nameComponents.return_value = ("", "", node_type_name, "1")

        mgr = manager.StyleManager()

        result = mgr._get_node_type_style(mock_type)

        self.assertEqual(result, None)

        mock_match.assert_called_with(style_name, node_type_name)

        mock_resolve.assert_not_called()
예제 #8
0
    def test_tool_rules(self):
        """Test the 'tool_rules' property."""
        data = MagicMock(spec=dict)
        mgr = manager.StyleManager()

        mgr._tool_rules = data
        self.assertEqual(mgr.tool_rules, data)
예제 #9
0
    def test__get_tool_style__category(self, mock_get_locations,
                                       mock_tool_rules, mock_match,
                                       mock_resolve):
        """Test getting a tool style which matches a specific category."""
        location = MagicMock(spec=str)

        locations = (location, )
        mock_get_locations.return_value = locations

        style_name = MagicMock(spec=str)

        mock_rule = MagicMock(spec=manager.StyleRule)
        type(mock_rule).name = PropertyMock(return_value=style_name)

        mock_tool_rules.return_value = {"Sop": {location: mock_rule}}

        mock_category = MagicMock(spec=hou.NodeTypeCategory)
        mock_category.name.return_value = "Sop"

        mock_type = MagicMock(spec=hou.NodeType)
        mock_type.category.return_value = mock_category

        mgr = manager.StyleManager()

        result = mgr._get_tool_style(mock_type)

        self.assertEqual(result, mock_resolve.return_value)

        mock_get_locations.assert_called_with(mock_type)

        mock_match.assert_called_with(style_name, location)

        mock_resolve.assert_called_with(mock_rule)
예제 #10
0
    def test__build_rules_from_data__no_rules(self, mock_build):
        """Test building rules from data when the data contains no rules."""
        all_data = [{consts.PATH_KEY: MagicMock(spec=str)}]

        mgr = manager.StyleManager()
        mgr._build_rules_from_data(all_data)

        mock_build.assert_not_called()
예제 #11
0
    def test__resolve_rule__style(self):
        """Test resolving a rule which is a StyleRule."""
        mock_rule = MagicMock(spec=manager.StyleRule)

        mgr = manager.StyleManager()

        result = mgr._resolve_rule(mock_rule)

        self.assertEqual(result, mock_rule)
예제 #12
0
    def test_style_node_by_name__no_match(self, mock_get_name):
        """Try to style a node by its name but do not match any rules."""
        mock_node = MagicMock(spec=hou.Node)

        mgr = manager.StyleManager()

        mgr.style_node_by_name(mock_node)

        mock_get_name.assert_called_with(mock_node)
예제 #13
0
    def test___init__(self, mock_build):
        """Test the constructor."""
        mgr = manager.StyleManager()

        self.assertEqual(mgr._constants, {})
        self.assertEqual(mgr._name_rules, {})
        self.assertEqual(mgr._node_type_rules, {})
        self.assertEqual(mgr._tool_rules, {})

        mock_build.assert_called()
예제 #14
0
    def test___init__(self, mocker):
        """Test the constructor."""
        mock_build = mocker.patch.object(manager.StyleManager, "_build")

        mgr = manager.StyleManager()

        assert mgr._constants == {}
        assert mgr._name_rules == {}
        assert mgr._node_type_rules == {}
        assert mgr._tool_rules == {}

        mock_build.assert_called()
예제 #15
0
    def test__build_constants_from_data__no_constants(self, mock_build_color,
                                                      mock_build_shape,
                                                      mock_constant):
        """Test building StyleConstants from data when there are no constant definitions."""
        all_data = [{consts.PATH_KEY: MagicMock(spec=str)}]

        mgr = manager.StyleManager()

        mgr._build_constants_from_data(all_data)

        mock_build_color.assert_not_called()
        mock_build_shape.assert_not_called()
        mock_constant.assert_not_called()
예제 #16
0
    def test_style_node_by_name(self, mock_get_name):
        """Style a node by its name."""
        mock_style = MagicMock(spec=manager.StyleRule)

        mock_get_name.return_value = mock_style

        mock_node = MagicMock(spec=hou.Node)

        mgr = manager.StyleManager()

        mgr.style_node_by_name(mock_node)

        mock_style.apply_to_node.assert_called_with(mock_node)

        mock_get_name.assert_called_with(mock_node)
예제 #17
0
    def test__resolve_rule__constant(self, mock_constants):
        """Test resolving a rule which is a ConstantRule."""
        constant_name = MagicMock(spec=str)

        mock_constant = MagicMock(spec=manager.StyleConstant)
        mock_constants.return_value = {constant_name: mock_constant}

        mock_rule = MagicMock(spec=manager.ConstantRule)
        type(mock_rule).constant_name = PropertyMock(
            return_value=constant_name)

        mgr = manager.StyleManager()

        result = mgr._resolve_rule(mock_rule)

        self.assertEqual(result, mock_constant)
예제 #18
0
    def test_reload(self, mock_constants, mock_name_rules,
                    mock_node_type_rules, mock_tool_rules, mock_build):
        """Test reloading all the data."""
        mgr = manager.StyleManager()

        mock_constants.return_value = MagicMock(spec=dict)
        mock_name_rules.return_value = MagicMock(spec=dict)
        mock_node_type_rules.return_value = MagicMock(spec=dict)
        mock_tool_rules.return_value = MagicMock(spec=dict)

        mgr.reload()

        mgr.constants.clear.assert_called_once()
        mgr.name_rules.clear.assert_called_once()
        mgr.node_type_rules.clear.assert_called_once()
        mgr.tool_rules.clear.assert_called_once()

        mock_build.assert_called()
예제 #19
0
    def test__get_manager_generator_style_manager__none(
            self, mock_rules, mock_resolve):
        """Test getting a style for a manager when no style exists."""
        mock_rules.return_value = {"Sop": {}}

        mock_category = MagicMock(spec=hou.NodeTypeCategory)
        mock_category.name.return_value = "Sop"

        mock_type = MagicMock(spec=hou.NodeType)
        mock_type.category.return_value = mock_category
        mock_type.isManager.return_value = True

        mgr = manager.StyleManager()

        result = mgr._get_manager_generator_style(mock_type)

        self.assertIsNone(result)

        mock_resolve.assert_not_called()
예제 #20
0
    def test_style_node__no_match(self, mock_get_type, mock_get_tool,
                                  mock_get_manager):
        """Try to style a node but do not match any rule types."""
        mock_style = MagicMock(spec=manager.StyleRule)
        mock_get_manager.return_value = mock_style

        mock_type = MagicMock(spec=hou.NodeType)
        mock_type.isGenerator.return_value = False
        mock_type.isManager.return_value = False

        mock_node = MagicMock(spec=hou.Node)
        mock_node.type.return_value = mock_type

        mgr = manager.StyleManager()

        mgr.style_node(mock_node)

        mock_get_type.assert_called_with(mock_type)
        mock_get_tool.assert_called_with(mock_type)
        mock_get_manager.assert_not_called()
예제 #21
0
    def test__get_manager_generator_style_manager__category(
            self, mock_rules, mock_resolve):
        """Test getting a style for a manager where a specific category style exists."""
        mock_rule = MagicMock()

        mock_rules.return_value = {"Sop": {consts.MANAGER_TYPE_KEY: mock_rule}}

        mock_category = MagicMock(spec=hou.NodeTypeCategory)
        mock_category.name.return_value = "Sop"

        mock_type = MagicMock(spec=hou.NodeType)
        mock_type.category.return_value = mock_category
        mock_type.isManager.return_value = True
        mock_type.isGenerator.return_value = False

        mgr = manager.StyleManager()

        result = mgr._get_manager_generator_style(mock_type)

        self.assertEqual(result, mock_resolve.return_value)

        mock_resolve.assert_called_with(mock_rule)
예제 #22
0
    def test__get_manager_generator_style__error(self, mock_rules):
        """Test getting a style when the node type is neither a manager or generator."""
        mock_rule = MagicMock()

        mock_rules.return_value = {
            consts.ALL_CATEGORY_KEY: {
                consts.GENERATOR_TYPE_KEY: mock_rule
            }
        }

        mock_category = MagicMock(spec=hou.NodeTypeCategory)
        mock_category.name.return_value = "Sop"

        mock_type = MagicMock(spec=hou.NodeType)
        mock_type.category.return_value = mock_category
        mock_type.isGenerator.return_value = False
        mock_type.isManager.return_value = False

        mgr = manager.StyleManager()

        with self.assertRaises(hou.OperationFailed):
            mgr._get_manager_generator_style(mock_type)
예제 #23
0
    def test_style_node__by_tool(self, mock_get_type, mock_get_tool):
        """Style a node by the tool menu location."""
        mock_style = MagicMock(spec=manager.StyleRule)
        mock_get_tool.return_value = mock_style

        mock_type = MagicMock(spec=hou.NodeType)
        mock_type.isGenerator.return_value = False
        mock_type.isManager.return_value = False

        mock_node = MagicMock(spec=hou.Node)
        mock_node.type.return_value = mock_type

        mgr = manager.StyleManager()

        mgr.style_node(mock_node)

        mock_style.apply_to_node.assert_called_with(mock_node)

        mock_get_type.assert_called_with(mock_type)
        mock_get_tool.assert_called_with(mock_type)

        mock_type.isManager.assert_not_called()
예제 #24
0
    def test__build(self, mock_find, mock_load, mock_build_consts,
                    mock_build_rules):
        """Test building all the data from files."""
        path1 = MagicMock(spec=str)
        path2 = MagicMock(spec=str)

        # Put files in reversed alphabetical order so they will be sorted
        # opposite of their current order in the function.
        mock_files = (path2, path1)
        mock_find.return_value = mock_files

        mgr = manager.StyleManager()

        mock_load.side_effect = ({"key1": "value1"}, {"key2": "value2"})

        expected_data = [
            {
                "key1": "value1",
                consts.PATH_KEY: path1
            },
            {
                "key2": "value2",
                consts.PATH_KEY: path2
            },
        ]

        m = mock_open()

        with patch("__builtin__.open", m):
            mgr._build()

            mock_load.assert_called_with(m())

            m.assert_any_call(path1)
            m.assert_any_call(path2)

        mock_build_consts.assert_called_with(expected_data)
        mock_build_rules.assert_called_with(expected_data)
예제 #25
0
    def test__build_rules_from_data__tools(self, mock_build, mock_constants):
        """Test building rules from data when the data contains tool rules."""
        mock_rule1 = MagicMock(spec=dict)
        mock_rule2 = MagicMock(spec=dict)

        path = MagicMock(spec=str)
        all_data = [{
            consts.PATH_KEY: path,
            consts.RULES_KEY: {
                "tool_rules": {
                    "Sop": [mock_rule1, mock_rule2]
                }
            }
        }]

        mgr = manager.StyleManager()

        mgr._build_rules_from_data(all_data)

        self.assertEqual(mgr.tool_rules["Sop"], {})

        mock_build.assert_called_with([mock_rule1, mock_rule2], {}, path,
                                      mock_constants.return_value)
예제 #26
0
    def test__get_tool_style__all(self, mock_get_locations, mock_tool_rules,
                                  mock_match, mock_resolve):
        """Test getting a tool style which matches the generic 'all' category."""
        location = MagicMock(spec=str)
        mock_get_locations.return_value = (location, )

        style_name = MagicMock(spec=str)

        mock_rule = MagicMock(spec=manager.StyleRule)
        type(mock_rule).name = PropertyMock(return_value=style_name)

        mock_tool_rules.return_value = {
            consts.ALL_CATEGORY_KEY: {
                location: mock_rule
            }
        }

        mock_category = MagicMock(spec=hou.NodeTypeCategory)
        mock_category.name.return_value = "Sop"

        mock_type = MagicMock(spec=hou.NodeType)
        mock_type.category.return_value = mock_category

        mgr = manager.StyleManager()

        mock_match.return_value = True

        result = mgr._get_tool_style(mock_type)

        self.assertEqual(result, mock_resolve.return_value)

        mock_get_locations.assert_called_with(mock_type)

        mock_match.assert_called_with(style_name, location)

        mock_resolve.assert_called_with(mock_rule)
예제 #27
0
    def test__get_tool_style__no_match(self, mock_get_locations,
                                       mock_tool_rules, mock_match,
                                       mock_resolve):
        """Test getting a tool style that does not match any rules."""
        location = MagicMock(spec=str)
        mock_locations = (location, )
        mock_get_locations.return_value = mock_locations

        style_name = MagicMock(spec=str)

        mock_rule = MagicMock(spec=manager.StyleRule)
        type(mock_rule).name = PropertyMock(return_value=style_name)

        mock_tool_rules.return_value = {
            consts.ALL_CATEGORY_KEY: {
                location: mock_rule
            }
        }

        mock_category = MagicMock(spec=hou.NodeTypeCategory)
        mock_category.name.return_value = "Sop"

        mock_type = MagicMock(spec=hou.NodeType)
        mock_type.category.return_value = mock_category

        mgr = manager.StyleManager()

        result = mgr._get_tool_style(mock_type)

        self.assertIsNone(result)

        mock_get_locations.assert_called_with(mock_type)

        mock_match.assert_called_with(style_name, location)

        mock_resolve.assert_not_called()
예제 #28
0
 def _create():
     return manager.StyleManager()