Files
confdoc/tests/test_parsers.py

135 lines
4.5 KiB
Python

import pytest
from confdoc.parsers.json_parser import JsonParser
from confdoc.parsers.yaml_parser import YamlParser
from confdoc.parsers.toml_parser import TomlParser
from confdoc.parsers.factory import ConfigParserFactory
class TestJsonParser:
def test_parse_valid_json(self):
parser = JsonParser()
content = '{"name": "test", "value": 123}'
result = parser.parse(content)
assert result == {"name": "test", "value": 123}
def test_parse_nested_json(self):
parser = JsonParser()
content = '{"app": {"name": "test", "version": "1.0"}}'
result = parser.parse(content)
assert result == {"app": {"name": "test", "version": "1.0"}}
def test_parse_array_json(self):
parser = JsonParser()
content = '[1, 2, 3, "test"]'
result = parser.parse(content)
assert result == [1, 2, 3, "test"]
def test_dump_json(self):
parser = JsonParser()
data = {"name": "test", "value": 123}
result = parser.dump(data)
assert '"name": "test"' in result
assert '"value": 123' in result
def test_get_format(self):
parser = JsonParser()
assert parser.get_format() == "json"
class TestYamlParser:
def test_parse_valid_yaml(self):
parser = YamlParser()
content = "name: test\nvalue: 123"
result = parser.parse(content)
assert result == {"name": "test", "value": 123}
def test_parse_nested_yaml(self):
parser = YamlParser()
content = "app:\n name: test\n version: '1.0'"
result = parser.parse(content)
assert result == {"app": {"name": "test", "version": "1.0"}}
def test_parse_list_yaml(self):
parser = YamlParser()
content = "items:\n - item1\n - item2"
result = parser.parse(content)
assert result == {"items": ["item1", "item2"]}
def test_get_format(self):
parser = YamlParser()
assert parser.get_format() == "yaml"
class TestTomlParser:
def test_parse_valid_toml(self):
parser = TomlParser()
content = 'name = "test"\nvalue = 123'
result = parser.parse(content)
assert result["name"] == "test"
assert result["value"] == 123
def test_parse_table_toml(self):
parser = TomlParser()
content = '[app]\nname = "test"\nversion = "1.0"'
result = parser.parse(content)
assert result["app"]["name"] == "test"
assert result["app"]["version"] == "1.0"
def test_get_format(self):
parser = TomlParser()
assert parser.get_format() == "toml"
class TestConfigParserFactory:
def test_get_json_parser(self):
factory = ConfigParserFactory()
parser = factory.get_parser("json")
assert isinstance(parser, JsonParser)
def test_get_yaml_parser(self):
factory = ConfigParserFactory()
parser = factory.get_parser("yaml")
assert isinstance(parser, YamlParser)
def test_get_toml_parser(self):
factory = ConfigParserFactory()
parser = factory.get_parser("toml")
assert isinstance(parser, TomlParser)
def test_get_parser_for_json_file(self):
factory = ConfigParserFactory()
parser = factory.get_parser_for_file("config.json")
assert isinstance(parser, JsonParser)
def test_get_parser_for_yaml_file(self):
factory = ConfigParserFactory()
parser = factory.get_parser_for_file("config.yaml")
assert isinstance(parser, YamlParser)
def test_get_parser_for_yml_file(self):
factory = ConfigParserFactory()
parser = factory.get_parser_for_file("config.yml")
assert isinstance(parser, YamlParser)
def test_get_parser_for_toml_file(self):
factory = ConfigParserFactory()
parser = factory.get_parser_for_file("config.toml")
assert isinstance(parser, TomlParser)
def test_invalid_format_raises_error(self):
factory = ConfigParserFactory()
with pytest.raises(ValueError):
factory.get_parser("invalid")
def test_detect_json_format(self):
factory = ConfigParserFactory()
assert factory.detect_format('{"key": "value"}') == "json"
def test_detect_yaml_format(self):
factory = ConfigParserFactory()
assert factory.detect_format("key: value") == "yaml"
def test_detect_toml_format(self):
factory = ConfigParserFactory()
assert factory.detect_format('key = "value"') == "toml"