1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
# 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 Optional
import common
class Operation(common.Operation):
"""
Dummy operation.
Used to test the retry feature.
"""
def __init__(self, timeouts: int) -> None:
self.timeouts = timeouts
async def run(self) -> Optional[common.Error]:
if self.timeouts > 0:
self.timeouts -= 1
return common.OperationTimedOut("Operation timed out")
return None
class TestOperation(unittest.IsolatedAsyncioTestCase):
async def test_run_and_retry(self) -> None:
"""If an operation times out, we try again."""
async def run_and_retry(timeouts: int, retries: int) -> Optional[common.Error]:
operation = Operation(timeouts)
return await operation.run_and_retry(retries=retries, delay=0, logger=None)
self.assertIsNone(await run_and_retry(timeouts=0, retries=0))
self.assertIsInstance(await run_and_retry(timeouts=1, retries=0), common.OperationTimedOut)
self.assertIsNone(await run_and_retry(timeouts=1, retries=1))
self.assertIsInstance(await run_and_retry(timeouts=2, retries=1), common.OperationTimedOut)
self.assertIsNone(await run_and_retry(timeouts=2, retries=2))
class TestXmlParser(unittest.TestCase):
def test_decimal_attribute(self) -> None:
"""We can parse decimal attributes"""
element = common.XmlParser(ET.fromstring("""<Circle radius="1.5"/>"""))
value = element.decimal_attribute("radius")
self.assertEqual(value, decimal.Decimal("1.5"))
def test_decimal_attrubute_with_comma(self) -> None:
"""We can parse decimal attributes with commas"""
element = common.XmlParser(ET.fromstring("""<Line length="3,4"/>"""))
value = element.decimal_attribute("length")
self.assertEqual(value, decimal.Decimal("3.4"))
|