Skip to content

Commit 6fa5365

Browse files
committed
Copilot review
1 parent f5c0739 commit 6fa5365

2 files changed

Lines changed: 68 additions & 72 deletions

File tree

test/asynchronous/test_periodic_executor.py

Lines changed: 34 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -30,30 +30,27 @@
3030
_IS_SYNC = False
3131

3232

33-
def _make_executor(interval=30.0, min_interval=0.01, target=None, name="test"):
34-
if target is None:
35-
36-
async def target():
37-
return True
38-
39-
return AsyncPeriodicExecutor(
40-
interval=interval, min_interval=min_interval, target=target, name=name
41-
)
33+
class TestAsyncPeriodicExecutor(AsyncUnitTest):
34+
def _make_executor(self, interval=30.0, min_interval=0.01, target=None, name="test"):
35+
if target is None:
4236

37+
async def target():
38+
return True
4339

44-
class TestAsyncPeriodicExecutor(AsyncUnitTest):
45-
async def asyncSetUp(self):
46-
self.executor = None
40+
executor = AsyncPeriodicExecutor(
41+
interval=interval, min_interval=min_interval, target=target, name=name
42+
)
43+
self.addAsyncCleanup(self._close_executor, executor)
44+
return executor
4745

48-
async def asyncTearDown(self):
49-
if self.executor is not None:
50-
self.executor.close()
51-
await self.executor.join(timeout=2)
46+
async def _close_executor(self, executor):
47+
executor.close()
48+
await executor.join(timeout=2)
5249

5350
async def test_join_without_open_is_safe(self):
54-
self.executor = _make_executor()
51+
executor = self._make_executor()
5552
try:
56-
await self.executor.join(timeout=0.01)
53+
await executor.join(timeout=0.01)
5754
except Exception as e:
5855
self.fail(f"join() raised unexpected Exception {e}")
5956

@@ -67,9 +64,9 @@ async def target():
6764
ran.set()
6865
return False
6966

70-
self.executor = _make_executor(target=target)
71-
self.executor.open()
72-
await self.executor.join(timeout=2)
67+
executor = self._make_executor(target=target)
68+
executor.open()
69+
await executor.join(timeout=2)
7370
self.assertTrue(ran.is_set(), "target never ran")
7471

7572
async def test_target_exception_stops_executor(self):
@@ -80,15 +77,15 @@ async def target():
8077
call_count += 1
8178
raise RuntimeError("error")
8279

83-
self.executor = _make_executor(target=target)
80+
executor = self._make_executor(target=target)
8481
# Suppress threading.excepthook so the intentional RuntimeError raised
8582
# in the worker thread is not surfaced by pytest's threadexception
8683
# plugin (no-op for the async executor since no thread is involved).
8784
orig_excepthook = threading.excepthook
8885
threading.excepthook = lambda _args: None
8986
try:
90-
self.executor.open()
91-
await self.executor.join(timeout=2)
87+
executor.open()
88+
await executor.join(timeout=2)
9289
finally:
9390
threading.excepthook = orig_excepthook
9491
self.assertEqual(call_count, 1, "target should stop after exception")
@@ -102,10 +99,10 @@ async def target():
10299
return False
103100
return True
104101

105-
self.executor = _make_executor(interval=30.0, min_interval=0.001, target=target)
106-
self.executor.skip_sleep()
107-
self.executor.open()
108-
await self.executor.join(timeout=3)
102+
executor = self._make_executor(interval=30.0, min_interval=0.001, target=target)
103+
executor.skip_sleep()
104+
executor.open()
105+
await executor.join(timeout=3)
109106
self.assertGreaterEqual(len(call_times), 2)
110107
self.assertLess(call_times[1] - call_times[0], 5.0)
111108

@@ -123,15 +120,15 @@ async def target():
123120
woken.set()
124121
return call_count < 2
125122

126-
self.executor = _make_executor(interval=30.0, min_interval=0.01, target=target)
127-
self.executor.open()
123+
executor = self._make_executor(interval=30.0, min_interval=0.01, target=target)
124+
executor.open()
128125
if _IS_SYNC:
129126
woken.wait(timeout=2)
130127
else:
131128
assert isinstance(woken, asyncio.Event)
132129
await asyncio.wait_for(woken.wait(), timeout=2)
133-
self.executor.wake()
134-
await self.executor.join(timeout=3)
130+
executor.wake()
131+
await executor.join(timeout=3)
135132
self.assertGreaterEqual(call_count, 2)
136133

137134
async def test_open_after_target_returns_false(self):
@@ -142,11 +139,11 @@ async def target():
142139
called += 1
143140
return False
144141

145-
self.executor = _make_executor(target=target)
146-
self.executor.open()
147-
await self.executor.join(timeout=2)
148-
self.executor.open()
149-
await self.executor.join(timeout=2)
142+
executor = self._make_executor(target=target)
143+
executor.open()
144+
await executor.join(timeout=2)
145+
executor.open()
146+
await executor.join(timeout=2)
150147
self.assertGreaterEqual(called, 2)
151148

