示例#1
0
async def test_network_speed_block_down():
    with patch(**PSUTIL_MOCK_CONFIG) as mock_psutil:
        mock_psutil.configure_mock(
            **{
                "net_if_stats.return_value": {
                    "lo":
                    misc.AttributeDict(isup=True,
                                       duplex=psutil.NIC_DUPLEX_UNKNOWN,
                                       speed=0,
                                       mtu=65536),
                    "eno1":
                    misc.AttributeDict(isup=False,
                                       duplex=psutil.NIC_DUPLEX_FULL,
                                       speed=1000,
                                       mtu=1500),
                }
            })
        instance = ps.NetworkSpeedBlock(
            format_up="{interface} {upload} {download}", )

        await instance.run()

        result = instance.result()

        assert result["full_text"] == "No network"
        assert result["color"] == types.Color.URGENT
示例#2
0
async def test_window_title_block():
    with patch("i3pyblocks.blocks.i3ipc.i3ipc_aio",
               autospec=True,
               spec_set=True) as mock_i3ipc_aio:
        mock_connection = mock_i3ipc_aio.Connection.return_value

        tree_mock = mock_connection.get_tree.return_value
        # For some reason this was mocked as a AsyncMock
        window_mock = tree_mock.find_focused = Mock()
        window_mock.return_value = misc.AttributeDict(name="Hello")

        instance = i3ipc.WindowTitleBlock()
        await task.runner([instance.start()])

        result = instance.result()
        assert result["full_text"] == "Hello"

        await instance.clear_title()

        result = instance.result()
        assert result["full_text"] == ""

        # Sometimes window.name returns None
        window_mock.return_value = misc.AttributeDict(name=None)
        await instance.update_title(mock_connection)
        result = instance.result()
        assert result["full_text"] == ""
示例#3
0
async def test_backlight_block_click_handler(tmpdir):
    with patch(
            "i3pyblocks.blocks.inotify.subprocess",
            autospec=True,
            spec_set=True,
    ) as mock_subprocess:
        mock_subprocess.configure_mock(**{
            "arun.return_value": (misc.AttributeDict(returncode=0)),
        })
        instance = inotify.BacklightBlock(
            base_path=tmpdir,
            command_on_click={
                types.MouseButton.LEFT_BUTTON: "LEFT_BUTTON",
                types.MouseButton.MIDDLE_BUTTON: "MIDDLE_BUTTON",
                types.MouseButton.RIGHT_BUTTON: "RIGHT_BUTTON",
                types.MouseButton.SCROLL_UP: "SCROLL_UP",
                types.MouseButton.SCROLL_DOWN: "SCROLL_DOWN",
            },
        )

        for button in [
                "LEFT_BUTTON",
                "RIGHT_BUTTON",
                "MIDDLE_BUTTON",
                "SCROLL_UP",
                "SCROLL_DOWN",
        ]:
            await instance.click_handler(getattr(types.MouseButton, button))
            mock_subprocess.arun.assert_called_once_with(button)
            mock_subprocess.arun.reset_mock()
示例#4
0
async def test_sensors_battery_block():
    with patch(**PSUTIL_MOCK_CONFIG) as mock_psutil:
        mock_psutil.configure_mock(
            **{
                "sensors_battery.side_effect": [
                    misc.AttributeDict(
                        percent=93,
                        secsleft=psutil.POWER_TIME_UNLIMITED,
                        power_plugged=True,
                    ),
                    misc.AttributeDict(
                        percent=23, secsleft=16628, power_plugged=False),
                    None,
                    misc.AttributeDict(
                        percent=9,
                        secsleft=psutil.POWER_TIME_UNKNOWN,
                        power_plugged=False,
                    ),
                ],
                # Unmock those enums
                "POWER_TIME_UNLIMITED":
                psutil.POWER_TIME_UNLIMITED,
                "POWER_TIME_UNKNOWN":
                psutil.POWER_TIME_UNKNOWN,
            })
        instance = ps.SensorsBatteryBlock()

        await instance.run()

        result = instance.result()

        assert result["full_text"] == "B: PLUGGED 93%"

        await instance.run()
        result = instance.result()
        assert result["full_text"] == "B: ▂ 23% 4:37:08"
        assert result["color"] == types.Color.WARN

        await instance.run()
        result = instance.result()
        assert result["full_text"] == "No battery"

        await instance.run()
        result = instance.result()
        assert result["full_text"] == "B: ▁ 9%"
        assert result["color"] == types.Color.URGENT
