|
1 | 1 | import ctypes |
2 | | -import screen_brightness_control as sbc |
| 2 | +from contextlib import contextmanager |
3 | 3 | from typing import Type |
4 | | -from unittest.mock import Mock |
| 4 | +from unittest.mock import Mock, call |
| 5 | + |
5 | 6 | import pytest |
6 | 7 | from pytest_mock import MockerFixture |
7 | | -from unittest.mock import call |
8 | 8 |
|
9 | | -from .helpers import BrightnessMethodTest |
| 9 | +import screen_brightness_control as sbc |
10 | 10 | from screen_brightness_control.helpers import BrightnessMethod |
11 | | -from .mocks.windows_mock import mock_enum_display_devices, mock_enum_display_monitors, mock_wmi_init, FakeWinDLL |
| 11 | + |
| 12 | +from .helpers import BrightnessMethodTest |
| 13 | +from .mocks.windows_mock import ( |
| 14 | + FakeWinDLL, |
| 15 | + mock_enum_display_devices, |
| 16 | + mock_enum_display_monitors, |
| 17 | + mock_wmi_init, |
| 18 | +) |
12 | 19 |
|
13 | 20 |
|
14 | 21 | @pytest.fixture |
@@ -52,27 +59,35 @@ def test_without(self): |
52 | 59 | class TestSetBrightness(BrightnessMethodTest.TestSetBrightness): |
53 | 60 | class TestDisplayKwarg(BrightnessMethodTest.TestSetBrightness.TestDisplayKwarg): |
54 | 61 | def test_with(self, mocker: MockerFixture, freeze_display_info, method, subtests): |
55 | | - wmi = sbc.windows._wmi_init() |
56 | | - mocker.patch.object(sbc.windows, '_wmi_init', Mock(return_value=wmi, spec=True)) |
57 | | - brightness_method = wmi.WmiMonitorBrightnessMethods()[0] |
58 | | - mocker.patch.object(wmi, 'WmiMonitorBrightnessMethods', lambda: [brightness_method] * 3) |
59 | | - spy = mocker.spy(brightness_method, 'WmiSetBrightness') |
60 | | - for index, display in enumerate(freeze_display_info): |
61 | | - with subtests.test(index=index): |
62 | | - method.set_brightness(100, display=index) |
63 | | - spy.assert_called_once_with(100, 0) |
64 | | - spy.reset_mock() |
| 62 | + with sbc.windows._wmi_init() as wmi: |
| 63 | + mocker.patch.object( |
| 64 | + sbc.windows, |
| 65 | + '_wmi_init', |
| 66 | + Mock(side_effect=contextmanager(lambda *_: (yield wmi))) |
| 67 | + ) |
| 68 | + brightness_method = wmi.WmiMonitorBrightnessMethods()[0] |
| 69 | + mocker.patch.object(wmi, 'WmiMonitorBrightnessMethods', lambda: [brightness_method] * 3) |
| 70 | + spy = mocker.spy(brightness_method, 'WmiSetBrightness') |
| 71 | + for index, display in enumerate(freeze_display_info): |
| 72 | + with subtests.test(index=index): |
| 73 | + method.set_brightness(100, display=index) |
| 74 | + spy.assert_called_once_with(100, 0) |
| 75 | + spy.reset_mock() |
65 | 76 |
|
66 | 77 | def test_without(self, mocker: MockerFixture, freeze_display_info, method): |
67 | | - wmi = sbc.windows._wmi_init() |
68 | | - mocker.patch.object(sbc.windows, '_wmi_init', Mock(return_value=wmi, spec=True)) |
69 | | - brightness_method = wmi.WmiMonitorBrightnessMethods()[0] |
70 | | - mocker.patch.object(wmi, 'WmiMonitorBrightnessMethods', lambda: [brightness_method] * 3) |
71 | | - spy = mocker.spy(brightness_method, 'WmiSetBrightness') |
72 | | - |
73 | | - method.set_brightness(100) |
74 | | - spy.assert_has_calls([call(100, 0)] * 3) |
75 | | - spy.reset_mock() |
| 78 | + with sbc.windows._wmi_init() as wmi: |
| 79 | + mocker.patch.object( |
| 80 | + sbc.windows, |
| 81 | + '_wmi_init', |
| 82 | + Mock(side_effect=contextmanager(lambda *_: (yield wmi))) |
| 83 | + ) |
| 84 | + brightness_method = wmi.WmiMonitorBrightnessMethods()[0] |
| 85 | + mocker.patch.object(wmi, 'WmiMonitorBrightnessMethods', lambda: [brightness_method] * 3) |
| 86 | + spy = mocker.spy(brightness_method, 'WmiSetBrightness') |
| 87 | + |
| 88 | + method.set_brightness(100) |
| 89 | + spy.assert_has_calls([call(100, 0)] * 3) |
| 90 | + spy.reset_mock() |
76 | 91 |
|
77 | 92 |
|
78 | 93 | class TestVCP(BrightnessMethodTest): |
|
0 commit comments