152149

test/test_periodic_executor.py

Lines changed: 34 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -30,28 +30,27 @@
3030
_IS_SYNC = True
3131

3232

33-
def _make_executor(interval=30.0, min_interval=0.01, target=None, name="test"):
34-
if target is None:
35-
36-
def target():
37-
return True
38-
39-
return PeriodicExecutor(interval=interval, min_interval=min_interval, target=target, name=name)
33+
class TestPeriodicExecutor(UnitTest):
34+
def _make_executor(self, interval=30.0, min_interval=0.01, target=None, name="test"):
35+
if target is None:
4036

37+
def target():
38+
return True
4139

42-
class TestPeriodicExecutor(UnitTest):
43-
def setUp(self):
44-
self.executor = None
40+
executor = PeriodicExecutor(
41+
interval=interval, min_interval=min_interval, target=target, name=name
42+
)
43+
self.addCleanup(self._close_executor, executor)
44+
return executor
4545

46-
def tearDown(self):
47-
if self.executor is not None:
48-
self.executor.close()
49-
self.executor.join(timeout=2)
46+
def _close_executor(self, executor):
47+
executor.close()
48+
executor.join(timeout=2)
5049

5150
def test_join_without_open_is_safe(self):
52-
self.executor = _make_executor()
51+
executor = self._make_executor()
5352
try:
54-
self.executor.join(timeout=0.01)
53+
executor.join(timeout=0.01)
5554
except Exception as e:
5655
self.fail(f"join() raised unexpected Exception {e}")
5756

@@ -65,9 +64,9 @@ def target():
6564
ran.set()
6665
return False
6766

68-
self.executor = _make_executor(target=target)
69-
self.executor.open()
70-
self.executor.join(timeout=2)
67+
executor = self._make_executor(target=target)
68+
executor.open()
69+
executor.join(timeout=2)
7170
self.assertTrue(ran.is_set(), "target never ran")
7271

7372
def test_target_exception_stops_executor(self):
@@ -78,15 +77,15 @@ def target():
7877
call_count += 1
7978
raise RuntimeError("error")
8079

81-
self.executor = _make_executor(target=target)
80+
executor = self._make_executor(target=target)
8281
# Suppress threading.excepthook so the intentional RuntimeError raised
8382
# in the worker thread is not surfaced by pytest's threadexception
8483
# plugin (no-op for the async executor since no thread is involved).
8584
orig_excepthook = threading.excepthook
8685
threading.excepthook = lambda _args: None
8786
try:
88-
self.executor.open()
89-
self.executor.join(timeout=2)
87+
executor.open()
88+
executor.join(timeout=2)
9089
finally:
9190
threading.excepthook = orig_excepthook
9291
self.assertEqual(call_count, 1, "target should stop after exception")
@@ -100,10 +99,10 @@ def target():
10099
return False
101100
return True
102101

103-
self.executor = _make_executor(interval=30.0, min_interval=0.001, target=target)
104-
self.executor.skip_sleep()
105-
self.executor.open()
106-
self.executor.join(timeout=3)
102+
executor = self._make_executor(interval=30.0, min_interval=0.001, target=target)
103+
executor.skip_sleep()
104+
executor.open()
105+
executor.join(timeout=3)
107106
self.assertGreaterEqual(len(call_times), 2)
108107
self.assertLess(call_times[1] - call_times[0], 5.0)
109108

@@ -121,15 +120,15 @@ def target():
121120
woken.set()
122121
return call_count < 2
123122

124-
self.executor = _make_executor(interval=30.0, min_interval=0.01, target=target)
125-
self.executor.open()
123+
executor = self._make_executor(interval=30.0, min_interval=0.01, target=target)
124+
executor.open()
126125
if _IS_SYNC:
127126
woken.wait(timeout=2)
128127
else:
129128
assert isinstance(woken, asyncio.Event)
130129
asyncio.wait_for(woken.wait(), timeout=2)
131-
self.executor.wake()
132-
self.executor.join(timeout=3)
130+
executor.wake()
131+
executor.join(timeout=3)
133132
self.assertGreaterEqual(call_count, 2)
134133

135134
def test_open_after_target_returns_false(self):
@@ -140,11 +139,11 @@ def target():
140139
called += 1
141140
return False
142141

143-
self.executor = _make_executor(target=target)
144-
self.executor.open()
145-
self.executor.join(timeout=2)
146-
self.executor.open()
147-
self.executor.join(timeout=2)
142+
executor = self._make_executor(target=target)
143+
executor.open()
144+
executor.join(timeout=2)
145+
executor.open()
146+
executor.join(timeout=2)
148147
self.assertGreaterEqual(called, 2)
149148

150149

0 commit comments

Comments
 (0)