Bug 2372184
| Summary: | F43FailsToInstall: python3-ufo2ft+cffsubr, python3-ufo2ft+compreffor, python3-ufo2ft. Test failures with Python 3.14 | ||
|---|---|---|---|
| Product: | [Fedora] Fedora | Reporter: | Fedora Fails To Install <fti-bugs> |
| Component: | python-ufo2ft | Assignee: | Benson Muite <benson_muite> |
| Status: | CLOSED ERRATA | QA Contact: | Fedora Extras Quality Assurance <extras-qa> |
| Severity: | unspecified | Docs Contact: | |
| Priority: | unspecified | ||
| Version: | rawhide | CC: | benson_muite, mhroncok |
| Target Milestone: | --- | ||
| Target Release: | --- | ||
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
| Whiteboard: | |||
| Fixed In Version: | python-ufo2ft-3.5.0-4.fc43 | Doc Type: | --- |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: | ||
| Last Closed: | 2025-06-16 11:29:03 UTC | Type: | --- |
| Regression: | --- | Mount Type: | --- |
| Documentation: | --- | CRM: | |
| Verified Versions: | Category: | --- | |
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
| Cloudforms Team: | --- | Target Upstream Version: | |
| Embargoed: | |||
| Bug Depends On: | 2336951, 2371858, 2372185 | ||
| Bug Blocks: | 2322407, 2339432, 2339435, 2371716, 2371924 | ||
|
Description
Fedora Fails To Install
2025-06-11 08:20:23 UTC
=================================== FAILURES ===================================
_________ FeatureCompilerTest.test_buildTables_FeatureLibError[defcon] _________
self = <tests.featureCompiler_test.FeatureCompilerTest object at 0x7fff98e3cc30>
FontClass = <class 'defcon.objects.font.Font'>
caplog = <_pytest.logging.LogCaptureFixture object at 0x7fff9a46b9d0>
def test_buildTables_FeatureLibError(self, FontClass, caplog):
caplog.set_level(logging.CRITICAL)
ufo = FontClass()
ufo.newGlyph("f")
ufo.newGlyph("f.alt01")
ufo.newGlyph("f_f")
features = dedent(
"""\
feature BUGS {
# invalid
lookup MIXED_TYPE {
sub f by f.alt01;
sub f f by f_f;
} MIXED_TYPE;
} BUGS;
"""
)
ufo.features.text = features
compiler = FeatureCompiler(ufo)
tmpfile = None
try:
with caplog.at_level(logging.ERROR, logger=logger.name):
> with pytest.raises(FeatureLibError):
E Failed: DID NOT RAISE <class 'fontTools.feaLib.error.FeatureLibError'>
tests/featureCompiler_test.py:301: Failed
_______________ IntegrationTest.test_compileVariableTTFs[defcon] _______________
self = <tests.integration_test.IntegrationTest object at 0x7fff987de3f0>
designspace_v5 = <fontTools.designspaceLib.DesignSpaceDocument object at 0x7fff98cedc50>
def test_compileVariableTTFs(self, designspace_v5):
fonts = compileVariableTTFs(designspace_v5)
# NOTE: Test dumps were generated like this:
# for k, font in fonts.items():
# font.recalcTimestamp = False
# font["head"].created, font["head"].modified = 3570196637, 3601822698
# font["head"].checkSumAdjustment = 0x12345678
# font.saveXML(f"tests/data/DSv5/{k}-TTF.ttx")
assert set(fonts.keys()) == {
"MutatorSansVariable_Weight_Width",
"MutatorSansVariable_Weight",
"MutatorSansVariable_Width",
"MutatorSerifVariable_Width",
}
# The STAT table is set to [SRIF=0, wght=[300, 700], wdth=[50, 200]] + S1 + S2
expectTTX(
fonts["MutatorSansVariable_Weight_Width"],
"DSv5/MutatorSansVariable_Weight_Width-TTF.ttx",
)
# The STAT table is set to [SRIF=0, wght=[300, 700], wdth=50]
> expectTTX(
fonts["MutatorSansVariable_Weight"],
"DSv5/MutatorSansVariable_Weight-TTF.ttx",
)
tests/integration_test.py:400:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
font = <fontTools.ttLib.ttFont.TTFont object at 0x7fff98238210>
expectedTTX = 'DSv5/MutatorSansVariable_Weight-TTF.ttx', tables = None
def expectTTX(font, expectedTTX, tables=None):
with open(getpath(expectedTTX), encoding="utf-8") as f:
expected = readLines(f)
font.recalcTimestamp = False
font["head"].created, font["head"].modified = 3570196637, 3601822698
font["head"].checkSumAdjustment = 0x12345678
f = io.StringIO()
font.saveXML(f, tables=tables)
actual = readLines(f)
if actual != expected:
for line in difflib.unified_diff(
expected, actual, fromfile=expectedTTX, tofile="<generated>"
):
sys.stderr.write(line)
> pytest.fail("TTX output is different from expected")
E Failed: TTX output is different from expected
tests/integration_test.py:73: Failed
----------------------------- Captured stderr call -----------------------------
--- DSv5/MutatorSansVariable_Weight-TTF.ttx
+++ <generated>
@@ -409,9 +409,6 @@
</FeatureTableSubstitution>
</FeatureVariationRecord>
<FeatureVariationRecord index="1">
- <ConditionSet>
- <!-- ConditionCount=0 -->
- </ConditionSet>
<FeatureTableSubstitution>
<Version value="0x00010000"/>
<!-- SubstitutionCount=1 -->
______________ IntegrationTest.test_compileVariableCFF2s[defcon] _______________
self = <tests.integration_test.IntegrationTest object at 0x7fff987de530>
designspace_v5 = <fontTools.designspaceLib.DesignSpaceDocument object at 0x7fff980d5e10>
def test_compileVariableCFF2s(self, designspace_v5):
fonts = compileVariableCFF2s(designspace_v5)
# NOTE: Test dumps were generated like this:
# for k, font in fonts.items():
# font.recalcTimestamp = False
# font["head"].created, font["head"].modified = 3570196637, 3601822698
# font["head"].checkSumAdjustment = 0x12345678
# font.saveXML(f"tests/data/DSv5/{k}-CFF2.ttx")
assert set(fonts.keys()) == {
"MutatorSansVariable_Weight_Width",
"MutatorSansVariable_Weight",
"MutatorSansVariable_Width",
"MutatorSerifVariable_Width",
}
# The STAT table is set to [SRIF=0, wght=[300, 700], wdth=[50, 200]] + S1 + S2
expectTTX(
fonts["MutatorSansVariable_Weight_Width"],
"DSv5/MutatorSansVariable_Weight_Width-CFF2.ttx",
)
# The STAT table is set to [SRIF=0, wght=[300, 700], wdth=50]
> expectTTX(
fonts["MutatorSansVariable_Weight"],
"DSv5/MutatorSansVariable_Weight-CFF2.ttx",
)
tests/integration_test.py:437:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
font = <fontTools.ttLib.ttFont.TTFont object at 0x7fff97fe9c50>
expectedTTX = 'DSv5/MutatorSansVariable_Weight-CFF2.ttx', tables = None
def expectTTX(font, expectedTTX, tables=None):
with open(getpath(expectedTTX), encoding="utf-8") as f:
expected = readLines(f)
font.recalcTimestamp = False
font["head"].created, font["head"].modified = 3570196637, 3601822698
font["head"].checkSumAdjustment = 0x12345678
f = io.StringIO()
font.saveXML(f, tables=tables)
actual = readLines(f)
if actual != expected:
for line in difflib.unified_diff(
expected, actual, fromfile=expectedTTX, tofile="<generated>"
):
sys.stderr.write(line)
> pytest.fail("TTX output is different from expected")
E Failed: TTX output is different from expected
tests/integration_test.py:73: Failed
----------------------------- Captured stderr call -----------------------------
--- DSv5/MutatorSansVariable_Weight-CFF2.ttx
+++ <generated>
@@ -385,9 +385,6 @@
</FeatureTableSubstitution>
</FeatureVariationRecord>
<FeatureVariationRecord index="1">
- <ConditionSet>
- <!-- ConditionCount=0 -->
- </ConditionSet>
<FeatureTableSubstitution>
<Version value="0x00010000"/>
<!-- SubstitutionCount=1 -->
________ FeatureCompilerTest.test_buildTables_FeatureLibError[ufoLib2] _________
self = <tests.featureCompiler_test.FeatureCompilerTest object at 0x7fff98e3ccd0>
FontClass = <function FontClass.<locals>.ctor at 0x7fff9874fd70>
caplog = <_pytest.logging.LogCaptureFixture object at 0x7fff98dffe70>
def test_buildTables_FeatureLibError(self, FontClass, caplog):
caplog.set_level(logging.CRITICAL)
ufo = FontClass()
ufo.newGlyph("f")
ufo.newGlyph("f.alt01")
ufo.newGlyph("f_f")
features = dedent(
"""\
feature BUGS {
# invalid
lookup MIXED_TYPE {
sub f by f.alt01;
sub f f by f_f;
} MIXED_TYPE;
} BUGS;
"""
)
ufo.features.text = features
compiler = FeatureCompiler(ufo)
tmpfile = None
try:
with caplog.at_level(logging.ERROR, logger=logger.name):
> with pytest.raises(FeatureLibError):
E Failed: DID NOT RAISE <class 'fontTools.feaLib.error.FeatureLibError'>
tests/featureCompiler_test.py:301: Failed
______________ IntegrationTest.test_compileVariableTTFs[ufoLib2] _______________
self = <tests.integration_test.IntegrationTest object at 0x7fff987de490>
designspace_v5 = <fontTools.designspaceLib.DesignSpaceDocument object at 0x7fff98032890>
def test_compileVariableTTFs(self, designspace_v5):
fonts = compileVariableTTFs(designspace_v5)
# NOTE: Test dumps were generated like this:
# for k, font in fonts.items():
# font.recalcTimestamp = False
# font["head"].created, font["head"].modified = 3570196637, 3601822698
# font["head"].checkSumAdjustment = 0x12345678
# font.saveXML(f"tests/data/DSv5/{k}-TTF.ttx")
assert set(fonts.keys()) == {
"MutatorSansVariable_Weight_Width",
"MutatorSansVariable_Weight",
"MutatorSansVariable_Width",
"MutatorSerifVariable_Width",
}
# The STAT table is set to [SRIF=0, wght=[300, 700], wdth=[50, 200]] + S1 + S2
expectTTX(
fonts["MutatorSansVariable_Weight_Width"],
"DSv5/MutatorSansVariable_Weight_Width-TTF.ttx",
)
# The STAT table is set to [SRIF=0, wght=[300, 700], wdth=50]
> expectTTX(
fonts["MutatorSansVariable_Weight"],
"DSv5/MutatorSansVariable_Weight-TTF.ttx",
)
tests/integration_test.py:400:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
font = <fontTools.ttLib.ttFont.TTFont object at 0x7fff98cedc50>
expectedTTX = 'DSv5/MutatorSansVariable_Weight-TTF.ttx', tables = None
def expectTTX(font, expectedTTX, tables=None):
with open(getpath(expectedTTX), encoding="utf-8") as f:
expected = readLines(f)
font.recalcTimestamp = False
font["head"].created, font["head"].modified = 3570196637, 3601822698
font["head"].checkSumAdjustment = 0x12345678
f = io.StringIO()
font.saveXML(f, tables=tables)
actual = readLines(f)
if actual != expected:
for line in difflib.unified_diff(
expected, actual, fromfile=expectedTTX, tofile="<generated>"
):
sys.stderr.write(line)
> pytest.fail("TTX output is different from expected")
E Failed: TTX output is different from expected
tests/integration_test.py:73: Failed
----------------------------- Captured stderr call -----------------------------
--- DSv5/MutatorSansVariable_Weight-TTF.ttx
+++ <generated>
@@ -409,9 +409,6 @@
</FeatureTableSubstitution>
</FeatureVariationRecord>
<FeatureVariationRecord index="1">
- <ConditionSet>
- <!-- ConditionCount=0 -->
- </ConditionSet>
<FeatureTableSubstitution>
<Version value="0x00010000"/>
<!-- SubstitutionCount=1 -->
______________ IntegrationTest.test_compileVariableCFF2s[ufoLib2] ______________
self = <tests.integration_test.IntegrationTest object at 0x7fff987de5d0>
designspace_v5 = <fontTools.designspaceLib.DesignSpaceDocument object at 0x7fff980a7930>
def test_compileVariableCFF2s(self, designspace_v5):
fonts = compileVariableCFF2s(designspace_v5)
# NOTE: Test dumps were generated like this:
# for k, font in fonts.items():
# font.recalcTimestamp = False
# font["head"].created, font["head"].modified = 3570196637, 3601822698
# font["head"].checkSumAdjustment = 0x12345678
# font.saveXML(f"tests/data/DSv5/{k}-CFF2.ttx")
assert set(fonts.keys()) == {
"MutatorSansVariable_Weight_Width",
"MutatorSansVariable_Weight",
"MutatorSansVariable_Width",
"MutatorSerifVariable_Width",
}
# The STAT table is set to [SRIF=0, wght=[300, 700], wdth=[50, 200]] + S1 + S2
expectTTX(
fonts["MutatorSansVariable_Weight_Width"],
"DSv5/MutatorSansVariable_Weight_Width-CFF2.ttx",
)
# The STAT table is set to [SRIF=0, wght=[300, 700], wdth=50]
> expectTTX(
fonts["MutatorSansVariable_Weight"],
"DSv5/MutatorSansVariable_Weight-CFF2.ttx",
)
tests/integration_test.py:437:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
font = <fontTools.ttLib.ttFont.TTFont object at 0x7fff97fea5f0>
expectedTTX = 'DSv5/MutatorSansVariable_Weight-CFF2.ttx', tables = None
def expectTTX(font, expectedTTX, tables=None):
with open(getpath(expectedTTX), encoding="utf-8") as f:
expected = readLines(f)
font.recalcTimestamp = False
font["head"].created, font["head"].modified = 3570196637, 3601822698
font["head"].checkSumAdjustment = 0x12345678
f = io.StringIO()
font.saveXML(f, tables=tables)
actual = readLines(f)
if actual != expected:
for line in difflib.unified_diff(
expected, actual, fromfile=expectedTTX, tofile="<generated>"
):
sys.stderr.write(line)
> pytest.fail("TTX output is different from expected")
E Failed: TTX output is different from expected
tests/integration_test.py:73: Failed
----------------------------- Captured stderr call -----------------------------
--- DSv5/MutatorSansVariable_Weight-CFF2.ttx
+++ <generated>
@@ -385,9 +385,6 @@
</FeatureTableSubstitution>
</FeatureVariationRecord>
<FeatureVariationRecord index="1">
- <ConditionSet>
- <!-- ConditionCount=0 -->
- </ConditionSet>
<FeatureTableSubstitution>
<Version value="0x00010000"/>
<!-- SubstitutionCount=1 -->
=============================== warnings summary ===============================
tests/filters/dottedCircle_test.py::test_empty_font_deprecated[defcon]
/builddir/build/BUILD/python-ufo2ft-3.4.2-build/BUILDROOT/usr/lib/python3.14/site-packages/ufo2ft/filters/dottedCircleFilter.py:8: UserWarning: The dottedCircleFilter module is deprecated, please import dottedCircle instead.
warnings.warn(
-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
--------------------------- snapshot report summary ----------------------------
40 snapshots passed.
=========================== short test summary info ============================
FAILED tests/featureCompiler_test.py::FeatureCompilerTest::test_buildTables_FeatureLibError[defcon]
FAILED tests/integration_test.py::IntegrationTest::test_compileVariableTTFs[defcon]
FAILED tests/integration_test.py::IntegrationTest::test_compileVariableCFF2s[defcon]
FAILED tests/featureCompiler_test.py::FeatureCompilerTest::test_buildTables_FeatureLibError[ufoLib2]
FAILED tests/integration_test.py::IntegrationTest::test_compileVariableTTFs[ufoLib2]
FAILED tests/integration_test.py::IntegrationTest::test_compileVariableCFF2s[ufoLib2]
========== 6 failed, 1130 passed, 12 deselected, 1 warning in 43.78s ===========
FEDORA-2025-c37a421fd1 (python-ufo2ft-3.5.0-4.fc43) has been submitted as an update to Fedora 43. https://bodhi.fedoraproject.org/updates/FEDORA-2025-c37a421fd1 FEDORA-2025-c37a421fd1 (python-ufo2ft-3.5.0-4.fc43) has been pushed to the Fedora 43 stable repository. If problem still persists, please make note of it in this bug report. |