ria-toolkit-oss/tests/ria_toolkit_oss_cli/test_common.py
2025-12-11 15:59:08 -05:00

119 lines
3.6 KiB
Python

"""Tests for common CLI utilities."""
import os
import tempfile
import pytest
import yaml
from ria_toolkit_oss.ria_toolkit_oss_cli.ria_toolkit_oss.common import (
format_frequency,
format_sample_rate,
load_yaml_config,
parse_frequency,
parse_metadata_args,
)
def test_load_yaml_config():
"""Test loading YAML configuration files."""
config_data = {
"device": "pluto",
"sample_rate": 2e6,
"center_frequency": "915e6",
"gain": 30,
"metadata": {"location": "test_lab", "experiment": "test_001"},
}
with tempfile.NamedTemporaryFile(mode="w", suffix=".yaml", delete=False) as f:
yaml.dump(config_data, f)
config_file = f.name
try:
loaded_config = load_yaml_config(config_file)
assert loaded_config == config_data
assert loaded_config["device"] == "pluto"
assert loaded_config["sample_rate"] == 2e6
assert loaded_config["metadata"]["location"] == "test_lab"
finally:
os.unlink(config_file)
def test_load_yaml_config_empty():
"""Test loading empty YAML file."""
with tempfile.NamedTemporaryFile(mode="w", suffix=".yaml", delete=False) as f:
f.write("")
config_file = f.name
try:
loaded_config = load_yaml_config(config_file)
assert loaded_config == {}
finally:
os.unlink(config_file)
def test_parse_metadata_args():
"""Test parsing metadata KEY=VALUE arguments."""
metadata_args = ["location=test_lab", "experiment=001", "power=30", "frequency=2.4e9", "description=Test Signal"]
result = parse_metadata_args(metadata_args)
assert result["location"] == "test_lab"
assert result["experiment"] == "001" # String because doesn't parse as number
assert result["power"] == 30 # Integer
assert result["frequency"] == 2.4e9 # Float
assert result["description"] == "Test Signal"
def test_parse_metadata_args_invalid():
"""Test invalid metadata format raises error."""
from click.exceptions import ClickException
with pytest.raises(ClickException):
parse_metadata_args(["invalid_format"])
with pytest.raises(ClickException):
parse_metadata_args(["key1=value1", "invalid", "key2=value2"])
def test_parse_frequency():
"""Test frequency parsing with different formats."""
# Scientific notation
assert parse_frequency("915e6") == 915e6
assert parse_frequency("2.4e9") == 2.4e9
assert parse_frequency("433e6") == 433e6
# With suffixes
assert parse_frequency("915M") == 915e6
assert parse_frequency("2.4G") == 2.4e9
assert parse_frequency("433M") == 433e6
assert parse_frequency("100k") == 100e3
assert parse_frequency("100K") == 100e3
# Plain numbers
assert parse_frequency("915000000") == 915e6
assert parse_frequency("2400000000") == 2.4e9
# Edge cases
assert parse_frequency("0.915G") == 915e6
assert parse_frequency("915.0M") == 915e6
def test_format_frequency():
"""Test frequency formatting."""
assert format_frequency(915e6) == "915.00 MHz"
assert format_frequency(2.4e9) == "2.40 GHz"
assert format_frequency(433e6) == "433.00 MHz"
assert format_frequency(100e3) == "100.00 kHz"
assert format_frequency(1e3) == "1.00 kHz"
assert format_frequency(500) == "500.00 Hz"
def test_format_sample_rate():
"""Test sample rate formatting."""
assert format_sample_rate(20e6) == "20.00 MS/s"
assert format_sample_rate(2e6) == "2.00 MS/s"
assert format_sample_rate(100e3) == "100.00 kS/s"
assert format_sample_rate(1e3) == "1.00 kS/s"
assert format_sample_rate(500) == "500.00 S/s"