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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
#!/usr/bin/python
"""Test general health of the fonts."""
import glob
import unittest
from fontTools import ttLib
from nototools import coverage
from nototools import font_data
def load_fonts():
"""Load all major fonts."""
all_font_files = (glob.glob('out/RobotoTTF/*.ttf')
+ glob.glob('out/RobotoCondensedTTF/*.ttf'))
all_fonts = [ttLib.TTFont(font) for font in all_font_files]
assert len(all_font_files) == 18
return all_font_files, all_fonts
class TestItalicAngle(unittest.TestCase):
"""Test the italic angle of fonts."""
def setUp(self):
_, self.fonts = load_fonts()
def test_italic_angle(self):
"""Tests the italic angle of fonts to be correct."""
for font in self.fonts:
post_table = font['post']
if 'Italic' in font_data.font_name(font):
expected_angle = -12.0
else:
expected_angle = 0.0
self.assertEqual(post_table.italicAngle, expected_angle)
class TestHeadTable(unittest.TestCase):
"""Test various things in the head table."""
def setUp(self):
_, self.fonts = load_fonts()
def test_mac_style(self):
"""Tests the macStyle of the fonts to be correct.
Bug: https://code.google.com/a/google.com/p/roboto/issues/detail?id=8
"""
for font in self.fonts:
font_name = font_data.font_name(font)
bold = ('Bold' in font_name) or ('Black' in font_name)
italic = 'Italic' in font_name
expected_mac_style = (italic << 1) | bold
self.assertEqual(font['head'].macStyle, expected_mac_style)
class TestDigitWidths(unittest.TestCase):
"""Tests the width of digits."""
def setUp(self):
_, self.fonts = load_fonts()
self.digits = [
'zero', 'one', 'two', 'three', 'four',
'five', 'six', 'seven', 'eight', 'nine']
def test_digit_widths(self):
"""Tests all decimal digits to make sure they have the same width."""
for font in self.fonts:
hmtx_table = font['hmtx']
widths = [hmtx_table[digit][0] for digit in self.digits]
self.assertEqual(len(set(widths)), 1)
class TestCharacterCoverage(unittest.TestCase):
"""Tests character coverage."""
def setUp(self):
_, self.fonts = load_fonts()
def test_lack_of_unassigned_chars(self):
"""Tests that unassigned characters are not in the fonts."""
for font in self.fonts:
charset = coverage.character_set(font)
self.assertNotIn(0x2072, charset)
self.assertNotIn(0x2073, charset)
self.assertNotIn(0x208F, charset)
def test_inclusion_of_sound_recording_copyright(self):
"""Tests that sound recording copyright symbol is in the fonts."""
for font in self.fonts:
charset = coverage.character_set(font)
self.assertIn(
0x2117, charset, # SOUND RECORDING COPYRIGHT
'U+2117 not found in %s.' % font_data.font_name(font))
if __name__ == '__main__':
unittest.main()
|