"""Tests for screenshot mixin (capture, screen size, density, record).""" import pytest from tests.conftest import fail, ok class TestScreenshot: async def test_capture(self, server, ctx, tmp_path, monkeypatch): from src.config import get_config get_config().default_screenshot_dir = str(tmp_path) server.run_shell_args.return_value = ok() server.run_adb.return_value = ok() result = await server.screenshot(ctx, filename="test.png") assert result.success is True assert result.local_path is not None assert "test.png" in result.local_path async def test_capture_failure(self, server, ctx): server.run_shell_args.return_value = fail("no screen") result = await server.screenshot(ctx) assert result.success is False assert result.error is not None async def test_pull_failure(self, server, ctx): server.run_shell_args.return_value = ok() server.run_adb.return_value = fail("pull failed") result = await server.screenshot(ctx) assert result.success is False class TestScreenSize: async def test_physical(self, server): server.run_shell_args.return_value = ok(stdout="Physical size: 1080x1920") result = await server.screen_size() assert result.success is True assert result.width == 1080 assert result.height == 1920 async def test_override(self, server): server.run_shell_args.return_value = ok( stdout="Physical size: 1080x1920\nOverride size: 720x1280" ) result = await server.screen_size() assert result.success is True # Should parse the first match assert result.width == 1080 async def test_failure(self, server): server.run_shell_args.return_value = fail("error") result = await server.screen_size() assert result.success is False class TestScreenDensity: async def test_density(self, server): server.run_shell_args.return_value = ok(stdout="Physical density: 420") result = await server.screen_density() assert result.success is True assert result.dpi == 420 async def test_failure(self, server): server.run_shell_args.return_value = fail("error") result = await server.screen_density() assert result.success is False class TestScreenOnOff: async def test_screen_on(self, server): server.run_shell_args.return_value = ok() result = await server.screen_on() assert result.success is True assert result.action == "screen_on" async def test_screen_off(self, server): server.run_shell_args.return_value = ok() result = await server.screen_off() assert result.action == "screen_off" class TestScreenRecord: @pytest.mark.usefixtures("_dev_mode") async def test_record(self, server, ctx, tmp_path): from src.config import get_config get_config().default_screenshot_dir = str(tmp_path) server.run_shell_args.side_effect = [ok(), ok()] # record + rm server.run_adb.return_value = ok() # pull result = await server.screen_record( ctx, filename="test.mp4", duration_seconds=5, ) assert result.success is True assert result.duration_seconds == 5 @pytest.mark.usefixtures("_dev_mode") async def test_duration_capped(self, server, ctx, tmp_path): from src.config import get_config get_config().default_screenshot_dir = str(tmp_path) server.run_shell_args.side_effect = [ok(), ok()] server.run_adb.return_value = ok() result = await server.screen_record(ctx, duration_seconds=999) assert result.duration_seconds == 180 # Capped at 180 @pytest.mark.usefixtures("_no_dev_mode") async def test_requires_dev_mode(self, server, ctx): result = await server.screen_record(ctx) assert result.success is False class TestScreenSetSize: @pytest.mark.usefixtures("_dev_mode") async def test_set(self, server): server.run_shell_args.return_value = ok() result = await server.screen_set_size(720, 1280) assert result.success is True assert result.width == 720 @pytest.mark.usefixtures("_dev_mode") async def test_reset(self, server): server.run_shell_args.return_value = ok() result = await server.screen_reset_size() assert result.success is True assert result.action == "reset_size" @pytest.mark.usefixtures("_no_dev_mode") async def test_requires_dev_mode(self, server): result = await server.screen_set_size(720, 1280) assert result.success is False