示例#5
0
def test_caffeine_block():
    with patch(
            # Display.dpms_info() is generated at runtime so can't autospec here
            "i3pyblocks.blocks.x11.display",
            autospec=False,
            spec_set=True,
    ) as mock_display:
        mock_Display = mock_display.Display.return_value
        mock_Display.dpms_info.return_value = misc.AttributeDict(state=1)

        instance = x11.CaffeineBlock()

        instance.run_sync()
        assert instance.result()["full_text"] == "CAFFEINE OFF"

        instance.click_handler_sync()
        mock_Display.dpms_disable.assert_called_once()
        mock_Display.set_screen_saver.assert_called_once_with(
            allow_exposures=X.DefaultExposures,
            interval=0,
            prefer_blank=X.DefaultBlanking,
            timeout=0,
        )

        mock_Display.reset_mock()
        mock_Display.dpms_info.return_value = misc.AttributeDict(state=0)

        instance.run_sync()
        assert instance.result()["full_text"] == "CAFFEINE ON"

        instance.click_handler_sync()
        mock_Display.dpms_enable.assert_called_once()
        mock_Display.set_screen_saver.assert_called_once_with(
            allow_exposures=X.DefaultExposures,
            interval=-1,
            prefer_blank=X.DefaultBlanking,
            timeout=-1,
        )
示例#6
0
async def test_shell_block_click_handler():
    with patch("i3pyblocks.blocks.shell.subprocess",
               autospec=True,
               spec_set=True) as mock_subprocess:
        mock_subprocess.configure_mock(
            **{
                "arun.return_value": (misc.AttributeDict(
                    stdout="stdout\n",
                    stderr="stderr\n",
                    returncode=0,
                )),
                "PIPE":
                subprocess.PIPE,
            })
        instance = shell.ShellBlock(
            command="exit 0",
            command_on_click={
                types.MouseButton.LEFT_BUTTON: "LEFT_BUTTON",
                types.MouseButton.MIDDLE_BUTTON: "MIDDLE_BUTTON",
                types.MouseButton.RIGHT_BUTTON: "RIGHT_BUTTON",
                types.MouseButton.SCROLL_UP: "SCROLL_UP",
                types.MouseButton.SCROLL_DOWN: "SCROLL_DOWN",
            },
        )

        for button in [
                "LEFT_BUTTON",
                "RIGHT_BUTTON",
                "MIDDLE_BUTTON",
                "SCROLL_UP",
                "SCROLL_DOWN",
        ]:
            await instance.click_handler(getattr(types.MouseButton, button))
            mock_subprocess.arun.assert_has_calls([
                call(button),
                call(
                    "exit 0",
                    stdout=subprocess.PIPE,
                    stderr=subprocess.PIPE,
                    text=True,
                ),
            ])
            mock_subprocess.arun.reset_mock()
示例#7
0
async def test_disk_usage_block():
    with patch(**PSUTIL_MOCK_CONFIG) as mock_psutil:
        mock_psutil.configure_mock(
            **{
                "disk_usage.return_value":
                misc.AttributeDict(
                    total=226227036160,
                    used=49354395648,
                    free=165309575168,
                    percent=91.3,
                )
            })

        instance = ps.DiskUsageBlock(
            format="{icon} {path} {total:.1f} {used:.1f} {free:.1f} {percent}",
        )
        await instance.run()

        result = instance.result()

        assert result["full_text"] == "█ / 210.7 46.0 154.0 91.3"
        assert result["color"] == types.Color.URGENT
示例#8
0
async def test_virtual_memory_block():
    with patch(**PSUTIL_MOCK_CONFIG) as mock_psutil:
        mock_psutil.configure_mock(
            **{
                "virtual_memory.return_value":
                misc.AttributeDict(
                    total=16758484992,
                    available=13300297728,
                    percent=95.6,
                    used=2631917568,
                    free=10560126976,
                )
            })
        instance = ps.VirtualMemoryBlock(
            format=
            "{icon} {total:.1f} {available:.1f} {used:.1f} {free:.1f} {percent}",
        )

        await instance.run()

        result = instance.result()

        assert result["full_text"] == "█ 15.6 12.4 2.5 9.8 95.6"
