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