[ttx] Tests

This commit is contained in:
Miguel Sousa 2017-03-27 04:04:02 -07:00
parent 076e2ba33a
commit 1a58912a60
13 changed files with 1281 additions and 0 deletions

View File

@ -0,0 +1,3 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- file starts with BOM '\xef\xbb\xbf' -->
<ttFont />

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

0
Tests/ttx/data/TestFFIL Executable file
View File

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<ttFont /> <!-- no sfntVersion -->

View File

@ -0,0 +1,2 @@
<!-- no XML header -->
<ttFont />

BIN
Tests/ttx/data/TestOTF.otf Normal file

Binary file not shown.

519
Tests/ttx/data/TestOTF.ttx Normal file
View File

@ -0,0 +1,519 @@
<?xml version="1.0" encoding="UTF-8"?>
<ttFont sfntVersion="OTTO">
<GlyphOrder>
<!-- The 'id' attribute is only for humans; it is ignored when parsed. -->
<GlyphID id="0" name=".notdef"/>
<GlyphID id="1" name=".null"/>
<GlyphID id="2" name="CR"/>
<GlyphID id="3" name="space"/>
<GlyphID id="4" name="period"/>
<GlyphID id="5" name="ellipsis"/>
</GlyphOrder>
<head>
<!-- Most of this table will be recalculated by the compiler -->
<tableVersion value="1.0"/>
<fontRevision value="1.0"/>
<checkSumAdjustment value="0x34034793"/>
<magicNumber value="0x5f0f3cf5"/>
<flags value="00000000 00000011"/>
<unitsPerEm value="1000"/>
<created value="Thu Jun 4 14:29:11 2015"/>
<modified value="Sat Aug 1 10:07:17 2015"/>
<xMin value="50"/>
<yMin value="0"/>
<xMax value="668"/>
<yMax value="750"/>
<macStyle value="00000000 00000000"/>
<lowestRecPPEM value="9"/>
<fontDirectionHint value="2"/>
<indexToLocFormat value="0"/>
<glyphDataFormat value="0"/>
</head>
<hhea>
<tableVersion value="0x00010000"/>
<ascent value="900"/>
<descent value="-300"/>
<lineGap value="0"/>
<advanceWidthMax value="723"/>
<minLeftSideBearing value="50"/>
<minRightSideBearing value="50"/>
<xMaxExtent value="668"/>
<caretSlopeRise value="1"/>
<caretSlopeRun value="0"/>
<caretOffset value="0"/>
<reserved0 value="0"/>
<reserved1 value="0"/>
<reserved2 value="0"/>
<reserved3 value="0"/>
<metricDataFormat value="0"/>
<numberOfHMetrics value="6"/>
</hhea>
<maxp>
<tableVersion value="0x5000"/>
<numGlyphs value="6"/>
</maxp>
<OS_2>
<!-- The fields 'usFirstCharIndex' and 'usLastCharIndex'
will be recalculated by the compiler -->
<version value="4"/>
<xAvgCharWidth value="392"/>
<usWeightClass value="400"/>
<usWidthClass value="5"/>
<fsType value="00000000 00000000"/>
<ySubscriptXSize value="700"/>
<ySubscriptYSize value="650"/>
<ySubscriptXOffset value="0"/>
<ySubscriptYOffset value="140"/>
<ySuperscriptXSize value="700"/>
<ySuperscriptYSize value="650"/>
<ySuperscriptXOffset value="0"/>
<ySuperscriptYOffset value="477"/>
<yStrikeoutSize value="50"/>
<yStrikeoutPosition value="250"/>
<sFamilyClass value="2050"/>
<panose>
<bFamilyType value="2"/>
<bSerifStyle value="11"/>
<bWeight value="6"/>
<bProportion value="4"/>
<bContrast value="4"/>
<bStrokeVariation value="2"/>
<bArmStyle value="7"/>
<bLetterForm value="8"/>
<bMidline value="1"/>
<bXHeight value="4"/>
</panose>
<ulUnicodeRange1 value="10000000 00000000 00000000 00000001"/>
<ulUnicodeRange2 value="00000000 00000000 00000000 00000000"/>
<ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/>
<ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/>
<achVendID value="NONE"/>
<fsSelection value="00000000 11000000"/>
<usFirstCharIndex value="0"/>
<usLastCharIndex value="8230"/>
<sTypoAscender value="750"/>
<sTypoDescender value="-250"/>
<sTypoLineGap value="200"/>
<usWinAscent value="900"/>
<usWinDescent value="300"/>
<ulCodePageRange1 value="00000000 00000000 00000000 00000001"/>
<ulCodePageRange2 value="00000000 00000000 00000000 00000000"/>
<sxHeight value="500"/>
<sCapHeight value="700"/>
<usDefaultChar value="0"/>
<usBreakChar value="32"/>
<usMaxContext value="0"/>
</OS_2>
<name>
<namerecord nameID="0" platformID="1" platEncID="0" langID="0x0" unicode="True">
Copyright (c) 2015 by FontTools. No rights reserved.
</namerecord>
<namerecord nameID="1" platformID="1" platEncID="0" langID="0x0" unicode="True">
Test OTF
</namerecord>
<namerecord nameID="2" platformID="1" platEncID="0" langID="0x0" unicode="True">
Regular
</namerecord>
<namerecord nameID="3" platformID="1" platEncID="0" langID="0x0" unicode="True">
FontTools: Test OTF: 2015
</namerecord>
<namerecord nameID="4" platformID="1" platEncID="0" langID="0x0" unicode="True">
Test OTF
</namerecord>
<namerecord nameID="5" platformID="1" platEncID="0" langID="0x0" unicode="True">
Version 1.000
</namerecord>
<namerecord nameID="6" platformID="1" platEncID="0" langID="0x0" unicode="True">
TestOTF-Regular
</namerecord>
<namerecord nameID="7" platformID="1" platEncID="0" langID="0x0" unicode="True">
Test OTF is not a trademark of FontTools.
</namerecord>
<namerecord nameID="8" platformID="1" platEncID="0" langID="0x0" unicode="True">
FontTools
</namerecord>
<namerecord nameID="9" platformID="1" platEncID="0" langID="0x0" unicode="True">
FontTools
</namerecord>
<namerecord nameID="11" platformID="1" platEncID="0" langID="0x0" unicode="True">
https://github.com/behdad/fonttools
</namerecord>
<namerecord nameID="12" platformID="1" platEncID="0" langID="0x0" unicode="True">
https://github.com/behdad/fonttools
</namerecord>
<namerecord nameID="14" platformID="1" platEncID="0" langID="0x0" unicode="True">
https://github.com/behdad/fonttools/blob/master/LICENSE.txt
</namerecord>
<namerecord nameID="18" platformID="1" platEncID="0" langID="0x0" unicode="True">
Test TTF
</namerecord>
<namerecord nameID="0" platformID="3" platEncID="1" langID="0x409">
Copyright (c) 2015 by FontTools. No rights reserved.
</namerecord>
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
Test OTF
</namerecord>
<namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
Regular
</namerecord>
<namerecord nameID="3" platformID="3" platEncID="1" langID="0x409">
FontTools: Test OTF: 2015
</namerecord>
<namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
Test OTF
</namerecord>
<namerecord nameID="5" platformID="3" platEncID="1" langID="0x409">
Version 1.000
</namerecord>
<namerecord nameID="6" platformID="3" platEncID="1" langID="0x409">
TestOTF-Regular
</namerecord>
<namerecord nameID="7" platformID="3" platEncID="1" langID="0x409">
Test OTF is not a trademark of FontTools.
</namerecord>
<namerecord nameID="8" platformID="3" platEncID="1" langID="0x409">
FontTools
</namerecord>
<namerecord nameID="9" platformID="3" platEncID="1" langID="0x409">
FontTools
</namerecord>
<namerecord nameID="11" platformID="3" platEncID="1" langID="0x409">
https://github.com/behdad/fonttools
</namerecord>
<namerecord nameID="12" platformID="3" platEncID="1" langID="0x409">
https://github.com/behdad/fonttools
</namerecord>
<namerecord nameID="14" platformID="3" platEncID="1" langID="0x409">
https://github.com/behdad/fonttools/blob/master/LICENSE.txt
</namerecord>
</name>
<cmap>
<tableVersion version="0"/>
<cmap_format_4 platformID="0" platEncID="3" language="0">
<map code="0x0" name=".null"/><!-- ???? -->
<map code="0xd" name="CR"/><!-- ???? -->
<map code="0x20" name="space"/><!-- SPACE -->
<map code="0x2e" name="period"/><!-- FULL STOP -->
<map code="0x2026" name="ellipsis"/><!-- HORIZONTAL ELLIPSIS -->
</cmap_format_4>
<cmap_format_6 platformID="1" platEncID="0" language="0">
<map code="0x0" name=".null"/>
<map code="0x1" name=".notdef"/>
<map code="0x2" name=".notdef"/>
<map code="0x3" name=".notdef"/>
<map code="0x4" name=".notdef"/>
<map code="0x5" name=".notdef"/>
<map code="0x6" name=".notdef"/>
<map code="0x7" name=".notdef"/>
<map code="0x8" name=".notdef"/>
<map code="0x9" name=".notdef"/>
<map code="0xa" name=".notdef"/>
<map code="0xb" name=".notdef"/>
<map code="0xc" name=".notdef"/>
<map code="0xd" name="CR"/>
<map code="0xe" name=".notdef"/>
<map code="0xf" name=".notdef"/>
<map code="0x10" name=".notdef"/>
<map code="0x11" name=".notdef"/>
<map code="0x12" name=".notdef"/>
<map code="0x13" name=".notdef"/>
<map code="0x14" name=".notdef"/>
<map code="0x15" name=".notdef"/>
<map code="0x16" name=".notdef"/>
<map code="0x17" name=".notdef"/>
<map code="0x18" name=".notdef"/>
<map code="0x19" name=".notdef"/>
<map code="0x1a" name=".notdef"/>
<map code="0x1b" name=".notdef"/>
<map code="0x1c" name=".notdef"/>
<map code="0x1d" name=".notdef"/>
<map code="0x1e" name=".notdef"/>
<map code="0x1f" name=".notdef"/>
<map code="0x20" name="space"/>
<map code="0x21" name=".notdef"/>
<map code="0x22" name=".notdef"/>
<map code="0x23" name=".notdef"/>
<map code="0x24" name=".notdef"/>
<map code="0x25" name=".notdef"/>
<map code="0x26" name=".notdef"/>
<map code="0x27" name=".notdef"/>
<map code="0x28" name=".notdef"/>
<map code="0x29" name=".notdef"/>
<map code="0x2a" name=".notdef"/>
<map code="0x2b" name=".notdef"/>
<map code="0x2c" name=".notdef"/>
<map code="0x2d" name=".notdef"/>
<map code="0x2e" name="period"/>
<map code="0x2f" name=".notdef"/>
<map code="0x30" name=".notdef"/>
<map code="0x31" name=".notdef"/>
<map code="0x32" name=".notdef"/>
<map code="0x33" name=".notdef"/>
<map code="0x34" name=".notdef"/>
<map code="0x35" name=".notdef"/>
<map code="0x36" name=".notdef"/>
<map code="0x37" name=".notdef"/>
<map code="0x38" name=".notdef"/>
<map code="0x39" name=".notdef"/>
<map code="0x3a" name=".notdef"/>
<map code="0x3b" name=".notdef"/>
<map code="0x3c" name=".notdef"/>
<map code="0x3d" name=".notdef"/>
<map code="0x3e" name=".notdef"/>
<map code="0x3f" name=".notdef"/>
<map code="0x40" name=".notdef"/>
<map code="0x41" name=".notdef"/>
<map code="0x42" name=".notdef"/>
<map code="0x43" name=".notdef"/>
<map code="0x44" name=".notdef"/>
<map code="0x45" name=".notdef"/>
<map code="0x46" name=".notdef"/>
<map code="0x47" name=".notdef"/>
<map code="0x48" name=".notdef"/>
<map code="0x49" name=".notdef"/>
<map code="0x4a" name=".notdef"/>
<map code="0x4b" name=".notdef"/>
<map code="0x4c" name=".notdef"/>
<map code="0x4d" name=".notdef"/>
<map code="0x4e" name=".notdef"/>
<map code="0x4f" name=".notdef"/>
<map code="0x50" name=".notdef"/>
<map code="0x51" name=".notdef"/>
<map code="0x52" name=".notdef"/>
<map code="0x53" name=".notdef"/>
<map code="0x54" name=".notdef"/>
<map code="0x55" name=".notdef"/>
<map code="0x56" name=".notdef"/>
<map code="0x57" name=".notdef"/>
<map code="0x58" name=".notdef"/>
<map code="0x59" name=".notdef"/>
<map code="0x5a" name=".notdef"/>
<map code="0x5b" name=".notdef"/>
<map code="0x5c" name=".notdef"/>
<map code="0x5d" name=".notdef"/>
<map code="0x5e" name=".notdef"/>
<map code="0x5f" name=".notdef"/>
<map code="0x60" name=".notdef"/>
<map code="0x61" name=".notdef"/>
<map code="0x62" name=".notdef"/>
<map code="0x63" name=".notdef"/>
<map code="0x64" name=".notdef"/>
<map code="0x65" name=".notdef"/>
<map code="0x66" name=".notdef"/>
<map code="0x67" name=".notdef"/>
<map code="0x68" name=".notdef"/>
<map code="0x69" name=".notdef"/>
<map code="0x6a" name=".notdef"/>
<map code="0x6b" name=".notdef"/>
<map code="0x6c" name=".notdef"/>
<map code="0x6d" name=".notdef"/>
<map code="0x6e" name=".notdef"/>
<map code="0x6f" name=".notdef"/>
<map code="0x70" name=".notdef"/>
<map code="0x71" name=".notdef"/>
<map code="0x72" name=".notdef"/>
<map code="0x73" name=".notdef"/>
<map code="0x74" name=".notdef"/>
<map code="0x75" name=".notdef"/>
<map code="0x76" name=".notdef"/>
<map code="0x77" name=".notdef"/>
<map code="0x78" name=".notdef"/>
<map code="0x79" name=".notdef"/>
<map code="0x7a" name=".notdef"/>
<map code="0x7b" name=".notdef"/>
<map code="0x7c" name=".notdef"/>
<map code="0x7d" name=".notdef"/>
<map code="0x7e" name=".notdef"/>
<map code="0x7f" name=".notdef"/>
<map code="0x80" name=".notdef"/>
<map code="0x81" name=".notdef"/>
<map code="0x82" name=".notdef"/>
<map code="0x83" name=".notdef"/>
<map code="0x84" name=".notdef"/>
<map code="0x85" name=".notdef"/>
<map code="0x86" name=".notdef"/>
<map code="0x87" name=".notdef"/>
<map code="0x88" name=".notdef"/>
<map code="0x89" name=".notdef"/>
<map code="0x8a" name=".notdef"/>
<map code="0x8b" name=".notdef"/>
<map code="0x8c" name=".notdef"/>
<map code="0x8d" name=".notdef"/>
<map code="0x8e" name=".notdef"/>
<map code="0x8f" name=".notdef"/>
<map code="0x90" name=".notdef"/>
<map code="0x91" name=".notdef"/>
<map code="0x92" name=".notdef"/>
<map code="0x93" name=".notdef"/>
<map code="0x94" name=".notdef"/>
<map code="0x95" name=".notdef"/>
<map code="0x96" name=".notdef"/>
<map code="0x97" name=".notdef"/>
<map code="0x98" name=".notdef"/>
<map code="0x99" name=".notdef"/>
<map code="0x9a" name=".notdef"/>
<map code="0x9b" name=".notdef"/>
<map code="0x9c" name=".notdef"/>
<map code="0x9d" name=".notdef"/>
<map code="0x9e" name=".notdef"/>
<map code="0x9f" name=".notdef"/>
<map code="0xa0" name=".notdef"/>
<map code="0xa1" name=".notdef"/>
<map code="0xa2" name=".notdef"/>
<map code="0xa3" name=".notdef"/>
<map code="0xa4" name=".notdef"/>
<map code="0xa5" name=".notdef"/>
<map code="0xa6" name=".notdef"/>
<map code="0xa7" name=".notdef"/>
<map code="0xa8" name=".notdef"/>
<map code="0xa9" name=".notdef"/>
<map code="0xaa" name=".notdef"/>
<map code="0xab" name=".notdef"/>
<map code="0xac" name=".notdef"/>
<map code="0xad" name=".notdef"/>
<map code="0xae" name=".notdef"/>
<map code="0xaf" name=".notdef"/>
<map code="0xb0" name=".notdef"/>
<map code="0xb1" name=".notdef"/>
<map code="0xb2" name=".notdef"/>
<map code="0xb3" name=".notdef"/>
<map code="0xb4" name=".notdef"/>
<map code="0xb5" name=".notdef"/>
<map code="0xb6" name=".notdef"/>
<map code="0xb7" name=".notdef"/>
<map code="0xb8" name=".notdef"/>
<map code="0xb9" name=".notdef"/>
<map code="0xba" name=".notdef"/>
<map code="0xbb" name=".notdef"/>
<map code="0xbc" name=".notdef"/>
<map code="0xbd" name=".notdef"/>
<map code="0xbe" name=".notdef"/>
<map code="0xbf" name=".notdef"/>
<map code="0xc0" name=".notdef"/>
<map code="0xc1" name=".notdef"/>
<map code="0xc2" name=".notdef"/>
<map code="0xc3" name=".notdef"/>
<map code="0xc4" name=".notdef"/>
<map code="0xc5" name=".notdef"/>
<map code="0xc6" name=".notdef"/>
<map code="0xc7" name=".notdef"/>
<map code="0xc8" name=".notdef"/>
<map code="0xc9" name="ellipsis"/>
</cmap_format_6>
<cmap_format_4 platformID="3" platEncID="1" language="0">
<map code="0x0" name=".null"/><!-- ???? -->
<map code="0xd" name="CR"/><!-- ???? -->
<map code="0x20" name="space"/><!-- SPACE -->
<map code="0x2e" name="period"/><!-- FULL STOP -->
<map code="0x2026" name="ellipsis"/><!-- HORIZONTAL ELLIPSIS -->
</cmap_format_4>
</cmap>
<post>
<formatType value="3.0"/>
<italicAngle value="0.0"/>
<underlinePosition value="-75"/>
<underlineThickness value="50"/>
<isFixedPitch value="0"/>
<minMemType42 value="0"/>
<maxMemType42 value="0"/>
<minMemType1 value="0"/>
<maxMemType1 value="0"/>
</post>
<CFF>
<CFFFont name="TestOTF-Regular">
<version value="001.001"/>
<Notice value="Copyright \(c\) 2015 by FontTools. No rights reserved."/>
<FullName value="Test OTF"/>
<FamilyName value="Test OTF"/>
<Weight value="Regular"/>
<isFixedPitch value="0"/>
<ItalicAngle value="0"/>
<UnderlineThickness value="50"/>
<PaintType value="0"/>
<CharstringType value="2"/>
<FontMatrix value="0.001 0 0 0.001 0 0"/>
<FontBBox value="50 0 668 750"/>
<StrokeWidth value="0"/>
<!-- charset is dumped separately as the 'GlyphOrder' element -->
<Encoding name="StandardEncoding"/>
<Private>
<BlueScale value="0.039625"/>
<BlueShift value="7"/>
<BlueFuzz value="1"/>
<ForceBold value="0"/>
<LanguageGroup value="0"/>
<ExpansionFactor value="0.06"/>
<initialRandomSeed value="0"/>
<defaultWidthX value="0"/>
<nominalWidthX value="0"/>
<Subrs>
<!-- The 'index' attribute is only for humans; it is ignored when parsed. -->
<CharString index="0">
131 122 -131 hlineto
return
</CharString>
</Subrs>
</Private>
<CharStrings>
<CharString name=".notdef">
500 450 hmoveto
750 -400 -750 vlineto
50 50 rmoveto
650 300 -650 vlineto
endchar
</CharString>
<CharString name=".null">
0 endchar
</CharString>
<CharString name="CR">
250 endchar
</CharString>
<CharString name="ellipsis">
723 55 hmoveto
-107 callsubr
241 -122 rmoveto
-107 callsubr
241 -122 rmoveto
-107 callsubr
endchar
</CharString>
<CharString name="period">
241 55 hmoveto
-107 callsubr
endchar
</CharString>
<CharString name="space">
250 endchar
</CharString>
</CharStrings>
</CFFFont>
<GlobalSubrs>
<!-- The 'index' attribute is only for humans; it is ignored when parsed. -->
</GlobalSubrs>
</CFF>
<hmtx>
<mtx name=".notdef" width="500" lsb="50"/>
<mtx name=".null" width="0" lsb="0"/>
<mtx name="CR" width="250" lsb="0"/>
<mtx name="ellipsis" width="723" lsb="55"/>
<mtx name="period" width="241" lsb="55"/>
<mtx name="space" width="250" lsb="0"/>
</hmtx>
<DSIG>
<!-- note that the Digital Signature will be invalid after recompilation! -->
<tableHeader flag="0x0" numSigs="0" version="1"/>
</DSIG>
</ttFont>