示例#9
0
async def test_disk_usage_block_with_short_path():
    path_str = "/media/backup/Downloads"

    with patch(**PSUTIL_MOCK_CONFIG) as mock_psutil:
        mock_psutil.configure_mock(
            **{
                "disk_usage.return_value":
                misc.AttributeDict(
                    total=226227036160,
                    used=49354395648,
                    free=165309575168,
                    percent=91.3,
                )
            })
        instance = ps.DiskUsageBlock(path=Path(path_str),
                                     format="{short_path}")
        await instance.run()

        # Making sure that we call psutil.disk_usage with str instead of Path
        mock_psutil.disk_usage.assert_called_once_with(path_str)

        result = instance.result()

        assert result["full_text"] == "/m/b/D"
示例#10
0
async def test_sensors_temperature_block():
    with patch(**PSUTIL_MOCK_CONFIG) as mock_psutil:
        mock_psutil.configure_mock(
            **{
                "sensors_temperatures.return_value": {
                    "coretemp": [
                        misc.AttributeDict(
                            label="Package id 0",
                            current=78.0,
                            high=82.0,
                            critical=100.0,
                        ),
                        misc.AttributeDict(label="Core 0",
                                           current=29.0,
                                           high=82.0,
                                           critical=100.0),
                        misc.AttributeDict(label="Core 1",
                                           current=28.0,
                                           high=82.0,
                                           critical=100.0),
                        misc.AttributeDict(label="Core 2",
                                           current=28.0,
                                           high=82.0,
                                           critical=100.0),
                        misc.AttributeDict(label="Core 3",
                                           current=28.0,
                                           high=82.0,
                                           critical=100.0),
                        misc.AttributeDict(label="Core 4",
                                           current=30.0,
                                           high=82.0,
                                           critical=100.0),
                        misc.AttributeDict(label="Core 5",
                                           current=28.0,
                                           high=82.0,
                                           critical=100.0),
                    ],
                    "acpitz": [
                        misc.AttributeDict(
                            label="", current=16.8, high=18.8, critical=18.8),
                        misc.AttributeDict(
                            label="", current=27.8, high=119.0,
                            critical=119.0),
                        misc.AttributeDict(
                            label="", current=29.8, high=119.0,
                            critical=119.0),
                    ],
                }
            })
        instance_default = ps.SensorsTemperaturesBlock(
            format="{icon} {label} {current} {high} {critical}", )

        await instance_default.run()

        result = instance_default.result()

        assert result["full_text"] == "▇ Package id 0 78.0 82.0 100.0"
        assert result["color"] == types.Color.WARN

        instance_acpitz = ps.SensorsTemperaturesBlock(sensor_regex="acpi.*")

        await instance_acpitz.run()

        result = instance_acpitz.result()

        assert result["full_text"] == "T: 17°C"
示例#11
0
async def test_network_speed_block_two_interfaces_up():
    with patch(**PSUTIL_MOCK_CONFIG) as mock_psutil:
        mock_psutil.configure_mock(
            **{
                "net_if_stats.side_effect": [
                    {
                        "eno1":
                        misc.AttributeDict(
                            isup=True,
                            duplex=psutil.NIC_DUPLEX_FULL,
                            speed=1000,
                            mtu=1500,
                        ),
                        "eno2":
                        misc.AttributeDict(
                            isup=True,
                            duplex=psutil.NIC_DUPLEX_FULL,
                            speed=1000,
                            mtu=1500,
                        ),
                    },
                    {
                        "eno2":
                        misc.AttributeDict(
                            isup=True,
                            duplex=psutil.NIC_DUPLEX_FULL,
                            speed=1000,
                            mtu=1500,
                        ),
                        "eno1":
                        misc.AttributeDict(
                            isup=True,
                            duplex=psutil.NIC_DUPLEX_FULL,
                            speed=1000,
                            mtu=1500,
                        ),
                    },
                    {
                        "eno2":
                        misc.AttributeDict(
                            isup=True,
                            duplex=psutil.NIC_DUPLEX_FULL,
                            speed=1000,
                            mtu=1500,
                        ),
                        "eno1":
                        misc.AttributeDict(
                            isup=True,
                            duplex=psutil.NIC_DUPLEX_FULL,
                            speed=1000,
                            mtu=1500,
                        ),
                    },
                ],
                "net_io_counters.return_value": {
                    "eno1":
                    misc.AttributeDict(
                        bytes_sent=1082551675,
                        bytes_recv=2778549399,
                        packets_sent=2198791,
                        packets_recv=2589939,
                    ),
                    "eno2":
                    misc.AttributeDict(
                        bytes_sent=35052252,
                        bytes_recv=35052252,
                        packets_sent=72139,
                        packets_recv=72139,
                    ),
                },
            }, )
        instance = ps.NetworkSpeedBlock(format_up="{interface}")

        await instance.run()
        result = instance.result()
        assert result["full_text"] == "eno1"

        await instance.run()
        result = instance.result()
        assert result["full_text"] == "eno1"
