Skip to content

Commit 7607df5

Browse files
committed
Adding test for debounce method
1 parent d4ac171 commit 7607df5

File tree

2 files changed

+69
-9
lines changed

2 files changed

+69
-9
lines changed

hdl_checker/tests/test_lsp_utils.py

Lines changed: 64 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,20 @@
1919
"""
2020

2121
import logging
22+
import time
23+
from multiprocessing import Queue
2224
from tempfile import mkdtemp
2325
from typing import Any
2426

27+
import mock
2528
import parameterized # type: ignore
2629
import unittest2 # type: ignore
27-
from mock import Mock
2830
from pygls.types import DiagnosticSeverity, MessageType, Position, Range
2931

3032
from hdl_checker import lsp
3133
from hdl_checker.diagnostics import CheckerDiagnostic, DiagType
3234
from hdl_checker.path import Path, TemporaryPath
35+
from hdl_checker.utils import debounce
3336

3437
_logger = logging.getLogger(__name__)
3538

@@ -51,7 +54,7 @@ class TestCheckerDiagToLspDict(unittest2.TestCase):
5154
(DiagType.NONE, DiagnosticSeverity.Error),
5255
]
5356
)
54-
def test_converting_to_lsp(self, diag_type, severity):
57+
def test_convertingDiagnosticType(self, diag_type, severity):
5558
# type: (...) -> Any
5659
"""
5760
Test conversion between hdl_checker.DiagType to pygls.types.DiagnosticSeverity
@@ -81,12 +84,12 @@ def test_converting_to_lsp(self, diag_type, severity):
8184
),
8285
)
8386

84-
def test_workspace_notify(self) -> None: # pylint: disable=no-self-use
87+
def test_workspaceNotify(self) -> None: # pylint: disable=no-self-use
8588
"""
8689
Test server notification messages call the appropriate LS methods
8790
"""
88-
workspace = Mock()
89-
workspace.show_message = Mock()
91+
workspace = mock.Mock()
92+
workspace.show_message = mock.Mock()
9093

9194
server = lsp.Server(
9295
workspace, root_dir=TemporaryPath(mkdtemp(prefix="hdl_checker_"))
@@ -105,3 +108,59 @@ def test_workspace_notify(self) -> None: # pylint: disable=no-self-use
105108

106109
server._handleUiError("some error") # pylint: disable=protected-access
107110
workspace.show_message.assert_called_once_with("some error", MessageType.Error)
111+
112+
def test_debounceWithoutKey(self):
113+
_logger.info("#" * 100)
114+
interval = 0.1
115+
116+
queue = Queue()
117+
118+
def func(arg):
119+
_logger.info("Called with %s", arg)
120+
queue.put(arg)
121+
122+
wrapped = debounce(interval)(func)
123+
self.assertTrue(queue.empty())
124+
125+
wrapped(1)
126+
wrapped(2)
127+
self.assertTrue(queue.empty())
128+
129+
time.sleep(2 * interval)
130+
131+
self.assertEqual(queue.get(1), 2)
132+
self.assertTrue(queue.empty())
133+
134+
def test_debounceWithKey(self):
135+
_logger.info("#" * 100)
136+
interval = 0.1
137+
138+
obj = mock.Mock()
139+
140+
def func(arg):
141+
_logger.info("Called with %s", arg)
142+
obj(arg)
143+
144+
wrapped = debounce(interval, "arg")(func)
145+
obj.assert_not_called()
146+
147+
wrapped(1)
148+
wrapped(2)
149+
wrapped(3)
150+
151+
obj.assert_not_called()
152+
153+
time.sleep(2 * interval)
154+
155+
obj.assert_has_calls(
156+
[mock.call(1), mock.call(2), mock.call(3),], any_order=True
157+
)
158+
159+
wrapped(4)
160+
wrapped(4)
161+
wrapped(4)
162+
time.sleep(2 * interval)
163+
164+
obj.assert_has_calls(
165+
[mock.call(1), mock.call(2), mock.call(3), mock.call(4),], any_order=True
166+
)

hdl_checker/utils.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -474,10 +474,11 @@ def wrapper(func):
474474

475475
@functools.wraps(func)
476476
def debounced(*args, **kwargs):
477-
if keyed_by:
478-
key = inspect.signature(func).bind(*args, **kwargs).arguments[keyed_by]
479-
else:
480-
key = None
477+
key = (
478+
inspect.signature(func).bind(*args, **kwargs).arguments[keyed_by]
479+
if keyed_by
480+
else None
481+
)
481482

482483
# Could not find a way to disable debouncing whilist testing, so
483484
# we'll use a module var

0 commit comments

Comments
 (0)