119 lines
3.6 KiB
Python
119 lines
3.6 KiB
Python
"""Tests for common CLI utilities."""
|
|
|
|
import os
|
|
import tempfile
|
|
|
|
import pytest
|
|
import yaml
|
|
|
|
from 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"
|