BIN
Tests/ttx/data/TestTTC.ttc Normal file

Binary file not shown.

BIN
Tests/ttx/data/TestTTF.ttf Normal file

Binary file not shown.

553
Tests/ttx/data/TestTTF.ttx Normal file
View File

@ -0,0 +1,553 @@
<?xml version="1.0" encoding="UTF-8"?>
<ttFont sfntVersion="\x00\x01\x00\x00">
<GlyphOrder>
<!-- The 'id' attribute is only for humans; it is ignored when parsed. -->
<GlyphID id="0" name=".notdef"/>
<GlyphID id="1" name=".null"/>
<GlyphID id="2" name="CR"/>
<GlyphID id="3" name="space"/>
<GlyphID id="4" name="period"/>
<GlyphID id="5" name="ellipsis"/>
</GlyphOrder>
<head>
<!-- Most of this table will be recalculated by the compiler -->
<tableVersion value="1.0"/>
<fontRevision value="1.0"/>
<checkSumAdjustment value="0x2ee689e2"/>
<magicNumber value="0x5f0f3cf5"/>
<flags value="00000000 00000011"/>
<unitsPerEm value="1000"/>
<created value="Thu Jun 4 14:29:11 2015"/>
<modified value="Mon Aug 3 13:04:43 2015"/>
<xMin value="50"/>
<yMin value="0"/>
<xMax value="668"/>
<yMax value="750"/>
<macStyle value="00000000 00000000"/>
<lowestRecPPEM value="9"/>
<fontDirectionHint value="2"/>
<indexToLocFormat value="0"/>
<glyphDataFormat value="0"/>
</head>
<hhea>
<tableVersion value="0x00010000"/>
<ascent value="900"/>
<descent value="-300"/>
<lineGap value="0"/>
<advanceWidthMax value="723"/>
<minLeftSideBearing value="50"/>
<minRightSideBearing value="50"/>
<xMaxExtent value="668"/>
<caretSlopeRise value="1"/>
<caretSlopeRun value="0"/>
<caretOffset value="0"/>
<reserved0 value="0"/>
<reserved1 value="0"/>
<reserved2 value="0"/>
<reserved3 value="0"/>
<metricDataFormat value="0"/>
<numberOfHMetrics value="6"/>
</hhea>
<maxp>
<!-- Most of this table will be recalculated by the compiler -->
<tableVersion value="0x10000"/>
<numGlyphs value="6"/>
<maxPoints value="8"/>
<maxContours value="2"/>
<maxCompositePoints value="12"/>
<maxCompositeContours value="3"/>
<maxZones value="1"/>
<maxTwilightPoints value="0"/>
<maxStorage value="0"/>
<maxFunctionDefs value="0"/>
<maxInstructionDefs value="0"/>
<maxStackElements value="0"/>
<maxSizeOfInstructions value="0"/>
<maxComponentElements value="3"/>
<maxComponentDepth value="1"/>
</maxp>
<OS_2>
<!-- The fields 'usFirstCharIndex' and 'usLastCharIndex'
will be recalculated by the compiler -->
<version value="4"/>
<xAvgCharWidth value="392"/>
<usWeightClass value="400"/>
<usWidthClass value="5"/>
<fsType value="00000000 00000000"/>
<ySubscriptXSize value="700"/>
<ySubscriptYSize value="650"/>
<ySubscriptXOffset value="0"/>
<ySubscriptYOffset value="140"/>
<ySuperscriptXSize value="700"/>
<ySuperscriptYSize value="650"/>
<ySuperscriptXOffset value="0"/>
<ySuperscriptYOffset value="477"/>
<yStrikeoutSize value="50"/>
<yStrikeoutPosition value="250"/>
<sFamilyClass value="2050"/>
<panose>
<bFamilyType value="2"/>
<bSerifStyle value="11"/>
<bWeight value="6"/>
<bProportion value="4"/>
<bContrast value="4"/>
<bStrokeVariation value="2"/>
<bArmStyle value="7"/>
<bLetterForm value="8"/>
<bMidline value="1"/>
<bXHeight value="4"/>
</panose>
<ulUnicodeRange1 value="10000000 00000000 00000000 00000001"/>
<ulUnicodeRange2 value="00000000 00000000 00000000 00000000"/>
<ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/>
<ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/>
<achVendID value="NONE"/>
<fsSelection value="00000000 11000000"/>
<usFirstCharIndex value="0"/>
<usLastCharIndex value="8230"/>
<sTypoAscender value="750"/>
<sTypoDescender value="-250"/>
<sTypoLineGap value="200"/>
<usWinAscent value="900"/>
<usWinDescent value="300"/>
<ulCodePageRange1 value="00000000 00000000 00000000 00000001"/>
<ulCodePageRange2 value="00000000 00000000 00000000 00000000"/>
<sxHeight value="500"/>
<sCapHeight value="700"/>
<usDefaultChar value="0"/>
<usBreakChar value="32"/>
<usMaxContext value="0"/>
</OS_2>
<hmtx>
<mtx name=".notdef" width="500" lsb="50"/>
<mtx name=".null" width="0" lsb="0"/>
<mtx name="CR" width="250" lsb="0"/>
<mtx name="ellipsis" width="723" lsb="55"/>
<mtx name="period" width="241" lsb="55"/>
<mtx name="space" width="250" lsb="0"/>
</hmtx>
<cmap>
<tableVersion version="0"/>
<cmap_format_4 platformID="0" platEncID="3" language="0">
<map code="0x0" name=".null"/><!-- ???? -->
<map code="0xd" name="CR"/><!-- ???? -->
<map code="0x20" name="space"/><!-- SPACE -->
<map code="0x2e" name="period"/><!-- FULL STOP -->
<map code="0x2026" name="ellipsis"/><!-- HORIZONTAL ELLIPSIS -->
</cmap_format_4>
<cmap_format_6 platformID="1" platEncID="0" language="0">
<map code="0x0" name=".null"/>
<map code="0x1" name=".notdef"/>
<map code="0x2" name=".notdef"/>
<map code="0x3" name=".notdef"/>
<map code="0x4" name=".notdef"/>
<map code="0x5" name=".notdef"/>
<map code="0x6" name=".notdef"/>
<map code="0x7" name=".notdef"/>
<map code="0x8" name=".notdef"/>
<map code="0x9" name=".notdef"/>
<map code="0xa" name=".notdef"/>
<map code="0xb" name=".notdef"/>
<map code="0xc" name=".notdef"/>
<map code="0xd" name="CR"/>
<map code="0xe" name=".notdef"/>
<map code="0xf" name=".notdef"/>
<map code="0x10" name=".notdef"/>
<map code="0x11" name=".notdef"/>
<map code="0x12" name=".notdef"/>
<map code="0x13" name=".notdef"/>
<map code="0x14" name=".notdef"/>
<map code="0x15" name=".notdef"/>
<map code="0x16" name=".notdef"/>
<map code="0x17" name=".notdef"/>
<map code="0x18" name=".notdef"/>
<map code="0x19" name=".notdef"/>
<map code="0x1a" name=".notdef"/>
<map code="0x1b" name=".notdef"/>
<map code="0x1c" name=".notdef"/>
<map code="0x1d" name=".notdef"/>
<map code="0x1e" name=".notdef"/>
<map code="0x1f" name=".notdef"/>
<map code="0x20" name="space"/>
<map code="0x21" name=".notdef"/>
<map code="0x22" name=".notdef"/>
<map code="0x23" name=".notdef"/>
<map code="0x24" name=".notdef"/>
<map code="0x25" name=".notdef"/>
<map code="0x26" name=".notdef"/>
<map code="0x27" name=".notdef"/>
<map code="0x28" name=".notdef"/>
<map code="0x29" name=".notdef"/>
<map code="0x2a" name=".notdef"/>
<map code="0x2b" name=".notdef"/>
<map code="0x2c" name=".notdef"/>
<map code="0x2d" name=".notdef"/>
<map code="0x2e" name="period"/>
<map code="0x2f" name=".notdef"/>
<map code="0x30" name=".notdef"/>
<map code="0x31" name=".notdef"/>
<map code="0x32" name=".notdef"/>
<map code="0x33" name=".notdef"/>
<map code="0x34" name=".notdef"/>
<map code="0x35" name=".notdef"/>
<map code="0x36" name=".notdef"/>
<map code="0x37" name=".notdef"/>
<map code="0x38" name=".notdef"/>
<map code="0x39" name=".notdef"/>
<map code="0x3a" name=".notdef"/>
<map code="0x3b" name=".notdef"/>
<map code="0x3c" name=".notdef"/>
<map code="0x3d" name=".notdef"/>
<map code="0x3e" name=".notdef"/>
<map code="0x3f" name=".notdef"/>
<map code="0x40" name=".notdef"/>
<map code="0x41" name=".notdef"/>
<map code="0x42" name=".notdef"/>
<map code="0x43" name=".notdef"/>
<map code="0x44" name=".notdef"/>
<map code="0x45" name=".notdef"/>
<map code="0x46" name=".notdef"/>
<map code="0x47" name=".notdef"/>
<map code="0x48" name=".notdef"/>
<map code="0x49" name=".notdef"/>
<map code="0x4a" name=".notdef"/>
<map code="0x4b" name=".notdef"/>
<map code="0x4c" name=".notdef"/>
<map code="0x4d" name=".notdef"/>
<map code="0x4e" name=".notdef"/>
<map code="0x4f" name=".notdef"/>
<map code="0x50" name=".notdef"/>
<map code="0x51" name=".notdef"/>
<map code="0x52" name=".notdef"/>
<map code="0x53" name=".notdef"/>
<map code="0x54" name=".notdef"/>
<map code="0x55" name=".notdef"/>
<map code="0x56" name=".notdef"/>
<map code="0x57" name=".notdef"/>
<map code="0x58" name=".notdef"/>
<map code="0x59" name=".notdef"/>
<map code="0x5a" name=".notdef"/>
<map code="0x5b" name=".notdef"/>
<map code="0x5c" name=".notdef"/>
<map code="0x5d" name=".notdef"/>
<map code="0x5e" name=".notdef"/>
<map code="0x5f" name=".notdef"/>
<map code="0x60" name=".notdef"/>
<map code="0x61" name=".notdef"/>
<map code="0x62" name=".notdef"/>
<map code="0x63" name=".notdef"/>
<map code="0x64" name=".notdef"/>
<map code="0x65" name=".notdef"/>
<map code="0x66" name=".notdef"/>
<map code="0x67" name=".notdef"/>
<map code="0x68" name=".notdef"/>
<map code="0x69" name=".notdef"/>
<map code="0x6a" name=".notdef"/>
<map code="0x6b" name=".notdef"/>
<map code="0x6c" name=".notdef"/>
<map code="0x6d" name=".notdef"/>
<map code="0x6e" name=".notdef"/>
<map code="0x6f" name=".notdef"/>
<map code="0x70" name=".notdef"/>
<map code="0x71" name=".notdef"/>
<map code="0x72" name=".notdef"/>
<map code="0x73" name=".notdef"/>
<map code="0x74" name=".notdef"/>
<map code="0x75" name=".notdef"/>
<map code="0x76" name=".notdef"/>
<map code="0x77" name=".notdef"/>
<map code="0x78" name=".notdef"/>
<map code="0x79" name=".notdef"/>
<map code="0x7a" name=".notdef"/>
<map code="0x7b" name=".notdef"/>
<map code="0x7c" name=".notdef"/>
<map code="0x7d" name=".notdef"/>
<map code="0x7e" name=".notdef"/>
<map code="0x7f" name=".notdef"/>
<map code="0x80" name=".notdef"/>
<map code="0x81" name=".notdef"/>
<map code="0x82" name=".notdef"/>
<map code="0x83" name=".notdef"/>
<map code="0x84" name=".notdef"/>
<map code="0x85" name=".notdef"/>
<map code="0x86" name=".notdef"/>
<map code="0x87" name=".notdef"/>
<map code="0x88" name=".notdef"/>
<map code="0x89" name=".notdef"/>
<map code="0x8a" name=".notdef"/>
<map code="0x8b" name=".notdef"/>
<map code="0x8c" name=".notdef"/>
<map code="0x8d" name=".notdef"/>
<map code="0x8e" name=".notdef"/>
<map code="0x8f" name=".notdef"/>
<map code="0x90" name=".notdef"/>
<map code="0x91" name=".notdef"/>
<map code="0x92" name=".notdef"/>
<map code="0x93" name=".notdef"/>
<map code="0x94" name=".notdef"/>
<map code="0x95" name=".notdef"/>
<map code="0x96" name=".notdef"/>
<map code="0x97" name=".notdef"/>
<map code="0x98" name=".notdef"/>
<map code="0x99" name=".notdef"/>
<map code="0x9a" name=".notdef"/>
<map code="0x9b" name=".notdef"/>
<map code="0x9c" name=".notdef"/>
<map code="0x9d" name=".notdef"/>
<map code="0x9e" name=".notdef"/>
<map code="0x9f" name=".notdef"/>
<map code="0xa0" name=".notdef"/>
<map code="0xa1" name=".notdef"/>
<map code="0xa2" name=".notdef"/>
<map code="0xa3" name=".notdef"/>
<map code="0xa4" name=".notdef"/>
<map code="0xa5" name=".notdef"/>
<map code="0xa6" name=".notdef"/>
<map code="0xa7" name=".notdef"/>
<map code="0xa8" name=".notdef"/>
<map code="0xa9" name=".notdef"/>
<map code="0xaa" name=".notdef"/>
<map code="0xab" name=".notdef"/>
<map code="0xac" name=".notdef"/>
<map code="0xad" name=".notdef"/>
<map code="0xae" name=".notdef"/>
<map code="0xaf" name=".notdef"/>
<map code="0xb0" name=".notdef"/>
<map code="0xb1" name=".notdef"/>
<map code="0xb2" name=".notdef"/>
<map code="0xb3" name=".notdef"/>
<map code="0xb4" name=".notdef"/>
<map code="0xb5" name=".notdef"/>
<map code="0xb6" name=".notdef"/>
<map code="0xb7" name=".notdef"/>
<map code="0xb8" name=".notdef"/>
<map code="0xb9" name=".notdef"/>
<map code="0xba" name=".notdef"/>
<map code="0xbb" name=".notdef"/>
<map code="0xbc" name=".notdef"/>
<map code="0xbd" name=".notdef"/>
<map code="0xbe" name=".notdef"/>
<map code="0xbf" name=".notdef"/>
<map code="0xc0" name=".notdef"/>
<map code="0xc1" name=".notdef"/>
<map code="0xc2" name=".notdef"/>
<map code="0xc3" name=".notdef"/>
<map code="0xc4" name=".notdef"/>
<map code="0xc5" name=".notdef"/>
<map code="0xc6" name=".notdef"/>
<map code="0xc7" name=".notdef"/>
<map code="0xc8" name=".notdef"/>
<map code="0xc9" name="ellipsis"/>
</cmap_format_6>
<cmap_format_4 platformID="3" platEncID="1" language="0">
<map code="0x0" name=".null"/><!-- ???? -->
<map code="0xd" name="CR"/><!-- ???? -->
<map code="0x20" name="space"/><!-- SPACE -->
<map code="0x2e" name="period"/><!-- FULL STOP -->
<map code="0x2026" name="ellipsis"/><!-- HORIZONTAL ELLIPSIS -->
</cmap_format_4>
</cmap>
<fpgm>
<assembly>
SVTCA[0] /* SetFPVectorToAxis */
</assembly>
</fpgm>
<prep>
<assembly>
SVTCA[0] /* SetFPVectorToAxis */
</assembly>
</prep>
<cvt>
<cv index="0" value="0"/>
</cvt>
<loca>
<!-- The 'loca' table will be calculated by the compiler -->
</loca>
<glyf>
<!-- The xMin, yMin, xMax and yMax values
will be recalculated by the compiler. -->
<TTGlyph name=".notdef" xMin="50" yMin="0" xMax="450" yMax="750">
<contour>
<pt x="50" y="0" on="1"/>
<pt x="50" y="750" on="1"/>
<pt x="450" y="750" on="1"/>
<pt x="450" y="0" on="1"/>
</contour>
<contour>
<pt x="400" y="50" on="1"/>
<pt x="400" y="700" on="1"/>
<pt x="100" y="700" on="1"/>
<pt x="100" y="50" on="1"/>
</contour>
<instructions><assembly>
SVTCA[0] /* SetFPVectorToAxis */
SVTCA[1] /* SetFPVectorToAxis */
</assembly></instructions>
</TTGlyph>
<TTGlyph name=".null"/><!-- contains no outline data -->
<TTGlyph name="CR"/><!-- contains no outline data -->
<TTGlyph name="ellipsis" xMin="55" yMin="0" xMax="668" yMax="122">
<component glyphName="period" x="0" y="0" flags="0x4"/>
<component glyphName="period" x="241" y="0" flags="0x4"/>
<component glyphName="period" x="482" y="0" flags="0x4"/>
<instructions><assembly>
SVTCA[0] /* SetFPVectorToAxis */
SVTCA[1] /* SetFPVectorToAxis */
</assembly></instructions>
</TTGlyph>
<TTGlyph name="period" xMin="55" yMin="0" xMax="186" yMax="122">
<contour>
<pt x="55" y="122" on="1"/>
<pt x="186" y="122" on="1"/>
<pt x="186" y="0" on="1"/>
<pt x="55" y="0" on="1"/>
</contour>
<instructions><assembly>
SVTCA[0] /* SetFPVectorToAxis */
SVTCA[1] /* SetFPVectorToAxis */
</assembly></instructions>
</TTGlyph>
<TTGlyph name="space"/><!-- contains no outline data -->
</glyf>
<name>
<namerecord nameID="0" platformID="1" platEncID="0" langID="0x0" unicode="True">
Copyright (c) 2015 by FontTools. No rights reserved.
</namerecord>
<namerecord nameID="1" platformID="1" platEncID="0" langID="0x0" unicode="True">
Test TTF
</namerecord>
<namerecord nameID="2" platformID="1" platEncID="0" langID="0x0" unicode="True">
Regular
</namerecord>
<namerecord nameID="3" platformID="1" platEncID="0" langID="0x0" unicode="True">
FontTools: Test TTF: 2015
</namerecord>
<namerecord nameID="4" platformID="1" platEncID="0" langID="0x0" unicode="True">
Test TTF
</namerecord>
<namerecord nameID="5" platformID="1" platEncID="0" langID="0x0" unicode="True">
Version 1.000
</namerecord>
<namerecord nameID="6" platformID="1" platEncID="0" langID="0x0" unicode="True">
TestTTF-Regular
</namerecord>
<namerecord nameID="7" platformID="1" platEncID="0" langID="0x0" unicode="True">
Test TTF is not a trademark of FontTools.
</namerecord>
<namerecord nameID="8" platformID="1" platEncID="0" langID="0x0" unicode="True">
FontTools
</namerecord>
<namerecord nameID="9" platformID="1" platEncID="0" langID="0x0" unicode="True">
FontTools
</namerecord>
<namerecord nameID="11" platformID="1" platEncID="0" langID="0x0" unicode="True">
https://github.com/behdad/fonttools
</namerecord>
<namerecord nameID="12" platformID="1" platEncID="0" langID="0x0" unicode="True">
https://github.com/behdad/fonttools
</namerecord>
<namerecord nameID="14" platformID="1" platEncID="0" langID="0x0" unicode="True">
https://github.com/behdad/fonttools/blob/master/LICENSE.txt
</namerecord>
<namerecord nameID="18" platformID="1" platEncID="0" langID="0x0" unicode="True">
Test TTF
</namerecord>
<namerecord nameID="0" platformID="3" platEncID="1" langID="0x409">
Copyright (c) 2015 by FontTools. No rights reserved.
</namerecord>
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
Test TTF
</namerecord>
<namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
Regular
</namerecord>
<namerecord nameID="3" platformID="3" platEncID="1" langID="0x409">
FontTools: Test TTF: 2015
</namerecord>
<namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
Test TTF
</namerecord>
<namerecord nameID="5" platformID="3" platEncID="1" langID="0x409">
Version 1.000
</namerecord>
<namerecord nameID="6" platformID="3" platEncID="1" langID="0x409">
TestTTF-Regular
</namerecord>
<namerecord nameID="7" platformID="3" platEncID="1" langID="0x409">
Test TTF is not a trademark of FontTools.
</namerecord>
<namerecord nameID="8" platformID="3" platEncID="1" langID="0x409">
FontTools
</namerecord>
<namerecord nameID="9" platformID="3" platEncID="1" langID="0x409">
FontTools
</namerecord>
<namerecord nameID="11" platformID="3" platEncID="1" langID="0x409">
https://github.com/behdad/fonttools
</namerecord>
<namerecord nameID="12" platformID="3" platEncID="1" langID="0x409">
https://github.com/behdad/fonttools
</namerecord>
<namerecord nameID="14" platformID="3" platEncID="1" langID="0x409">
https://github.com/behdad/fonttools/blob/master/LICENSE.txt
</namerecord>
</name>
<post>
<formatType value="2.0"/>
<italicAngle value="0.0"/>
<underlinePosition value="-75"/>
<underlineThickness value="50"/>
<isFixedPitch value="0"/>
<minMemType42 value="0"/>
<maxMemType42 value="0"/>
<minMemType1 value="0"/>
<maxMemType1 value="0"/>
<psNames>
<!-- This file uses unique glyph names based on the information
found in the 'post' table. Since these names might not be unique,
we have to invent artificial names in case of clashes. In order to
be able to retain the original information, we need a name to
ps name mapping for those cases where they differ. That's what
you see below.
-->
</psNames>
<extraNames>
<!-- following are the name that are not taken from the standard Mac glyph order -->
<psName name=".null"/>
<psName name="CR"/>
</extraNames>
</post>
<gasp>
<gaspRange rangeMaxPPEM="8" rangeGaspBehavior="10"/>
<gaspRange rangeMaxPPEM="65535" rangeGaspBehavior="15"/>
</gasp>
<DSIG>
<!-- note that the Digital Signature will be invalid after recompilation! -->
<tableHeader flag="0x0" numSigs="0" version="1"/>
</DSIG>
</ttFont>

