import sys import numpy as np from hermesbody.main import audio_sample_to_pcm16_bytes, parse_args, pcm16_bytes_to_float32_audio, resolve_audio_backend def test_cli_parser_exposes_audio_transport_subcommands_without_optional_imports(monkeypatch): monkeypatch.setitem(sys.modules, "google.genai", None) monkeypatch.setitem(sys.modules, "websockets", None) server = parse_args(["gemini-server", "--host", "127.0.0.1", "--port", "8766", "--token", "test-token"]) client = parse_args(["reachy-audio-client", "--server", "ws://127.0.0.1:8766", "--token", "test-token"]) assert server.command == "gemini-server" assert server.host == "127.0.0.1" assert server.port == 8766 assert client.command == "reachy-audio-client" assert client.server == "ws://127.0.0.1:8766" def test_audio_backend_auto_defaults_to_packaged_mac_mini_bridge(monkeypatch): monkeypatch.delenv("HERMESBODY_AUDIO_WS_URL", raising=False) assert resolve_audio_backend("auto", "") == "gemini_ws" assert resolve_audio_backend("auto", "ws://10.0.0.192:8877") == "gemini_ws" assert resolve_audio_backend("gemini_ws", "") == "gemini_ws" def test_pcm_helpers_convert_reachy_float_audio_to_wire_pcm16_and_back(): sample = np.array([-1.0, 0.0, 1.0], dtype="float32") pcm = audio_sample_to_pcm16_bytes(sample) decoded = pcm16_bytes_to_float32_audio(pcm) assert len(pcm) == 6 assert decoded.dtype == np.float32 assert decoded[0] < -0.99 assert decoded[1] == 0.0 assert decoded[2] > 0.99