22
33# pylint:disable=redefined-outer-name,too-many-lines
44
5+ from __future__ import annotations
6+
57import logging
68import math
79from typing import TYPE_CHECKING , Any
@@ -563,9 +565,21 @@ def test_cluster_handler_registry() -> None:
563565 """Test ZIGBEE cluster handler Registry."""
564566
565567 # get all quirk ID from zigpy quirks registry
566- all_quirk_ids = {}
568+ cluster_quirk_id_map : dict [ int , set [ str | None ]] = {}
567569 for cluster_id in CLUSTERS_BY_ID :
568- all_quirk_ids [cluster_id ] = {None }
570+ cluster_quirk_id_map [cluster_id ] = {None }
571+
572+ # loop over custom clusters in v2 quirks registry
573+ for quirks in _DEVICE_REGISTRY ._registry_v2 .values ():
574+ for quirk_reg_entry in quirks :
575+ # get standalone adds_metadata and adds_metadata from replaces_metadata
576+ all_metadata = set (quirk_reg_entry .adds_metadata ) | {
577+ rm .add for rm in quirk_reg_entry .replaces_metadata
578+ }
579+ for metadata in all_metadata :
580+ cluster_quirk_id_map [metadata .cluster .cluster_id ] = {None }
581+
582+ # loop over custom clusters in v1 quirks registry
569583 for manufacturer in _DEVICE_REGISTRY .registry .values ():
570584 for model_quirk_list in manufacturer .values ():
571585 for quirk in model_quirk_list :
@@ -583,22 +597,22 @@ def test_cluster_handler_registry() -> None:
583597 for cluster_id in cluster_ids :
584598 if not isinstance (cluster_id , int ):
585599 cluster_id = cluster_id .cluster_id
586- if cluster_id not in all_quirk_ids :
587- all_quirk_ids [cluster_id ] = {None }
588- all_quirk_ids [cluster_id ].add (quirk_id )
600+ if cluster_id not in cluster_quirk_id_map :
601+ cluster_quirk_id_map [cluster_id ] = {None }
602+ cluster_quirk_id_map [cluster_id ].add (quirk_id )
589603
590604 for (
591605 cluster_id ,
592606 cluster_handler_classes ,
593607 ) in CLUSTER_HANDLER_REGISTRY .items ():
594608 assert isinstance (cluster_id , int )
595609 assert 0 <= cluster_id <= 0xFFFF
596- assert cluster_id in all_quirk_ids
610+ assert cluster_id in cluster_quirk_id_map
597611 assert isinstance (cluster_handler_classes , dict )
598612 for quirk_id , cluster_handler in cluster_handler_classes .items ():
599613 assert quirk_id is None or isinstance (quirk_id , str )
600614 assert issubclass (cluster_handler , ClusterHandler )
601- assert quirk_id in all_quirk_ids [cluster_id ]
615+ assert quirk_id in cluster_quirk_id_map [cluster_id ]
602616
603617
604618def test_epch_unclaimed_cluster_handlers (cluster_handler ) -> None :
0 commit comments