Binary file not shown.

Binary file not shown.

202
Tests/ttx/ttx_test.py Normal file
View File

@ -0,0 +1,202 @@
from __future__ import print_function, division, absolute_import
from fontTools.misc.py23 import *
from fontTools import ttx
import getopt
import os
import shutil
import sys
import tempfile
import unittest
try:
import xattr
except ImportError:
xattr = None
try:
import MacOS
except ImportError:
MacOS = None
class TTXTest(unittest.TestCase):
def __init__(self, methodName):
unittest.TestCase.__init__(self, methodName)
# Python 3 renamed assertRaisesRegexp to assertRaisesRegex,
# and fires deprecation warnings if a program uses the old name.
if not hasattr(self, "assertRaisesRegex"):
self.assertRaisesRegex = self.assertRaisesRegexp
def setUp(self):
self.tempdir = None
self.num_tempfiles = 0
def tearDown(self):
if self.tempdir:
shutil.rmtree(self.tempdir)
@staticmethod
def getpath(testfile):
path, _ = os.path.split(__file__)
return os.path.join(path, "data", testfile)
def temp_dir(self):
if not self.tempdir:
self.tempdir = tempfile.mkdtemp()
def temp_font(self, font_path, file_name):
self.temp_dir()
temppath = os.path.join(self.tempdir, file_name)
shutil.copy2(font_path, temppath)
return temppath
# -----
# Tests
# -----
def test_parseOptions_no_args(self):
with self.assertRaises(getopt.GetoptError) as cm:
ttx.parseOptions([])
self.assertTrue('Must specify at least one input file' in str(cm.exception))
def test_parseOptions_invalid_path(self):
file_path = 'invalid_font_path'
with self.assertRaises(getopt.GetoptError) as cm:
ttx.parseOptions([file_path])
self.assertTrue('File not found: "%s"' % file_path in str(cm.exception))
def test_parseOptions_font2ttx_1st_time(self):
file_name = 'TestOTF.otf'
font_path = self.getpath(file_name)
temp_path = self.temp_font(font_path, file_name)
jobs, _ = ttx.parseOptions([temp_path])
self.assertEqual(jobs[0][0].__name__, 'ttDump')
self.assertEqual(jobs[0][1:],
(os.path.join(self.tempdir, file_name),
os.path.join(self.tempdir, file_name.split('.')[0] + '.ttx')))
def test_parseOptions_font2ttx_2nd_time(self):
file_name = 'TestTTF.ttf'
font_path = self.getpath(file_name)
temp_path = self.temp_font(font_path, file_name)
_, _ = ttx.parseOptions([temp_path]) # this is NOT a mistake
jobs, _ = ttx.parseOptions([temp_path])
self.assertEqual(jobs[0][0].__name__, 'ttDump')
self.assertEqual(jobs[0][1:],
(os.path.join(self.tempdir, file_name),
os.path.join(self.tempdir, file_name.split('.')[0] + '#1.ttx')))
def test_parseOptions_ttx2font_1st_time(self):
file_name = 'TestTTF.ttx'
font_path = self.getpath(file_name)
temp_path = self.temp_font(font_path, file_name)
jobs, _ = ttx.parseOptions([temp_path])
self.assertEqual(jobs[0][0].__name__, 'ttCompile')
self.assertEqual(jobs[0][1:],
(os.path.join(self.tempdir, file_name),
os.path.join(self.tempdir, file_name.split('.')[0] + '.ttf')))
def test_parseOptions_ttx2font_2nd_time(self):
file_name = 'TestOTF.ttx'
font_path = self.getpath(file_name)
temp_path = self.temp_font(font_path, file_name)
_, _ = ttx.parseOptions([temp_path]) # this is NOT a mistake
jobs, _ = ttx.parseOptions([temp_path])
self.assertEqual(jobs[0][0].__name__, 'ttCompile')
self.assertEqual(jobs[0][1:],
(os.path.join(self.tempdir, file_name),
os.path.join(self.tempdir, file_name.split('.')[0] + '#1.otf')))
def test_parseOptions_multiple_fonts(self):
file_names = ['TestOTF.otf', 'TestTTF.ttf']
font_paths = [self.getpath(file_name) for file_name in file_names]
temp_paths = [self.temp_font(font_path, file_name) \
for font_path, file_name in zip(font_paths, file_names)]
jobs, _ = ttx.parseOptions(temp_paths)
for i in range(len(jobs)):
self.assertEqual(jobs[i][0].__name__, 'ttDump')
self.assertEqual(jobs[i][1:],
(os.path.join(self.tempdir, file_names[i]),
os.path.join(self.tempdir, file_names[i].split('.')[0] + '.ttx')))
def test_parseOptions_mixed_files(self):
operations = ['ttDump', 'ttCompile']
extensions = ['.ttx', '.ttf']
file_names = ['TestOTF.otf', 'TestTTF.ttx']
font_paths = [self.getpath(file_name) for file_name in file_names]
temp_paths = [self.temp_font(font_path, file_name) \
for font_path, file_name in zip(font_paths, file_names)]
jobs, _ = ttx.parseOptions(temp_paths)
for i in range(len(jobs)):
self.assertEqual(jobs[i][0].__name__, operations[i])
self.assertEqual(jobs[i][1:],
(os.path.join(self.tempdir, file_names[i]),
os.path.join(self.tempdir, file_names[i].split('.')[0] + extensions[i])))
def test_guessFileType_ttf(self):
file_name = 'TestTTF.ttf'
font_path = self.getpath(file_name)
self.assertEqual(ttx.guessFileType(font_path), 'TTF')
def test_guessFileType_otf(self):
file_name = 'TestOTF.otf'
font_path = self.getpath(file_name)
self.assertEqual(ttx.guessFileType(font_path), 'OTF')
def test_guessFileType_woff(self):
file_name = 'TestWOFF.woff'
font_path = self.getpath(file_name)
self.assertEqual(ttx.guessFileType(font_path), 'WOFF')
def test_guessFileType_woff2(self):
file_name = 'TestWOFF2.woff2'
font_path = self.getpath(file_name)
self.assertEqual(ttx.guessFileType(font_path), 'WOFF2')
def test_guessFileType_ttc(self):
file_name = 'TestTTC.ttc'
font_path = self.getpath(file_name)
self.assertEqual(ttx.guessFileType(font_path), 'TTC')
def test_guessFileType_dfont(self):
file_name = 'TestDFONT.dfont'
font_path = self.getpath(file_name)
self.assertEqual(ttx.guessFileType(font_path), 'TTF')
@unittest.skipUnless(xattr or MacOS, "xattr or MacOS not installed")
def test_guessFileType_ffil(self):
file_name = 'TestFFIL'
font_path = self.getpath(file_name)
self.assertEqual(ttx.guessFileType(font_path), 'TTF')
def test_guessFileType_ttx_ttf(self):
file_name = 'TestTTF.ttx'
font_path = self.getpath(file_name)
self.assertEqual(ttx.guessFileType(font_path), 'TTX')
def test_guessFileType_ttx_otf(self):
file_name = 'TestOTF.ttx'
font_path = self.getpath(file_name)
self.assertEqual(ttx.guessFileType(font_path), 'OTX')
def test_guessFileType_ttx_bom(self):
file_name = 'TestBOM.ttx'
font_path = self.getpath(file_name)
self.assertEqual(ttx.guessFileType(font_path), 'TTX')
def test_guessFileType_ttx_no_sfntVersion(self):
file_name = 'TestNoSFNT.ttx'
font_path = self.getpath(file_name)
self.assertEqual(ttx.guessFileType(font_path), 'TTX')
def test_guessFileType_ttx_no_xml(self):
file_name = 'TestNoXML.ttx'
font_path = self.getpath(file_name)
self.assertIsNone(ttx.guessFileType(font_path))
def test_guessFileType_invalid_path(self):
font_path = 'invalid_font_path'
self.assertIsNone(ttx.guessFileType(font_path))
if __name__ == "__main__":
sys.exit(unittest.main())