1import os 2import shutil 3import unittest 4import tempfile 5from io import open 6from fontTools.ufoLib import UFOReader, UFOWriter, UFOLibError 7from fontTools.ufoLib import plistlib 8from .testSupport import fontInfoVersion2 9 10 11class TestInfoObject: 12 pass 13 14 15class ReadFontInfoVersion2TestCase(unittest.TestCase): 16 def setUp(self): 17 self.dstDir = tempfile.mktemp() 18 os.mkdir(self.dstDir) 19 metaInfo = {"creator": "test", "formatVersion": 2} 20 path = os.path.join(self.dstDir, "metainfo.plist") 21 with open(path, "wb") as f: 22 plistlib.dump(metaInfo, f) 23 24 def tearDown(self): 25 shutil.rmtree(self.dstDir) 26 27 def _writeInfoToPlist(self, info): 28 path = os.path.join(self.dstDir, "fontinfo.plist") 29 with open(path, "wb") as f: 30 plistlib.dump(info, f) 31 32 def testRead(self): 33 originalData = dict(fontInfoVersion2) 34 self._writeInfoToPlist(originalData) 35 infoObject = TestInfoObject() 36 reader = UFOReader(self.dstDir, validate=True) 37 reader.readInfo(infoObject) 38 readData = {} 39 for attr in list(fontInfoVersion2.keys()): 40 readData[attr] = getattr(infoObject, attr) 41 self.assertEqual(originalData, readData) 42 43 def testGenericRead(self): 44 # familyName 45 info = dict(fontInfoVersion2) 46 info["familyName"] = 123 47 self._writeInfoToPlist(info) 48 reader = UFOReader(self.dstDir, validate=True) 49 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 50 # styleName 51 info = dict(fontInfoVersion2) 52 info["styleName"] = 123 53 self._writeInfoToPlist(info) 54 reader = UFOReader(self.dstDir, validate=True) 55 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 56 # styleMapFamilyName 57 info = dict(fontInfoVersion2) 58 info["styleMapFamilyName"] = 123 59 self._writeInfoToPlist(info) 60 reader = UFOReader(self.dstDir, validate=True) 61 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 62 # styleMapStyleName 63 ## not a string 64 info = dict(fontInfoVersion2) 65 info["styleMapStyleName"] = 123 66 self._writeInfoToPlist(info) 67 reader = UFOReader(self.dstDir, validate=True) 68 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 69 ## out of range 70 info = dict(fontInfoVersion2) 71 info["styleMapStyleName"] = "REGULAR" 72 self._writeInfoToPlist(info) 73 reader = UFOReader(self.dstDir, validate=True) 74 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 75 # versionMajor 76 info = dict(fontInfoVersion2) 77 info["versionMajor"] = "1" 78 self._writeInfoToPlist(info) 79 reader = UFOReader(self.dstDir, validate=True) 80 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 81 # versionMinor 82 info = dict(fontInfoVersion2) 83 info["versionMinor"] = "0" 84 self._writeInfoToPlist(info) 85 reader = UFOReader(self.dstDir, validate=True) 86 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 87 # copyright 88 info = dict(fontInfoVersion2) 89 info["copyright"] = 123 90 self._writeInfoToPlist(info) 91 reader = UFOReader(self.dstDir, validate=True) 92 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 93 # trademark 94 info = dict(fontInfoVersion2) 95 info["trademark"] = 123 96 self._writeInfoToPlist(info) 97 reader = UFOReader(self.dstDir, validate=True) 98 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 99 # unitsPerEm 100 info = dict(fontInfoVersion2) 101 info["unitsPerEm"] = "abc" 102 self._writeInfoToPlist(info) 103 reader = UFOReader(self.dstDir, validate=True) 104 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 105 # descender 106 info = dict(fontInfoVersion2) 107 info["descender"] = "abc" 108 self._writeInfoToPlist(info) 109 reader = UFOReader(self.dstDir, validate=True) 110 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 111 # xHeight 112 info = dict(fontInfoVersion2) 113 info["xHeight"] = "abc" 114 self._writeInfoToPlist(info) 115 reader = UFOReader(self.dstDir, validate=True) 116 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 117 # capHeight 118 info = dict(fontInfoVersion2) 119 info["capHeight"] = "abc" 120 self._writeInfoToPlist(info) 121 reader = UFOReader(self.dstDir, validate=True) 122 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 123 # ascender 124 info = dict(fontInfoVersion2) 125 info["ascender"] = "abc" 126 self._writeInfoToPlist(info) 127 reader = UFOReader(self.dstDir, validate=True) 128 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 129 # italicAngle 130 info = dict(fontInfoVersion2) 131 info["italicAngle"] = "abc" 132 self._writeInfoToPlist(info) 133 reader = UFOReader(self.dstDir, validate=True) 134 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 135 136 def testHeadRead(self): 137 # openTypeHeadCreated 138 ## not a string 139 info = dict(fontInfoVersion2) 140 info["openTypeHeadCreated"] = 123 141 self._writeInfoToPlist(info) 142 reader = UFOReader(self.dstDir, validate=True) 143 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 144 ## invalid format 145 info = dict(fontInfoVersion2) 146 info["openTypeHeadCreated"] = "2000-Jan-01 00:00:00" 147 self._writeInfoToPlist(info) 148 reader = UFOReader(self.dstDir, validate=True) 149 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 150 # openTypeHeadLowestRecPPEM 151 info = dict(fontInfoVersion2) 152 info["openTypeHeadLowestRecPPEM"] = "abc" 153 self._writeInfoToPlist(info) 154 reader = UFOReader(self.dstDir, validate=True) 155 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 156 # openTypeHeadFlags 157 info = dict(fontInfoVersion2) 158 info["openTypeHeadFlags"] = [-1] 159 self._writeInfoToPlist(info) 160 reader = UFOReader(self.dstDir, validate=True) 161 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 162 163 def testHheaRead(self): 164 # openTypeHheaAscender 165 info = dict(fontInfoVersion2) 166 info["openTypeHheaAscender"] = "abc" 167 self._writeInfoToPlist(info) 168 reader = UFOReader(self.dstDir, validate=True) 169 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 170 # openTypeHheaDescender 171 info = dict(fontInfoVersion2) 172 info["openTypeHheaDescender"] = "abc" 173 self._writeInfoToPlist(info) 174 reader = UFOReader(self.dstDir, validate=True) 175 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 176 # openTypeHheaLineGap 177 info = dict(fontInfoVersion2) 178 info["openTypeHheaLineGap"] = "abc" 179 self._writeInfoToPlist(info) 180 reader = UFOReader(self.dstDir, validate=True) 181 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 182 # openTypeHheaCaretSlopeRise 183 info = dict(fontInfoVersion2) 184 info["openTypeHheaCaretSlopeRise"] = "abc" 185 self._writeInfoToPlist(info) 186 reader = UFOReader(self.dstDir, validate=True) 187 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 188 # openTypeHheaCaretSlopeRun 189 info = dict(fontInfoVersion2) 190 info["openTypeHheaCaretSlopeRun"] = "abc" 191 self._writeInfoToPlist(info) 192 reader = UFOReader(self.dstDir, validate=True) 193 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 194 # openTypeHheaCaretOffset 195 info = dict(fontInfoVersion2) 196 info["openTypeHheaCaretOffset"] = "abc" 197 self._writeInfoToPlist(info) 198 reader = UFOReader(self.dstDir, validate=True) 199 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 200 201 def testNameRead(self): 202 # openTypeNameDesigner 203 info = dict(fontInfoVersion2) 204 info["openTypeNameDesigner"] = 123 205 self._writeInfoToPlist(info) 206 reader = UFOReader(self.dstDir, validate=True) 207 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 208 # openTypeNameDesignerURL 209 info = dict(fontInfoVersion2) 210 info["openTypeNameDesignerURL"] = 123 211 self._writeInfoToPlist(info) 212 reader = UFOReader(self.dstDir, validate=True) 213 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 214 # openTypeNameManufacturer 215 info = dict(fontInfoVersion2) 216 info["openTypeNameManufacturer"] = 123 217 self._writeInfoToPlist(info) 218 reader = UFOReader(self.dstDir, validate=True) 219 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 220 # openTypeNameManufacturerURL 221 info = dict(fontInfoVersion2) 222 info["openTypeNameManufacturerURL"] = 123 223 self._writeInfoToPlist(info) 224 reader = UFOReader(self.dstDir, validate=True) 225 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 226 # openTypeNameLicense 227 info = dict(fontInfoVersion2) 228 info["openTypeNameLicense"] = 123 229 self._writeInfoToPlist(info) 230 reader = UFOReader(self.dstDir, validate=True) 231 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 232 # openTypeNameLicenseURL 233 info = dict(fontInfoVersion2) 234 info["openTypeNameLicenseURL"] = 123 235 self._writeInfoToPlist(info) 236 reader = UFOReader(self.dstDir, validate=True) 237 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 238 # openTypeNameVersion 239 info = dict(fontInfoVersion2) 240 info["openTypeNameVersion"] = 123 241 self._writeInfoToPlist(info) 242 reader = UFOReader(self.dstDir, validate=True) 243 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 244 # openTypeNameUniqueID 245 info = dict(fontInfoVersion2) 246 info["openTypeNameUniqueID"] = 123 247 self._writeInfoToPlist(info) 248 reader = UFOReader(self.dstDir, validate=True) 249 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 250 # openTypeNameDescription 251 info = dict(fontInfoVersion2) 252 info["openTypeNameDescription"] = 123 253 self._writeInfoToPlist(info) 254 reader = UFOReader(self.dstDir, validate=True) 255 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 256 # openTypeNamePreferredFamilyName 257 info = dict(fontInfoVersion2) 258 info["openTypeNamePreferredFamilyName"] = 123 259 self._writeInfoToPlist(info) 260 reader = UFOReader(self.dstDir, validate=True) 261 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 262 # openTypeNamePreferredSubfamilyName 263 info = dict(fontInfoVersion2) 264 info["openTypeNamePreferredSubfamilyName"] = 123 265 self._writeInfoToPlist(info) 266 reader = UFOReader(self.dstDir, validate=True) 267 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 268 # openTypeNameCompatibleFullName 269 info = dict(fontInfoVersion2) 270 info["openTypeNameCompatibleFullName"] = 123 271 self._writeInfoToPlist(info) 272 reader = UFOReader(self.dstDir, validate=True) 273 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 274 # openTypeNameSampleText 275 info = dict(fontInfoVersion2) 276 info["openTypeNameSampleText"] = 123 277 self._writeInfoToPlist(info) 278 reader = UFOReader(self.dstDir, validate=True) 279 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 280 # openTypeNameWWSFamilyName 281 info = dict(fontInfoVersion2) 282 info["openTypeNameWWSFamilyName"] = 123 283 self._writeInfoToPlist(info) 284 reader = UFOReader(self.dstDir, validate=True) 285 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 286 # openTypeNameWWSSubfamilyName 287 info = dict(fontInfoVersion2) 288 info["openTypeNameWWSSubfamilyName"] = 123 289 self._writeInfoToPlist(info) 290 reader = UFOReader(self.dstDir, validate=True) 291 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 292 293 def testOS2Read(self): 294 # openTypeOS2WidthClass 295 ## not an int 296 info = dict(fontInfoVersion2) 297 info["openTypeOS2WidthClass"] = "abc" 298 self._writeInfoToPlist(info) 299 reader = UFOReader(self.dstDir, validate=True) 300 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 301 ## out or range 302 info = dict(fontInfoVersion2) 303 info["openTypeOS2WidthClass"] = 15 304 self._writeInfoToPlist(info) 305 reader = UFOReader(self.dstDir, validate=True) 306 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 307 # openTypeOS2WeightClass 308 info = dict(fontInfoVersion2) 309 ## not an int 310 info["openTypeOS2WeightClass"] = "abc" 311 self._writeInfoToPlist(info) 312 reader = UFOReader(self.dstDir, validate=True) 313 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 314 ## out of range 315 info["openTypeOS2WeightClass"] = -50 316 self._writeInfoToPlist(info) 317 reader = UFOReader(self.dstDir, validate=True) 318 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 319 # openTypeOS2Selection 320 info = dict(fontInfoVersion2) 321 info["openTypeOS2Selection"] = [-1] 322 self._writeInfoToPlist(info) 323 reader = UFOReader(self.dstDir, validate=True) 324 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 325 # openTypeOS2VendorID 326 info = dict(fontInfoVersion2) 327 info["openTypeOS2VendorID"] = 1234 328 self._writeInfoToPlist(info) 329 reader = UFOReader(self.dstDir, validate=True) 330 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 331 # openTypeOS2Panose 332 ## not an int 333 info = dict(fontInfoVersion2) 334 info["openTypeOS2Panose"] = [0, 1, 2, 3, 4, 5, 6, 7, 8, str(9)] 335 self._writeInfoToPlist(info) 336 reader = UFOReader(self.dstDir, validate=True) 337 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 338 ## too few values 339 info = dict(fontInfoVersion2) 340 info["openTypeOS2Panose"] = [0, 1, 2, 3] 341 self._writeInfoToPlist(info) 342 reader = UFOReader(self.dstDir, validate=True) 343 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 344 ## too many values 345 info = dict(fontInfoVersion2) 346 info["openTypeOS2Panose"] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 347 self._writeInfoToPlist(info) 348 reader = UFOReader(self.dstDir, validate=True) 349 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 350 # openTypeOS2FamilyClass 351 ## not an int 352 info = dict(fontInfoVersion2) 353 info["openTypeOS2FamilyClass"] = [1, str(1)] 354 self._writeInfoToPlist(info) 355 reader = UFOReader(self.dstDir, validate=True) 356 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 357 ## too few values 358 info = dict(fontInfoVersion2) 359 info["openTypeOS2FamilyClass"] = [1] 360 self._writeInfoToPlist(info) 361 reader = UFOReader(self.dstDir, validate=True) 362 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 363 ## too many values 364 info = dict(fontInfoVersion2) 365 info["openTypeOS2FamilyClass"] = [1, 1, 1] 366 self._writeInfoToPlist(info) 367 reader = UFOReader(self.dstDir, validate=True) 368 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 369 ## out of range 370 info = dict(fontInfoVersion2) 371 info["openTypeOS2FamilyClass"] = [1, 201] 372 self._writeInfoToPlist(info) 373 reader = UFOReader(self.dstDir, validate=True) 374 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 375 # openTypeOS2UnicodeRanges 376 ## not an int 377 info = dict(fontInfoVersion2) 378 info["openTypeOS2UnicodeRanges"] = ["0"] 379 self._writeInfoToPlist(info) 380 reader = UFOReader(self.dstDir, validate=True) 381 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 382 ## out of range 383 info = dict(fontInfoVersion2) 384 info["openTypeOS2UnicodeRanges"] = [-1] 385 self._writeInfoToPlist(info) 386 reader = UFOReader(self.dstDir, validate=True) 387 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 388 # openTypeOS2CodePageRanges 389 ## not an int 390 info = dict(fontInfoVersion2) 391 info["openTypeOS2CodePageRanges"] = ["0"] 392 self._writeInfoToPlist(info) 393 reader = UFOReader(self.dstDir, validate=True) 394 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 395 ## out of range 396 info = dict(fontInfoVersion2) 397 info["openTypeOS2CodePageRanges"] = [-1] 398 self._writeInfoToPlist(info) 399 reader = UFOReader(self.dstDir, validate=True) 400 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 401 # openTypeOS2TypoAscender 402 info = dict(fontInfoVersion2) 403 info["openTypeOS2TypoAscender"] = "abc" 404 self._writeInfoToPlist(info) 405 reader = UFOReader(self.dstDir, validate=True) 406 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 407 # openTypeOS2TypoDescender 408 info = dict(fontInfoVersion2) 409 info["openTypeOS2TypoDescender"] = "abc" 410 self._writeInfoToPlist(info) 411 reader = UFOReader(self.dstDir, validate=True) 412 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 413 # openTypeOS2TypoLineGap 414 info = dict(fontInfoVersion2) 415 info["openTypeOS2TypoLineGap"] = "abc" 416 self._writeInfoToPlist(info) 417 reader = UFOReader(self.dstDir, validate=True) 418 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 419 # openTypeOS2WinAscent 420 info = dict(fontInfoVersion2) 421 info["openTypeOS2WinAscent"] = "abc" 422 self._writeInfoToPlist(info) 423 reader = UFOReader(self.dstDir, validate=True) 424 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 425 # openTypeOS2WinDescent 426 info = dict(fontInfoVersion2) 427 info["openTypeOS2WinDescent"] = "abc" 428 self._writeInfoToPlist(info) 429 reader = UFOReader(self.dstDir, validate=True) 430 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 431 # openTypeOS2Type 432 ## not an int 433 info = dict(fontInfoVersion2) 434 info["openTypeOS2Type"] = ["1"] 435 self._writeInfoToPlist(info) 436 reader = UFOReader(self.dstDir, validate=True) 437 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 438 ## out of range 439 info = dict(fontInfoVersion2) 440 info["openTypeOS2Type"] = [-1] 441 self._writeInfoToPlist(info) 442 reader = UFOReader(self.dstDir, validate=True) 443 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 444 # openTypeOS2SubscriptXSize 445 info = dict(fontInfoVersion2) 446 info["openTypeOS2SubscriptXSize"] = "abc" 447 self._writeInfoToPlist(info) 448 reader = UFOReader(self.dstDir, validate=True) 449 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 450 # openTypeOS2SubscriptYSize 451 info = dict(fontInfoVersion2) 452 info["openTypeOS2SubscriptYSize"] = "abc" 453 self._writeInfoToPlist(info) 454 reader = UFOReader(self.dstDir, validate=True) 455 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 456 # openTypeOS2SubscriptXOffset 457 info = dict(fontInfoVersion2) 458 info["openTypeOS2SubscriptXOffset"] = "abc" 459 self._writeInfoToPlist(info) 460 reader = UFOReader(self.dstDir, validate=True) 461 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 462 # openTypeOS2SubscriptYOffset 463 info = dict(fontInfoVersion2) 464 info["openTypeOS2SubscriptYOffset"] = "abc" 465 self._writeInfoToPlist(info) 466 reader = UFOReader(self.dstDir, validate=True) 467 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 468 # openTypeOS2SuperscriptXSize 469 info = dict(fontInfoVersion2) 470 info["openTypeOS2SuperscriptXSize"] = "abc" 471 self._writeInfoToPlist(info) 472 reader = UFOReader(self.dstDir, validate=True) 473 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 474 # openTypeOS2SuperscriptYSize 475 info = dict(fontInfoVersion2) 476 info["openTypeOS2SuperscriptYSize"] = "abc" 477 self._writeInfoToPlist(info) 478 reader = UFOReader(self.dstDir, validate=True) 479 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 480 # openTypeOS2SuperscriptXOffset 481 info = dict(fontInfoVersion2) 482 info["openTypeOS2SuperscriptXOffset"] = "abc" 483 self._writeInfoToPlist(info) 484 reader = UFOReader(self.dstDir, validate=True) 485 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 486 # openTypeOS2SuperscriptYOffset 487 info = dict(fontInfoVersion2) 488 info["openTypeOS2SuperscriptYOffset"] = "abc" 489 self._writeInfoToPlist(info) 490 reader = UFOReader(self.dstDir, validate=True) 491 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 492 # openTypeOS2StrikeoutSize 493 info = dict(fontInfoVersion2) 494 info["openTypeOS2StrikeoutSize"] = "abc" 495 self._writeInfoToPlist(info) 496 reader = UFOReader(self.dstDir, validate=True) 497 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 498 # openTypeOS2StrikeoutPosition 499 info = dict(fontInfoVersion2) 500 info["openTypeOS2StrikeoutPosition"] = "abc" 501 self._writeInfoToPlist(info) 502 reader = UFOReader(self.dstDir, validate=True) 503 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 504 505 def testVheaRead(self): 506 # openTypeVheaVertTypoAscender 507 info = dict(fontInfoVersion2) 508 info["openTypeVheaVertTypoAscender"] = "abc" 509 self._writeInfoToPlist(info) 510 reader = UFOReader(self.dstDir, validate=True) 511 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 512 # openTypeVheaVertTypoDescender 513 info = dict(fontInfoVersion2) 514 info["openTypeVheaVertTypoDescender"] = "abc" 515 self._writeInfoToPlist(info) 516 reader = UFOReader(self.dstDir, validate=True) 517 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 518 # openTypeVheaVertTypoLineGap 519 info = dict(fontInfoVersion2) 520 info["openTypeVheaVertTypoLineGap"] = "abc" 521 self._writeInfoToPlist(info) 522 reader = UFOReader(self.dstDir, validate=True) 523 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 524 # openTypeVheaCaretSlopeRise 525 info = dict(fontInfoVersion2) 526 info["openTypeVheaCaretSlopeRise"] = "abc" 527 self._writeInfoToPlist(info) 528 reader = UFOReader(self.dstDir, validate=True) 529 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 530 # openTypeVheaCaretSlopeRun 531 info = dict(fontInfoVersion2) 532 info["openTypeVheaCaretSlopeRun"] = "abc" 533 self._writeInfoToPlist(info) 534 reader = UFOReader(self.dstDir, validate=True) 535 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 536 # openTypeVheaCaretOffset 537 info = dict(fontInfoVersion2) 538 info["openTypeVheaCaretOffset"] = "abc" 539 self._writeInfoToPlist(info) 540 reader = UFOReader(self.dstDir, validate=True) 541 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 542 543 def testFONDRead(self): 544 # macintoshFONDFamilyID 545 info = dict(fontInfoVersion2) 546 info["macintoshFONDFamilyID"] = "abc" 547 self._writeInfoToPlist(info) 548 reader = UFOReader(self.dstDir, validate=True) 549 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 550 # macintoshFONDName 551 info = dict(fontInfoVersion2) 552 info["macintoshFONDName"] = 123 553 self._writeInfoToPlist(info) 554 reader = UFOReader(self.dstDir, validate=True) 555 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 556 557 def testPostscriptRead(self): 558 # postscriptFontName 559 info = dict(fontInfoVersion2) 560 info["postscriptFontName"] = 123 561 self._writeInfoToPlist(info) 562 reader = UFOReader(self.dstDir, validate=True) 563 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 564 # postscriptFullName 565 info = dict(fontInfoVersion2) 566 info["postscriptFullName"] = 123 567 self._writeInfoToPlist(info) 568 reader = UFOReader(self.dstDir, validate=True) 569 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 570 # postscriptSlantAngle 571 info = dict(fontInfoVersion2) 572 info["postscriptSlantAngle"] = "abc" 573 self._writeInfoToPlist(info) 574 reader = UFOReader(self.dstDir, validate=True) 575 self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject()) 576 # postscriptUniqueID 577 info = dict(fontInfoVersion2) 578 info["postscriptUniqueID"] = "abc" 579 self._writeInfoToPlist(info) 580 reader = UFOReader(self.dstDir, validate=True) 581 self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject()) 582 # postscriptUnderlineThickness 583 info = dict(fontInfoVersion2) 584 info["postscriptUnderlineThickness"] = "abc" 585 self._writeInfoToPlist(info) 586 reader = UFOReader(self.dstDir, validate=True) 587 self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject()) 588 # postscriptUnderlinePosition 589 info = dict(fontInfoVersion2) 590 info["postscriptUnderlinePosition"] = "abc" 591 self._writeInfoToPlist(info) 592 reader = UFOReader(self.dstDir, validate=True) 593 self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject()) 594 # postscriptIsFixedPitch 595 info = dict(fontInfoVersion2) 596 info["postscriptIsFixedPitch"] = 2 597 self._writeInfoToPlist(info) 598 reader = UFOReader(self.dstDir, validate=True) 599 self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject()) 600 # postscriptBlueValues 601 ## not a list 602 info = dict(fontInfoVersion2) 603 info["postscriptBlueValues"] = "abc" 604 self._writeInfoToPlist(info) 605 reader = UFOReader(self.dstDir, validate=True) 606 self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject()) 607 ## uneven value count 608 info = dict(fontInfoVersion2) 609 info["postscriptBlueValues"] = [500] 610 self._writeInfoToPlist(info) 611 reader = UFOReader(self.dstDir, validate=True) 612 self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject()) 613 ## too many values 614 info = dict(fontInfoVersion2) 615 info["postscriptBlueValues"] = [ 616 10, 617 20, 618 30, 619 40, 620 50, 621 60, 622 70, 623 80, 624 90, 625 100, 626 110, 627 120, 628 130, 629 140, 630 150, 631 160, 632 ] 633 self._writeInfoToPlist(info) 634 reader = UFOReader(self.dstDir, validate=True) 635 self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject()) 636 # postscriptOtherBlues 637 ## not a list 638 info = dict(fontInfoVersion2) 639 info["postscriptOtherBlues"] = "abc" 640 self._writeInfoToPlist(info) 641 reader = UFOReader(self.dstDir, validate=True) 642 self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject()) 643 ## uneven value count 644 info = dict(fontInfoVersion2) 645 info["postscriptOtherBlues"] = [500] 646 self._writeInfoToPlist(info) 647 reader = UFOReader(self.dstDir, validate=True) 648 self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject()) 649 ## too many values 650 info = dict(fontInfoVersion2) 651 info["postscriptOtherBlues"] = [ 652 10, 653 20, 654 30, 655 40, 656 50, 657 60, 658 70, 659 80, 660 90, 661 100, 662 110, 663 120, 664 130, 665 140, 666 150, 667 160, 668 ] 669 self._writeInfoToPlist(info) 670 reader = UFOReader(self.dstDir, validate=True) 671 self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject()) 672 # postscriptFamilyBlues 673 ## not a list 674 info = dict(fontInfoVersion2) 675 info["postscriptFamilyBlues"] = "abc" 676 self._writeInfoToPlist(info) 677 reader = UFOReader(self.dstDir, validate=True) 678 self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject()) 679 ## uneven value count 680 info = dict(fontInfoVersion2) 681 info["postscriptFamilyBlues"] = [500] 682 self._writeInfoToPlist(info) 683 reader = UFOReader(self.dstDir, validate=True) 684 self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject()) 685 ## too many values 686 info = dict(fontInfoVersion2) 687 info["postscriptFamilyBlues"] = [ 688 10, 689 20, 690 30, 691 40, 692 50, 693 60, 694 70, 695 80, 696 90, 697 100, 698 110, 699 120, 700 130, 701 140, 702 150, 703 160, 704 ] 705 self._writeInfoToPlist(info) 706 reader = UFOReader(self.dstDir, validate=True) 707 self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject()) 708 # postscriptFamilyOtherBlues 709 ## not a list 710 info = dict(fontInfoVersion2) 711 info["postscriptFamilyOtherBlues"] = "abc" 712 self._writeInfoToPlist(info) 713 reader = UFOReader(self.dstDir, validate=True) 714 self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject()) 715 ## uneven value count 716 info = dict(fontInfoVersion2) 717 info["postscriptFamilyOtherBlues"] = [500] 718 self._writeInfoToPlist(info) 719 reader = UFOReader(self.dstDir, validate=True) 720 self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject()) 721 ## too many values 722 info = dict(fontInfoVersion2) 723 info["postscriptFamilyOtherBlues"] = [ 724 10, 725 20, 726 30, 727 40, 728 50, 729 60, 730 70, 731 80, 732 90, 733 100, 734 110, 735 120, 736 130, 737 140, 738 150, 739 160, 740 ] 741 self._writeInfoToPlist(info) 742 reader = UFOReader(self.dstDir, validate=True) 743 self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject()) 744 # postscriptStemSnapH 745 ## not list 746 info = dict(fontInfoVersion2) 747 info["postscriptStemSnapH"] = "abc" 748 self._writeInfoToPlist(info) 749 reader = UFOReader(self.dstDir, validate=True) 750 self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject()) 751 ## too many values 752 info = dict(fontInfoVersion2) 753 info["postscriptStemSnapH"] = [ 754 10, 755 20, 756 30, 757 40, 758 50, 759 60, 760 70, 761 80, 762 90, 763 100, 764 110, 765 120, 766 130, 767 140, 768 150, 769 160, 770 ] 771 self._writeInfoToPlist(info) 772 reader = UFOReader(self.dstDir, validate=True) 773 self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject()) 774 # postscriptStemSnapV 775 ## not list 776 info = dict(fontInfoVersion2) 777 info["postscriptStemSnapV"] = "abc" 778 self._writeInfoToPlist(info) 779 reader = UFOReader(self.dstDir, validate=True) 780 self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject()) 781 ## too many values 782 info = dict(fontInfoVersion2) 783 info["postscriptStemSnapV"] = [ 784 10, 785 20, 786 30, 787 40, 788 50, 789 60, 790 70, 791 80, 792 90, 793 100, 794 110, 795 120, 796 130, 797 140, 798 150, 799 160, 800 ] 801 self._writeInfoToPlist(info) 802 reader = UFOReader(self.dstDir, validate=True) 803 self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject()) 804 # postscriptBlueFuzz 805 info = dict(fontInfoVersion2) 806 info["postscriptBlueFuzz"] = "abc" 807 self._writeInfoToPlist(info) 808 reader = UFOReader(self.dstDir, validate=True) 809 self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject()) 810 # postscriptBlueShift 811 info = dict(fontInfoVersion2) 812 info["postscriptBlueShift"] = "abc" 813 self._writeInfoToPlist(info) 814 reader = UFOReader(self.dstDir, validate=True) 815 self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject()) 816 # postscriptBlueScale 817 info = dict(fontInfoVersion2) 818 info["postscriptBlueScale"] = "abc" 819 self._writeInfoToPlist(info) 820 reader = UFOReader(self.dstDir, validate=True) 821 self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject()) 822 # postscriptForceBold 823 info = dict(fontInfoVersion2) 824 info["postscriptForceBold"] = "abc" 825 self._writeInfoToPlist(info) 826 reader = UFOReader(self.dstDir, validate=True) 827 self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject()) 828 # postscriptDefaultWidthX 829 info = dict(fontInfoVersion2) 830 info["postscriptDefaultWidthX"] = "abc" 831 self._writeInfoToPlist(info) 832 reader = UFOReader(self.dstDir, validate=True) 833 self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject()) 834 # postscriptNominalWidthX 835 info = dict(fontInfoVersion2) 836 info["postscriptNominalWidthX"] = "abc" 837 self._writeInfoToPlist(info) 838 reader = UFOReader(self.dstDir, validate=True) 839 self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject()) 840 # postscriptWeightName 841 info = dict(fontInfoVersion2) 842 info["postscriptWeightName"] = 123 843 self._writeInfoToPlist(info) 844 reader = UFOReader(self.dstDir, validate=True) 845 self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject()) 846 # postscriptDefaultCharacter 847 info = dict(fontInfoVersion2) 848 info["postscriptDefaultCharacter"] = 123 849 self._writeInfoToPlist(info) 850 reader = UFOReader(self.dstDir, validate=True) 851 self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject()) 852 # postscriptWindowsCharacterSet 853 info = dict(fontInfoVersion2) 854 info["postscriptWindowsCharacterSet"] = -1 855 self._writeInfoToPlist(info) 856 reader = UFOReader(self.dstDir, validate=True) 857 self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject()) 858 # macintoshFONDFamilyID 859 info = dict(fontInfoVersion2) 860 info["macintoshFONDFamilyID"] = "abc" 861 self._writeInfoToPlist(info) 862 reader = UFOReader(self.dstDir, validate=True) 863 self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject()) 864 # macintoshFONDName 865 info = dict(fontInfoVersion2) 866 info["macintoshFONDName"] = 123 867 self._writeInfoToPlist(info) 868 reader = UFOReader(self.dstDir, validate=True) 869 self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject()) 870 871 872class WriteFontInfoVersion2TestCase(unittest.TestCase): 873 def setUp(self): 874 self.tempDir = tempfile.mktemp() 875 os.mkdir(self.tempDir) 876 self.dstDir = os.path.join(self.tempDir, "test.ufo") 877 878 def tearDown(self): 879 shutil.rmtree(self.tempDir) 880 881 def makeInfoObject(self): 882 infoObject = TestInfoObject() 883 for attr, value in list(fontInfoVersion2.items()): 884 setattr(infoObject, attr, value) 885 return infoObject 886 887 def readPlist(self): 888 path = os.path.join(self.dstDir, "fontinfo.plist") 889 with open(path, "rb") as f: 890 plist = plistlib.load(f) 891 return plist 892 893 def testWrite(self): 894 infoObject = self.makeInfoObject() 895 writer = UFOWriter(self.dstDir, formatVersion=2) 896 writer.writeInfo(infoObject) 897 writtenData = self.readPlist() 898 for attr, originalValue in list(fontInfoVersion2.items()): 899 newValue = writtenData[attr] 900 self.assertEqual(newValue, originalValue) 901 902 def testGenericWrite(self): 903 # familyName 904 infoObject = self.makeInfoObject() 905 infoObject.familyName = 123 906 writer = UFOWriter(self.dstDir, formatVersion=2) 907 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 908 # styleName 909 infoObject = self.makeInfoObject() 910 infoObject.styleName = 123 911 writer = UFOWriter(self.dstDir, formatVersion=2) 912 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 913 # styleMapFamilyName 914 infoObject = self.makeInfoObject() 915 infoObject.styleMapFamilyName = 123 916 writer = UFOWriter(self.dstDir, formatVersion=2) 917 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 918 # styleMapStyleName 919 ## not a string 920 infoObject = self.makeInfoObject() 921 infoObject.styleMapStyleName = 123 922 writer = UFOWriter(self.dstDir, formatVersion=2) 923 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 924 ## out of range 925 infoObject = self.makeInfoObject() 926 infoObject.styleMapStyleName = "REGULAR" 927 writer = UFOWriter(self.dstDir, formatVersion=2) 928 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 929 # versionMajor 930 infoObject = self.makeInfoObject() 931 infoObject.versionMajor = "1" 932 writer = UFOWriter(self.dstDir, formatVersion=2) 933 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 934 # versionMinor 935 infoObject = self.makeInfoObject() 936 infoObject.versionMinor = "0" 937 writer = UFOWriter(self.dstDir, formatVersion=2) 938 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 939 # copyright 940 infoObject = self.makeInfoObject() 941 infoObject.copyright = 123 942 writer = UFOWriter(self.dstDir, formatVersion=2) 943 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 944 # trademark 945 infoObject = self.makeInfoObject() 946 infoObject.trademark = 123 947 writer = UFOWriter(self.dstDir, formatVersion=2) 948 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 949 # unitsPerEm 950 infoObject = self.makeInfoObject() 951 infoObject.unitsPerEm = "abc" 952 writer = UFOWriter(self.dstDir, formatVersion=2) 953 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 954 # descender 955 infoObject = self.makeInfoObject() 956 infoObject.descender = "abc" 957 writer = UFOWriter(self.dstDir, formatVersion=2) 958 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 959 # xHeight 960 infoObject = self.makeInfoObject() 961 infoObject.xHeight = "abc" 962 writer = UFOWriter(self.dstDir, formatVersion=2) 963 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 964 # capHeight 965 infoObject = self.makeInfoObject() 966 infoObject.capHeight = "abc" 967 writer = UFOWriter(self.dstDir, formatVersion=2) 968 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 969 # ascender 970 infoObject = self.makeInfoObject() 971 infoObject.ascender = "abc" 972 writer = UFOWriter(self.dstDir, formatVersion=2) 973 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 974 # italicAngle 975 infoObject = self.makeInfoObject() 976 infoObject.italicAngle = "abc" 977 writer = UFOWriter(self.dstDir, formatVersion=2) 978 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 979 980 def testHeadWrite(self): 981 # openTypeHeadCreated 982 ## not a string 983 infoObject = self.makeInfoObject() 984 infoObject.openTypeHeadCreated = 123 985 writer = UFOWriter(self.dstDir, formatVersion=2) 986 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 987 ## invalid format 988 infoObject = self.makeInfoObject() 989 infoObject.openTypeHeadCreated = "2000-Jan-01 00:00:00" 990 writer = UFOWriter(self.dstDir, formatVersion=2) 991 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 992 # openTypeHeadLowestRecPPEM 993 infoObject = self.makeInfoObject() 994 infoObject.openTypeHeadLowestRecPPEM = "abc" 995 writer = UFOWriter(self.dstDir, formatVersion=2) 996 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 997 # openTypeHeadFlags 998 infoObject = self.makeInfoObject() 999 infoObject.openTypeHeadFlags = [-1] 1000 writer = UFOWriter(self.dstDir, formatVersion=2) 1001 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1002 1003 def testHheaWrite(self): 1004 # openTypeHheaAscender 1005 infoObject = self.makeInfoObject() 1006 infoObject.openTypeHheaAscender = "abc" 1007 writer = UFOWriter(self.dstDir, formatVersion=2) 1008 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1009 # openTypeHheaDescender 1010 infoObject = self.makeInfoObject() 1011 infoObject.openTypeHheaDescender = "abc" 1012 writer = UFOWriter(self.dstDir, formatVersion=2) 1013 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1014 # openTypeHheaLineGap 1015 infoObject = self.makeInfoObject() 1016 infoObject.openTypeHheaLineGap = "abc" 1017 writer = UFOWriter(self.dstDir, formatVersion=2) 1018 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1019 # openTypeHheaCaretSlopeRise 1020 infoObject = self.makeInfoObject() 1021 infoObject.openTypeHheaCaretSlopeRise = "abc" 1022 writer = UFOWriter(self.dstDir, formatVersion=2) 1023 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1024 # openTypeHheaCaretSlopeRun 1025 infoObject = self.makeInfoObject() 1026 infoObject.openTypeHheaCaretSlopeRun = "abc" 1027 writer = UFOWriter(self.dstDir, formatVersion=2) 1028 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1029 # openTypeHheaCaretOffset 1030 infoObject = self.makeInfoObject() 1031 infoObject.openTypeHheaCaretOffset = "abc" 1032 writer = UFOWriter(self.dstDir, formatVersion=2) 1033 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1034 1035 def testNameWrite(self): 1036 # openTypeNameDesigner 1037 infoObject = self.makeInfoObject() 1038 infoObject.openTypeNameDesigner = 123 1039 writer = UFOWriter(self.dstDir, formatVersion=2) 1040 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1041 # openTypeNameDesignerURL 1042 infoObject = self.makeInfoObject() 1043 infoObject.openTypeNameDesignerURL = 123 1044 writer = UFOWriter(self.dstDir, formatVersion=2) 1045 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1046 # openTypeNameManufacturer 1047 infoObject = self.makeInfoObject() 1048 infoObject.openTypeNameManufacturer = 123 1049 writer = UFOWriter(self.dstDir, formatVersion=2) 1050 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1051 # openTypeNameManufacturerURL 1052 infoObject = self.makeInfoObject() 1053 infoObject.openTypeNameManufacturerURL = 123 1054 writer = UFOWriter(self.dstDir, formatVersion=2) 1055 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1056 # openTypeNameLicense 1057 infoObject = self.makeInfoObject() 1058 infoObject.openTypeNameLicense = 123 1059 writer = UFOWriter(self.dstDir, formatVersion=2) 1060 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1061 # openTypeNameLicenseURL 1062 infoObject = self.makeInfoObject() 1063 infoObject.openTypeNameLicenseURL = 123 1064 writer = UFOWriter(self.dstDir, formatVersion=2) 1065 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1066 # openTypeNameVersion 1067 infoObject = self.makeInfoObject() 1068 infoObject.openTypeNameVersion = 123 1069 writer = UFOWriter(self.dstDir, formatVersion=2) 1070 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1071 # openTypeNameUniqueID 1072 infoObject = self.makeInfoObject() 1073 infoObject.openTypeNameUniqueID = 123 1074 writer = UFOWriter(self.dstDir, formatVersion=2) 1075 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1076 # openTypeNameDescription 1077 infoObject = self.makeInfoObject() 1078 infoObject.openTypeNameDescription = 123 1079 writer = UFOWriter(self.dstDir, formatVersion=2) 1080 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1081 # openTypeNamePreferredFamilyName 1082 infoObject = self.makeInfoObject() 1083 infoObject.openTypeNamePreferredFamilyName = 123 1084 writer = UFOWriter(self.dstDir, formatVersion=2) 1085 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1086 # openTypeNamePreferredSubfamilyName 1087 infoObject = self.makeInfoObject() 1088 infoObject.openTypeNamePreferredSubfamilyName = 123 1089 writer = UFOWriter(self.dstDir, formatVersion=2) 1090 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1091 # openTypeNameCompatibleFullName 1092 infoObject = self.makeInfoObject() 1093 infoObject.openTypeNameCompatibleFullName = 123 1094 writer = UFOWriter(self.dstDir, formatVersion=2) 1095 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1096 # openTypeNameSampleText 1097 infoObject = self.makeInfoObject() 1098 infoObject.openTypeNameSampleText = 123 1099 writer = UFOWriter(self.dstDir, formatVersion=2) 1100 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1101 # openTypeNameWWSFamilyName 1102 infoObject = self.makeInfoObject() 1103 infoObject.openTypeNameWWSFamilyName = 123 1104 writer = UFOWriter(self.dstDir, formatVersion=2) 1105 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1106 # openTypeNameWWSSubfamilyName 1107 infoObject = self.makeInfoObject() 1108 infoObject.openTypeNameWWSSubfamilyName = 123 1109 writer = UFOWriter(self.dstDir, formatVersion=2) 1110 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1111 1112 def testOS2Write(self): 1113 # openTypeOS2WidthClass 1114 ## not an int 1115 infoObject = self.makeInfoObject() 1116 infoObject.openTypeOS2WidthClass = "abc" 1117 writer = UFOWriter(self.dstDir, formatVersion=2) 1118 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1119 ## out or range 1120 infoObject = self.makeInfoObject() 1121 infoObject.openTypeOS2WidthClass = 15 1122 writer = UFOWriter(self.dstDir, formatVersion=2) 1123 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1124 # openTypeOS2WeightClass 1125 infoObject = self.makeInfoObject() 1126 ## not an int 1127 infoObject.openTypeOS2WeightClass = "abc" 1128 writer = UFOWriter(self.dstDir, formatVersion=2) 1129 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1130 ## out of range 1131 infoObject.openTypeOS2WeightClass = -50 1132 writer = UFOWriter(self.dstDir, formatVersion=2) 1133 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1134 # openTypeOS2Selection 1135 infoObject = self.makeInfoObject() 1136 infoObject.openTypeOS2Selection = [-1] 1137 writer = UFOWriter(self.dstDir, formatVersion=2) 1138 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1139 # openTypeOS2VendorID 1140 infoObject = self.makeInfoObject() 1141 infoObject.openTypeOS2VendorID = 1234 1142 writer = UFOWriter(self.dstDir, formatVersion=2) 1143 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1144 # openTypeOS2Panose 1145 ## not an int 1146 infoObject = self.makeInfoObject() 1147 infoObject.openTypeOS2Panose = [0, 1, 2, 3, 4, 5, 6, 7, 8, str(9)] 1148 writer = UFOWriter(self.dstDir, formatVersion=2) 1149 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1150 ## too few values 1151 infoObject = self.makeInfoObject() 1152 infoObject.openTypeOS2Panose = [0, 1, 2, 3] 1153 writer = UFOWriter(self.dstDir, formatVersion=2) 1154 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1155 ## too many values 1156 infoObject = self.makeInfoObject() 1157 infoObject.openTypeOS2Panose = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 1158 writer = UFOWriter(self.dstDir, formatVersion=2) 1159 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1160 # openTypeOS2FamilyClass 1161 ## not an int 1162 infoObject = self.makeInfoObject() 1163 infoObject.openTypeOS2FamilyClass = [0, str(1)] 1164 writer = UFOWriter(self.dstDir, formatVersion=2) 1165 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1166 ## too few values 1167 infoObject = self.makeInfoObject() 1168 infoObject.openTypeOS2FamilyClass = [1] 1169 writer = UFOWriter(self.dstDir, formatVersion=2) 1170 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1171 ## too many values 1172 infoObject = self.makeInfoObject() 1173 infoObject.openTypeOS2FamilyClass = [1, 1, 1] 1174 writer = UFOWriter(self.dstDir, formatVersion=2) 1175 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1176 ## out of range 1177 infoObject = self.makeInfoObject() 1178 infoObject.openTypeOS2FamilyClass = [1, 20] 1179 writer = UFOWriter(self.dstDir, formatVersion=2) 1180 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1181 # openTypeOS2UnicodeRanges 1182 ## not an int 1183 infoObject = self.makeInfoObject() 1184 infoObject.openTypeOS2UnicodeRanges = ["0"] 1185 writer = UFOWriter(self.dstDir, formatVersion=2) 1186 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1187 ## out of range 1188 infoObject = self.makeInfoObject() 1189 infoObject.openTypeOS2UnicodeRanges = [-1] 1190 writer = UFOWriter(self.dstDir, formatVersion=2) 1191 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1192 # openTypeOS2CodePageRanges 1193 ## not an int 1194 infoObject = self.makeInfoObject() 1195 infoObject.openTypeOS2CodePageRanges = ["0"] 1196 writer = UFOWriter(self.dstDir, formatVersion=2) 1197 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1198 ## out of range 1199 infoObject = self.makeInfoObject() 1200 infoObject.openTypeOS2CodePageRanges = [-1] 1201 writer = UFOWriter(self.dstDir, formatVersion=2) 1202 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1203 # openTypeOS2TypoAscender 1204 infoObject = self.makeInfoObject() 1205 infoObject.openTypeOS2TypoAscender = "abc" 1206 writer = UFOWriter(self.dstDir, formatVersion=2) 1207 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1208 # openTypeOS2TypoDescender 1209 infoObject = self.makeInfoObject() 1210 infoObject.openTypeOS2TypoDescender = "abc" 1211 writer = UFOWriter(self.dstDir, formatVersion=2) 1212 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1213 # openTypeOS2TypoLineGap 1214 infoObject = self.makeInfoObject() 1215 infoObject.openTypeOS2TypoLineGap = "abc" 1216 writer = UFOWriter(self.dstDir, formatVersion=2) 1217 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1218 # openTypeOS2WinAscent 1219 infoObject = self.makeInfoObject() 1220 infoObject.openTypeOS2WinAscent = "abc" 1221 writer = UFOWriter(self.dstDir, formatVersion=2) 1222 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1223 # openTypeOS2WinDescent 1224 infoObject = self.makeInfoObject() 1225 infoObject.openTypeOS2WinDescent = "abc" 1226 writer = UFOWriter(self.dstDir, formatVersion=2) 1227 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1228 # openTypeOS2Type 1229 ## not an int 1230 infoObject = self.makeInfoObject() 1231 infoObject.openTypeOS2Type = ["1"] 1232 writer = UFOWriter(self.dstDir, formatVersion=2) 1233 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1234 ## out of range 1235 infoObject = self.makeInfoObject() 1236 infoObject.openTypeOS2Type = [-1] 1237 writer = UFOWriter(self.dstDir, formatVersion=2) 1238 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1239 # openTypeOS2SubscriptXSize 1240 infoObject = self.makeInfoObject() 1241 infoObject.openTypeOS2SubscriptXSize = "abc" 1242 writer = UFOWriter(self.dstDir, formatVersion=2) 1243 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1244 # openTypeOS2SubscriptYSize 1245 infoObject = self.makeInfoObject() 1246 infoObject.openTypeOS2SubscriptYSize = "abc" 1247 writer = UFOWriter(self.dstDir, formatVersion=2) 1248 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1249 # openTypeOS2SubscriptXOffset 1250 infoObject = self.makeInfoObject() 1251 infoObject.openTypeOS2SubscriptXOffset = "abc" 1252 writer = UFOWriter(self.dstDir, formatVersion=2) 1253 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1254 # openTypeOS2SubscriptYOffset 1255 infoObject = self.makeInfoObject() 1256 infoObject.openTypeOS2SubscriptYOffset = "abc" 1257 writer = UFOWriter(self.dstDir, formatVersion=2) 1258 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1259 # openTypeOS2SuperscriptXSize 1260 infoObject = self.makeInfoObject() 1261 infoObject.openTypeOS2SuperscriptXSize = "abc" 1262 writer = UFOWriter(self.dstDir, formatVersion=2) 1263 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1264 # openTypeOS2SuperscriptYSize 1265 infoObject = self.makeInfoObject() 1266 infoObject.openTypeOS2SuperscriptYSize = "abc" 1267 writer = UFOWriter(self.dstDir, formatVersion=2) 1268 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1269 # openTypeOS2SuperscriptXOffset 1270 infoObject = self.makeInfoObject() 1271 infoObject.openTypeOS2SuperscriptXOffset = "abc" 1272 writer = UFOWriter(self.dstDir, formatVersion=2) 1273 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1274 # openTypeOS2SuperscriptYOffset 1275 infoObject = self.makeInfoObject() 1276 infoObject.openTypeOS2SuperscriptYOffset = "abc" 1277 writer = UFOWriter(self.dstDir, formatVersion=2) 1278 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1279 # openTypeOS2StrikeoutSize 1280 infoObject = self.makeInfoObject() 1281 infoObject.openTypeOS2StrikeoutSize = "abc" 1282 writer = UFOWriter(self.dstDir, formatVersion=2) 1283 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1284 # openTypeOS2StrikeoutPosition 1285 infoObject = self.makeInfoObject() 1286 infoObject.openTypeOS2StrikeoutPosition = "abc" 1287 writer = UFOWriter(self.dstDir, formatVersion=2) 1288 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1289 1290 def testVheaWrite(self): 1291 # openTypeVheaVertTypoAscender 1292 infoObject = self.makeInfoObject() 1293 infoObject.openTypeVheaVertTypoAscender = "abc" 1294 writer = UFOWriter(self.dstDir, formatVersion=2) 1295 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1296 # openTypeVheaVertTypoDescender 1297 infoObject = self.makeInfoObject() 1298 infoObject.openTypeVheaVertTypoDescender = "abc" 1299 writer = UFOWriter(self.dstDir, formatVersion=2) 1300 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1301 # openTypeVheaVertTypoLineGap 1302 infoObject = self.makeInfoObject() 1303 infoObject.openTypeVheaVertTypoLineGap = "abc" 1304 writer = UFOWriter(self.dstDir, formatVersion=2) 1305 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1306 # openTypeVheaCaretSlopeRise 1307 infoObject = self.makeInfoObject() 1308 infoObject.openTypeVheaCaretSlopeRise = "abc" 1309 writer = UFOWriter(self.dstDir, formatVersion=2) 1310 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1311 # openTypeVheaCaretSlopeRun 1312 infoObject = self.makeInfoObject() 1313 infoObject.openTypeVheaCaretSlopeRun = "abc" 1314 writer = UFOWriter(self.dstDir, formatVersion=2) 1315 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1316 # openTypeVheaCaretOffset 1317 infoObject = self.makeInfoObject() 1318 infoObject.openTypeVheaCaretOffset = "abc" 1319 writer = UFOWriter(self.dstDir, formatVersion=2) 1320 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1321 1322 def testFONDWrite(self): 1323 # macintoshFONDFamilyID 1324 infoObject = self.makeInfoObject() 1325 infoObject.macintoshFONDFamilyID = "abc" 1326 writer = UFOWriter(self.dstDir, formatVersion=2) 1327 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1328 # macintoshFONDName 1329 infoObject = self.makeInfoObject() 1330 infoObject.macintoshFONDName = 123 1331 writer = UFOWriter(self.dstDir, formatVersion=2) 1332 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1333 1334 def testPostscriptWrite(self): 1335 # postscriptFontName 1336 infoObject = self.makeInfoObject() 1337 infoObject.postscriptFontName = 123 1338 writer = UFOWriter(self.dstDir, formatVersion=2) 1339 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1340 # postscriptFullName 1341 infoObject = self.makeInfoObject() 1342 infoObject.postscriptFullName = 123 1343 writer = UFOWriter(self.dstDir, formatVersion=2) 1344 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1345 # postscriptSlantAngle 1346 infoObject = self.makeInfoObject() 1347 infoObject.postscriptSlantAngle = "abc" 1348 writer = UFOWriter(self.dstDir, formatVersion=2) 1349 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1350 # postscriptUniqueID 1351 infoObject = self.makeInfoObject() 1352 infoObject.postscriptUniqueID = "abc" 1353 writer = UFOWriter(self.dstDir, formatVersion=2) 1354 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1355 # postscriptUnderlineThickness 1356 infoObject = self.makeInfoObject() 1357 infoObject.postscriptUnderlineThickness = "abc" 1358 writer = UFOWriter(self.dstDir, formatVersion=2) 1359 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1360 # postscriptUnderlinePosition 1361 infoObject = self.makeInfoObject() 1362 infoObject.postscriptUnderlinePosition = "abc" 1363 writer = UFOWriter(self.dstDir, formatVersion=2) 1364 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1365 # postscriptIsFixedPitch 1366 infoObject = self.makeInfoObject() 1367 infoObject.postscriptIsFixedPitch = 2 1368 writer = UFOWriter(self.dstDir, formatVersion=2) 1369 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1370 # postscriptBlueValues 1371 ## not a list 1372 infoObject = self.makeInfoObject() 1373 infoObject.postscriptBlueValues = "abc" 1374 writer = UFOWriter(self.dstDir, formatVersion=2) 1375 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1376 ## uneven value count 1377 infoObject = self.makeInfoObject() 1378 infoObject.postscriptBlueValues = [500] 1379 writer = UFOWriter(self.dstDir, formatVersion=2) 1380 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1381 ## too many values 1382 infoObject = self.makeInfoObject() 1383 infoObject.postscriptBlueValues = [ 1384 10, 1385 20, 1386 30, 1387 40, 1388 50, 1389 60, 1390 70, 1391 80, 1392 90, 1393 100, 1394 110, 1395 120, 1396 130, 1397 140, 1398 150, 1399 160, 1400 ] 1401 writer = UFOWriter(self.dstDir, formatVersion=2) 1402 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1403 # postscriptOtherBlues 1404 ## not a list 1405 infoObject = self.makeInfoObject() 1406 infoObject.postscriptOtherBlues = "abc" 1407 writer = UFOWriter(self.dstDir, formatVersion=2) 1408 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1409 ## uneven value count 1410 infoObject = self.makeInfoObject() 1411 infoObject.postscriptOtherBlues = [500] 1412 writer = UFOWriter(self.dstDir, formatVersion=2) 1413 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1414 ## too many values 1415 infoObject = self.makeInfoObject() 1416 infoObject.postscriptOtherBlues = [ 1417 10, 1418 20, 1419 30, 1420 40, 1421 50, 1422 60, 1423 70, 1424 80, 1425 90, 1426 100, 1427 110, 1428 120, 1429 130, 1430 140, 1431 150, 1432 160, 1433 ] 1434 writer = UFOWriter(self.dstDir, formatVersion=2) 1435 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1436 # postscriptFamilyBlues 1437 ## not a list 1438 infoObject = self.makeInfoObject() 1439 infoObject.postscriptFamilyBlues = "abc" 1440 writer = UFOWriter(self.dstDir, formatVersion=2) 1441 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1442 ## uneven value count 1443 infoObject = self.makeInfoObject() 1444 infoObject.postscriptFamilyBlues = [500] 1445 writer = UFOWriter(self.dstDir, formatVersion=2) 1446 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1447 ## too many values 1448 infoObject = self.makeInfoObject() 1449 infoObject.postscriptFamilyBlues = [ 1450 10, 1451 20, 1452 30, 1453 40, 1454 50, 1455 60, 1456 70, 1457 80, 1458 90, 1459 100, 1460 110, 1461 120, 1462 130, 1463 140, 1464 150, 1465 160, 1466 ] 1467 writer = UFOWriter(self.dstDir, formatVersion=2) 1468 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1469 # postscriptFamilyOtherBlues 1470 ## not a list 1471 infoObject = self.makeInfoObject() 1472 infoObject.postscriptFamilyOtherBlues = "abc" 1473 writer = UFOWriter(self.dstDir, formatVersion=2) 1474 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1475 ## uneven value count 1476 infoObject = self.makeInfoObject() 1477 infoObject.postscriptFamilyOtherBlues = [500] 1478 writer = UFOWriter(self.dstDir, formatVersion=2) 1479 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1480 ## too many values 1481 infoObject = self.makeInfoObject() 1482 infoObject.postscriptFamilyOtherBlues = [ 1483 10, 1484 20, 1485 30, 1486 40, 1487 50, 1488 60, 1489 70, 1490 80, 1491 90, 1492 100, 1493 110, 1494 120, 1495 130, 1496 140, 1497 150, 1498 160, 1499 ] 1500 writer = UFOWriter(self.dstDir, formatVersion=2) 1501 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1502 # postscriptStemSnapH 1503 ## not list 1504 infoObject = self.makeInfoObject() 1505 infoObject.postscriptStemSnapH = "abc" 1506 writer = UFOWriter(self.dstDir, formatVersion=2) 1507 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1508 ## too many values 1509 infoObject = self.makeInfoObject() 1510 infoObject.postscriptStemSnapH = [ 1511 10, 1512 20, 1513 30, 1514 40, 1515 50, 1516 60, 1517 70, 1518 80, 1519 90, 1520 100, 1521 110, 1522 120, 1523 130, 1524 140, 1525 150, 1526 160, 1527 ] 1528 writer = UFOWriter(self.dstDir, formatVersion=2) 1529 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1530 # postscriptStemSnapV 1531 ## not list 1532 infoObject = self.makeInfoObject() 1533 infoObject.postscriptStemSnapV = "abc" 1534 writer = UFOWriter(self.dstDir, formatVersion=2) 1535 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1536 ## too many values 1537 infoObject = self.makeInfoObject() 1538 infoObject.postscriptStemSnapV = [ 1539 10, 1540 20, 1541 30, 1542 40, 1543 50, 1544 60, 1545 70, 1546 80, 1547 90, 1548 100, 1549 110, 1550 120, 1551 130, 1552 140, 1553 150, 1554 160, 1555 ] 1556 writer = UFOWriter(self.dstDir, formatVersion=2) 1557 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1558 # postscriptBlueFuzz 1559 infoObject = self.makeInfoObject() 1560 infoObject.postscriptBlueFuzz = "abc" 1561 writer = UFOWriter(self.dstDir, formatVersion=2) 1562 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1563 # postscriptBlueShift 1564 infoObject = self.makeInfoObject() 1565 infoObject.postscriptBlueShift = "abc" 1566 writer = UFOWriter(self.dstDir, formatVersion=2) 1567 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1568 # postscriptBlueScale 1569 infoObject = self.makeInfoObject() 1570 infoObject.postscriptBlueScale = "abc" 1571 writer = UFOWriter(self.dstDir, formatVersion=2) 1572 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1573 # postscriptForceBold 1574 infoObject = self.makeInfoObject() 1575 infoObject.postscriptForceBold = "abc" 1576 writer = UFOWriter(self.dstDir, formatVersion=2) 1577 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1578 # postscriptDefaultWidthX 1579 infoObject = self.makeInfoObject() 1580 infoObject.postscriptDefaultWidthX = "abc" 1581 writer = UFOWriter(self.dstDir, formatVersion=2) 1582 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1583 # postscriptNominalWidthX 1584 infoObject = self.makeInfoObject() 1585 infoObject.postscriptNominalWidthX = "abc" 1586 writer = UFOWriter(self.dstDir, formatVersion=2) 1587 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1588 # postscriptWeightName 1589 infoObject = self.makeInfoObject() 1590 infoObject.postscriptWeightName = 123 1591 writer = UFOWriter(self.dstDir, formatVersion=2) 1592 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1593 # postscriptDefaultCharacter 1594 infoObject = self.makeInfoObject() 1595 infoObject.postscriptDefaultCharacter = 123 1596 writer = UFOWriter(self.dstDir, formatVersion=2) 1597 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1598 # postscriptWindowsCharacterSet 1599 infoObject = self.makeInfoObject() 1600 infoObject.postscriptWindowsCharacterSet = -1 1601 writer = UFOWriter(self.dstDir, formatVersion=2) 1602 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1603 # macintoshFONDFamilyID 1604 infoObject = self.makeInfoObject() 1605 infoObject.macintoshFONDFamilyID = "abc" 1606 writer = UFOWriter(self.dstDir, formatVersion=2) 1607 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1608 # macintoshFONDName 1609 infoObject = self.makeInfoObject() 1610 infoObject.macintoshFONDName = 123 1611 writer = UFOWriter(self.dstDir, formatVersion=2) 1612 self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject) 1613