# Copyright (C) 2023 The Qt Company Ltd.
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import decimal
import unittest
import xml.etree.ElementTree as ET
from typing import cast
import common
import qt
class TestResultFileParser(unittest.TestCase):
def test_parse_test_case_result(self) -> None:
"""We can parse test case results"""
element = ET.fromstring(
"""
"""
)
result = qt.ResultFileParser.parse_test_case_result(common.XmlParser(element))
self.assertIsInstance(result, qt.TestCaseResult)
result = cast(qt.TestCaseResult, result)
self.assertEqual(result.name, "editor")
self.assertEqual(result.duration, decimal.Decimal("123.4"))
self.assertEqual(len(result.test_function_results), 2)
self.assertIsInstance(result.test_function_results[0], qt.TestFunctionResult)
self.assertIsInstance(result.test_function_results[1], qt.TestFunctionResult)
def test_parse_test_function_result(self) -> None:
"""We can parse test function results"""
element = ET.fromstring(
"""
nothing to sort
"""
)
result = qt.ResultFileParser.parse_test_function_result(common.XmlParser(element))
self.assertIsInstance(result, qt.TestFunctionResult)
result = cast(qt.TestFunctionResult, result)
self.assertEqual(result.name, "sort")
self.assertEqual(len(result.benchmark_results), 1)
self.assertIsInstance(result.benchmark_results[0], qt.BenchmarkResult)
self.assertEqual(len(result.incidents), 1)
self.assertIsInstance(result.incidents[0], qt.Incident)
self.assertEqual(len(result.messages), 1)
self.assertIsInstance(result.messages[0], qt.Message)
def test_parse_benchmark_result(self) -> None:
"""We can parse benchmark results"""
element = ET.fromstring(
""""""
)
result = qt.ResultFileParser.parse_benchmark_result(common.XmlParser(element))
self.assertIsInstance(result, qt.BenchmarkResult)
result = cast(qt.BenchmarkResult, result)
self.assertEqual(result.metric, "seconds")
self.assertEqual(result.data_tag, None)
self.assertEqual(result.value, decimal.Decimal("1.23"))
self.assertEqual(result.iterations, 128)
def test_parse_benchmark_result_with_data_tag(self) -> None:
"""We can parse benchmark results with data tags"""
element = ET.fromstring(
""""""
)
result = qt.ResultFileParser.parse_benchmark_result(common.XmlParser(element))
self.assertIsInstance(result, qt.BenchmarkResult)
result = cast(qt.BenchmarkResult, result)
self.assertEqual(result.metric, "seconds")
self.assertEqual(result.data_tag, "long list")
self.assertEqual(result.value, decimal.Decimal("4.56"))
self.assertEqual(result.iterations, 256)
def test_parse_incident(self) -> None:
"""We can parse incidents"""
element = ET.fromstring("""""")
incident = qt.ResultFileParser.parse_incident(common.XmlParser(element))
self.assertIsInstance(incident, qt.Incident)
incident = cast(qt.Incident, incident)
self.assertEqual(incident.incident_type, "pass")
self.assertEqual(incident.data_tag, None)
def test_parse_incident_with_data_tag(self) -> None:
"""We can parse incidents with data tags"""
element = ET.fromstring(
"""
"""
)
incident = qt.ResultFileParser.parse_incident(common.XmlParser(element))
self.assertIsInstance(incident, qt.Incident)
incident = cast(qt.Incident, incident)
self.assertEqual(incident.incident_type, "fail")
self.assertEqual(incident.data_tag, "guilty tag")
def test_parse_message(self) -> None:
"""We can parse messages"""
element = ET.fromstring(
"""
something happened
"""
)
message = qt.ResultFileParser.parse_message(common.XmlParser(element))
self.assertIsInstance(message, qt.Message)
message = cast(qt.Message, message)
self.assertEqual(message.message_type, "qwarn")
self.assertEqual(message.description, "something happened")
self.assertEqual(message.data_tag, None)
def test_parse_message_with_data_tag(self) -> None:
"""We can parse messages with data tags"""
element = ET.fromstring(
"""
something failed
"""
)
message = qt.ResultFileParser.parse_message(common.XmlParser(element))
self.assertIsInstance(message, qt.Message)
message = cast(qt.Message, message)
self.assertEqual(message.message_type, "qfatal")
self.assertEqual(message.description, "something failed")
self.assertEqual(message.data_tag, "guilty tag")