From d1dcb71d0c3df54abc5a9fc953a341701f25cd9a Mon Sep 17 00:00:00 2001 From: Zerrant2 Date: Thu, 18 Dec 2025 01:52:00 +0300 Subject: [PATCH] Add new test --- data/data.xml | 13 ++++++++++ src/XMLDataReader.py | 29 ++++++++++++++++++++++ test/test_XMLDataReader.py | 50 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 92 insertions(+) create mode 100644 data/data.xml create mode 100644 src/XMLDataReader.py create mode 100644 test/test_XMLDataReader.py diff --git a/data/data.xml b/data/data.xml new file mode 100644 index 0000000..0f93c59 --- /dev/null +++ b/data/data.xml @@ -0,0 +1,13 @@ + + + + 67 + 100 + 91 + + + 78 + 87 + 61 + + \ No newline at end of file diff --git a/src/XMLDataReader.py b/src/XMLDataReader.py new file mode 100644 index 0000000..d4e9015 --- /dev/null +++ b/src/XMLDataReader.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +import xml.etree.ElementTree as ET +from src.Types import DataType +from src.DataReader import DataReader + + +class XMLDataReader(DataReader): + def __init__(self) -> None: + self.key: str = "" + self.students: DataType = {} + + def read(self, path: str) -> DataType: + # Открываем и парсим XML файл + tree = ET.parse(path) + root = tree.getroot() + + # Проходим по всем элементам + for student_element in root.findall("student"): + self.key = student_element.get("name") + self.students[self.key] = [] + + # Проходим по всем предметам внутри студента + for subject_element in student_element.findall("subject"): + subj_name = subject_element.get("name") + # Текст внутри тега может содержать пробелы, чистим его + score = int(subject_element.text.strip()) + self.students[self.key].append((subj_name, score)) + + return self.students \ No newline at end of file diff --git a/test/test_XMLDataReader.py b/test/test_XMLDataReader.py new file mode 100644 index 0000000..1d315a0 --- /dev/null +++ b/test/test_XMLDataReader.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +import pytest +from src.Types import DataType +from src.XMLDataReader import XMLDataReader + + +class TestXMLDataReader: + + @pytest.fixture() + def file_and_data_content(self) -> tuple[str, DataType]: + # Данные для теста + xml_content = """ + + + 67 + 100 + 91 + + + 78 + 87 + 61 + +""" + + data = { + "Иванов Иван Иванович": [ + ("математика", 67), ("литература", 100), ("программирование", 91) + ], + "Петров Петр Петрович": [ + ("математика", 78), ("химия", 87), ("социология", 61) + ] + } + return xml_content, data + + @pytest.fixture() + def filepath_and_data(self, file_and_data_content: tuple[str, DataType], + tmpdir) -> tuple[str, DataType]: + # Создаем файл + p = tmpdir.mkdir("datadir").join("my_data.xml") + + # Пишем в бинарном режиме, чтобы не было проблем с кодировкой в Windows + p.write(file_and_data_content[0].encode('utf-8'), mode='wb') + + return str(p), file_and_data_content[1] + + def test_read(self, filepath_and_data: tuple[str, DataType]) -> None: + # Проверяем чтение + file_content = XMLDataReader().read(filepath_and_data[0]) + assert file_content == filepath_and_data[1] \ No newline at end of file