1import unittest
2import collections
3
4
5class TestInfo(unittest.TestCase):
6
7    def getInfo_generic(self):
8        info, _ = self.objectGenerator("info")
9        info.unitsPerEm = 1000
10        return info
11
12    # ----------
13    # Dimensions
14    # ----------
15
16    def test_get_unitsPerEm(self):
17        info = self.getInfo_generic()
18        self.assertEqual(
19            info.unitsPerEm,
20            1000
21        )
22
23    def test_set_valid_unitsPerEm_int(self):
24        info = self.getInfo_generic()
25        info.unitsPerEm = 2000
26        self.assertEqual(
27            info.unitsPerEm,
28            2000
29        )
30
31    def test_set_valid_unitsPerEm_float(self):
32        info = self.getInfo_generic()
33        info.unitsPerEm = 2000.1
34        self.assertEqual(
35            info.unitsPerEm,
36            2000.1
37        )
38
39    def test_set_invalid_unitsPerEm_negative(self):
40        info = self.getInfo_generic()
41        with self.assertRaises(ValueError):
42            info.unitsPerEm = -1000
43
44    def test_set_invalid_unitsPerEm_string(self):
45        info = self.getInfo_generic()
46        with self.assertRaises(ValueError):
47            info.unitsPerEm = "abc"
48
49    # ----
50    # Hash
51    # ----
52
53    def test_hash(self):
54        info = self.getInfo_generic()
55        self.assertEqual(
56            isinstance(info, collections.Hashable),
57            True
58        )
59
60    # --------
61    # Equality
62    # --------
63
64    def test_object_equal_self(self):
65        info_one = self.getInfo_generic()
66        self.assertEqual(
67            info_one,
68            info_one
69        )
70
71    def test_object_not_equal_other(self):
72        info_one = self.getInfo_generic()
73        info_two = self.getInfo_generic()
74        self.assertNotEqual(
75            info_one,
76            info_two
77        )
78
79    def test_object_equal_self_variable_assignment(self):
80        info_one = self.getInfo_generic()
81        a = info_one
82        self.assertEqual(
83            info_one,
84            a
85        )
86
87    def test_object_not_equal_other_variable_assignment(self):
88        info_one = self.getInfo_generic()
89        info_two = self.getInfo_generic()
90        a = info_one
91        self.assertNotEqual(
92            info_two,
93            a
94        )
95
96    # -----
97    # Round
98    # -----
99
100    def test_round_unitsPerEm(self):
101        info = self.getInfo_generic()
102        info.unitsPerEm = 2000.125
103        info.round()
104        self.assertEqual(
105            info.unitsPerEm,
106            2000
107        )
108
109    # -------------
110    # Interpolation
111    # -------------
112
113    def test_interpolate_unitsPerEm_without_rounding(self):
114        interpolated_font, _ = self.objectGenerator("font")
115        font_min, _ = self.objectGenerator("font")
116        font_max, _ = self.objectGenerator("font")
117        font_min.info.unitsPerEm = 1000
118        font_max.info.unitsPerEm = 2000
119        interpolated_font.info.interpolate(0.5154, font_min.info, font_max.info, round=False)
120        self.assertEqual(
121            interpolated_font.info.unitsPerEm,
122            1515.4
123        )
124
125    def test_interpolate_unitsPerEm_with_rounding(self):
126        interpolated_font, _ = self.objectGenerator("font")
127        font_min, _ = self.objectGenerator("font")
128        font_max, _ = self.objectGenerator("font")
129        font_min.info.unitsPerEm = 1000
130        font_max.info.unitsPerEm = 2000
131        interpolated_font.info.interpolate(0.5154, font_min.info, font_max.info, round=True)
132        self.assertEqual(
133            interpolated_font.info.unitsPerEm,
134            1515
135        )
136