def test_parse_char_metrics(): fh = BytesIO(AFM_TEST_DATA) afm._parse_header(fh) # position metrics = afm._parse_char_metrics(fh) assert metrics == ( {0: (250.0, 'space', [0, 0, 0, 0]), 42: (1141.0, 'foo', [40, 60, 800, 360]), 99: (583.0, 'bar', [40, -10, 543, 210]), }, {'space': (250.0, [0, 0, 0, 0]), 'foo': (1141.0, [40, 60, 800, 360]), 'bar': (583.0, [40, -10, 543, 210]), })
def test_parse_header(): fh = BytesIO(AFM_TEST_DATA) header = afm._parse_header(fh) assert header == { b'StartFontMetrics': 2.0, b'FontName': 'MyFont-Bold', b'EncodingScheme': 'FontSpecific', b'FullName': 'My Font Bold', b'FamilyName': 'Test Fonts', b'Weight': 'Bold', b'ItalicAngle': 0.0, b'IsFixedPitch': False, b'UnderlinePosition': -100, b'UnderlineThickness': 50, b'Version': '001.000', b'Notice': 'Copyright (c) 2017 No one.', b'FontBBox': [0, -321, 1234, 369], b'StartCharMetrics': 3, }
def test_malformed_header(afm_data, caplog): fh = BytesIO(afm_data) with caplog.at_level(logging.ERROR): afm._parse_header(fh) assert len(caplog.records) == 1
def test_bad_afm(afm_data): fh = BytesIO(afm_data) with pytest.raises(RuntimeError): afm._parse_header(fh)