示例#12
0
async def test_network_speed_block_up():
    with patch(**PSUTIL_MOCK_CONFIG) as mock_psutil, patch(
            "i3pyblocks.blocks.ps.time") as mock_time:
        mock_psutil.configure_mock(
            **{
                "net_if_stats.return_value": {
                    "lo":
                    misc.AttributeDict(isup=True,
                                       duplex=psutil.NIC_DUPLEX_UNKNOWN,
                                       speed=0,
                                       mtu=65536),
                    "eno1":
                    misc.AttributeDict(isup=True,
                                       duplex=psutil.NIC_DUPLEX_FULL,
                                       speed=1000,
                                       mtu=1500),
                },
                "net_io_counters.side_effect": [
                    {
                        "lo":
                        misc.AttributeDict(
                            bytes_sent=35052252,
                            bytes_recv=35052252,
                            packets_sent=72139,
                            packets_recv=72139,
                        ),
                        "eno1":
                        misc.AttributeDict(
                            bytes_sent=1082551675,
                            bytes_recv=2778549399,
                            packets_sent=2198791,
                            packets_recv=2589939,
                        ),
                    },
                    {
                        "lo":
                        misc.AttributeDict(
                            bytes_sent=35498316,
                            bytes_recv=35498316,
                            packets_sent=72619,
                            packets_recv=72619,
                        ),
                        "eno1":
                        misc.AttributeDict(
                            bytes_sent=1093133039,
                            bytes_recv=2789019792,
                            packets_sent=2203911,
                            packets_recv=2592307,
                        ),
                    },
                ],
            })
        mock_time.time.return_value = 3.328857660293579
        instance = ps.NetworkSpeedBlock(
            format_up="{interface} {upload} {download}")

        mock_time.time.return_value = 6.328857660293579
        await instance.run()

        result = instance.result()

        assert result["full_text"] == "eno1 3.4M 3.3M"
        assert result["color"] == types.Color.WARN
示例#13
0
import pytest
from helpers import misc
from mock import Mock, patch

from i3pyblocks import types

try:
    pulsectl = pytest.importorskip("pulsectl")
    pulse = pytest.importorskip("i3pyblocks.blocks.pulse")
except OSError:
    from unittest import SkipTest

    raise SkipTest("PulseAudio is not installed, skipping tests...")

# Stub some PulseAudio sinks
SINK = misc.AttributeDict(description="description", index=1, name="sink", mute=0)
SINK_MUTE = misc.AttributeDict(description="description", index=1, name="sink", mute=1)
ANOTHER_SINK = misc.AttributeDict(
    description="another description", index=2, name="another_sink", mute=1
)
DEFAULT_MOCK_CONFIG = {
    "Pulse.return_value.__enter__": Mock(),
    "Pulse.return_value.__exit__": Mock(),
    "Pulse.return_value.__enter__.return_value.sink_list.return_value": [
        SINK,
        ANOTHER_SINK,
    ],
    "Pulse.return_value.__enter__.return_value.sink_info.return_value": SINK,
    "Pulse.return_value.__enter__.return_value.volume_get_all_chans.return_value": 0.8,
    # Unmock those exceptions
    "PulseLoopStop": pulsectl.PulseLoopStop,