mirror of
https://github.com/dw-0/kiauh.git
synced 2025-12-25 00:33:37 +05:00
Squashed 'kiauh/core/submodules/simple_config_parser/' content from commit 188dd1f
git-subtree-dir: kiauh/core/submodules/simple_config_parser git-subtree-split: 188dd1ffd80bf72a2dc6075147ddc9339b059c4b
This commit is contained in:
6
tests/features/line_parsing/data/case_parse_comment.py
Normal file
6
tests/features/line_parsing/data/case_parse_comment.py
Normal file
@@ -0,0 +1,6 @@
|
||||
testcases = [
|
||||
"# comment # 1",
|
||||
"; comment # 2",
|
||||
" ; indented comment",
|
||||
" # another indented comment",
|
||||
]
|
||||
19
tests/features/line_parsing/data/case_parse_option.py
Normal file
19
tests/features/line_parsing/data/case_parse_option.py
Normal file
@@ -0,0 +1,19 @@
|
||||
testcases = [
|
||||
("option: value", "option", "value"),
|
||||
("option : value", "option", "value"),
|
||||
("option :value", "option", "value"),
|
||||
("option= value", "option", "value"),
|
||||
("option = value", "option", "value"),
|
||||
("option =value", "option", "value"),
|
||||
("option: value\n", "option", "value"),
|
||||
("option: value # inline comment", "option", "value"),
|
||||
("option: value # inline comment\n", "option", "value"),
|
||||
("description: homing!", "description", "homing!"),
|
||||
("description: inline macro :-)", "description", "inline macro :-)"),
|
||||
("path: %GCODES_DIR%", "path", "%GCODES_DIR%"),
|
||||
(
|
||||
"serial = /dev/serial/by-id/<your-mcu-id>",
|
||||
"serial",
|
||||
"/dev/serial/by-id/<your-mcu-id>",
|
||||
),
|
||||
]
|
||||
6
tests/features/line_parsing/data/case_parse_section.py
Normal file
6
tests/features/line_parsing/data/case_parse_section.py
Normal file
@@ -0,0 +1,6 @@
|
||||
testcases = [
|
||||
("[test_section]", "test_section"),
|
||||
("[test_section two]", "test_section two"),
|
||||
("[section1] # inline comment", "section1"),
|
||||
("[section2] ; second comment", "section2"),
|
||||
]
|
||||
92
tests/features/line_parsing/test_line_parsing.py
Normal file
92
tests/features/line_parsing/test_line_parsing.py
Normal file
@@ -0,0 +1,92 @@
|
||||
import pytest
|
||||
from data.case_parse_comment import testcases as case_parse_comment
|
||||
from data.case_parse_option import testcases as case_parse_option
|
||||
from data.case_parse_section import testcases as case_parse_section
|
||||
|
||||
from src.simple_config_parser.simple_config_parser import (
|
||||
Option,
|
||||
SimpleConfigParser,
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def parser():
|
||||
return SimpleConfigParser()
|
||||
|
||||
|
||||
class TestLineParsing:
|
||||
@pytest.mark.parametrize("given, expected", [*case_parse_section])
|
||||
def test_parse_section(self, parser, given, expected):
|
||||
parser._parse_section(given)
|
||||
|
||||
# Check that the internal state of the parser is correct
|
||||
assert parser.section_name == expected
|
||||
assert parser.in_option_block is False
|
||||
assert parser._all_sections == [expected]
|
||||
assert parser._config[expected]["_raw"] == given
|
||||
assert parser._config[expected]["body"] == []
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"given, expected_option, expected_value", [*case_parse_option]
|
||||
)
|
||||
def test_parse_option(self, parser, given, expected_option, expected_value):
|
||||
section_name = "test_section"
|
||||
parser.section_name = section_name
|
||||
parser._parse_option(given)
|
||||
|
||||
# Check that the internal state of the parser is correct
|
||||
assert parser.section_name == section_name
|
||||
assert parser.in_option_block is False
|
||||
assert parser._all_options[section_name][expected_option] == expected_value
|
||||
|
||||
section_option = parser._config[section_name]["body"][0]
|
||||
assert section_option["option"] == expected_option
|
||||
assert section_option["value"] == expected_value
|
||||
assert section_option["_raw"] == given
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"option, next_line",
|
||||
[("gcode", "next line"), ("gcode", " {{% some jinja template %}}")],
|
||||
)
|
||||
def test_parse_multiline_option(self, parser, option, next_line):
|
||||
parser.section_name = "dummy_section"
|
||||
parser.in_option_block = True
|
||||
parser._add_option_to_section_body(option, "", option)
|
||||
parser._parse_multiline_option(option, next_line)
|
||||
cleaned_next_line = next_line.strip().strip("\n")
|
||||
|
||||
assert parser._all_options[parser.section_name] is not None
|
||||
assert parser._all_options[parser.section_name][option] == [cleaned_next_line]
|
||||
|
||||
expected_option: Option = {
|
||||
"is_multiline": True,
|
||||
"option": option,
|
||||
"value": [cleaned_next_line],
|
||||
"_raw": option,
|
||||
"_raw_value": [next_line],
|
||||
}
|
||||
assert parser._config[parser.section_name]["body"] == [expected_option]
|
||||
|
||||
@pytest.mark.parametrize("given", [*case_parse_comment])
|
||||
def test_parse_comment(self, parser, given):
|
||||
parser.section_name = "dummy_section"
|
||||
parser._parse_comment(given)
|
||||
|
||||
# internal state checks after parsing
|
||||
assert parser.in_option_block is False
|
||||
|
||||
expected_option = {
|
||||
"is_multiline": False,
|
||||
"_raw": given,
|
||||
"option": "",
|
||||
"value": "",
|
||||
}
|
||||
assert parser._config[parser.section_name]["body"] == [expected_option]
|
||||
|
||||
@pytest.mark.parametrize("given", ["# header line", "; another header line"])
|
||||
def test_parse_header_comment(self, parser, given):
|
||||
parser.section_name = ""
|
||||
parser._parse_comment(given)
|
||||
|
||||
assert parser.in_option_block is False
|
||||
assert parser._header == [given]
|
||||
Reference in New Issue
Block a user