test: add test case for miot_common.py

This commit is contained in:
topsworld
2024-12-16 17:36:16 +08:00
committed by Paul Shawn
parent 687198469f
commit db3834793c
2 changed files with 40 additions and 7 deletions

32
test/test_common.py Normal file
View File

@ -0,0 +1,32 @@
# -*- coding: utf-8 -*-
"""Unit test for miot_common.py."""
import pytest
# pylint: disable=import-outside-toplevel, unused-argument
@pytest.mark.github
def test_miot_matcher():
from miot.common import MIoTMatcher
matcher: MIoTMatcher = MIoTMatcher()
# Add
for l1 in range(1, 11):
matcher[f'test/{l1}/#'] = f'test/{l1}/#'
for l2 in range(1, 11):
matcher[f'test/{l1}/{l2}'] = f'test/{l1}/{l2}'
if not matcher.get(topic=f'test/+/{l2}'):
matcher[f'test/+/{l2}'] = f'test/+/{l2}'
# Match
match_result: list[(str, dict)] = list(matcher.iter_all_nodes())
assert len(match_result) == 120
match_result: list[str] = list(matcher.iter_match(topic='test/1/1'))
assert len(match_result) == 3
assert set(match_result) == set(['test/1/1', 'test/+/1', 'test/1/#'])
# Delete
if matcher.get(topic='test/1/1'):
del matcher['test/1/1']
assert len(list(matcher.iter_all_nodes())) == 119
match_result: list[str] = list(matcher.iter_match(topic='test/1/1'))
assert len(match_result) == 2
assert set(match_result) == set(['test/+/1', 'test/1/#'])