2 # SPDX-FileCopyrightText: 2019-2022 Blender Foundation
4 # SPDX-License-Identifier: GPL-2.0-or-later
6 # XXX Not really nice, but that hack is needed to allow execution of that test
7 # from both automated CTest and by directly running the file manually.
8 if __name__
== '__main__':
9 from svg_util
import (parse_array_of_floats
, read_float
, parse_coord
,)
11 from .svg_util
import (parse_array_of_floats
, read_float
, parse_coord
,)
14 class ParseArrayOfFloatsTest(unittest
.TestCase
):
16 self
.assertEqual(parse_array_of_floats(""), [])
17 self
.assertEqual(parse_array_of_floats(" "), [])
19 def test_single_value(self
):
20 self
.assertEqual(parse_array_of_floats("123"), [123])
21 self
.assertEqual(parse_array_of_floats(" \t 123 \t"), [123])
23 def test_single_value_exponent(self
):
24 self
.assertEqual(parse_array_of_floats("12e+3"), [12000])
25 self
.assertEqual(parse_array_of_floats("12e-3"), [0.012])
27 def test_space_separated_values(self
):
28 self
.assertEqual(parse_array_of_floats("123 45 6 89"),
30 self
.assertEqual(parse_array_of_floats(" 123 45 6 89 "),
33 def test_comma_separated_values(self
):
34 self
.assertEqual(parse_array_of_floats("123,45,6,89"),
36 self
.assertEqual(parse_array_of_floats(" 123,45,6,89 "),
39 def test_mixed_separated_values(self
):
40 self
.assertEqual(parse_array_of_floats("123,45 6,89"),
42 self
.assertEqual(parse_array_of_floats(" 123 45,6,89 "),
45 def test_omitted_value_with_comma(self
):
46 self
.assertEqual(parse_array_of_floats("1,,3"), [1, 0, 3])
47 self
.assertEqual(parse_array_of_floats(",,3"), [0, 0, 3])
49 def test_sign_as_separator(self
):
50 self
.assertEqual(parse_array_of_floats("1-3"), [1, -3])
51 self
.assertEqual(parse_array_of_floats("1+3"), [1, 3])
53 def test_all_commas(self
):
54 self
.assertEqual(parse_array_of_floats(",,,"), [0, 0, 0, 0])
56 def test_value_with_decimal_separator(self
):
57 self
.assertEqual(parse_array_of_floats("3.5"), [3.5])
59 def test_comma_separated_values_with_decimal_separator(self
):
60 self
.assertEqual(parse_array_of_floats("2.75,8.5"), [2.75, 8.5])
62 def test_missing_decimal(self
):
63 self
.assertEqual(parse_array_of_floats(".92"), [0.92])
64 self
.assertEqual(parse_array_of_floats(".92e+1"), [9.2])
66 self
.assertEqual(parse_array_of_floats("-.92"), [-0.92])
67 self
.assertEqual(parse_array_of_floats("-.92e+1"), [-9.2])
70 class ReadFloatTest(unittest
.TestCase
):
72 value
, endptr
= read_float("", 0)
73 self
.assertEqual(value
, "0")
74 self
.assertEqual(endptr
, 0)
76 def test_empty_spaces(self
):
77 value
, endptr
= read_float(" ", 0)
78 self
.assertEqual(value
, "0")
79 self
.assertEqual(endptr
, 4)
81 def test_single_value(self
):
82 value
, endptr
= read_float("1.2", 0)
83 self
.assertEqual(value
, "1.2")
84 self
.assertEqual(endptr
, 3)
86 def test_scientific_value(self
):
87 value
, endptr
= read_float("1.2e+3", 0)
88 self
.assertEqual(value
, "1.2e+3")
89 self
.assertEqual(endptr
, 6)
91 def test_scientific_value_no_sign(self
):
92 value
, endptr
= read_float("1.2e3", 0)
93 self
.assertEqual(value
, "1.2e3")
94 self
.assertEqual(endptr
, 5)
96 def test_middle(self
):
97 value
, endptr
= read_float("1.2 3.4 5.6", 3)
98 self
.assertEqual(value
, "3.4")
99 self
.assertEqual(endptr
, 8)
101 def test_comma(self
):
102 value
, endptr
= read_float("1.2 ,,3.4 5.6", 3)
103 self
.assertEqual(value
, "3.4")
104 self
.assertEqual(endptr
, 10)
106 def test_not_a_number(self
):
107 # TODO(sergey): Make this catch more concrete.
108 with self
.assertRaises(Exception):
109 read_float("1.2eV", 3)
111 def test_missing_fractional(self
):
112 value
, endptr
= read_float("1.", 0)
113 self
.assertEqual(value
, "1.")
114 self
.assertEqual(endptr
, 2)
116 value
, endptr
= read_float("2. 3", 0)
117 self
.assertEqual(value
, "2.")
118 self
.assertEqual(endptr
, 2)
120 def test_missing_decimal(self
):
121 value
, endptr
= read_float(".92", 0)
122 self
.assertEqual(value
, ".92")
123 self
.assertEqual(endptr
, 3)
125 value
, endptr
= read_float("-.92", 0)
126 self
.assertEqual(value
, "-.92")
127 self
.assertEqual(endptr
, 4)
129 value
, endptr
= read_float(".92e+3", 0)
130 self
.assertEqual(value
, ".92e+3")
131 self
.assertEqual(endptr
, 6)
133 value
, endptr
= read_float("-.92e+3", 0)
134 self
.assertEqual(value
, "-.92e+3")
135 self
.assertEqual(endptr
, 7)
137 # TODO(sergey): Make these catch more concrete.
138 with self
.assertRaises(Exception):
140 with self
.assertRaises(Exception):
141 read_float(".e+1", 0)
144 class ParseCoordTest(unittest
.TestCase
):
145 def test_empty(self
):
146 self
.assertEqual(parse_coord("", 200), 0)
148 def test_empty_spaces(self
):
149 self
.assertEqual(parse_coord(" ", 200), 0)
151 def test_no_units(self
):
152 self
.assertEqual(parse_coord("1.2", 200), 1.2)
154 def test_unit_cm(self
):
155 self
.assertAlmostEqual(parse_coord("1.2cm", 200), 42.51968503937008)
157 def test_unit_ex(self
):
158 self
.assertAlmostEqual(parse_coord("1.2ex", 200), 1.2)
160 def test_unit_percentage(self
):
161 self
.assertEqual(parse_coord("1.2%", 200), 2.4)
164 if __name__
== '__main__':
165 unittest
.main(verbosity
=2)